<?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>121818</bug_id>
          
          <creation_ts>2013-09-23 17:46:35 -0700</creation_ts>
          <short_desc>Upstream changes to Pasteboard implementation for iOS</short_desc>
          <delta_ts>2013-09-27 16:28:49 -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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>121877</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Enrica Casucci">enrica</reporter>
          <assigned_to name="Enrica Casucci">enrica</assigned_to>
          <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ossy</cc>
    
    <cc>webkit-ews</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>932389</commentid>
    <comment_count>0</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2013-09-23 17:46:35 -0700</bug_when>
    <thetext>This bug tracks a series of changes to the pasteboard implementation on iOS that are being merged to OpenSource.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932644</commentid>
    <comment_count>1</comment_count>
      <attachid>212487</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2013-09-24 11:40:33 -0700</bug_when>
    <thetext>Created attachment 212487
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932646</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-24 11:43:44 -0700</bug_when>
    <thetext>Attachment 212487 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/editing/Editor.cpp&apos;, u&apos;Source/WebCore/editing/ios/EditorIOS.mm&apos;, u&apos;Source/WebCore/platform/Pasteboard.h&apos;, u&apos;Source/WebCore/platform/PasteboardStrategy.h&apos;, u&apos;Source/WebCore/platform/PlatformPasteboard.h&apos;, u&apos;Source/WebCore/platform/ios/PasteboardIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/PlatformPasteboardIOS.mm&apos;, u&apos;Source/WebKit/mac/ChangeLog&apos;, u&apos;Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.h&apos;, u&apos;Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.mm&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/Scripts/webkit2/messages.py&apos;, u&apos;Source/WebKit2/Shared/WebCoreArgumentCoders.cpp&apos;, u&apos;Source/WebKit2/Shared/WebCoreArgumentCoders.h&apos;, u&apos;Source/WebKit2/UIProcess/WebContext.h&apos;, u&apos;Source/WebKit2/UIProcess/WebContext.messages.in&apos;, u&apos;Source/WebKit2/UIProcess/mac/WebContextMac.mm&apos;, u&apos;Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp&apos;, u&apos;Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.h&apos;]&quot; exit_code: 1
Source/WebCore/platform/PlatformPasteboard.h:74:  The parameter name &quot;content&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/PlatformPasteboard.h:75:  The parameter name &quot;pasteboardImage&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.h:86:  The parameter name &quot;content&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.h:87:  The parameter name &quot;pasteboardImage&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.h:99:  The parameter name &quot;content&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.h:100:  The parameter name &quot;pasteboardImage&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/UIProcess/WebContext.h:324:  The parameter name &quot;content&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/UIProcess/WebContext.h:325:  The parameter name &quot;pasteboardImage&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/PasteboardStrategy.h:47:  The parameter name &quot;content&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/PasteboardStrategy.h:48:  The parameter name &quot;pasteboardImage&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 10 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932649</commentid>
    <comment_count>3</comment_count>
      <attachid>212487</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-09-24 11:49:00 -0700</bug_when>
    <thetext>Comment on attachment 212487
Patch

Attachment 212487 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/2110289</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932652</commentid>
    <comment_count>4</comment_count>
      <attachid>212487</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-09-24 11:53:23 -0700</bug_when>
    <thetext>Comment on attachment 212487
Patch

Don’t land this if it breaks the build for other platforms ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932655</commentid>
    <comment_count>5</comment_count>
      <attachid>212487</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-09-24 12:01:06 -0700</bug_when>
    <thetext>Comment on attachment 212487
Patch

Attachment 212487 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/1976312</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932662</commentid>
    <comment_count>6</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2013-09-24 12:18:35 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 212487 [details])
&gt; Don’t land this if it breaks the build for other platforms ;)

Thanks for the review. I will fix the other platforms before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932667</commentid>
    <comment_count>7</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2013-09-24 12:34:49 -0700</bug_when>
    <thetext>The failures are unrelated to this patch.
Committed revision 156350.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932704</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-09-24 13:35:42 -0700</bug_when>
    <thetext>Arrgh, I had a lot of comments on the patch that went along with my review+ and they seemed to all be deleted!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932759</commentid>
    <comment_count>9</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2013-09-24 15:42:30 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; The failures are unrelated to this patch.
&gt; Committed revision 156350.

No the failures weren&apos;t unrelated ... Qt EWS noticed the real failure.
It seems the generator can&apos;t handle the nested ifdefs and generated
buggy output. Fix landed in http://trac.webkit.org/changeset/156366</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932768</commentid>
    <comment_count>10</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2013-09-24 16:05:18 -0700</bug_when>
    <thetext>And I broke the Mac build, because I reversed the ifdefs accidentally. 
Sorry. And AP fixed it - http://trac.webkit.org/changeset/156368. Thanks.

The problem was that the generator doesn&apos;t like nested ifdefs for some
reason. I&apos;m going to file a new bug report about it and attach the
generated cpps.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933042</commentid>
    <comment_count>11</comment_count>
      <attachid>212487</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-09-25 09:34:43 -0700</bug_when>
    <thetext>Comment on attachment 212487
Patch

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

&gt; Source/WebCore/platform/Pasteboard.h:30
&gt; +#include &quot;Image.h&quot;

Please don’t add this include to Pasteboard.h. It’s not needed. Maybe we need some additional forward class declarations instead?

&gt; Source/WebCore/platform/Pasteboard.h:32
&gt; +#include &quot;SharedBuffer.h&quot;

Please don’t add this include to Pasteboard.h. It’s not needed. Maybe we need some additional forward class declarations instead?

&gt; Source/WebCore/platform/Pasteboard.h:53
&gt; +#if PLATFORM(IOS)

I’ve been trying to keep platforms in alphabetical order. So this would go after GTK and before QT, not after WIN.

&gt; Source/WebCore/platform/Pasteboard.h:191
&gt; +    static String resourceMIMEType(NSString *mimeType);

This should take a const String&amp; instead of an NSString *.

&gt; Source/WebCore/platform/PasteboardStrategy.h:31
&gt; +#if PLATFORM(IOS)
&gt; +#include &quot;Pasteboard.h&quot;
&gt; +#endif

Conditional includes like this one should go after the unconditional includes in a separate paragraph. But also, I don’t think we should add this include. Instead we should add some forward struct declarations.

&gt; Source/WebCore/platform/PasteboardStrategy.h:46
&gt; +    // FIXME: we should move Mac to this.

Sentence style with capital letter.

&gt;&gt; Source/WebCore/platform/PasteboardStrategy.h:47
&gt;&gt; +    virtual void writeToPasteboard(const PasteboardWebContent&amp; content) = 0;
&gt; 
&gt; The parameter name &quot;content&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

I agree with the bot. Please remove this.

&gt;&gt; Source/WebCore/platform/PasteboardStrategy.h:48
&gt;&gt; +    virtual void writeToPasteboard(const PasteboardImage&amp; pasteboardImage) = 0;
&gt; 
&gt; The parameter name &quot;pasteboardImage&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

I agree with the bot. Please remove this.

&gt; Source/WebCore/platform/PasteboardStrategy.h:49
&gt; +    virtual void writeToPasteboard(const String&amp; text) = 0;

Please remove this argument name.

&gt; Source/WebCore/platform/PlatformPasteboard.h:29
&gt; +#include &quot;Pasteboard.h&quot;

We should not add this include. Instead we should add some forward declarations.

&gt; Source/WebCore/platform/PlatformPasteboard.h:52
&gt; +#if PLATFORM(IOS)
&gt; +    PlatformPasteboard();
&gt; +#endif

Conditional things like this should go after the the platform-independent ones.

&gt; Source/WebCore/platform/PlatformPasteboard.h:53
&gt; +    // FIXME: probably we don&apos;t need a constructor that takes a pasteboard name for iOS.

Comments should have sentence style, with capital letter.

&gt;&gt; Source/WebCore/platform/PlatformPasteboard.h:74
&gt;&gt; +    void write(const PasteboardWebContent&amp; content);
&gt; 
&gt; The parameter name &quot;content&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

I agree with the bot.

&gt;&gt; Source/WebCore/platform/PlatformPasteboard.h:75
&gt;&gt; +    void write(const PasteboardImage&amp; pasteboardImage);
&gt; 
&gt; The parameter name &quot;pasteboardImage&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

I agree with the bot.

&gt; Source/WebCore/platform/PlatformPasteboard.h:76
&gt; +    void write(const String&amp; text);

I suggest removing the name text here.

&gt; Source/WebCore/platform/ios/PasteboardIOS.mm:63
&gt; +// FIXME: the following soft linking and #define needs to be shared
&gt; +// with PlatformPasteboardIOS.mm

Sentence style with capital letter and period. I also suggest using a single line.

&gt; Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:2
&gt; + * Copyright (C) 2006-2013 Apple Computer, Inc.  All rights reserved.

Year ranges are not used. This should list years of publication. And it’s Apple Inc., not Apple Computer, Inc.

&gt; Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:31
&gt; +#import &quot;config.h&quot;
&gt; +#import &quot;Color.h&quot;
&gt; +#import &quot;KURL.h&quot;
&gt; +#import &quot;Image.h&quot;
&gt; +#import &quot;PlatformPasteboard.h&quot;
&gt; +#import &quot;SoftLinking.h&quot;

The PlatformPasteboard.h should go first, grouped with config.h. The others should be in a separate paragraph.

&gt; Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:42
&gt; +// FIXME: the following soft linking and #define needs to be shared
&gt; +// with PasteboardIOS.mm.

Sentence style with capital letter. I also suggest using a single line.

&gt; Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:159
&gt; +    [m_pasteboard setItems:[NSArray arrayWithObject:representations.get()]];

Can’t we use the @[] syntax instead of [NSArray arrayWithObject:]?

&gt; Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:169
&gt; +    [m_pasteboard setItems:[NSArray arrayWithObject:representations.get()]];

Can’t we use the @[] syntax instead of [NSArray arrayWithObject:]?

&gt; Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:176
&gt; +    [m_pasteboard setItems:[NSArray arrayWithObject:representations.get()]];

Can’t we use the @[] syntax instead of [NSArray arrayWithObject:]?

&gt; Source/WebKit2/Shared/WebCoreArgumentCoders.cpp:793
&gt; +#if PLATFORM(IOS)
&gt; +static void encodeSharedBuffer(ArgumentEncoder&amp; encoder, SharedBuffer* buffer)

Please leave a blank line to match the blank line before the #endif below.

&gt; Source/WebKit2/Shared/WebCoreArgumentCoders.cpp:817
&gt; +        buffer = SharedBuffer::create(static_cast&lt;unsigned char *&gt;(sharedMemoryBuffer-&gt;data()), bufferSize);

For unsigned char* there should not a be a space after “char”.

This looks dangerous. It’s using a buffer size that was read off the wire with the a data pointer from the SharedMemory object. Is this correct? I don’t see how we’re guaranteed that the SharedMemory has the specified size.

&gt; Source/WebKit2/UIProcess/WebContext.h:49
&gt; +#include &lt;WebCore/Pasteboard.h&gt;

I don’t think this include is needed. We just need forward declarations of a couple classes.

&gt;&gt; Source/WebKit2/UIProcess/WebContext.h:324
&gt;&gt; +    void writeWebContentToPasteboard(const WebCore::PasteboardWebContent&amp; content);
&gt; 
&gt; The parameter name &quot;content&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

I agree with the bot on this.

&gt;&gt; Source/WebKit2/UIProcess/WebContext.h:325
&gt;&gt; +    void writeImageToPasteboard(const WebCore::PasteboardImage&amp; pasteboardImage);
&gt; 
&gt; The parameter name &quot;pasteboardImage&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

I agree with the bot on this.

&gt; Source/WebKit2/UIProcess/WebContext.h:326
&gt; +    void writeStringToPasteboard(const String&amp; text);

Should remove the word “text”.

&gt; Source/WebKit2/UIProcess/mac/WebContextMac.mm:459
&gt; +void WebContext::writeWebContentToPasteboard(const WebCore::PasteboardWebContent &amp;content)

The &amp; is in the wrong place. Should be by the type name.

&gt; Source/WebKit2/UIProcess/mac/WebContextMac.mm:464
&gt; +void WebContext::writeImageToPasteboard(const WebCore::PasteboardImage &amp;pasteboardImage)

I would just use the name image. No need to use the name pasteboardImage.

Also, the &amp; is in the wrong place.

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:511
&gt; +void WebPlatformStrategies::writeToPasteboard(const WebCore::PasteboardImage&amp; pasteboardImage)

I would just use the name image. No need to use the name pasteboardImage.

&gt;&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.h:99
&gt;&gt; +    virtual void writeToPasteboard(const WebCore::PasteboardWebContent&amp; content) OVERRIDE;
&gt; 
&gt; The parameter name &quot;content&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

I agree with the bot on this.

&gt;&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.h:100
&gt;&gt; +    virtual void writeToPasteboard(const WebCore::PasteboardImage&amp; pasteboardImage) OVERRIDE;
&gt; 
&gt; The parameter name &quot;pasteboardImage&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

I agree with the bot on this.

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.h:101
&gt; +    virtual void writeToPasteboard(const String&amp; text) OVERRIDE;

Should remove the argument name text.

&gt; Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.h:34
&gt; +#if PLATFORM(IOS)
&gt; +#include &lt;WebCore/Pasteboard.h&gt;
&gt; +#endif

Conditional includes should be in a separate paragraph below the unconditional ones. But also, I don’t think this include is needed. Instead we should forward-declare the classes. Further, I don’t think an include like this one needs to be conditional.

&gt;&gt; Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.h:86
&gt;&gt; +    virtual void writeToPasteboard(const WebCore::PasteboardWebContent&amp; content) OVERRIDE;
&gt; 
&gt; The parameter name &quot;content&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

I agree with the bot.

&gt;&gt; Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.h:87
&gt;&gt; +    virtual void writeToPasteboard(const WebCore::PasteboardImage&amp; pasteboardImage) OVERRIDE;
&gt; 
&gt; The parameter name &quot;pasteboardImage&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

I agree with the bot.

&gt; Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.h:88
&gt; +    virtual void writeToPasteboard(const String&amp; text) OVERRIDE;

I suggest omitting the argument name “text”.

&gt; Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.mm:234
&gt; +void WebPlatformStrategies::writeToPasteboard(const WebCore::PasteboardImage&amp; pasteboardImage)

I would just use the name image. No need to use the name pasteboardImage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933043</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-09-25 09:35:10 -0700</bug_when>
    <thetext>Enrica, I rewrote the lost comments that were supposed to go with the review+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933061</commentid>
    <comment_count>13</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2013-09-25 10:07:22 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Enrica, I rewrote the lost comments that were supposed to go with the review+.

Thanks for all the feedback. I will address all your comments in the next upstream patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>934080</commentid>
    <comment_count>14</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2013-09-27 14:11:19 -0700</bug_when>
    <thetext>Using the same bug for the next patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>934081</commentid>
    <comment_count>15</comment_count>
      <attachid>212840</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2013-09-27 14:12:14 -0700</bug_when>
    <thetext>Created attachment 212840
Second patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>934083</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-27 14:14:42 -0700</bug_when>
    <thetext>Attachment 212840 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/editing/Editor.cpp&apos;, u&apos;Source/WebCore/editing/ios/EditorIOS.mm&apos;, u&apos;Source/WebCore/platform/Pasteboard.h&apos;, u&apos;Source/WebCore/platform/PasteboardStrategy.h&apos;, u&apos;Source/WebCore/platform/PlatformPasteboard.h&apos;, u&apos;Source/WebCore/platform/ios/PasteboardIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/PlatformPasteboardIOS.mm&apos;, u&apos;Source/WebCore/platform/mac/PasteboardMac.mm&apos;, u&apos;Source/WebCore/platform/mac/PlatformPasteboardMac.mm&apos;, u&apos;Source/WebKit/mac/ChangeLog&apos;, u&apos;Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.h&apos;, u&apos;Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.mm&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/Shared/WebCoreArgumentCoders.cpp&apos;, u&apos;Source/WebKit2/Shared/WebCoreArgumentCoders.h&apos;, u&apos;Source/WebKit2/UIProcess/WebContext.h&apos;, u&apos;Source/WebKit2/UIProcess/WebContext.messages.in&apos;, u&apos;Source/WebKit2/UIProcess/mac/WebContextMac.mm&apos;, u&apos;Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp&apos;, u&apos;Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.h&apos;]&quot; exit_code: 1
Source/WebCore/platform/PasteboardStrategy.h:46:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/platform/PasteboardStrategy.h:46:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/PasteboardStrategy.h:47:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/platform/PasteboardStrategy.h:47:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/PasteboardStrategy.h:48:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/platform/PasteboardStrategy.h:48:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/PasteboardStrategy.h:49:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/platform/PasteboardStrategy.h:49:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/PasteboardStrategy.h:50:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/platform/PasteboardStrategy.h:50:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/PasteboardStrategy.h:51:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/platform/PasteboardStrategy.h:51:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/PasteboardStrategy.h:52:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/platform/PasteboardStrategy.h:52:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/PasteboardStrategy.h:53:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/platform/PasteboardStrategy.h:53:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 16 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>934101</commentid>
    <comment_count>17</comment_count>
      <attachid>212843</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2013-09-27 14:55:33 -0700</bug_when>
    <thetext>Created attachment 212843
Second part with fixes

I&apos;ve changed KURL to URL in iOS specific files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>934130</commentid>
    <comment_count>18</comment_count>
      <attachid>212843</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-09-27 16:06:20 -0700</bug_when>
    <thetext>Comment on attachment 212843
Second part with fixes

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

&gt; Source/WebCore/editing/ios/EditorIOS.mm:387
&gt; +    : frame(frame)
&gt; +    , context(context)
&gt; +    , allowPlainText(allowPlainText)
&gt; +    , madeFragmentFromPlainText(false)

Indent.

&gt; Source/WebCore/editing/ios/EditorIOS.mm:477
&gt; +    NSURL *URL = [NSURL URLWithString:[NSString stringWithFormat:@&quot;%@://%@/%@&quot;, @&quot;webkit-fake-url&quot;, UUIDString.get(), relativePart]];
&gt; +
&gt; +    return URL;

This could be return [NSURL ...]

&gt; Source/WebCore/editing/ios/EditorIOS.mm:494
&gt; +    if (url.string().isEmpty())
&gt; +        return false;

This should be url.isEmpty(). URL::string() is evil :)

&gt; Source/WebCore/editing/ios/EditorIOS.mm:607
&gt; +
&gt; +

Two blank lines here.

&gt; Source/WebCore/platform/PasteboardStrategy.h:53
&gt; +

No need for the blank line.

&gt; Source/WebCore/platform/PasteboardStrategy.h:54
&gt;  #endif

I would add // PLATFORM(IOS) because this block is a little long.

&gt; Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:179
&gt; +    if (pasteboardType == String(kUTTypeURL))

Unrelated, but we should totally add WTF::String::operator==(NSString*)!

&gt; Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:180
&gt; +        [representations setValue:[[[NSURL alloc] initWithString:text] autorelease] forKey:pasteboardType];

Please use a adoptNS().get() here instead of autorelease.

&gt; Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:193
&gt; +    NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:index];

RetainPtr&lt;&gt; of [NSIndexSet alloc] initWith...]?

&gt; Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:204
&gt; +    NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:index];

RetainPtr&lt;&gt; of [NSIndexSet alloc] initWith...]?

&gt; Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:215
&gt; +    if (![value isKindOfClass:[NSString class]]) {
&gt; +        return String();
&gt; +    }

Brackets.

&gt; Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:221
&gt; +    NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:index];

RetainPtr?

&gt; Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:225
&gt; +    if (![pasteboardItem.get() count])

No need for the get().

&gt; Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:228
&gt; +    id value = [pasteboardItem.get() objectAtIndex:0];

No need for the get().

&gt; Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:230
&gt; +        ASSERT([value isKindOfClass:[NSURL class]]);

This Assert will always hit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>934139</commentid>
    <comment_count>19</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2013-09-27 16:28:49 -0700</bug_when>
    <thetext>Addressed feedback and landed.
Committed revision 156588.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212487</attachid>
            <date>2013-09-24 11:40:33 -0700</date>
            <delta_ts>2013-09-25 09:34:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>upstreamiospasteboard.txt</filename>
            <type>text/plain</type>
            <size>41238</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjM0MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDEzLTA5LTI0ICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgVXBzdHJlYW0gY2hhbmdlcyB0
byBQYXN0ZWJvYXJkIGltcGxlbWVudGF0aW9uIGZvciBpT1MuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE4MTgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OmN1dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNvcHlJbWFnZSk6Cisg
ICAgICAgICogZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6YXR0
cmlidXRlZFN0cmluZ0ZvclJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGFJblJURkRGb3Jt
YXQpOgorICAgICAgICAoV2ViQ29yZTo6ZGF0YUluUlRGRm9ybWF0KToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6c3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2FyZFdpdGhJbWFnZUFsdFRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25JbldlYkFyY2hpdmVGb3JtYXQp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCk6
CisgICAgICAgIChXZWJDb3JlOjpnZXRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OndyaXRlSW1hZ2VUb1Bhc3RlYm9hcmQpOgorICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmQu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9QYXN0ZWJvYXJkU3RyYXRlZ3kuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9QbGF0Zm9ybVBhc3RlYm9hcmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvUGFz
dGVib2FyZElPUy5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJk
SU9TLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVib2FyZDo6UGxh
dGZvcm1QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVib2FyZDo6
Z2V0VHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjpidWZmZXJG
b3JUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVib2FyZDo6Z2V0UGF0aG5h
bWVzRm9yVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OnN0cmlu
Z0ZvclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjpjb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OnVybCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OmNvcHkpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1QYXN0ZWJvYXJkOjphZGRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBh
c3RlYm9hcmQ6OnNldFR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVib2Fy
ZDo6c2V0QnVmZmVyRm9yVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9h
cmQ6OnNldFBhdGhuYW1lc0ZvclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0
ZWJvYXJkOjpzZXRTdHJpbmdGb3JUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFz
dGVib2FyZDo6Y2hhbmdlQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJv
YXJkOjp1bmlxdWVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVib2FyZDo6
d3JpdGUpOgorCiAyMDEzLTA5LTI0ICBTYW11ZWwgV2hpdGUgIDxzYW11ZWxfd2hpdGVAYXBwbGUu
Y29tPgogCiAgICAgICAgIEFYOiBSZXBsYWNlIEFYT2JqZWN0Q2FjaGUgcG9zdE5vdGlmaWNhdGlv
biBtZXRob2QgYm9vbGVhbiBhcmd1bWVudHMgd2l0aCBlbnVtIHZhbHVlcy4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDE1NjMzOSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTI2Myw2ICs1MjYzLDcgQEAKIAkJQzUxMzdDRjMx
MUE1ODM3ODAwNEFEQjk5IC8qIEpTRE9NU3RyaW5nTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUxMzdDRjExMUE1ODM3ODAwNEFEQjk5IC8qIEpT
RE9NU3RyaW5nTGlzdC5oICovOyB9OwogCQlDNTE2MEVFQTEwMDQ1NDNBMDBBN0NFRTIgLyogU3Rv
cmFnZUFyZWFJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEM1MTYwRUU4MTAwNDU0M0EwMEE3Q0VFMiAvKiBTdG9yYWdlQXJlYUltcGwuY3BwICov
OyB9OwogCQlDNTE2MEVFQjEwMDQ1NDNBMDBBN0NFRTIgLyogU3RvcmFnZUFyZWFJbXBsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTE2MEVFOTEwMDQ1
NDNBMDBBN0NFRTIgLyogU3RvcmFnZUFyZWFJbXBsLmggKi87IH07CisJCUM1Mjc4QjBDMTdGMjEy
RUEwMDNBMjk5OCAvKiBQbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTI3OEIwQjE3RjIxMkVBMDAzQTI5OTggLyog
UGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tICovOyB9OwogCQlDNTQ0Mjc0QjExQTU3RTdBMDA2M0E3
NDkgLyogRE9NU3RyaW5nTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzU0NDI3NDkxMUE1N0U3QTAwNjNBNzQ5IC8qIERPTVN0cmluZ0xpc3QuaCAq
LzsgfTsKIAkJQzU1NjEwRjExMUE3MDRFQjAwQjgyRDI3IC8qIERPTVN0cmluZ0xpc3QuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU1NjEwRjAxMUE3
MDRFQjAwQjgyRDI3IC8qIERPTVN0cmluZ0xpc3QuY3BwICovOyB9OwogCQlDNTVFMzhCRjEwMDQw
RDVEMDBBNTZCREIgLyogU3RvcmFnZU5hbWVzcGFjZUltcGwuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1NUUzOEJCMTAwNDBENUQwMEE1NkJEQiAvKiBT
dG9yYWdlTmFtZXNwYWNlSW1wbC5oICovOyB9OwpAQCAtMTIxOTksNiArMTIyMDAsNyBAQAogCQlD
NTEzN0NGMTExQTU4Mzc4MDA0QURCOTkgLyogSlNET01TdHJpbmdMaXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NU3RyaW5nTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDNTE2MEVFODEwMDQ1NDNBMDBBN0NFRTIgLyogU3RvcmFnZUFyZWFJbXBs
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VBcmVhSW1w
bC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1MTYwRUU5MTAwNDU0M0EwMEE3
Q0VFMiAvKiBTdG9yYWdlQXJlYUltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3RvcmFnZUFyZWFJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1Mjc4
QjBCMTdGMjEyRUEwMDNBMjk5OCAvKiBQbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW07
IHBhdGggPSBpb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDNTM5MkQzMzEzMjZBRDAxMDAwNDNEMzUgLyogSFRNTENvbnZlcnRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MQ29udmVydGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1MzkyRDM0MTMyNkFEMDEwMDA0M0QzNSAvKiBIVE1MQ29u
dmVydGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSFRNTENv
bnZlcnRlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzU0NDI3NDkxMUE1N0U3
QTAwNjNBNzQ5IC8qIERPTVN0cmluZ0xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRE9NU3RyaW5nTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTcx
MzYsNiArMTcxMzgsNyBAQAogCQkJCTI2NTU0MTM3MTQ4OTgxMUMwMDBERkM1RCAvKiBLZXlFdmVu
dENvZGVzSU9TLmggKi8sCiAJCQkJMjY1NTQxMzgxNDg5ODExQzAwMERGQzVEIC8qIEtleUV2ZW50
SU9TLm1tICovLAogCQkJCUU0NTM5MDE5MEVBRkNBQ0EwMDM2OTVDOCAvKiBQYXN0ZWJvYXJkSU9T
Lm1tICovLAorCQkJCUM1Mjc4QjBCMTdGMjEyRUEwMDNBMjk5OCAvKiBQbGF0Zm9ybVBhc3RlYm9h
cmRJT1MubW0gKi8sCiAJCQkJRTQ1MzkwMzUwRUFGRDYzNzAwMzY5NUM4IC8qIFNoYXJlZFRpbWVy
SU9TLm1tICovLAogCQkJKTsKIAkJCW5hbWUgPSBpb3M7CkBAIC0yNzcwOCw2ICsyNzcxMSw3IEBA
CiAJCQkJMzdGODE4RkUwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5tbSBp
biBTb3VyY2VzICovLAogCQkJCTkzRjE5QjA3MDgyNDVFNTkwMDFFOUFCQyAvKiBXZWJDb3JlVmll
dy5tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM2REFERkEwQTE5NjAyQjAwRTVDRDE0IC8qIFdlYkZv
bnRDYWNoZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCUM1Mjc4QjBDMTdGMjEyRUEwMDNBMjk5OCAv
KiBQbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQk0OUM3QjlDODEw
NDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0U2
NkUyMzMxNkQ2RUI2QzAwRjdFN0ZGIC8qIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJN0U2NkUyMzMxN0U2RUI2QzAwRjdFN0ZGIC8qIFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVQVlJUQy5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5jcHAJKHJldmlzaW9uIDE1NjMzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2NCw3ICsxMDY0LDcgQEAgdm9pZCBFZGl0
b3I6OmN1dCgpCiAgICAgICAgIGlmIChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wobV9mcmFtZS5z
ZWxlY3Rpb24oKS5zdGFydCgpKSkKICAgICAgICAgICAgIFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNv
cHlBbmRQYXN0ZSgpLT53cml0ZVBsYWluVGV4dChzZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQoKSwg
Y2FuU21hcnRDb3B5T3JEZWxldGUoKSA/IFBhc3RlYm9hcmQ6OkNhblNtYXJ0UmVwbGFjZSA6IFBh
c3RlYm9hcmQ6OkNhbm5vdFNtYXJ0UmVwbGFjZSk7CiAgICAgICAgIGVsc2UgewotI2lmIChQTEFU
Rk9STShNQUMpICYmICFQTEFURk9STShJT1MpKSB8fCBQTEFURk9STShFRkwpCisjaWYgUExBVEZP
Uk0oTUFDKSB8fCBQTEFURk9STShFRkwpCiAgICAgICAgICAgICB3cml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZCgqUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCkpOwogI2Vsc2UKICAg
ICAgICAgICAgIC8vIEZJWE1FOiBDb252ZXJ0IGFsbCBvdGhlciBwbGF0Zm9ybXMgdG8gbWF0Y2gg
TWFjIGFuZCBkZWxldGUgdGhpcy4KQEAgLTEyMDIsNyArMTIwMiw3IEBAIHZvaWQgRWRpdG9yOjpj
b3B5SW1hZ2UoY29uc3QgSGl0VGVzdFJlc3UKICAgICBpZiAodXJsLmlzRW1wdHkoKSkKICAgICAg
ICAgdXJsID0gcmVzdWx0LmFic29sdXRlSW1hZ2VVUkwoKTsKIAotI2lmIChQTEFURk9STShNQUMp
ICYmICFQTEFURk9STShJT1MpKSB8fCBQTEFURk9STShFRkwpCisjaWYgUExBVEZPUk0oTUFDKSB8
fCBQTEFURk9STShFRkwpCiAgICAgd3JpdGVJbWFnZVRvUGFzdGVib2FyZCgqUGFzdGVib2FyZDo6
Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCksICplbGVtZW50LCB1cmwsIHJlc3VsdC5hbHREaXNwbGF5
U3RyaW5nKCkpOwogI2Vsc2UKICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUo
KS0+d3JpdGVJbWFnZShlbGVtZW50LCB1cmwsIHJlc3VsdC5hbHREaXNwbGF5U3RyaW5nKCkpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQkocmV2aXNpb24gMTU2
MzM5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiwxNiArMjYsMjUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJFZGl0b3IuaCIKIAorI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiQ2xpcGJv
YXJkLmgiCiAjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVk
ZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIgorI2luY2x1ZGUgIkRPTVJhbmdlSW50ZXJu
YWwuaCIKKyNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5j
bHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MQ29udmVydGVyLmgiCiAjaW5jbHVkZSAiSFRN
TElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxQ
YXJzZXJJZGlvbXMuaCIKICNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCisjaW5jbHVk
ZSAiTGVnYWN5V2ViQXJjaGl2ZS5oIgogI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKKyNpbmNs
dWRlICJQYXN0ZWJvYXJkLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKKyNpbmNsdWRlICJS
ZW5kZXJJbWFnZS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgIlN0eWxl
UHJvcGVydHlTZXQuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVHlwaW5nQ29tbWFu
ZC5oIgpAQCAtNDQsNiArNTMsMTQgQEAKIAogI2lmIFBMQVRGT1JNKElPUykKIAorQGludGVyZmFj
ZSBOU0F0dHJpYnV0ZWRTdHJpbmcgKE5TQXR0cmlidXRlZFN0cmluZ0tpdEFkZGl0aW9ucykKKy0g
KGlkKWluaXRXaXRoUlRGOihOU0RhdGEgKilkYXRhIGRvY3VtZW50QXR0cmlidXRlczooTlNEaWN0
aW9uYXJ5ICoqKWRpY3Q7CistIChpZClpbml0V2l0aFJURkQ6KE5TRGF0YSAqKWRhdGEgZG9jdW1l
bnRBdHRyaWJ1dGVzOihOU0RpY3Rpb25hcnkgKiopZGljdDsKKy0gKE5TRGF0YSAqKVJURkZyb21S
YW5nZTooTlNSYW5nZSlyYW5nZSBkb2N1bWVudEF0dHJpYnV0ZXM6KE5TRGljdGlvbmFyeSAqKWRp
Y3Q7CistIChOU0RhdGEgKilSVEZERnJvbVJhbmdlOihOU1JhbmdlKXJhbmdlIGRvY3VtZW50QXR0
cmlidXRlczooTlNEaWN0aW9uYXJ5ICopZGljdDsKKy0gKEJPT0wpY29udGFpbnNBdHRhY2htZW50
czsKK0BlbmQKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOwpAQCAtMjU0LDYgKzI3MSw4OCBAQCB2b2lkIEVkaXRvcjo6cmVtb3ZlVW5jaGFuZ2VhYmxl
U3R5bGVzKCkKICAgICBhcHBseVN0eWxlVG9TZWxlY3Rpb24oZGVmYXVsdFN0eWxlLmdldCgpLCBF
ZGl0QWN0aW9uQ2hhbmdlQXR0cmlidXRlcyk7CiB9CiAKKy8vIEZJWE1FOiB0aGUgZm9sbG93aW5n
IGZ1Y3Rpb25zIHNob3VsZCBiZSBzaGFyZWQgYmV0d2VlbiBNYWMgYW5kIGlPUy4KK3N0YXRpYyBO
U0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZShSYW5nZSYgcmFuZ2Up
Cit7CisgICAgcmV0dXJuIFthZG9wdE5TKFtbV2ViSFRNTENvbnZlcnRlciBhbGxvY10gaW5pdFdp
dGhET01SYW5nZTpraXQoJnJhbmdlKV0pIGF0dHJpYnV0ZWRTdHJpbmddOworfQorCitzdGF0aWMg
UGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGFJblJURkRGb3JtYXQoTlNBdHRyaWJ1dGVkU3Ry
aW5nICpzdHJpbmcpCit7CisgICAgTlNVSW50ZWdlciBsZW5ndGggPSBbc3RyaW5nIGxlbmd0aF07
CisgICAgcmV0dXJuIGxlbmd0aCA/IFNoYXJlZEJ1ZmZlcjo6d3JhcE5TRGF0YShbc3RyaW5nIFJU
RkRGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgbGVuZ3RoKSBkb2N1bWVudEF0dHJpYnV0ZXM6bmls
XSkgOiBudWxscHRyOworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGFJ
blJURkZvcm1hdChOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZykKK3sKKyAgICBOU1VJbnRlZ2Vy
IGxlbmd0aCA9IFtzdHJpbmcgbGVuZ3RoXTsKKyAgICByZXR1cm4gbGVuZ3RoID8gU2hhcmVkQnVm
ZmVyOjp3cmFwTlNEYXRhKFtzdHJpbmcgUlRGRnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIGxlbmd0
aCkgZG9jdW1lbnRBdHRyaWJ1dGVzOm5pbF0pIDogbnVsbHB0cjsKK30gICAgCisKK1N0cmluZyBF
ZGl0b3I6OnN0cmluZ1NlbGVjdGlvbkZvclBhc3RlYm9hcmRXaXRoSW1hZ2VBbHRUZXh0KCkKK3sK
KyAgICBTdHJpbmcgdGV4dCA9IHNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCgpOworICAgIHRleHQu
cmVwbGFjZShub0JyZWFrU3BhY2UsICcgJyk7CisgICAgcmV0dXJuIHRleHQ7Cit9CisKK1Bhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBFZGl0b3I6OnNlbGVjdGlvbkluV2ViQXJjaGl2ZUZvcm1hdCgp
Cit7CisgICAgUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNo
aXZlOjpjcmVhdGVGcm9tU2VsZWN0aW9uKG1fZnJhbWUpOworICAgIHJldHVybiBhcmNoaXZlID8g
U2hhcmVkQnVmZmVyOjp3cmFwQ0ZEYXRhKGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigp
LmdldCgpKSA6IG51bGxwdHI7Cit9CisKK3ZvaWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkKQoreworICAgIE5TQXR0cmlidXRlZFN0cmlu
ZyAqYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZSgqc2VsZWN0ZWRS
YW5nZSgpKTsKKworICAgIFBhc3RlYm9hcmRXZWJDb250ZW50IGNvbnRlbnQ7CisgICAgY29udGVu
dC5jYW5TbWFydENvcHlPckRlbGV0ZSA9IGNhblNtYXJ0Q29weU9yRGVsZXRlKCk7CisgICAgY29u
dGVudC5kYXRhSW5XZWJBcmNoaXZlRm9ybWF0ID0gc2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0
KCk7CisgICAgY29udGVudC5kYXRhSW5SVEZERm9ybWF0ID0gW2F0dHJpYnV0ZWRTdHJpbmcgY29u
dGFpbnNBdHRhY2htZW50c10gPyBkYXRhSW5SVEZERm9ybWF0KGF0dHJpYnV0ZWRTdHJpbmcpIDog
MDsKKyAgICBjb250ZW50LmRhdGFJblJURkZvcm1hdCA9IGRhdGFJblJURkZvcm1hdChhdHRyaWJ1
dGVkU3RyaW5nKTsKKyAgICBjb250ZW50LmRhdGFJblN0cmluZ0Zvcm1hdCA9IHN0cmluZ1NlbGVj
dGlvbkZvclBhc3RlYm9hcmRXaXRoSW1hZ2VBbHRUZXh0KCk7CisgICAgY2xpZW50KCktPmdldENs
aWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2Uoc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCBjb250ZW50
LmNsaWVudFR5cGVzLCBjb250ZW50LmNsaWVudERhdGEpOworCisgICAgcGFzdGVib2FyZC53cml0
ZShjb250ZW50KTsKK30KKworc3RhdGljIHZvaWQgZ2V0SW1hZ2UoRWxlbWVudCYgaW1hZ2VFbGVt
ZW50LCBSZWZQdHI8SW1hZ2U+JiBpbWFnZSwgQ2FjaGVkSW1hZ2UqJiBjYWNoZWRJbWFnZSkKK3sK
KyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaW1hZ2VFbGVtZW50LnJlbmRlcmVyKCk7Cisg
ICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzSW1hZ2UoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgQ2FjaGVkSW1hZ2UqIHRlbnRhdGl2ZUNhY2hlZEltYWdlID0gdG9SZW5kZXJJbWFn
ZShyZW5kZXJlciktPmNhY2hlZEltYWdlKCk7CisgICAgaWYgKCF0ZW50YXRpdmVDYWNoZWRJbWFn
ZSB8fCB0ZW50YXRpdmVDYWNoZWRJbWFnZS0+ZXJyb3JPY2N1cnJlZCgpKSB7CisgICAgICAgIHRl
bnRhdGl2ZUNhY2hlZEltYWdlID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlt
YWdlID0gdGVudGF0aXZlQ2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIocmVuZGVyZXIpOwor
ICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBjYWNoZWRJbWFnZSA9
IHRlbnRhdGl2ZUNhY2hlZEltYWdlOworfQorCit2b2lkIEVkaXRvcjo6d3JpdGVJbWFnZVRvUGFz
dGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkLCBFbGVtZW50JiBpbWFnZUVsZW1lbnQsIGNv
bnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHRpdGxlKQoreworICAgIFBhc3RlYm9hcmRJbWFnZSBw
YXN0ZWJvYXJkSW1hZ2U7CisKKyAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2U7CisgICAgZ2V0
SW1hZ2UoaW1hZ2VFbGVtZW50LCBwYXN0ZWJvYXJkSW1hZ2UuaW1hZ2UsIGNhY2hlZEltYWdlKTsK
KyAgICBpZiAoIXBhc3RlYm9hcmRJbWFnZS5pbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIEFT
U0VSVChjYWNoZWRJbWFnZSk7CisKKyAgICBwYXN0ZWJvYXJkSW1hZ2UudXJsLnVybCA9IGltYWdl
RWxlbWVudC5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hU
TUxTcGFjZXMoaW1hZ2VFbGVtZW50LmltYWdlU291cmNlVVJMKCkpKTsKKyAgICBwYXN0ZWJvYXJk
SW1hZ2UudXJsLnRpdGxlID0gdGl0bGU7CisgICAgcGFzdGVib2FyZEltYWdlLnJlc291cmNlTUlN
RVR5cGUgPSBwYXN0ZWJvYXJkLnJlc291cmNlTUlNRVR5cGUoY2FjaGVkSW1hZ2UtPnJlc3BvbnNl
KCkubWltZVR5cGUoKSk7CisKKyAgICBwYXN0ZWJvYXJkLndyaXRlKHBhc3RlYm9hcmRJbWFnZSk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgJKHJldmlzaW9uIDE1NjMzOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNyArMjcsOSBAQAogI2RlZmluZSBQYXN0ZWJvYXJkX2gKIAogI2luY2x1ZGUgIkRyYWdJ
bWFnZS5oIgorI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUg
IlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTQ4LDYg
KzUwLDExIEBAIHR5cGVkZWYgc3RydWN0IF9HdGtDbGlwYm9hcmQgR3RrQ2xpcGJvYXIKIHR5cGVk
ZWYgc3RydWN0IEhXTkRfXyogSFdORDsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorT0JK
Q19DTEFTUyBOU0FycmF5OworT0JKQ19DTEFTUyBOU1N0cmluZzsKKyNlbmRpZgorCiAvLyBGSVhN
RTogVGhpcyBjbGFzcyB1c2VzIHRoZSBET00gYW5kIG1ha2VzIGNhbGxzIHRvIEVkaXRvci4KIC8v
IEl0IHNob3VsZCBiZSBkaXZlc3RlZCBvZiBpdHMga25vd2xlZGdlIG9mIHRoZSBmcmFtZSBhbmQg
ZWRpdG9yLgogCkBAIC02Nyw3ICs3NCw3IEBAIGVudW0gU2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRU
ZXh0Rm9yQ2xpcGIKIC8vIEZvciB3cml0aW5nIHRvIHRoZSBwYXN0ZWJvYXJkLiBHZW5lcmFsbHkg
c29ydGVkIHdpdGggdGhlIHJpY2hlc3QgZm9ybWF0cyBvbiB0b3AuCiAKIHN0cnVjdCBQYXN0ZWJv
YXJkV2ViQ29udGVudCB7Ci0jaWYgIShQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKEdUSykgfHwg
UExBVEZPUk0oSU9TKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oV0lOKSkKKyNpZiAhKFBM
QVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0o
V0lOKSkKICAgICBib29sIGNhblNtYXJ0Q29weU9yRGVsZXRlOwogICAgIFJlZlB0cjxTaGFyZWRC
dWZmZXI+IGRhdGFJbldlYkFyY2hpdmVGb3JtYXQ7CiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
ZGF0YUluUlRGREZvcm1hdDsKQEAgLTg3LDExICs5NCw5IEBAIHN0cnVjdCBQYXN0ZWJvYXJkVVJM
IHsKIH07CiAKIHN0cnVjdCBQYXN0ZWJvYXJkSW1hZ2UgewotI2lmICEoUExBVEZPUk0oRUZMKSB8
fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKElPUykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRG
T1JNKFdJTikpCi0gICAgUGFzdGVib2FyZFVSTCB1cmw7Ci0jZW5kaWYKICAgICBSZWZQdHI8SW1h
Z2U+IGltYWdlOwotI2lmICEoUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRG
T1JNKElPUykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKFdJTikpCisjaWYgIShQTEFURk9S
TShFRkwpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKFdJTikp
CisgICAgUGFzdGVib2FyZFVSTCB1cmw7CiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcmVzb3Vy
Y2VEYXRhOwogICAgIFN0cmluZyByZXNvdXJjZU1JTUVUeXBlOwogI2VuZGlmCkBAIC0xNjIsMTEg
KzE2NywxMSBAQCBwdWJsaWM6CiAKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKElPUykg
fHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKFdJTikKICAgICBQYXNzUmVmUHRyPERvY3VtZW50
RnJhZ21lbnQ+IGRvY3VtZW50RnJhZ21lbnQoRnJhbWUqLCBQYXNzUmVmUHRyPFJhbmdlPiwgYm9v
bCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpOyAvLyBGSVhNRTogTGF5ZXJp
bmcgdmlvbGF0aW9uLgotICAgIHZvaWQgd3JpdGVTZWxlY3Rpb24oUmFuZ2UqLCBib29sIGNhblNt
YXJ0Q29weU9yRGVsZXRlLCBGcmFtZSosIFNob3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckNs
aXBib2FyZCA9IERlZmF1bHRTZWxlY3RlZFRleHRUeXBlKTsgLy8gRklYTUU6IExheWVyaW5nIHZp
b2xhdGlvbi4KICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkgfHwg
UExBVEZPUk0oV0lOKQogICAgIHZvaWQgd3JpdGVJbWFnZShOb2RlKiwgY29uc3QgS1VSTCYsIGNv
bnN0IFN0cmluZyYgdGl0bGUpOyAvLyBGSVhNRTogTGF5ZXJpbmcgdmlvbGF0aW9uLgorICAgIHZv
aWQgd3JpdGVTZWxlY3Rpb24oUmFuZ2UqLCBib29sIGNhblNtYXJ0Q29weU9yRGVsZXRlLCBGcmFt
ZSosIFNob3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCA9IERlZmF1bHRTZWxl
Y3RlZFRleHRUeXBlKTsgLy8gRklYTUU6IExheWVyaW5nIHZpb2xhdGlvbi4KICNlbmRpZgogCiAj
aWYgUExBVEZPUk0oR1RLKQpAQCAtMTgyLDEwICsxODcsOCBAQCBwdWJsaWM6CiAjaWYgUExBVEZP
Uk0oSU9TKQogICAgIHZvaWQgc2V0RnJhbWUoRnJhbWUqKTsgLy8gRklYTUU6IExheWVyaW5nIHZp
b2xhdGlvbi4KIAotICAgIHZvaWQgd3JpdGVJbWFnZShOb2RlKiwgRnJhbWUqKTsgLy8gRklYTUU6
IExheWVyaW5nIHZpb2xhdGlvbi4KLSAgICB2b2lkIHdyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmlu
ZyYsIEZyYW1lKik7IC8vIEZJWE1FOiBMYXllcmluZyB2aW9sYXRpb24uCi0KICAgICBzdGF0aWMg
TlNBcnJheSogc3VwcG9ydGVkUGFzdGVib2FyZFR5cGVzKCk7CisgICAgc3RhdGljIFN0cmluZyBy
ZXNvdXJjZU1JTUVUeXBlKE5TU3RyaW5nICptaW1lVHlwZSk7CiAjZW5kaWYKIAogI2lmIFBMQVRG
T1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Bhc3RlYm9hcmRTdHJhdGVneS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Bhc3RlYm9hcmRTdHJhdGVneS5oCShyZXZpc2lvbiAxNTYzMzkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkU3RyYXRlZ3kuaAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NiArMjYsOSBAQAogI2lmbmRlZiBQYXN0ZWJvYXJkU3RyYXRlZ3lfaAogI2RlZmluZSBQYXN0ZWJv
YXJkU3RyYXRlZ3lfaAogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIlBhc3RlYm9hcmQu
aCIKKyNlbmRpZgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTM5LDYgKzQyLDEyIEBAIGNs
YXNzIEtVUkw7CiBjbGFzcyBQYXN0ZWJvYXJkU3RyYXRlZ3kgewogcHVibGljOgogI2lmIFBMQVRG
T1JNKE1BQykKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gRklYTUU6IHdlIHNob3VsZCBtb3Zl
IE1hYyB0byB0aGlzLgorICAgIHZpcnR1YWwgdm9pZCB3cml0ZVRvUGFzdGVib2FyZChjb25zdCBQ
YXN0ZWJvYXJkV2ViQ29udGVudCYgY29udGVudCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB3cml0
ZVRvUGFzdGVib2FyZChjb25zdCBQYXN0ZWJvYXJkSW1hZ2UmIHBhc3RlYm9hcmRJbWFnZSkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCB3cml0ZVRvUGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHRleHQp
ID0gMDsKKyNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBnZXRUeXBlcyhWZWN0b3I8U3RyaW5nPiYg
dHlwZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpID0gMDsKICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXJGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgZ2V0UGF0aG5hbWVzRm9yVHlwZShWZWN0b3I8U3RyaW5nPiYgcGF0aG5hbWVzLCBjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSA9
IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVBhc3RlYm9hcmQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVBhc3RlYm9hcmQu
aAkocmV2aXNpb24gMTU2MzM5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Q
YXN0ZWJvYXJkLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE1ICsyNiwyMCBAQAogI2lmbmRlZiBQ
bGF0Zm9ybVBhc3RlYm9hcmRfaAogI2RlZmluZSBQbGF0Zm9ybVBhc3RlYm9hcmRfaAogCisjaW5j
bHVkZSAiUGFzdGVib2FyZC5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiAh
UExBVEZPUk0oSU9TKQogT0JKQ19DTEFTUyBOU1Bhc3RlYm9hcmQ7CiAjZW5kaWYKIAorI2lmIFBM
QVRGT1JNKElPUykKK09CSkNfQ0xBU1MgVUlQYXN0ZWJvYXJkOworI2VuZGlmCisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29sb3I7CkBAIC00Miw2ICs0NywxMCBAQCBjbGFzcyBLVVJM
OwogCiBjbGFzcyBQbGF0Zm9ybVBhc3RlYm9hcmQgewogcHVibGljOgorI2lmIFBMQVRGT1JNKElP
UykKKyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQoKTsKKyNlbmRpZgorICAgIC8vIEZJWE1FOiBwcm9i
YWJseSB3ZSBkb24ndCBuZWVkIGEgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBhIHBhc3RlYm9hcmQg
bmFtZSBmb3IgaU9TLgogICAgIGV4cGxpY2l0IFBsYXRmb3JtUGFzdGVib2FyZChjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lKTsKICAgICBzdGF0aWMgU3RyaW5nIHVuaXF1ZU5hbWUoKTsKICAg
ICAKQEAgLTYyLDExICs3MSwxNyBAQCBwdWJsaWM6CiAgICAgbG9uZyBzZXRCdWZmZXJGb3JUeXBl
KFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSk7
CiAgICAgbG9uZyBzZXRQYXRobmFtZXNGb3JUeXBlKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRo
bmFtZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpOwogICAgIGxvbmcgc2V0U3RyaW5n
Rm9yVHlwZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKTsKKyAg
ICB2b2lkIHdyaXRlKGNvbnN0IFBhc3RlYm9hcmRXZWJDb250ZW50JiBjb250ZW50KTsKKyAgICB2
b2lkIHdyaXRlKGNvbnN0IFBhc3RlYm9hcmRJbWFnZSYgcGFzdGVib2FyZEltYWdlKTsKKyAgICB2
b2lkIHdyaXRlKGNvbnN0IFN0cmluZyYgdGV4dCk7CiAKIHByaXZhdGU6Ci0jaWYgUExBVEZPUk0o
TUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKICAgICBSZXRhaW5QdHI8
TlNQYXN0ZWJvYXJkPiBtX3Bhc3RlYm9hcmQ7CiAjZW5kaWYKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgUmV0YWluUHRyPFVJUGFzdGVib2FyZD4gbV9wYXN0ZWJvYXJkOworI2VuZGlmCiB9OwogCiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGFzdGVib2FyZElPUy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGFzdGVib2FyZElPUy5tbQko
cmV2aXNpb24gMTU2MzM5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Bhc3RlYm9h
cmRJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDggQEAKICNpbXBvcnQgIktVUkwu
aCIKICNpbXBvcnQgIkxlZ2FjeVdlYkFyY2hpdmUuaCIKICNpbXBvcnQgIlBhZ2UuaCIKKyNpbXBv
cnQgIlBhc3RlYm9hcmRTdHJhdGVneS5oIgorI2ltcG9ydCAiUGxhdGZvcm1TdHJhdGVnaWVzLmgi
CiAjaW1wb3J0ICJSZW5kZXJJbWFnZS5oIgogI2ltcG9ydCAiU29mdExpbmtpbmcuaCIKICNpbXBv
cnQgIlRleHQuaCIKQEAgLTQ5LDExICs1MSw2IEBACiAjaW1wb3J0ICJXZWJOU0F0dHJpYnV0ZWRT
dHJpbmdFeHRyYXMuaCIKICNpbXBvcnQgPE1vYmlsZUNvcmVTZXJ2aWNlcy9Nb2JpbGVDb3JlU2Vy
dmljZXMuaD4KIAotQGludGVyZmFjZSBOU0hUTUxSZWFkZXIKLS0gKGlkKWluaXRXaXRoRE9NUmFu
Z2U6KERPTVJhbmdlICopZG9tUmFuZ2U7Ci0tIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRyaWJ1
dGVkU3RyaW5nOwotQGVuZAotCiBAaW50ZXJmYWNlIE5TQXR0cmlidXRlZFN0cmluZyAoTlNBdHRy
aWJ1dGVkU3RyaW5nS2l0QWRkaXRpb25zKQogLSAoaWQpaW5pdFdpdGhSVEY6KE5TRGF0YSAqKWRh
dGEgZG9jdW1lbnRBdHRyaWJ1dGVzOihOU0RpY3Rpb25hcnkgKiopZGljdDsKIC0gKGlkKWluaXRX
aXRoUlRGRDooTlNEYXRhICopZGF0YSBkb2N1bWVudEF0dHJpYnV0ZXM6KE5TRGljdGlvbmFyeSAq
KilkaWN0OwpAQCAtNjIsOCArNTksOCBAQCAtIChOU0RhdGEgKilSVEZERnJvbVJhbmdlOihOU1Jh
bmdlKXJhbmdlCiAtIChCT09MKWNvbnRhaW5zQXR0YWNobWVudHM7CiBAZW5kCiAKLVNPRlRfTElO
S19QUklWQVRFX0ZSQU1FV09SSyhVSUZvdW5kYXRpb24pCi1TT0ZUX0xJTktfQ0xBU1MoVUlGb3Vu
ZGF0aW9uLCBOU0hUTUxSZWFkZXIpCisvLyBGSVhNRTogdGhlIGZvbGxvd2luZyBzb2Z0IGxpbmtp
bmcgYW5kICNkZWZpbmUgbmVlZHMgdG8gYmUgc2hhcmVkCisvLyB3aXRoIFBsYXRmb3JtUGFzdGVi
b2FyZElPUy5tbQogCiBTT0ZUX0xJTktfRlJBTUVXT1JLKE1vYmlsZUNvcmVTZXJ2aWNlcykKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0
ZWJvYXJkSU9TLm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDEzIEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAi
Q29sb3IuaCIKKyNpbXBvcnQgIktVUkwuaCIKKyNpbXBvcnQgIkltYWdlLmgiCisjaW1wb3J0ICJQ
bGF0Zm9ybVBhc3RlYm9hcmQuaCIKKyNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCisKK1NPRlRfTElO
S19GUkFNRVdPUksoVUlLaXQpCitTT0ZUX0xJTktfQ0xBU1MoVUlLaXQsIFVJUGFzdGVib2FyZCkK
KworQGludGVyZmFjZSBVSVBhc3RlYm9hcmQKKysgKFVJUGFzdGVib2FyZCAqKWdlbmVyYWxQYXN0
ZWJvYXJkOworLSAodm9pZClzZXRJdGVtczooTlNBcnJheSAqKWl0ZW1zOworQGVuZAorCisvLyBG
SVhNRTogdGhlIGZvbGxvd2luZyBzb2Z0IGxpbmtpbmcgYW5kICNkZWZpbmUgbmVlZHMgdG8gYmUg
c2hhcmVkCisvLyB3aXRoIFBhc3RlYm9hcmRJT1MubW0uCitTT0ZUX0xJTktfRlJBTUVXT1JLKE1v
YmlsZUNvcmVTZXJ2aWNlcykKKworU09GVF9MSU5LX0NPTlNUQU5UKE1vYmlsZUNvcmVTZXJ2aWNl
cywga1VUVHlwZVRleHQsIENGU3RyaW5nUmVmKQorU09GVF9MSU5LX0NPTlNUQU5UKE1vYmlsZUNv
cmVTZXJ2aWNlcywga1VUVHlwZVBORywgQ0ZTdHJpbmdSZWYpCitTT0ZUX0xJTktfQ09OU1RBTlQo
TW9iaWxlQ29yZVNlcnZpY2VzLCBrVVRUeXBlSlBFRywgQ0ZTdHJpbmdSZWYpCitTT0ZUX0xJTktf
Q09OU1RBTlQoTW9iaWxlQ29yZVNlcnZpY2VzLCBrVVRUeXBlVVJMLCBDRlN0cmluZ1JlZikKK1NP
RlRfTElOS19DT05TVEFOVChNb2JpbGVDb3JlU2VydmljZXMsIGtVVFR5cGVUSUZGLCBDRlN0cmlu
Z1JlZikKK1NPRlRfTElOS19DT05TVEFOVChNb2JpbGVDb3JlU2VydmljZXMsIGtVVFR5cGVHSUYs
IENGU3RyaW5nUmVmKQorU09GVF9MSU5LX0NPTlNUQU5UKE1vYmlsZUNvcmVTZXJ2aWNlcywga1VU
VGFnQ2xhc3NNSU1FVHlwZSwgQ0ZTdHJpbmdSZWYpCitTT0ZUX0xJTktfQ09OU1RBTlQoTW9iaWxl
Q29yZVNlcnZpY2VzLCBrVVRUYWdDbGFzc0ZpbGVuYW1lRXh0ZW5zaW9uLCBDRlN0cmluZ1JlZikK
K1NPRlRfTElOS19DT05TVEFOVChNb2JpbGVDb3JlU2VydmljZXMsIGtVVFR5cGVSVEZELCBDRlN0
cmluZ1JlZikKK1NPRlRfTElOS19DT05TVEFOVChNb2JpbGVDb3JlU2VydmljZXMsIGtVVFR5cGVS
VEYsIENGU3RyaW5nUmVmKQorCisjZGVmaW5lIGtVVFR5cGVUZXh0IGdldGtVVFR5cGVUZXh0KCkK
KyNkZWZpbmUga1VUVHlwZVBORyAgZ2V0a1VUVHlwZVBORygpCisjZGVmaW5lIGtVVFR5cGVKUEVH
IGdldGtVVFR5cGVKUEVHKCkKKyNkZWZpbmUga1VUVHlwZVVSTCAgZ2V0a1VUVHlwZVVSTCgpCisj
ZGVmaW5lIGtVVFR5cGVUSUZGIGdldGtVVFR5cGVUSUZGKCkKKyNkZWZpbmUga1VUVHlwZUdJRiAg
Z2V0a1VUVHlwZUdJRigpCisjZGVmaW5lIGtVVFRhZ0NsYXNzTUlNRVR5cGUgZ2V0a1VUVGFnQ2xh
c3NNSU1FVHlwZSgpCisjZGVmaW5lIGtVVFRhZ0NsYXNzRmlsZW5hbWVFeHRlbnNpb24gZ2V0a1VU
VGFnQ2xhc3NGaWxlbmFtZUV4dGVuc2lvbigpCisjZGVmaW5lIGtVVFR5cGVSVEZEIGdldGtVVFR5
cGVSVEZEKCkKKyNkZWZpbmUga1VUVHlwZVJURiBnZXRrVVRUeXBlUlRGKCkKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitQbGF0Zm9ybVBhc3RlYm9hcmQ6OlBsYXRmb3JtUGFzdGVib2FyZCgpCisg
ICAgOiBtX3Bhc3RlYm9hcmQoW2dldFVJUGFzdGVib2FyZENsYXNzKCkgZ2VuZXJhbFBhc3RlYm9h
cmRdKQoreworfQorCitQbGF0Zm9ybVBhc3RlYm9hcmQ6OlBsYXRmb3JtUGFzdGVib2FyZChjb25z
dCBTdHJpbmcmKQorICAgIDogbV9wYXN0ZWJvYXJkKFtnZXRVSVBhc3RlYm9hcmRDbGFzcygpIGdl
bmVyYWxQYXN0ZWJvYXJkXSkKK3sKK30KKwordm9pZCBQbGF0Zm9ybVBhc3RlYm9hcmQ6OmdldFR5
cGVzKFZlY3RvcjxTdHJpbmc+JikKK3sKK30KKworUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFBs
YXRmb3JtUGFzdGVib2FyZDo6YnVmZmVyRm9yVHlwZShjb25zdCBTdHJpbmcmKQoreworICAgIHJl
dHVybiBudWxscHRyOworfQorCit2b2lkIFBsYXRmb3JtUGFzdGVib2FyZDo6Z2V0UGF0aG5hbWVz
Rm9yVHlwZShWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYpCit7Cit9CisKK1N0cmluZyBQ
bGF0Zm9ybVBhc3RlYm9hcmQ6OnN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5nJikKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nKCk7Cit9CisKK0NvbG9yIFBsYXRmb3JtUGFzdGVib2FyZDo6Y29sb3IoKQor
eworICAgIHJldHVybiBDb2xvcigpOworfQorCitLVVJMIFBsYXRmb3JtUGFzdGVib2FyZDo6dXJs
KCkKK3sKKyAgICByZXR1cm4gS1VSTCgpOworfQorCitsb25nIFBsYXRmb3JtUGFzdGVib2FyZDo6
Y29weShjb25zdCBTdHJpbmcmKQoreworICAgIHJldHVybiAwOworfQorCitsb25nIFBsYXRmb3Jt
UGFzdGVib2FyZDo6YWRkVHlwZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mKQoreworICAgIHJldHVy
biAwOworfQorCitsb25nIFBsYXRmb3JtUGFzdGVib2FyZDo6c2V0VHlwZXMoY29uc3QgVmVjdG9y
PFN0cmluZz4mKQoreworICAgIHJldHVybiAwOworfQorCitsb25nIFBsYXRmb3JtUGFzdGVib2Fy
ZDo6c2V0QnVmZmVyRm9yVHlwZShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIGNvbnN0IFN0cmlu
ZyYpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK2xvbmcgUGxhdGZvcm1QYXN0ZWJvYXJkOjpzZXRQ
YXRobmFtZXNGb3JUeXBlKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJikKK3sK
KyAgICByZXR1cm4gMDsKK30KKworbG9uZyBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnNldFN0cmluZ0Zv
clR5cGUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKK3sKKyAgICByZXR1cm4gMDsKK30K
KworbG9uZyBQbGF0Zm9ybVBhc3RlYm9hcmQ6OmNoYW5nZUNvdW50KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gMDsKK30KKworU3RyaW5nIFBsYXRmb3JtUGFzdGVib2FyZDo6dW5pcXVlTmFtZSgpCit7
CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCit2b2lkIFBsYXRmb3JtUGFzdGVib2FyZDo6d3Jp
dGUoY29uc3QgUGFzdGVib2FyZFdlYkNvbnRlbnQmIGNvbnRlbnQpCit7CisgICAgUmV0YWluUHRy
PE5TRGljdGlvbmFyeT4gcmVwcmVzZW50YXRpb25zID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rp
b25hcnkgYWxsb2NdIGluaXRdKTsKKworICAgIGlmIChjb250ZW50LmRhdGFJbldlYkFyY2hpdmVG
b3JtYXQpCisgICAgICAgIFtyZXByZXNlbnRhdGlvbnMgc2V0VmFsdWU6KE5TRGF0YSAqKWNvbnRl
bnQuZGF0YUluV2ViQXJjaGl2ZUZvcm1hdC0+Y3JlYXRlTlNEYXRhKCkgZm9yS2V5OldlYkFyY2hp
dmVQYm9hcmRUeXBlXTsKKworICAgIGlmIChjb250ZW50LmRhdGFJblJURkRGb3JtYXQpCisgICAg
ICAgIFtyZXByZXNlbnRhdGlvbnMgc2V0VmFsdWU6Y29udGVudC5kYXRhSW5SVEZERm9ybWF0LT5j
cmVhdGVOU0RhdGEoKSBmb3JLZXk6KE5TU3RyaW5nICopa1VUVHlwZVJURkRdOworICAgIGlmIChj
b250ZW50LmRhdGFJblJURkZvcm1hdCkKKyAgICAgICAgW3JlcHJlc2VudGF0aW9ucyBzZXRWYWx1
ZTpjb250ZW50LmRhdGFJblJURkZvcm1hdC0+Y3JlYXRlTlNEYXRhKCkgZm9yS2V5OihOU1N0cmlu
ZyAqKWtVVFR5cGVSVEZdOworICAgIFtyZXByZXNlbnRhdGlvbnMgc2V0VmFsdWU6Y29udGVudC5k
YXRhSW5TdHJpbmdGb3JtYXQgZm9yS2V5OihOU1N0cmluZyAqKWtVVFR5cGVUZXh0XTsKKyAgICBb
bV9wYXN0ZWJvYXJkIHNldEl0ZW1zOltOU0FycmF5IGFycmF5V2l0aE9iamVjdDpyZXByZXNlbnRh
dGlvbnMuZ2V0KCldXTsKK30KKwordm9pZCBQbGF0Zm9ybVBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0
IFBhc3RlYm9hcmRJbWFnZSYgcGFzdGVib2FyZEltYWdlKQoreworICAgIFJldGFpblB0cjxOU011
dGFibGVEaWN0aW9uYXJ5PiByZXByZXNlbnRhdGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGlj
dGlvbmFyeSBhbGxvY10gaW5pdF0pOworICAgIGlmICghcGFzdGVib2FyZEltYWdlLnJlc291cmNl
TUlNRVR5cGUuaXNOdWxsKCkpIHsKKyAgICAgICAgW3JlcHJlc2VudGF0aW9ucyBzZXRPYmplY3Q6
cGFzdGVib2FyZEltYWdlLmltYWdlLT5kYXRhKCktPmNyZWF0ZU5TRGF0YSgpIGZvcktleTpwYXN0
ZWJvYXJkSW1hZ2UucmVzb3VyY2VNSU1FVHlwZV07CisgICAgICAgIFtyZXByZXNlbnRhdGlvbnMg
c2V0T2JqZWN0OihOU1N0cmluZyAqKXBhc3RlYm9hcmRJbWFnZS51cmwudXJsIGZvcktleTooTlNT
dHJpbmcgKilrVVRUeXBlVVJMXTsKKyAgICB9CisgICAgW21fcGFzdGVib2FyZCBzZXRJdGVtczpb
TlNBcnJheSBhcnJheVdpdGhPYmplY3Q6cmVwcmVzZW50YXRpb25zLmdldCgpXV07Cit9CisKK3Zv
aWQgUGxhdGZvcm1QYXN0ZWJvYXJkOjp3cml0ZShjb25zdCBTdHJpbmcmIHRleHQpCit7CisgICAg
UmV0YWluUHRyPE5TRGljdGlvbmFyeT4gcmVwcmVzZW50YXRpb25zID0gYWRvcHROUyhbW05TTXV0
YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKKyAgICBbcmVwcmVzZW50YXRpb25zIHNldFZh
bHVlOnRleHQgZm9yS2V5OihOU1N0cmluZyAqKWtVVFR5cGVUZXh0XTsKKyAgICBbbV9wYXN0ZWJv
YXJkIHNldEl0ZW1zOltOU0FycmF5IGFycmF5V2l0aE9iamVjdDpyZXByZXNlbnRhdGlvbnMuZ2V0
KCldXTsKK30KKworfQpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTU2MzQyKQorKysgU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTMt
MDktMjQgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KKworICAgICAgICBVcHN0
cmVhbSBjaGFuZ2VzIHRvIFBhc3RlYm9hcmQgaW1wbGVtZW50YXRpb24gZm9yIGlPUy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTgxOAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXQyL21lc3NhZ2VzLnB5OgorICAgICAgICAoc3RydWN0X29yX2NsYXNzKToKKyAgICAgICAgKGhl
YWRlcnNfZm9yX3R5cGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMu
Y3BwOgorICAgICAgICAoQ29yZUlQQzo6ZW5jb2RlU2hhcmVkQnVmZmVyKToKKyAgICAgICAgKENv
cmVJUEM6OmRlY29kZVNoYXJlZEJ1ZmZlcik6CisgICAgICAgIChDb3JlSVBDOjo6OmVuY29kZSk6
CisgICAgICAgIChDb3JlSVBDOjo6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYkNvcmVB
cmd1bWVudENvZGVycy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb250ZXh0Lmg6CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYkNvbnRleHQubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9j
ZXNzL21hYy9XZWJDb250ZXh0TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0Ojp3
cml0ZVdlYkNvbnRlbnRUb1Bhc3RlYm9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0
Ojp3cml0ZUltYWdlVG9QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6
d3JpdGVTdHJpbmdUb1Bhc3RlYm9hcmQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGxh
dGZvcm1TdHJhdGVnaWVzOjp3cml0ZVRvUGFzdGVib2FyZCk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaDoKKwogMjAxMy0wOS0yNCAg
QW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEJlZ2luIGFk
b3B0aW5nIHN0ZDo6dHVwbGUgZm9yIElQQyBkZWNvZGluZwpJbmRleDogU291cmNlL1dlYktpdDIv
U2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQkocmV2aXNpb24gMTU2MzM5KQorKysgU291cmNl
L1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0x
NjgsNiArMTY4LDggQEAgZGVmIHN0cnVjdF9vcl9jbGFzcyhuYW1lc3BhY2UsIHR5cGUpOgogICAg
ICAgICAnV2ViQ29yZTo6TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uJywKICAgICAgICAgJ1dlYkNv
cmU6Ok1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uJywKICAgICAgICAgJ1dlYkNvcmU6Ok5vdGlm
aWNhdGlvbkNvbnRlbnRzJywKKyAgICAgICAgJ1dlYkNvcmU6OlBhc3RlYm9hcmRJbWFnZScsCisg
ICAgICAgICdXZWJDb3JlOjpQYXN0ZWJvYXJkV2ViQ29udGVudCcsCiAgICAgICAgICdXZWJDb3Jl
OjpQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbicsCiAgICAgICAgICdXZWJDb3JlOjpQbHVn
aW5JbmZvJywKICAgICAgICAgJ1dlYkNvcmU6OlByaW50SW5mbycsCkBAIC00MDIsNiArNDA0LDgg
QEAgZGVmIGhlYWRlcnNfZm9yX3R5cGUodHlwZSk6CiAgICAgICAgICdXZWJDb3JlOjpLZXlwcmVz
c0NvbW1hbmQnOiBbJzxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4nXSwKICAgICAgICAgJ1dlYkNv
cmU6OkZpbGVDaG9vc2VyU2V0dGluZ3MnOiBbJzxXZWJDb3JlL0ZpbGVDaG9vc2VyLmg+J10sCiAg
ICAgICAgICdXZWJDb3JlOjpQbHVnaW5JbmZvJzogWyc8V2ViQ29yZS9QbHVnaW5EYXRhLmg+J10s
CisgICAgICAgICdXZWJDb3JlOjpQYXN0ZWJvYXJkSW1hZ2UnOiBbJzxXZWJDb3JlL1Bhc3RlYm9h
cmQuaD4nXSwKKyAgICAgICAgJ1dlYkNvcmU6OlBhc3RlYm9hcmRXZWJDb250ZW50JzogWyc8V2Vi
Q29yZS9QYXN0ZWJvYXJkLmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXF1
ZXN0RGF0YSc6IFsnPFdlYkNvcmUvVGV4dENoZWNraW5nLmg+J10sCiAgICAgICAgICdXZWJDb3Jl
OjpUZXh0Q2hlY2tpbmdSZXN1bHQnOiBbJzxXZWJDb3JlL1RleHRDaGVja2VyQ2xpZW50Lmg+J10s
CiAgICAgICAgICdXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMnOiBbJzxXZWJDb3JlL1ZpZXdw
b3J0QXJndW1lbnRzLmg+J10sCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFy
Z3VtZW50Q29kZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmNwcAkocmV2aXNpb24gMTU2MzM5KQorKysgU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
Miw2ICszMTIsNyBAQCBzdGF0aWMgYm9vbCBkZWNvZGVJbWFnZShBcmd1bWVudERlY29kZXImCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogdm9pZCBBcmd1bWVudENv
ZGVyPEN1cnNvcj46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEN1cnNv
ciYgY3Vyc29yKQogewogICAgIGVuY29kZXIuZW5jb2RlRW51bShjdXJzb3IudHlwZSgpKTsKQEAg
LTM3MSw2ICszNzIsNyBAQCBib29sIEFyZ3VtZW50Q29kZXI8Q3Vyc29yPjo6ZGVjb2RlKEFyZ3Vt
CiAgICAgY3Vyc29yID0gQ3Vyc29yKGltYWdlLmdldCgpLCBob3RTcG90KTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KKyNlbmRpZgogCiB2b2lkIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VSZXF1ZXN0Pjo6
ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXNvdXJjZVJlcXVlc3QpCiB7CkBAIC03ODQsNiArNzg2LDEwNCBAQCBib29sIEFyZ3VtZW50Q29k
ZXI8RGF0YWJhc2VEZXRhaWxzPjo6ZGVjCiAgICAgZGV0YWlscyA9IERhdGFiYXNlRGV0YWlscyhu
YW1lLCBkaXNwbGF5TmFtZSwgZXhwZWN0ZWRVc2FnZSwgY3VycmVudFVzYWdlKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KKworI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpCitzdGF0aWMgdm9pZCBl
bmNvZGVTaGFyZWRCdWZmZXIoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBTaGFyZWRCdWZmZXIq
IGJ1ZmZlcikKK3sKKyAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7CisgICAgZW5jb2Rl
ciA8PCAoYnVmZmVyID8gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ1ZmZlci0+c2l6ZSgpKTogMCk7
CisgICAgaWYgKGJ1ZmZlcikgeworICAgICAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRN
ZW1vcnlCdWZmZXIgPSBTaGFyZWRNZW1vcnk6OmNyZWF0ZShidWZmZXItPnNpemUoKSk7CisgICAg
ICAgIG1lbWNweShzaGFyZWRNZW1vcnlCdWZmZXItPmRhdGEoKSwgYnVmZmVyLT5kYXRhKCksIGJ1
ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAgc2hhcmVkTWVtb3J5QnVmZmVyLT5jcmVhdGVIYW5kbGUo
aGFuZGxlLCBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KTsKKyAgICAgICAgZW5jb2RlciA8PCBoYW5k
bGU7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBkZWNvZGVTaGFyZWRCdWZmZXIoQXJndW1lbnRE
ZWNvZGVyJiBkZWNvZGVyLCBSZWZQdHI8U2hhcmVkQnVmZmVyPiYgYnVmZmVyKQoreworICAgIHVp
bnQ2NF90IGJ1ZmZlclNpemUgPSAwOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYnVmZmVyU2l6
ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChidWZmZXJTaXplKSB7CisgICAg
ICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShoYW5kbGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFJlZlB0
cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeUJ1ZmZlciA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRl
KGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSk7CisgICAgICAgIGJ1ZmZlciA9IFNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIgKj4oc2hhcmVkTWVtb3J5
QnVmZmVyLT5kYXRhKCkpLCBidWZmZXJTaXplKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBBcmd1bWVudENvZGVyPFBhc3RlYm9hcmRXZWJDb250ZW50Pjo6ZW5jb2RlKEFy
Z3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6UGFzdGVib2FyZFdlYkNvbnRl
bnQmIGNvbnRlbnQpCit7CisgICAgZW5jb2RlciA8PCBjb250ZW50LmNhblNtYXJ0Q29weU9yRGVs
ZXRlOworICAgIGVuY29kZXIgPDwgY29udGVudC5kYXRhSW5TdHJpbmdGb3JtYXQ7CisKKyAgICBl
bmNvZGVTaGFyZWRCdWZmZXIoZW5jb2RlciwgY29udGVudC5kYXRhSW5XZWJBcmNoaXZlRm9ybWF0
LmdldCgpKTsKKyAgICBlbmNvZGVTaGFyZWRCdWZmZXIoZW5jb2RlciwgY29udGVudC5kYXRhSW5S
VEZERm9ybWF0LmdldCgpKTsKKyAgICBlbmNvZGVTaGFyZWRCdWZmZXIoZW5jb2RlciwgY29udGVu
dC5kYXRhSW5SVEZGb3JtYXQuZ2V0KCkpOworCisgICAgZW5jb2RlciA8PCBjb250ZW50LmNsaWVu
dFR5cGVzOworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGNvbnRlbnQuY2xp
ZW50RGF0YS5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29udGVudC5jbGll
bnREYXRhLnNpemUoKTsgaSsrKQorICAgICAgICBlbmNvZGVTaGFyZWRCdWZmZXIoZW5jb2Rlciwg
Y29udGVudC5jbGllbnREYXRhW2ldLmdldCgpKTsKK30KKworYm9vbCBBcmd1bWVudENvZGVyPFBh
c3RlYm9hcmRXZWJDb250ZW50Pjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgV2Vi
Q29yZTo6UGFzdGVib2FyZFdlYkNvbnRlbnQmIGNvbnRlbnQpCit7CisgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShjb250ZW50LmNhblNtYXJ0Q29weU9yRGVsZXRlKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29udGVudC5kYXRhSW5TdHJpbmdGb3JtYXQp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVTaGFyZWRCdWZmZXIoZGVj
b2RlciwgY29udGVudC5kYXRhSW5XZWJBcmNoaXZlRm9ybWF0KSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmICghZGVjb2RlU2hhcmVkQnVmZmVyKGRlY29kZXIsIGNvbnRlbnQuZGF0YUlu
UlRGREZvcm1hdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZVNoYXJl
ZEJ1ZmZlcihkZWNvZGVyLCBjb250ZW50LmRhdGFJblJURkZvcm1hdCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvbnRlbnQuY2xpZW50VHlwZXMpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdWludDY0X3QgY2xpZW50RGF0YVNpemU7CisgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShjbGllbnREYXRhU2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAoY2xpZW50RGF0YVNpemUpCisgICAgICAgIGNvbnRlbnQuY2xpZW50RGF0YS5y
ZXNpemUoY2xpZW50RGF0YVNpemUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2xpZW50
RGF0YVNpemU7IGkrKykKKyAgICAgICAgZGVjb2RlU2hhcmVkQnVmZmVyKGRlY29kZXIsIGNvbnRl
bnQuY2xpZW50RGF0YVtpXSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQXJndW1lbnRD
b2RlcjxQYXN0ZWJvYXJkSW1hZ2U+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBXZWJDb3JlOjpQYXN0ZWJvYXJkSW1hZ2UmIHBhc3RlYm9hcmRJbWFnZSkKK3sKKyAgICBl
bmNvZGVJbWFnZShlbmNvZGVyLCBwYXN0ZWJvYXJkSW1hZ2UuaW1hZ2UuZ2V0KCkpOworICAgIGVu
Y29kZXIgPDwgcGFzdGVib2FyZEltYWdlLnVybC51cmw7CisgICAgZW5jb2RlciA8PCBwYXN0ZWJv
YXJkSW1hZ2UudXJsLnRpdGxlOworICAgIGVuY29kZXIgPDwgcGFzdGVib2FyZEltYWdlLnJlc291
cmNlTUlNRVR5cGU7CisgICAgaWYgKHBhc3RlYm9hcmRJbWFnZS5yZXNvdXJjZURhdGEpCisgICAg
ICAgIGVuY29kZVNoYXJlZEJ1ZmZlcihlbmNvZGVyLCBwYXN0ZWJvYXJkSW1hZ2UucmVzb3VyY2VE
YXRhLmdldCgpKTsKK30KKworYm9vbCBBcmd1bWVudENvZGVyPFBhc3RlYm9hcmRJbWFnZT46OmRl
Y29kZShBcmd1bWVudERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OlBhc3RlYm9hcmRJbWFnZSYg
cGFzdGVib2FyZEltYWdlKQoreworICAgIGlmICghZGVjb2RlSW1hZ2UoZGVjb2RlciwgcGFzdGVi
b2FyZEltYWdlLmltYWdlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUocGFzdGVib2FyZEltYWdlLnVybC51cmwpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShwYXN0ZWJvYXJkSW1hZ2UudXJsLnRpdGxlKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocGFzdGVib2FyZElt
YWdlLnJlc291cmNlTUlNRVR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFk
ZWNvZGVTaGFyZWRCdWZmZXIoZGVjb2RlciwgcGFzdGVib2FyZEltYWdlLnJlc291cmNlRGF0YSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogI2VuZGlmCiAK
IHZvaWQgQXJndW1lbnRDb2RlcjxEaWN0YXRpb25BbHRlcm5hdGl2ZT46OmVuY29kZShBcmd1bWVu
dEVuY29kZXImIGVuY29kZXIsIGNvbnN0IERpY3RhdGlvbkFsdGVybmF0aXZlJiBkaWN0YXRpb25B
bHRlcm5hdGl2ZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzLmgJKHJldmlzaW9uIDE1NjMzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTk4LDYgKzE5OCwxOCBA
QCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6CiB9OwogI2VuZGlmCiAK
KyNpZiBQTEFURk9STShJT1MpCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNv
cmU6OlBhc3RlYm9hcmRXZWJDb250ZW50PiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3Vt
ZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OlBhc3RlYm9hcmRXZWJDb250ZW50Jik7CisgICAg
c3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYsIFdlYkNvcmU6OlBhc3RlYm9hcmRX
ZWJDb250ZW50Jik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNv
cmU6OlBhc3RlYm9hcmRJbWFnZT4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVu
Y29kZXImLCBjb25zdCBXZWJDb3JlOjpQYXN0ZWJvYXJkSW1hZ2UmKTsKKyAgICBzdGF0aWMgYm9v
bCBkZWNvZGUoQXJndW1lbnREZWNvZGVyJiwgV2ViQ29yZTo6UGFzdGVib2FyZEltYWdlJik7Cit9
OworI2VuZGlmCisKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q29t
cG9zaXRpb25VbmRlcmxpbmU+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNv
ZGVyJiwgY29uc3QgV2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmUmKTsKICAgICBzdGF0aWMg
Ym9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyJiwgV2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxp
bmUmKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuaAkocmV2aXNpb24g
MTU2MzM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgIldlYkhpc3RvcnlDbGllbnQuaCIK
ICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0xpbmtIYXNo
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYXN0ZWJvYXJkLmg+CiAjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CkBAIC0zMTksNiArMzIwLDExIEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1B
QykKKyNpZiBQTEFURk9STShJT1MpCisgICAgdm9pZCB3cml0ZVdlYkNvbnRlbnRUb1Bhc3RlYm9h
cmQoY29uc3QgV2ViQ29yZTo6UGFzdGVib2FyZFdlYkNvbnRlbnQmIGNvbnRlbnQpOworICAgIHZv
aWQgd3JpdGVJbWFnZVRvUGFzdGVib2FyZChjb25zdCBXZWJDb3JlOjpQYXN0ZWJvYXJkSW1hZ2Um
IHBhc3RlYm9hcmRJbWFnZSk7CisgICAgdm9pZCB3cml0ZVN0cmluZ1RvUGFzdGVib2FyZChjb25z
dCBTdHJpbmcmIHRleHQpOworI2VuZGlmCiAgICAgdm9pZCBnZXRQYXN0ZWJvYXJkVHlwZXMoY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBl
cyk7CiAgICAgdm9pZCBnZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZShjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBWZWN0b3I8U3Ry
aW5nPiYgcGF0aG5hbWVzKTsKICAgICB2b2lkIGdldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlKGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUs
IFN0cmluZyYpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQubWVz
c2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRl
eHQubWVzc2FnZXMuaW4JKHJldmlzaW9uIDE1NjMzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJDb250ZXh0Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCwx
MSBAQCBtZXNzYWdlcyAtPiBXZWJDb250ZXh0IExlZ2FjeVJlY2VpdmVyIHsKICAgICBEaWRHZXRT
dGF0aXN0aWNzKFdlYktpdDo6U3RhdGlzdGljc0RhdGEgc3RhdGlzdGljc0RhdGEsIHVpbnQ2NF90
IGNhbGxiYWNrSUQpCiAKICNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oSU9TKQorICAg
IFdyaXRlV2ViQ29udGVudFRvUGFzdGVib2FyZChXZWJDb3JlOjpQYXN0ZWJvYXJkV2ViQ29udGVu
dCBjb250ZW50KQorICAgIFdyaXRlSW1hZ2VUb1Bhc3RlYm9hcmQoV2ViQ29yZTo6UGFzdGVib2Fy
ZEltYWdlIHBhc3RlYm9hcmRJbWFnZSkKKyAgICBXcml0ZVN0cmluZ1RvUGFzdGVib2FyZChXVEY6
OlN0cmluZyB0ZXh0KQorI2VuZGlmCiAgICAgIyBQYXN0ZWJvYXJkIG1lc3NhZ2VzLgogICAgIAog
ICAgIEdldFBhc3RlYm9hcmRUeXBlcyhXVEY6OlN0cmluZyBwYXN0ZWJvYXJkTmFtZSkgLT4gKFZl
Y3RvcjxXVEY6OlN0cmluZz4gdHlwZXMpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
bWFjL1dlYkNvbnRleHRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL21hYy9XZWJDb250ZXh0TWFjLm1tCShyZXZpc2lvbiAxNTYzMzkpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ1
NSw2ICs0NTUsMjMgQEAgdm9pZCBXZWJDb250ZXh0OjpzZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVAog
ICAgIG5ld0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5z
ZXRCdWZmZXJGb3JUeXBlKGJ1ZmZlciwgcGFzdGVib2FyZFR5cGUpOwogfQogCisjaWYgUExBVEZP
Uk0oSU9TKQordm9pZCBXZWJDb250ZXh0Ojp3cml0ZVdlYkNvbnRlbnRUb1Bhc3RlYm9hcmQoY29u
c3QgV2ViQ29yZTo6UGFzdGVib2FyZFdlYkNvbnRlbnQgJmNvbnRlbnQpCit7CisgICAgUGxhdGZv
cm1QYXN0ZWJvYXJkKCkud3JpdGUoY29udGVudCk7Cit9CisKK3ZvaWQgV2ViQ29udGV4dDo6d3Jp
dGVJbWFnZVRvUGFzdGVib2FyZChjb25zdCBXZWJDb3JlOjpQYXN0ZWJvYXJkSW1hZ2UgJnBhc3Rl
Ym9hcmRJbWFnZSkKK3sKKyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQoKS53cml0ZShwYXN0ZWJvYXJk
SW1hZ2UpOworfQorCit2b2lkIFdlYkNvbnRleHQ6OndyaXRlU3RyaW5nVG9QYXN0ZWJvYXJkKGNv
bnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQoKS53cml0ZSh0ZXh0
KTsKK30KKyNlbmRpZgorCiB2b2lkIFdlYkNvbnRleHQ6OnNldFByb2Nlc3NTdXBwcmVzc2lvbkVu
YWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIGlmIChtX3Byb2Nlc3NTdXBwcmVzc2lvbkVuYWJs
ZWQgPT0gZW5hYmxlZCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAJ
KHJldmlzaW9uIDE1NjMzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAxLDYg
KzUwMSwyNCBAQCBsb25nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0U3RyaW5nRm9yCiAgICAg
ICAgIE1lc3NhZ2VzOjpXZWJDb250ZXh0OjpTZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZTo6UmVw
bHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKICAgICByZXR1cm4gbmV3Q2hhbmdlQ291bnQ7CiB9CisK
KyNpZiBQTEFURk9STShJT1MpCit2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6d3JpdGVUb1Bh
c3RlYm9hcmQoY29uc3QgV2ViQ29yZTo6UGFzdGVib2FyZFdlYkNvbnRlbnQmIGNvbnRlbnQpCit7
CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6V2ViQ29udGV4dDo6V3JpdGVXZWJDb250ZW50VG9QYXN0ZWJvYXJkKGNvbnRl
bnQpLCAwKTsKK30KKwordm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OndyaXRlVG9QYXN0ZWJv
YXJkKGNvbnN0IFdlYkNvcmU6OlBhc3RlYm9hcmRJbWFnZSYgcGFzdGVib2FyZEltYWdlKQorewor
ICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6OldlYkNvbnRleHQ6OldyaXRlSW1hZ2VUb1Bhc3RlYm9hcmQocGFzdGVib2FyZElt
YWdlKSwgMCk7Cit9CisKK3ZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjp3cml0ZVRvUGFzdGVi
b2FyZChjb25zdCBTdHJpbmcmIHRleHQpCit7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViQ29udGV4dDo6V3JpdGVT
dHJpbmdUb1Bhc3RlYm9hcmQodGV4dCksIDApOworfQorI2VuZGlmCisKICNlbmRpZgogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAko
cmV2aXNpb24gMTU2MzM5KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNiArOTUs
MTEgQEAgcHJpdmF0ZToKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICAvLyBXZWJDb3JlOjpQYXN0
ZWJvYXJkU3RyYXRlZ3kKKyNpZiBQTEFURk9STShJT1MpCisgICAgdmlydHVhbCB2b2lkIHdyaXRl
VG9QYXN0ZWJvYXJkKGNvbnN0IFdlYkNvcmU6OlBhc3RlYm9hcmRXZWJDb250ZW50JiBjb250ZW50
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVUb1Bhc3RlYm9hcmQoY29uc3QgV2Vi
Q29yZTo6UGFzdGVib2FyZEltYWdlJiBwYXN0ZWJvYXJkSW1hZ2UpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCB3cml0ZVRvUGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHRleHQpIE9WRVJSSURF
OworI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGdldFR5cGVzKFZlY3RvcjxTdHJpbmc+JiB0eXBl
cywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gYnVmZmVyRm9yVHlwZShjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklE
RTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0UGF0aG5hbWVzRm9yVHlwZShWZWN0b3I8U3RyaW5nPiYg
cGF0aG5hbWVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lKSBPVkVSUklERTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1
NjM0MikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE0IEBACisyMDEzLTA5LTI0ICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5j
b20+CisKKyAgICAgICAgVXBzdHJlYW0gY2hhbmdlcyB0byBQYXN0ZWJvYXJkIGltcGxlbWVudGF0
aW9uIGZvciBpT1MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMjE4MTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oOgorICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbToKKyAgICAgICAgKFdlYlBs
YXRmb3JtU3RyYXRlZ2llczo6d3JpdGVUb1Bhc3RlYm9hcmQpOgorCiAyMDEzLTA5LTIxICBNYXJr
IExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgdW51c2VkIGNvZGUg
aW4gV2ViS2l0L21hYydzIFdlYlNjcmlwdERlYnVnRGVsZWdhdGUuCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXMuaAkocmV2aXNpb24gMTU2MzM5KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDkg
QEAKICNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tpZXNTdHJhdGVneS5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvRGF0YWJhc2VTdHJhdGVneS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTG9hZGVyU3RyYXRlZ3ku
aD4KKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8V2ViQ29yZS9QYXN0ZWJvYXJkLmg+Cisj
ZW5kaWYKICNpbmNsdWRlIDxXZWJDb3JlL1Bhc3RlYm9hcmRTdHJhdGVneS5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUGxhdGZvcm1TdHJhdGVnaWVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5T
dHJhdGVneS5oPgpAQCAtNzksNiArODIsMTEgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQg
YWRkVmlzaXRlZExpbmsoV2ViQ29yZTo6UGFnZSosIFdlYkNvcmU6OkxpbmtIYXNoKSBPVkVSUklE
RTsKICAgICAKICAgICAvLyBXZWJDb3JlOjpQYXN0ZWJvYXJkU3RyYXRlZ3kKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgdmlydHVhbCB2b2lkIHdyaXRlVG9QYXN0ZWJvYXJkKGNvbnN0IFdlYkNvcmU6
OlBhc3RlYm9hcmRXZWJDb250ZW50JiBjb250ZW50KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgd3JpdGVUb1Bhc3RlYm9hcmQoY29uc3QgV2ViQ29yZTo6UGFzdGVib2FyZEltYWdlJiBwYXN0
ZWJvYXJkSW1hZ2UpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCB3cml0ZVRvUGFzdGVib2Fy
ZChjb25zdCBTdHJpbmcmIHRleHQpIE9WRVJSSURFOworI2VuZGlmCiAgICAgdmlydHVhbCB2b2lk
IGdldFR5cGVzKFZlY3RvcjxTdHJpbmc+JiB0eXBlcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1
ZmZlcj4gYnVmZmVyRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0UGF0
aG5hbWVzRm9yVHlwZShWZWN0b3I8U3RyaW5nPiYgcGF0aG5hbWVzLCBjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2ll
cy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXMubW0JKHJldmlzaW9uIDE1NjMzOSkKKysrIFNvdXJjZS9XZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjI0LDMgKzIyNCwyMCBAQCBsb25nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0U3Ry
aW5nRm9yCiB7CiAgICAgcmV0dXJuIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSku
c2V0U3RyaW5nRm9yVHlwZShzdHJpbmcsIHBhc3RlYm9hcmRUeXBlKTsKIH0KKworI2lmIFBMQVRG
T1JNKElPUykKK3ZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjp3cml0ZVRvUGFzdGVib2FyZChj
b25zdCBXZWJDb3JlOjpQYXN0ZWJvYXJkV2ViQ29udGVudCYgY29udGVudCkKK3sKKyAgICBQbGF0
Zm9ybVBhc3RlYm9hcmQoKS53cml0ZShjb250ZW50KTsKK30KKwordm9pZCBXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXM6OndyaXRlVG9QYXN0ZWJvYXJkKGNvbnN0IFdlYkNvcmU6OlBhc3RlYm9hcmRJbWFn
ZSYgcGFzdGVib2FyZEltYWdlKQoreworICAgIFBsYXRmb3JtUGFzdGVib2FyZCgpLndyaXRlKHBh
c3RlYm9hcmRJbWFnZSk7Cit9CisKK3ZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjp3cml0ZVRv
UGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHRleHQpCit7CisgICAgUGxhdGZvcm1QYXN0ZWJvYXJk
KCkud3JpdGUodGV4dCk7Cit9CisjZW5kaWYK
</data>
<flag name="review"
          id="234724"
          type_id="1"
          status="+"
          setter="darin"
    />
    <flag name="commit-queue"
          id="234725"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212840</attachid>
            <date>2013-09-27 14:12:14 -0700</date>
            <delta_ts>2013-09-27 14:55:33 -0700</delta_ts>
            <desc>Second patch</desc>
            <filename>upstreamiospasteboard-2.txt</filename>
            <type>text/plain</type>
            <size>55375</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjU3MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDEzLTA5LTI3ICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgVXBzdHJlYW0gY2hhbmdlcyB0
byBQYXN0ZWJvYXJkIGltcGxlbWVudGF0aW9uIGZvciBpT1MuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE4MTgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAq
IGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZGlzcGF0Y2hD
UFBFdmVudCk6CisgICAgICAgICogZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpXZWJDb250ZW50UmVhZGVyOjphZGRGcmFnbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OldlYkNvbnRlbnRSZWFkZXI6OnJlYWRXZWJBcmNoaXZlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6V2ViQ29udGVudFJlYWRlcjo6cmVhZEZpbGVuYW1lcyk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OldlYkNvbnRlbnRSZWFkZXI6OnJlYWRIVE1MKToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6V2ViQ29udGVudFJlYWRlcjo6cmVhZFJURkQpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkUlRGKToKKyAg
ICAgICAgKFdlYkNvcmU6OnVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkSW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkVVJMKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6V2ViQ29udGVudFJlYWRlcjo6cmVhZFBsYWluVGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OndlYkNvbnRlbnRGcm9tUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpjcmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OmNyZWF0ZUZyYWdtZW50Rm9ySW1hZ2VSZXNvdXJjZUFuZEFkZFJlc291cmNlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9QYXN0ZWJvYXJkLmg6CisgICAgICAgICogcGxhdGZvcm0vUGFzdGVi
b2FyZFN0cmF0ZWd5Lmg6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1QYXN0ZWJvYXJkLmg6
CisgICAgICAgICogcGxhdGZvcm0vaW9zL1Bhc3RlYm9hcmRJT1MubW06CisgICAgICAgIChXZWJD
b3JlOjpQYXN0ZWJvYXJkV2ViQ29udGVudDo6UGFzdGVib2FyZFdlYkNvbnRlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UGFzdGVib2FyZFdlYkNvbnRlbnQ6On5QYXN0ZWJvYXJkV2ViQ29udGVudCk6
CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkSW1hZ2U6OlBhc3RlYm9hcmRJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkSW1hZ2U6On5QYXN0ZWJvYXJkSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6UGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3Jl
OjpQYXN0ZWJvYXJkOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFk
U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlU3RyaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnR5cGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9p
b3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Q
YXN0ZWJvYXJkOjpjaGFuZ2VDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3Rl
Ym9hcmQ6OndyaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVib2FyZDo6Y291
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjpyZWFkQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVib2FyZDo6cmVhZFN0cmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OnJlYWRVUkwpOgorICAgICAgICAqIHBs
YXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2Fy
ZFdlYkNvbnRlbnQ6OlBhc3RlYm9hcmRXZWJDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBh
c3RlYm9hcmRXZWJDb250ZW50Ojp+UGFzdGVib2FyZFdlYkNvbnRlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFzdGVib2FyZEltYWdlOjpQYXN0ZWJvYXJkSW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6UGFzdGVib2FyZEltYWdlOjp+UGFzdGVib2FyZEltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9tYWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tOgorCiAyMDEzLTA5LTI3ICBUaGlhZ28gZGUg
QmFycm9zIExhY2VyZGEgIDx0aGlhZ28ubGFjZXJkYUBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAg
IFtOaXhdIFVwZGF0aW5nIE5peCB0cnVuayBmaWxlcwpJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4J
KHJldmlzaW9uIDE1NjU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3Jr
aW5nIGNvcHkpCkBAIC00ODYsNiArNDg2LDggQEAgX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRl
eHQ5dHJhbnNsYXRlRQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHREMUV2CiBfX1pON1dl
YkNvcmUxNUhpdFRlc3RMb2NhdGlvbjEycmVjdEZvclBvaW50RVJLTlNfMTFMYXlvdXRQb2ludEVq
ampqCiBfX1pON1dlYkNvcmUxNUpTRE9NV2luZG93QmFzZThjb21tb25WTUV2CitfX1pON1dlYkNv
cmUxNVBhc3RlYm9hcmRJbWFnZUMxRXYKK19fWk43V2ViQ29yZTE1UGFzdGVib2FyZEltYWdlRDFF
dgogX19aTjdXZWJDb3JlMTVQbGF0Zm9ybUNBTGF5ZXIxOHNldEdlb21ldHJ5RmxpcHBlZEViCiBf
X1pON1dlYkNvcmUxNVByb3RlY3Rpb25TcGFjZUMxRVJLTjNXVEY2U3RyaW5nRWlOU18yNVByb3Rl
Y3Rpb25TcGFjZVNlcnZlclR5cGVFUzRfTlNfMzVQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlv
blNjaGVtZUUKIF9fWk43V2ViQ29yZTE1UHJvdGVjdGlvblNwYWNlQzFFdgpAQCAtNjY4LDYgKzY3
MCw4IEBAIF9fWk43V2ViQ29yZTIwRGljdGF0aW9uQWx0ZXJuYXRpdmVDMUVqankKIF9fWk43V2Vi
Q29yZTIwRGljdGF0aW9uQWx0ZXJuYXRpdmVDMUV2CiBfX1pON1dlYkNvcmUyMERpc3BsYXlTbGVl
cERpc2FibGVyQzFFUEtjCiBfX1pON1dlYkNvcmUyMERpc3BsYXlTbGVlcERpc2FibGVyRDFFdgor
X19aTjdXZWJDb3JlMjBQYXN0ZWJvYXJkV2ViQ29udGVudEMxRXYKK19fWk43V2ViQ29yZTIwUGFz
dGVib2FyZFdlYkNvbnRlbnREMUV2CiBfX1pON1dlYkNvcmUyMFJlbmRlckVtYmVkZGVkT2JqZWN0
MjlzZXRQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbkVOUzBfMjZQbHVnaW5VbmF2YWlsYWJpbGl0
eVJlYXNvbkUKIF9fWk43V2ViQ29yZTIwUmVuZGVyRW1iZWRkZWRPYmplY3QzN3NldFVuYXZhaWxh
YmxlUGx1Z2luSW5kaWNhdG9ySXNIaWRkZW5FYgogX19aTjdXZWJDb3JlMjBSZW5kZXJFbWJlZGRl
ZE9iamVjdDQ0c2V0UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb25XaXRoRGVzY3JpcHRpb25FTlMw
XzI2UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb25FUktOM1dURjZTdHJpbmdFCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiAxNTY1NjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzOCw3ICs0MzgsNyBAQCBT
dHJpbmcgRWRpdG9yOjpwbGFpblRleHRGcm9tUGFzdGVib2FyZChjCiAKICNlbmRpZgogCi0jaWYg
IShQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpKSAmJiAhUExBVEZPUk0oRUZMKQorI2lm
ICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShFRkwpCiB2b2lkIEVkaXRvcjo6cGFzdGVXaXRo
UGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBib29sIGFsbG93UGxhaW5UZXh0KQog
ewogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7CkBAIC03MTMsMTAg
KzcxMyw2IEBAIGJvb2wgRWRpdG9yOjpkaXNwYXRjaENQUEV2ZW50KGNvbnN0IEF0b20KIAogICAg
IFJlZlB0cjxDbGlwYm9hcmQ+IGNsaXBib2FyZCA9IENsaXBib2FyZDo6Y3JlYXRlRm9yQ29weUFu
ZFBhc3RlKHBvbGljeSk7CiAKLSNpZiBQTEFURk9STShJT1MpCi0gICAgY2xpcGJvYXJkLT5wYXN0
ZWJvYXJkKCkuc2V0RnJhbWUobV9mcmFtZSk7Ci0jZW5kaWYKLQogICAgIFJlZlB0cjxFdmVudD4g
ZXZlbnQgPSBDbGlwYm9hcmRFdmVudDo6Y3JlYXRlKGV2ZW50VHlwZSwgdHJ1ZSwgdHJ1ZSwgY2xp
cGJvYXJkKTsKICAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQsIElHTk9SRV9FWENFUFRJ
T04pOwogICAgIGJvb2wgbm9EZWZhdWx0UHJvY2Vzc2luZyA9IGV2ZW50LT5kZWZhdWx0UHJldmVu
dGVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCShyZXZp
c2lvbiAxNTY1NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0J
KHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMxLDEyIEBACiAjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5o
IgogI2luY2x1ZGUgIkRPTVJhbmdlSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJEb2N1bWVudEZyYWdt
ZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJFZGl0b3JDbGll
bnQuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJG
cmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkhUTUxDb252ZXJ0ZXIuaCIKICNpbmNsdWRl
ICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC00MSwxOCAr
NDQsNDAgQEAKICNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiTGVn
YWN5V2ViQXJjaGl2ZS5oIgogI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKKyNpbmNsdWRlICJQ
YWdlLmgiCiAjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgi
CiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNp
bmNsdWRlICJTb2Z0TGlua2luZy5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKICNp
bmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVHlwaW5nQ29tbWFuZC5oIgogI2luY2x1ZGUgIldB
S0FwcEtpdFN0dWJzLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKKyNpbmNsdWRlICJtYXJr
dXAuaCIKIAogI2lmIFBMQVRGT1JNKElPUykKIAorU09GVF9MSU5LX0ZSQU1FV09SSyhBcHBTdXBw
b3J0KQorU09GVF9MSU5LKEFwcFN1cHBvcnQsIENQU2hhcmVkUmVzb3VyY2VzRGlyZWN0b3J5LCBD
RlN0cmluZ1JlZiwgKHZvaWQpLCAoKSkKKworU09GVF9MSU5LX0ZSQU1FV09SSyhNb2JpbGVDb3Jl
U2VydmljZXMpCisKK1NPRlRfTElOSyhNb2JpbGVDb3JlU2VydmljZXMsIFVUVHlwZUNvbmZvcm1z
VG8sIEJvb2xlYW4sIChDRlN0cmluZ1JlZiBpblVUSSwgQ0ZTdHJpbmdSZWYgaW5Db25mb3Jtc1Rv
VVRJKSwgKGluVVRJLCBpbkNvbmZvcm1zVG9VVEkpKQorU09GVF9MSU5LKE1vYmlsZUNvcmVTZXJ2
aWNlcywgVVRUeXBlQ3JlYXRlUHJlZmVycmVkSWRlbnRpZmllckZvclRhZywgQ0ZTdHJpbmdSZWYs
IChDRlN0cmluZ1JlZiBpblRhZ0NsYXNzLCBDRlN0cmluZ1JlZiBpblRhZywgQ0ZTdHJpbmdSZWYg
aW5Db25mb3JtaW5nVG9VVEkpLCAoaW5UYWdDbGFzcywgaW5UYWcsIGluQ29uZm9ybWluZ1RvVVRJ
KSkKK1NPRlRfTElOSyhNb2JpbGVDb3JlU2VydmljZXMsIFVUVHlwZUNvcHlQcmVmZXJyZWRUYWdX
aXRoQ2xhc3MsIENGU3RyaW5nUmVmLCAoQ0ZTdHJpbmdSZWYgaW5VVEksIENGU3RyaW5nUmVmIGlu
VGFnQ2xhc3MpLCAoaW5VVEksIGluVGFnQ2xhc3MpKQorCitTT0ZUX0xJTktfQ09OU1RBTlQoTW9i
aWxlQ29yZVNlcnZpY2VzLCBrVVRUeXBlUE5HLCBDRlN0cmluZ1JlZikKK1NPRlRfTElOS19DT05T
VEFOVChNb2JpbGVDb3JlU2VydmljZXMsIGtVVFR5cGVKUEVHLCBDRlN0cmluZ1JlZikKK1NPRlRf
TElOS19DT05TVEFOVChNb2JpbGVDb3JlU2VydmljZXMsIGtVVFRhZ0NsYXNzRmlsZW5hbWVFeHRl
bnNpb24sIENGU3RyaW5nUmVmKQorU09GVF9MSU5LX0NPTlNUQU5UKE1vYmlsZUNvcmVTZXJ2aWNl
cywga1VUVGFnQ2xhc3NNSU1FVHlwZSwgQ0ZTdHJpbmdSZWYpCisKKyNkZWZpbmUga1VUVHlwZVBO
RyAgZ2V0a1VUVHlwZVBORygpCisjZGVmaW5lIGtVVFR5cGVKUEVHIGdldGtVVFR5cGVKUEVHKCkK
KyNkZWZpbmUga1VUVGFnQ2xhc3NGaWxlbmFtZUV4dGVuc2lvbiBnZXRrVVRUYWdDbGFzc0ZpbGVu
YW1lRXh0ZW5zaW9uKCkKKyNkZWZpbmUga1VUVGFnQ2xhc3NNSU1FVHlwZSBnZXRrVVRUYWdDbGFz
c01JTUVUeXBlKCkKKwogQGludGVyZmFjZSBOU0F0dHJpYnV0ZWRTdHJpbmcgKE5TQXR0cmlidXRl
ZFN0cmluZ0tpdEFkZGl0aW9ucykKIC0gKGlkKWluaXRXaXRoUlRGOihOU0RhdGEgKilkYXRhIGRv
Y3VtZW50QXR0cmlidXRlczooTlNEaWN0aW9uYXJ5ICoqKWRpY3Q7CiAtIChpZClpbml0V2l0aFJU
RkQ6KE5TRGF0YSAqKWRhdGEgZG9jdW1lbnRBdHRyaWJ1dGVzOihOU0RpY3Rpb25hcnkgKiopZGlj
dDsKQEAgLTM1Myw2ICszNzgsMjM2IEBAIHZvaWQgRWRpdG9yOjp3cml0ZUltYWdlVG9QYXN0ZWJv
YXJkKFBhc3QKICAgICBwYXN0ZWJvYXJkLndyaXRlKHBhc3RlYm9hcmRJbWFnZSk7CiB9CiAKK2Ns
YXNzIEVkaXRvcjo6V2ViQ29udGVudFJlYWRlciBGSU5BTCA6IHB1YmxpYyBQYXN0ZWJvYXJkV2Vi
Q29udGVudFJlYWRlciB7CitwdWJsaWM6CisgICAgV2ViQ29udGVudFJlYWRlcihGcmFtZSYgZnJh
bWUsIFJhbmdlJiBjb250ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0KQorICAgIDogZnJhbWUoZnJh
bWUpCisgICAgLCBjb250ZXh0KGNvbnRleHQpCisgICAgLCBhbGxvd1BsYWluVGV4dChhbGxvd1Bs
YWluVGV4dCkKKyAgICAsIG1hZGVGcmFnbWVudEZyb21QbGFpblRleHQoZmFsc2UpCisgICAgewor
ICAgIH0KKworICAgIEZyYW1lJiBmcmFtZTsKKyAgICBSYW5nZSYgY29udGV4dDsKKyAgICBjb25z
dCBib29sIGFsbG93UGxhaW5UZXh0OworCisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZy
YWdtZW50OworICAgIGJvb2wgbWFkZUZyYWdtZW50RnJvbVBsYWluVGV4dDsKKworcHJpdmF0ZToK
KyAgICB2aXJ0dWFsIGJvb2wgcmVhZFdlYkFyY2hpdmUoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVhZEZpbGVuYW1lcyhjb25zdCBWZWN0b3I8
U3RyaW5nPiYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCByZWFkSFRNTChjb25zdCBTdHJp
bmcmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVhZFJURkQoUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVhZFJURihQYXNzUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4pIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCByZWFkSW1hZ2UoUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBjb25zdCBTdHJpbmcmIHR5cGUpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgYm9vbCByZWFkVVJMKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHRpdGxlKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVhZFBsYWluVGV4dChjb25zdCBTdHJpbmcmKSBP
VkVSUklERTsKKyAgICB2b2lkIGFkZEZyYWdtZW50KFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4pOworfTsKKwordm9pZCBFZGl0b3I6OldlYkNvbnRlbnRSZWFkZXI6OmFkZEZyYWdtZW50KFBh
c3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gbmV3RnJhZ21lbnQpCit7CisgICAgaWYgKGZyYWdt
ZW50KSB7CisgICAgICAgIGlmIChuZXdGcmFnbWVudCAmJiBuZXdGcmFnbWVudC0+Zmlyc3RDaGls
ZCgpKSB7CisgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjOworICAgICAgICAgICAgZnJhZ21l
bnQtPmFwcGVuZENoaWxkKG5ld0ZyYWdtZW50LT5maXJzdENoaWxkKCksIGVjKTsKKyAgICAgICAg
fQorICAgIH0gZWxzZQorICAgICAgICBmcmFnbWVudCA9IG5ld0ZyYWdtZW50OworfQorCitib29s
IEVkaXRvcjo6V2ViQ29udGVudFJlYWRlcjo6cmVhZFdlYkFyY2hpdmUoUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+IGJ1ZmZlcikKK3sKKyAgICBpZiAoIWZyYW1lLmRvY3VtZW50KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBhcmNoaXZlID0g
TGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKEtVUkwoKSwgYnVmZmVyLmdldCgpKTsKKyAgICBpZiAo
IWFyY2hpdmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlZlB0cjxBcmNoaXZlUmVz
b3VyY2U+IG1haW5SZXNvdXJjZSA9IGFyY2hpdmUtPm1haW5SZXNvdXJjZSgpOworICAgIGlmICgh
bWFpblJlc291cmNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBTdHJpbmcm
IHR5cGUgPSBtYWluUmVzb3VyY2UtPm1pbWVUeXBlKCk7CisKKyAgICBpZiAoZnJhbWUubG9hZGVy
KCktPmNsaWVudCgpLT5jYW5TaG93TUlNRVR5cGVBc0hUTUwodHlwZSkpIHsKKyAgICAgICAgLy8g
RklYTUU6IFRoZSBjb2RlIGluIGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzIGNhbGxzIHNl
dERlZmVyc0xvYWRpbmcodHJ1ZSkuIERvbid0IHdlIG5lZWQgdGhhdCBoZXJlPworICAgICAgICBp
ZiAoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9IGZyYW1lLmxvYWRlcigpLT5kb2N1bWVudExvYWRl
cigpKQorICAgICAgICAgICAgbG9hZGVyLT5hZGRBbGxBcmNoaXZlUmVzb3VyY2VzKGFyY2hpdmUu
Z2V0KCkpOworCisgICAgICAgIFN0cmluZyBtYXJrdXBTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4
KG1haW5SZXNvdXJjZS0+ZGF0YSgpLT5kYXRhKCksIG1haW5SZXNvdXJjZS0+ZGF0YSgpLT5zaXpl
KCkpOworICAgICAgICBhZGRGcmFnbWVudChjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZnJhbWUu
ZG9jdW1lbnQoKSwgbWFya3VwU3RyaW5nLCBtYWluUmVzb3VyY2UtPnVybCgpLCBEaXNhbGxvd1Nj
cmlwdGluZ0FuZFBsdWdpbkNvbnRlbnQpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEVkaXRvcjo6V2ViQ29udGVudFJlYWRlcjo6
cmVhZEZpbGVuYW1lcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYpCit7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIEVkaXRvcjo6V2ViQ29udGVudFJlYWRlcjo6cmVhZEhUTUwoY29uc3QgU3Ry
aW5nJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRWRpdG9yOjpXZWJDb250ZW50
UmVhZGVyOjpyZWFkUlRGRChQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyKQoreworICAg
IGFkZEZyYWdtZW50KGZyYW1lLmVkaXRvcigpLmNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2Vz
KGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGRDpidWZmZXIt
PmNyZWF0ZU5TRGF0YSgpIGRvY3VtZW50QXR0cmlidXRlczpudWxscHRyXSkuZ2V0KCkpKTsKKyAg
ICByZXR1cm4gZnJhZ21lbnQ7Cit9CisKK2Jvb2wgRWRpdG9yOjpXZWJDb250ZW50UmVhZGVyOjpy
ZWFkUlRGKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIpCit7CisgICAgYWRkRnJhZ21l
bnQoZnJhbWUuZWRpdG9yKCkuY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMoYWRvcHROUyhb
W05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEY6YnVmZmVyLT5jcmVhdGVOU0Rh
dGEoKSBkb2N1bWVudEF0dHJpYnV0ZXM6bnVsbHB0cl0pLmdldCgpKSk7CisgICAgcmV0dXJuIGZy
YWdtZW50OworfQorCitzdGF0aWMgTlNVUkwqIHVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQoTlNT
dHJpbmcgKnJlbGF0aXZlUGFydCkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZVVUlEUmVmPiBVVUlEUmVm
ID0gYWRvcHRDRihDRlVVSURDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCkpOworICAgIFJldGFp
blB0cjxOU1N0cmluZz4gVVVJRFN0cmluZyA9IGFkb3B0TlMoKE5TU3RyaW5nICopQ0ZVVUlEQ3Jl
YXRlU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIFVVSURSZWYuZ2V0KCkpKTsKKyAgICBOU1VS
TCAqVVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6
QCIlQDovLyVALyVAIiwgQCJ3ZWJraXQtZmFrZS11cmwiLCBVVUlEU3RyaW5nLmdldCgpLCByZWxh
dGl2ZVBhcnRdXTsKKworICAgIHJldHVybiBVUkw7Cit9CisKK2Jvb2wgRWRpdG9yOjpXZWJDb250
ZW50UmVhZGVyOjpyZWFkSW1hZ2UoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciwgY29u
c3QgU3RyaW5nJiB0eXBlKQoreworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc3RyaW5nVHlw
ZSA9IHR5cGUuY3JlYXRlQ0ZTdHJpbmcoKTsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IGZpbGVu
YW1lRXh0ZW5zaW9uID0gYWRvcHROUygoTlNTdHJpbmcgKilVVFR5cGVDb3B5UHJlZmVycmVkVGFn
V2l0aENsYXNzKHN0cmluZ1R5cGUuZ2V0KCksIGtVVFRhZ0NsYXNzRmlsZW5hbWVFeHRlbnNpb24p
KTsKKyAgICBOU1N0cmluZyAqcmVsYXRpdmVVUkxQYXJ0ID0gW0AiaW1hZ2UiIHN0cmluZ0J5QXBw
ZW5kaW5nU3RyaW5nOmZpbGVuYW1lRXh0ZW5zaW9uLmdldCgpXTsKKyAgICBSZXRhaW5QdHI8TlNT
dHJpbmc+IG1pbWVUeXBlID0gYWRvcHROUygoTlNTdHJpbmcgKilVVFR5cGVDb3B5UHJlZmVycmVk
VGFnV2l0aENsYXNzKHN0cmluZ1R5cGUuZ2V0KCksIGtVVFRhZ0NsYXNzTUlNRVR5cGUpKTsKKwor
ICAgIGFkZEZyYWdtZW50KGZyYW1lLmVkaXRvcigpLmNyZWF0ZUZyYWdtZW50Rm9ySW1hZ2VSZXNv
dXJjZUFuZEFkZFJlc291cmNlKEFyY2hpdmVSZXNvdXJjZTo6Y3JlYXRlKGJ1ZmZlciwgdW5pcXVl
VVJMV2l0aFJlbGF0aXZlUGFydChyZWxhdGl2ZVVSTFBhcnQpLCBtaW1lVHlwZS5nZXQoKSwgZW1w
dHlTdHJpbmcoKSwgZW1wdHlTdHJpbmcoKSkpKTsKKyAgICByZXR1cm4gZnJhZ21lbnQ7Cit9CisK
K2Jvb2wgRWRpdG9yOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkVVJMKGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJikKK3sKKyAgICBpZiAodXJsLnN0cmluZygpLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5jbGllbnQoKS0+aGFz
UmljaGx5RWRpdGFibGVTZWxlY3Rpb24oKSkgeworICAgICAgICBpZiAocmVhZFBsYWluVGV4dChb
KE5TVVJMICopdXJsIGFic29sdXRlU3RyaW5nXSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICBpZiAoWyhOU1VSTCAqKXVybCBpc0ZpbGVVUkxdKSB7CisgICAgICAgIE5T
U3RyaW5nICpsb2NhbFBhdGggPSBbKE5TVVJMICopdXJsIHJlbGF0aXZlUGF0aF07CisgICAgICAg
IC8vIE9ubHkgYWxsb3cgdXJsIGF0dGFjaG1lbnRzIGZyb20gfi9NZWRpYSBmb3Igbm93LgorICAg
ICAgICBpZiAoIVtsb2NhbFBhdGggaGFzUHJlZml4OlsoTlNTdHJpbmcgKilDUFNoYXJlZFJlc291
cmNlc0RpcmVjdG9yeSgpIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOkAiL01lZGlhL0RDSU0vIl1d
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFJldGFpblB0cjxOU1N0cmlu
Zz4gZmlsZVR5cGUgPSBhZG9wdE5TKChOU1N0cmluZyAqKVVUVHlwZUNyZWF0ZVByZWZlcnJlZElk
ZW50aWZpZXJGb3JUYWcoa1VUVGFnQ2xhc3NGaWxlbmFtZUV4dGVuc2lvbiwgKENGU3RyaW5nUmVm
KVtsb2NhbFBhdGggcGF0aEV4dGVuc2lvbl0sIE5VTEwpKTsKKyAgICAgICAgTlNEYXRhICpkYXRh
ID0gW05TRGF0YSBkYXRhV2l0aENvbnRlbnRzT2ZGaWxlOmxvY2FsUGF0aF07CisgICAgICAgIGlm
IChVVFR5cGVDb25mb3Jtc1RvKChDRlN0cmluZ1JlZilmaWxlVHlwZS5nZXQoKSwga1VUVHlwZVBO
RykpIHsKKyAgICAgICAgICAgIGFkZEZyYWdtZW50KGZyYW1lLmVkaXRvcigpLmNyZWF0ZUZyYWdt
ZW50Rm9ySW1hZ2VSZXNvdXJjZUFuZEFkZFJlc291cmNlKEFyY2hpdmVSZXNvdXJjZTo6Y3JlYXRl
KFNoYXJlZEJ1ZmZlcjo6d3JhcE5TRGF0YShbW2RhdGEgY29weV0gYXV0b3JlbGVhc2VdKSwgdW5p
cXVlVVJMV2l0aFJlbGF0aXZlUGFydChAImltYWdlLnBuZyIpLCBAImltYWdlL3BuZyIsIGVtcHR5
U3RyaW5nKCksIGVtcHR5U3RyaW5nKCkpKSk7CisgICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQ7
CisgICAgICAgIH0gZWxzZSBpZiAoVVRUeXBlQ29uZm9ybXNUbygoQ0ZTdHJpbmdSZWYpZmlsZVR5
cGUuZ2V0KCksIGtVVFR5cGVKUEVHKSkgeworICAgICAgICAgICAgYWRkRnJhZ21lbnQoZnJhbWUu
ZWRpdG9yKCkuY3JlYXRlRnJhZ21lbnRGb3JJbWFnZVJlc291cmNlQW5kQWRkUmVzb3VyY2UoQXJj
aGl2ZVJlc291cmNlOjpjcmVhdGUoU2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRhKFtbZGF0YSBjb3B5
XSBhdXRvcmVsZWFzZV0pLCB1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KEAiaW1hZ2UuanBnIiks
IEAiaW1hZ2UvanBnIiwgZW1wdHlTdHJpbmcoKSwgZW1wdHlTdHJpbmcoKSkpKTsKKyAgICAgICAg
ICAgIHJldHVybiBmcmFnbWVudDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIFJl
ZlB0cjxFbGVtZW50PiBhbmNob3IgPSBmcmFtZS5kb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KEhU
TUxOYW1lczo6YVRhZywgZmFsc2UpOworICAgICAgICBhbmNob3ItPnNldEF0dHJpYnV0ZShIVE1M
TmFtZXM6OmhyZWZBdHRyLCB1cmwuc3RyaW5nKCkpOworICAgICAgICBhbmNob3ItPmFwcGVuZENo
aWxkKGZyYW1lLmRvY3VtZW50KCktPmNyZWF0ZVRleHROb2RlKFtbKE5TVVJMICopdXJsIGFic29s
dXRlU3RyaW5nXSBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXSkpOworCisg
ICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBuZXdGcmFnbWVudCA9IGZyYW1lLmRvY3Vt
ZW50KCktPmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKyAgICAgICAgbmV3RnJhZ21lbnQtPmFw
cGVuZENoaWxkKGFuY2hvci5yZWxlYXNlKCkpOworICAgICAgICBhZGRGcmFnbWVudChuZXdGcmFn
bWVudCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgRWRpdG9yOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkUGxhaW5UZXh0KGNvbnN0IFN0
cmluZyYgdGV4dCkKK3sKKyAgICBpZiAoIWFsbG93UGxhaW5UZXh0KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBhZGRGcmFnbWVudChjcmVhdGVGcmFnbWVudEZyb21UZXh0KCZjb250ZXh0
LCBbdGV4dCBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXSkpOworICAgIGlm
ICghZnJhZ21lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1hZGVGcmFnbWVudEZy
b21QbGFpblRleHQgPSB0cnVlOworICAgIHJldHVybiB0cnVlOworfQorCisvLyBGSVhNRTogU2hv
dWxkIGdpdmUgdGhpcyBmdW5jdGlvbiBhIG5hbWUgdGhhdCBtYWtlcyBpdCBjbGVhciBpdCBhZGRz
IHJlc291cmNlcyB0byB0aGUgZG9jdW1lbnQgbG9hZGVyIGFzIGEgc2lkZSBlZmZlY3QuCisvLyBP
ciByZWZhY3RvciBzbyBpdCBkb2VzIG5vdCBkbyB0aGF0LgorUGFzc1JlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBFZGl0b3I6OndlYkNvbnRlbnRGcm9tUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0
ZWJvYXJkLCBSYW5nZSYgY29udGV4dCwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQ
bGFpblRleHQpCit7CisgICAgV2ViQ29udGVudFJlYWRlciByZWFkZXIoKm1fZnJhbWUsIGNvbnRl
eHQsIGFsbG93UGxhaW5UZXh0KTsKKyAgICBwYXN0ZWJvYXJkLnJlYWQocmVhZGVyKTsKKyAgICBj
aG9zZVBsYWluVGV4dCA9IHJlYWRlci5tYWRlRnJhZ21lbnRGcm9tUGxhaW5UZXh0OworICAgIHJl
dHVybiByZWFkZXIuZnJhZ21lbnQucmVsZWFzZSgpOworfQorCit2b2lkIEVkaXRvcjo6cGFzdGVX
aXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBib29sIGFsbG93UGxhaW5UZXh0
KQoreworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7CisKKyAgICBi
b29sIGNob3NlUGxhaW5UZXh0OworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVu
dCA9IGNsaWVudCgpLT5kb2N1bWVudEZyYWdtZW50RnJvbURlbGVnYXRlKDApOworICAgIGlmICgh
ZnJhZ21lbnQpCisgICAgICAgIGZyYWdtZW50ID0gd2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKCpw
YXN0ZWJvYXJkLCAqcmFuZ2UsIGFsbG93UGxhaW5UZXh0LCBjaG9zZVBsYWluVGV4dCk7CisKKyAg
ICBpZiAoZnJhZ21lbnQgJiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoZnJhZ21lbnQsIHJhbmdlLCBF
ZGl0b3JJbnNlcnRBY3Rpb25QYXN0ZWQpKQorICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21l
bnQsIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKCpwYXN0ZWJvYXJkKSwgZmFsc2UpOwor
fQorCitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IEVkaXRvcjo6Y3JlYXRlRnJhZ21lbnRB
bmRBZGRSZXNvdXJjZXMoTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcpCit7CisgICAgaWYgKCFt
X2ZyYW1lLT5wYWdlKCkgfHwgIW1fZnJhbWUtPmRvY3VtZW50KCkgfHwgIW1fZnJhbWUtPmRvY3Vt
ZW50KCktPmlzSFRNTERvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
aWYgKCFzdHJpbmcpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYm9vbCB3YXNEZWZl
cnJpbmdDYWxsYmFja3MgPSBtX2ZyYW1lLT5wYWdlKCktPmRlZmVyc0xvYWRpbmcoKTsKKyAgICBp
ZiAoIXdhc0RlZmVycmluZ0NhbGxiYWNrcykKKyAgICAgICAgbV9mcmFtZS0+cGFnZSgpLT5zZXRE
ZWZlcnNMb2FkaW5nKHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+
PiByZXNvdXJjZXM7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY2xp
ZW50KCktPmRvY3VtZW50RnJhZ21lbnRGcm9tQXR0cmlidXRlZFN0cmluZyhzdHJpbmcsIHJlc291
cmNlcyk7CisKKyAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9IG1fZnJhbWUtPmxvYWRl
cigpLT5kb2N1bWVudExvYWRlcigpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXpl
ID0gcmVzb3VyY2VzLnNpemUoKTsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgICAgIGxvYWRlci0+
YWRkQXJjaGl2ZVJlc291cmNlKHJlc291cmNlc1tpXSk7CisgICAgfQorCisgICAgaWYgKCF3YXNE
ZWZlcnJpbmdDYWxsYmFja3MpCisgICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+c2V0RGVmZXJzTG9h
ZGluZyhmYWxzZSk7CisgICAgCisgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKK30KKwor
UGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBFZGl0b3I6OmNyZWF0ZUZyYWdtZW50Rm9ySW1h
Z2VSZXNvdXJjZUFuZEFkZFJlc291cmNlKFBhc3NSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiByZXNv
dXJjZSkKK3sKKyAgICBpZiAoIXJlc291cmNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIFJlZlB0cjxFbGVtZW50PiBpbWFnZUVsZW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5j
cmVhdGVFbGVtZW50KEhUTUxOYW1lczo6aW1nVGFnLCBmYWxzZSk7CisgICAgLy8gRklYTUU6IFRo
ZSBjb2RlIGluIGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzIGNhbGxzIHNldERlZmVyc0xv
YWRpbmcodHJ1ZSkuIERvbid0IHdlIG5lZWQgdGhhdCBoZXJlPworICAgIGlmIChEb2N1bWVudExv
YWRlciogbG9hZGVyID0gbV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkpCisgICAg
ICAgIGxvYWRlci0+YWRkQXJjaGl2ZVJlc291cmNlKHJlc291cmNlLmdldCgpKTsKKworICAgIE5T
VVJMICpVUkwgPSByZXNvdXJjZS0+dXJsKCk7CisgICAgaW1hZ2VFbGVtZW50LT5zZXRBdHRyaWJ1
dGUoSFRNTE5hbWVzOjpzcmNBdHRyLCBbVVJMIGlzRmlsZVVSTF0gPyBbVVJMIGFic29sdXRlU3Ry
aW5nXSA6IHJlc291cmNlLT51cmwoKSk7CisKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
ZnJhZ21lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7
CisgICAgZnJhZ21lbnQtPmFwcGVuZENoaWxkKGltYWdlRWxlbWVudC5yZWxlYXNlKCkpOworCisK
KyAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBQTEFURk9STShJT1MpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9QYXN0ZWJvYXJkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
UGFzdGVib2FyZC5oCShyZXZpc2lvbiAxNTY1NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9QYXN0ZWJvYXJkLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDkgKzI3LDcgQEAKICNkZWZpbmUg
UGFzdGVib2FyZF9oCiAKICNpbmNsdWRlICJEcmFnSW1hZ2UuaCIKLSNpbmNsdWRlICJJbWFnZS5o
IgogI2luY2x1ZGUgIlVSTC5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTM4LDYgKzM2LDExIEBACiB0eXBlZGVmIHN0cnVjdCBf
R3RrQ2xpcGJvYXJkIEd0a0NsaXBib2FyZDsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQor
T0JKQ19DTEFTUyBOU0FycmF5OworT0JKQ19DTEFTUyBOU1N0cmluZzsKKyNlbmRpZgorCiAjaWYg
UExBVEZPUk0oUVQpCiAjaW5jbHVkZSA8UU1pbWVEYXRhPgogI2VuZGlmCkBAIC01MCwxMSArNTMs
NiBAQCB0eXBlZGVmIHN0cnVjdCBfR3RrQ2xpcGJvYXJkIEd0a0NsaXBib2FyCiB0eXBlZGVmIHN0
cnVjdCBIV05EX18qIEhXTkQ7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKElPUykKLU9CSkNfQ0xB
U1MgTlNBcnJheTsKLU9CSkNfQ0xBU1MgTlNTdHJpbmc7Ci0jZW5kaWYKLQogLy8gRklYTUU6IFRo
aXMgY2xhc3MgdXNlcyB0aGUgRE9NIGFuZCBtYWtlcyBjYWxscyB0byBFZGl0b3IuCiAvLyBJdCBz
aG91bGQgYmUgZGl2ZXN0ZWQgb2YgaXRzIGtub3dsZWRnZSBvZiB0aGUgZnJhbWUgYW5kIGVkaXRv
ci4KIApAQCAtNzUsNiArNzMsOCBAQCBlbnVtIFNob3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZv
ckNsaXBiCiAKIHN0cnVjdCBQYXN0ZWJvYXJkV2ViQ29udGVudCB7CiAjaWYgIShQTEFURk9STShF
RkwpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKFdJTikpCisg
ICAgUGFzdGVib2FyZFdlYkNvbnRlbnQoKTsKKyAgICB+UGFzdGVib2FyZFdlYkNvbnRlbnQoKTsK
ICAgICBib29sIGNhblNtYXJ0Q29weU9yRGVsZXRlOwogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+
IGRhdGFJbldlYkFyY2hpdmVGb3JtYXQ7CiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YUlu
UlRGREZvcm1hdDsKQEAgLTk0LDYgKzk0LDggQEAgc3RydWN0IFBhc3RlYm9hcmRVUkwgewogfTsK
IAogc3RydWN0IFBhc3RlYm9hcmRJbWFnZSB7CisgICAgUGFzdGVib2FyZEltYWdlKCk7CisgICAg
flBhc3RlYm9hcmRJbWFnZSgpOwogICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2U7CiAjaWYgIShQTEFU
Rk9STShFRkwpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKFdJ
TikpCiAgICAgUGFzdGVib2FyZFVSTCB1cmw7CkBAIC0xMDgsNyArMTEwLDcgQEAgY2xhc3MgUGFz
dGVib2FyZFdlYkNvbnRlbnRSZWFkZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgflBhc3RlYm9h
cmRXZWJDb250ZW50UmVhZGVyKCkgeyB9CiAKLSNpZiAhKFBMQVRGT1JNKEVGTCkgfHwgUExBVEZP
Uk0oR1RLKSB8fCBQTEFURk9STShJT1MpIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShXSU4p
KQorI2lmICEoUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKSB8
fCBQTEFURk9STShXSU4pKQogICAgIHZpcnR1YWwgYm9vbCByZWFkV2ViQXJjaGl2ZShQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4pID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgcmVhZEZpbGVuYW1lcyhj
b25zdCBWZWN0b3I8U3RyaW5nPiYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgcmVhZEhUTUwoY29u
c3QgU3RyaW5nJikgPSAwOwpAQCAtMTY1LDcgKzE2Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dERyYWdJbWFnZShEcmFnSW1hZ2VSZWYsIGNvbnN0IEludFBvaW50JiBob3RTcG90KTsKICNlbmRp
ZgogCi0jaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShJT1MpIHx8IFBMQVRGT1JNKFFUKSB8
fCBQTEFURk9STShXSU4pCisjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkgfHwgUExB
VEZPUk0oV0lOKQogICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZG9jdW1lbnRGcmFn
bWVudChGcmFtZSosIFBhc3NSZWZQdHI8UmFuZ2U+LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29s
JiBjaG9zZVBsYWluVGV4dCk7IC8vIEZJWE1FOiBMYXllcmluZyB2aW9sYXRpb24uCiAjZW5kaWYK
IApAQCAtMTg1LDEwICsxODcsOCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElP
UykKLSAgICB2b2lkIHNldEZyYW1lKEZyYW1lKik7IC8vIEZJWE1FOiBMYXllcmluZyB2aW9sYXRp
b24uCi0KICAgICBzdGF0aWMgTlNBcnJheSogc3VwcG9ydGVkUGFzdGVib2FyZFR5cGVzKCk7Ci0g
ICAgc3RhdGljIFN0cmluZyByZXNvdXJjZU1JTUVUeXBlKE5TU3RyaW5nICptaW1lVHlwZSk7Cisg
ICAgc3RhdGljIFN0cmluZyByZXNvdXJjZU1JTUVUeXBlKGNvbnN0IE5TU3RyaW5nICptaW1lVHlw
ZSk7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKQEAgLTIy
MywxMCArMjIzLDYgQEAgcHJpdmF0ZToKICAgICBQYXN0ZWJvYXJkKEd0a0NsaXBib2FyZCopOwog
I2VuZGlmCiAKLSNpZiBQTEFURk9STShJT1MpCi0gICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBkb2N1bWVudEZyYWdtZW50Rm9yUGFzdGVib2FyZEl0ZW1BdEluZGV4KEZyYW1lKiwgaW50
IGluZGV4LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCk7IC8vIEZJ
WE1FOiBMYXllcmluZyB2aW9sYXRpb24uCi0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKFFUKQogICAg
IFBhc3RlYm9hcmQoY29uc3QgUU1pbWVEYXRhKiAsIGJvb2wpOwogCkBAIC0yNTAsNyArMjQ2LDYg
QEAgcHJpdmF0ZToKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKQotICAgIEZyYW1lKiBtX2Zy
YW1lOyAvLyBGSVhNRTogTGF5ZXJpbmcgdmlvbGF0aW9uLgogICAgIGxvbmcgbV9jaGFuZ2VDb3Vu
dDsKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkU3Ry
YXRlZ3kuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJk
U3RyYXRlZ3kuaAkocmV2aXNpb24gMTU2NTY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
UGFzdGVib2FyZFN0cmF0ZWd5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEwICsyNiw2IEBACiAj
aWZuZGVmIFBhc3RlYm9hcmRTdHJhdGVneV9oCiAjZGVmaW5lIFBhc3RlYm9hcmRTdHJhdGVneV9o
CiAKLSNpZiBQTEFURk9STShJT1MpCi0jaW5jbHVkZSAiUGFzdGVib2FyZC5oIgotI2VuZGlmCi0j
aW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTM3LDE2
ICszMywyNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb2xvcjsKK2NsYXNzIFNo
YXJlZEJ1ZmZlcjsKIGNsYXNzIFVSTDsKLSAgICAKK3N0cnVjdCBQYXN0ZWJvYXJkSW1hZ2U7Citz
dHJ1Y3QgUGFzdGVib2FyZFdlYkNvbnRlbnQ7CisKIGNsYXNzIFBhc3RlYm9hcmRTdHJhdGVneSB7
CiBwdWJsaWM6CiAjaWYgUExBVEZPUk0oTUFDKQogI2lmIFBMQVRGT1JNKElPUykKLSAgICAvLyBG
SVhNRTogd2Ugc2hvdWxkIG1vdmUgTWFjIHRvIHRoaXMuCi0gICAgdmlydHVhbCB2b2lkIHdyaXRl
VG9QYXN0ZWJvYXJkKGNvbnN0IFBhc3RlYm9hcmRXZWJDb250ZW50JiBjb250ZW50KSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHdyaXRlVG9QYXN0ZWJvYXJkKGNvbnN0IFBhc3RlYm9hcmRJbWFnZSYg
cGFzdGVib2FyZEltYWdlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHdyaXRlVG9QYXN0ZWJvYXJk
KGNvbnN0IFN0cmluZyYgdGV4dCkgPSAwOworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbW92ZSBN
YWMgdG8gdGhpcy4KKyAJdmlydHVhbCB2b2lkIHdyaXRlVG9QYXN0ZWJvYXJkKGNvbnN0IFBhc3Rl
Ym9hcmRXZWJDb250ZW50JikgPSAwOworIAl2aXJ0dWFsIHZvaWQgd3JpdGVUb1Bhc3RlYm9hcmQo
Y29uc3QgUGFzdGVib2FyZEltYWdlJikgPSAwOworIAl2aXJ0dWFsIHZvaWQgd3JpdGVUb1Bhc3Rl
Ym9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJikgPSAwOwor
IAl2aXJ0dWFsIGludCBnZXRQYXN0ZWJvYXJkSXRlbXNDb3VudCgpID0gMDsKKyAJdmlydHVhbCBT
dHJpbmcgcmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkVHlwZSkgPSAwOworIAl2aXJ0dWFsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBy
ZWFkQnVmZmVyRnJvbVBhc3RlYm9hcmQoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmRUeXBlKSA9IDA7CisgCXZpcnR1YWwgS1VSTCByZWFkVVJMRnJvbVBhc3RlYm9hcmQoaW50IGlu
ZGV4LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKSA9IDA7CisgCXZpcnR1YWwgbG9uZyBj
aGFuZ2VDb3VudCgpID0gMDsKKwogI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGdldFR5cGVzKFZl
Y3RvcjxTdHJpbmc+JiB0eXBlcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgPSAwOwog
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlckZvclR5cGUoY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgPSAw
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1QYXN0ZWJvYXJkLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1QYXN0ZWJvYXJkLmgJ
KHJldmlzaW9uIDE1NjU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtUGFz
dGVib2FyZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMCArMjYsOSBAQAogI2lmbmRlZiBQbGF0
Zm9ybVBhc3RlYm9hcmRfaAogI2RlZmluZSBQbGF0Zm9ybVBhc3RlYm9hcmRfaAogCi0jaW5jbHVk
ZSAiUGFzdGVib2FyZC5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgUExBVEZPUk0oTUFD
KSAmJiAhUExBVEZPUk0oSU9TKQpAQCAtNDMsMTUgKzQyLDE4IEBAIE9CSkNfQ0xBU1MgVUlQYXN0
ZWJvYXJkOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb2xvcjsKK2NsYXNzIFNoYXJl
ZEJ1ZmZlcjsKIGNsYXNzIFVSTDsKK3N0cnVjdCBQYXN0ZWJvYXJkSW1hZ2U7CitzdHJ1Y3QgUGFz
dGVib2FyZFdlYkNvbnRlbnQ7CiAKIGNsYXNzIFBsYXRmb3JtUGFzdGVib2FyZCB7CiBwdWJsaWM6
CisgICAgLy8gRklYTUU6IHByb2JhYmx5IHdlIGRvbid0IG5lZWQgYSBjb25zdHJ1Y3RvciB0aGF0
IHRha2VzIGEgcGFzdGVib2FyZCBuYW1lIGZvciBpT1MuCisgICAgZXhwbGljaXQgUGxhdGZvcm1Q
YXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpOwogI2lmIFBMQVRGT1JNKElP
UykKICAgICBQbGF0Zm9ybVBhc3RlYm9hcmQoKTsKICNlbmRpZgotICAgIC8vIEZJWE1FOiBwcm9i
YWJseSB3ZSBkb24ndCBuZWVkIGEgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBhIHBhc3RlYm9hcmQg
bmFtZSBmb3IgaU9TLgotICAgIGV4cGxpY2l0IFBsYXRmb3JtUGFzdGVib2FyZChjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lKTsKICAgICBzdGF0aWMgU3RyaW5nIHVuaXF1ZU5hbWUoKTsKICAg
ICAKICAgICB2b2lkIGdldFR5cGVzKFZlY3RvcjxTdHJpbmc+JiB0eXBlcyk7CkBAIC03MSw5ICs3
MywxMyBAQCBwdWJsaWM6CiAgICAgbG9uZyBzZXRCdWZmZXJGb3JUeXBlKFBhc3NSZWZQdHI8U2hh
cmVkQnVmZmVyPiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSk7CiAgICAgbG9uZyBzZXRQ
YXRobmFtZXNGb3JUeXBlKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMsIGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZFR5cGUpOwogICAgIGxvbmcgc2V0U3RyaW5nRm9yVHlwZShjb25zdCBT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKTsKLSAgICB2b2lkIHdyaXRlKGNv
bnN0IFBhc3RlYm9hcmRXZWJDb250ZW50JiBjb250ZW50KTsKLSAgICB2b2lkIHdyaXRlKGNvbnN0
IFBhc3RlYm9hcmRJbWFnZSYgcGFzdGVib2FyZEltYWdlKTsKLSAgICB2b2lkIHdyaXRlKGNvbnN0
IFN0cmluZyYgdGV4dCk7CisgICAgdm9pZCB3cml0ZShjb25zdCBQYXN0ZWJvYXJkV2ViQ29udGVu
dCYpOworICAgIHZvaWQgd3JpdGUoY29uc3QgUGFzdGVib2FyZEltYWdlJik7CisgICAgdm9pZCB3
cml0ZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmKTsKKyAgICBQ
YXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcmVhZEJ1ZmZlcihpbnQgaW5kZXgsIGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZFR5cGUpOworICAgIFN0cmluZyByZWFkU3RyaW5nKGludCBpbmRleCwgY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSk7CisgICAgVVJMIHJlYWRVUkwoaW50IGluZGV4LCBj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKTsKKyAgICBpbnQgY291bnQoKTsKIAogcHJpdmF0
ZToKICNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvUGFzdGVib2FyZElPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGFzdGVib2FyZElPUy5tbQkocmV2aXNpb24gMTU2NTY0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Bhc3RlYm9hcmRJT1MubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTU5LDEyICs1OSwxMCBAQCAtIChOU0RhdGEgKilSVEZERnJvbVJhbmdlOihOU1Jh
bmdlKXJhbmdlCiAtIChCT09MKWNvbnRhaW5zQXR0YWNobWVudHM7CiBAZW5kCiAKLS8vIEZJWE1F
OiB0aGUgZm9sbG93aW5nIHNvZnQgbGlua2luZyBhbmQgI2RlZmluZSBuZWVkcyB0byBiZSBzaGFy
ZWQKLS8vIHdpdGggUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tCisvLyBGSVhNRTogVGhlIGZvbGxv
d2luZyBzb2Z0IGxpbmtpbmcgYW5kICNkZWZpbmUgbmVlZHMgdG8gYmUgc2hhcmVkIHdpdGggUGxh
dGZvcm1QYXN0ZWJvYXJkSU9TLm1tIGFuZCBFZGl0b3JJT1MubW0KIAogU09GVF9MSU5LX0ZSQU1F
V09SSyhNb2JpbGVDb3JlU2VydmljZXMpCiAKLVNPRlRfTElOSyhNb2JpbGVDb3JlU2VydmljZXMs
IFVUVHlwZUNvbmZvcm1zVG8sIEJvb2xlYW4sIChDRlN0cmluZ1JlZiBpblVUSSwgQ0ZTdHJpbmdS
ZWYgaW5Db25mb3Jtc1RvVVRJKSwgKGluVVRJLCBpbkNvbmZvcm1zVG9VVEkpKQogU09GVF9MSU5L
KE1vYmlsZUNvcmVTZXJ2aWNlcywgVVRUeXBlQ3JlYXRlUHJlZmVycmVkSWRlbnRpZmllckZvclRh
ZywgQ0ZTdHJpbmdSZWYsIChDRlN0cmluZ1JlZiBpblRhZ0NsYXNzLCBDRlN0cmluZ1JlZiBpblRh
ZywgQ0ZTdHJpbmdSZWYgaW5Db25mb3JtaW5nVG9VVEkpLCAoaW5UYWdDbGFzcywgaW5UYWcsIGlu
Q29uZm9ybWluZ1RvVVRJKSkKIFNPRlRfTElOSyhNb2JpbGVDb3JlU2VydmljZXMsIFVUVHlwZUNv
cHlQcmVmZXJyZWRUYWdXaXRoQ2xhc3MsIENGU3RyaW5nUmVmLCAoQ0ZTdHJpbmdSZWYgaW5VVEks
IENGU3RyaW5nUmVmIGluVGFnQ2xhc3MpLCAoaW5VVEksIGluVGFnQ2xhc3MpKQogCkBAIC05MCwx
NiArODgsMzEgQEAgU09GVF9MSU5LX0NPTlNUQU5UKE1vYmlsZUNvcmVTZXJ2aWNlcywgawogI2Rl
ZmluZSBrVVRUeXBlUlRGRCBnZXRrVVRUeXBlUlRGRCgpCiAjZGVmaW5lIGtVVFR5cGVSVEYgZ2V0
a1VUVHlwZVJURigpCiAKLVNPRlRfTElOS19GUkFNRVdPUksoQXBwU3VwcG9ydCkKLVNPRlRfTElO
SyhBcHBTdXBwb3J0LCBDUFNoYXJlZFJlc291cmNlc0RpcmVjdG9yeSwgQ0ZTdHJpbmdSZWYsICh2
b2lkKSwgKCkpCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gRklYTUU6IERvZXMgdGhpcyBu
ZWVkIHRvIGJlIGRlY2xhcmVkIGluIHRoZSBoZWFkZXIgZmlsZT8KIE5TU3RyaW5nICpXZWJBcmNo
aXZlUGJvYXJkVHlwZSA9IEAiQXBwbGUgV2ViIEFyY2hpdmUgcGFzdGVib2FyZCB0eXBlIjsKIAor
Ly8gTWFraW5nIHRoaXMgbm9uLWlubGluZSBzbyB0aGF0IFdlYktpdCAyJ3MgZGVjb2RpbmcgZG9l
c24ndCBoYXZlIHRvIGluY2x1ZGUgU2hhcmVkQnVmZmVyLmguCitQYXN0ZWJvYXJkV2ViQ29udGVu
dDo6UGFzdGVib2FyZFdlYkNvbnRlbnQoKQoreworfQorCitQYXN0ZWJvYXJkV2ViQ29udGVudDo6
flBhc3RlYm9hcmRXZWJDb250ZW50KCkKK3sKK30KKyAgICAKKy8vIE1ha2luZyB0aGlzIG5vbi1p
bmxpbmUgc28gdGhhdCBXZWJLaXQgMidzIGRlY29kaW5nIGRvZXNuJ3QgaGF2ZSB0byBpbmNsdWRl
IEltYWdlLmguCitQYXN0ZWJvYXJkSW1hZ2U6OlBhc3RlYm9hcmRJbWFnZSgpCit7Cit9CisKK1Bh
c3RlYm9hcmRJbWFnZTo6flBhc3RlYm9hcmRJbWFnZSgpCit7Cit9CisKIFBhc3RlYm9hcmQ6OlBh
c3RlYm9hcmQoKQotICAgIDogbV9mcmFtZSgwKQorICAgIDogbV9jaGFuZ2VDb3VudChwbGF0Zm9y
bVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmNoYW5nZUNvdW50KCkpCiB7CiB9
CiAKQEAgLTQ5NSw2MCArNTA4LDQ0IEBAIHZvaWQgUGFzdGVib2FyZDo6Y2xlYXIoY29uc3QgU3Ry
aW5nJiB0eXAKICAgICBpZiAoIWNvY29hVHlwZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8g
RklYTUU6IFNob3VsZCB3cml0ZSB0aGlzIHdpdGggQHt9IHN5bnRheC4KLSAgICBSZXRhaW5QdHI8
TlNEaWN0aW9uYXJ5PiByZXByZXNlbnRhdGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlv
bmFyeSBhbGxvY10gaW5pdF0pOwotICAgIFtyZXByZXNlbnRhdGlvbnMuZ2V0KCkgc2V0VmFsdWU6
MCBmb3JLZXk6Y29jb2FUeXBlLmdldCgpXTsKLSAgICBtX2ZyYW1lLT5lZGl0b3IoKS5jbGllbnQo
KS0+d3JpdGVEYXRhVG9QYXN0ZWJvYXJkKHJlcHJlc2VudGF0aW9ucy5nZXQoKSk7CisgICAgcGxh
dGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT53cml0ZVRvUGFzdGVib2Fy
ZChjb2NvYVR5cGUuZ2V0KCksIFN0cmluZygpKTsKIH0KIAogdm9pZCBQYXN0ZWJvYXJkOjpjbGVh
cigpCiB7Ci0gICAgbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPndyaXRlRGF0YVRvUGFzdGVi
b2FyZChAe30pOworICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3ko
KS0+d3JpdGVUb1Bhc3RlYm9hcmQoU3RyaW5nKCksIFN0cmluZygpKTsKIH0KIAogU3RyaW5nIFBh
c3RlYm9hcmQ6OnJlYWRTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlKQogewotICAgIFJldGFpblB0
cjxOU1N0cmluZz4gY29jb2FUeXBlID0gY29jb2FUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKHR5
cGUpOworICAgIFBhc3RlYm9hcmRTdHJhdGVneSYgc3RyYXRlZ3kgPSAqcGxhdGZvcm1TdHJhdGVn
aWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpOwogCi0gICAgLy8gR3JhYiB0aGUgdmFsdWUgb2Zm
IHRoZSBwYXN0ZWJvYXJkIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNvY29hVHlwZS4KLSAgICBSZXRh
aW5QdHI8TlNBcnJheT4gcGFzdGVib2FyZEl0ZW0gPSBtX2ZyYW1lLT5lZGl0b3IoKS5jbGllbnQo
KS0+cmVhZERhdGFGcm9tUGFzdGVib2FyZChjb2NvYVR5cGUuZ2V0KCksIDApOworICAgIGludCBu
dW1iZXJPZkl0ZW1zID0gc3RyYXRlZ3kuZ2V0UGFzdGVib2FyZEl0ZW1zQ291bnQoKTsKIAotICAg
IGlmIChbcGFzdGVib2FyZEl0ZW0uZ2V0KCkgY291bnRdID09IDApCisgICAgaWYgKCFudW1iZXJP
Zkl0ZW1zKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBOU1N0cmluZyAqY29jb2FW
YWx1ZSA9IG5pbDsKLQotICAgIGlmIChbY29jb2FUeXBlLmdldCgpIGlzRXF1YWxUb1N0cmluZzoo
TlNTdHJpbmcgKilrVVRUeXBlVVJMXSkgewotICAgICAgICBpZCB2YWx1ZSA9IFtwYXN0ZWJvYXJk
SXRlbS5nZXQoKSBvYmplY3RBdEluZGV4OjBdOwotICAgICAgICBpZiAoIVt2YWx1ZSBpc0tpbmRP
ZkNsYXNzOltOU1VSTCBjbGFzc11dKSB7Ci0gICAgICAgICAgICBBU1NFUlQoW3ZhbHVlIGlzS2lu
ZE9mQ2xhc3M6W05TVVJMIGNsYXNzXV0pOwotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwot
ICAgICAgICB9Ci0gICAgICAgIE5TVVJMKiBhYnNvbHV0ZVVSTCA9IChOU1VSTCopdmFsdWU7Cisg
ICAgLy8gR3JhYiB0aGUgdmFsdWUgb2ZmIHRoZSBwYXN0ZWJvYXJkIGNvcnJlc3BvbmRpbmcgdG8g
dGhlIGNvY29hVHlwZS4KKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IGNvY29hVHlwZSA9IGNvY29h
VHlwZUZyb21IVE1MQ2xpcGJvYXJkVHlwZSh0eXBlKTsKIAotICAgICAgICBpZiAoYWJzb2x1dGVV
UkwpCi0gICAgICAgICAgICBjb2NvYVZhbHVlID0gW2Fic29sdXRlVVJMIGFic29sdXRlU3RyaW5n
XTsKLSAgICB9IGVsc2UgaWYgKFtjb2NvYVR5cGUuZ2V0KCkgaXNFcXVhbFRvU3RyaW5nOihOU1N0
cmluZyAqKWtVVFR5cGVUZXh0XSkgewotICAgICAgICBpZCB2YWx1ZSA9IFtwYXN0ZWJvYXJkSXRl
bS5nZXQoKSBvYmplY3RBdEluZGV4OjBdOwotICAgICAgICBpZiAoIVt2YWx1ZSBpc0tpbmRPZkNs
YXNzOltOU1N0cmluZyBjbGFzc11dKSB7Ci0gICAgICAgICAgICBBU1NFUlQoW3ZhbHVlIGlzS2lu
ZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pOwotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotICAgICAgICB9CisgICAgTlNTdHJpbmcgKmNvY29hVmFsdWUgPSBuaWw7CiAKLSAgICAgICAg
Y29jb2FWYWx1ZSA9IFsoTlNTdHJpbmcgKil2YWx1ZSBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5v
bmljYWxNYXBwaW5nXTsKKyAgICBpZiAoW2NvY29hVHlwZSBpc0VxdWFsVG9TdHJpbmc6KE5TU3Ry
aW5nICopa1VUVHlwZVVSTF0pIHsKKyAgICAgICAgS1VSTCB1cmwgPSBzdHJhdGVneS5yZWFkVVJM
RnJvbVBhc3RlYm9hcmQoMCwga1VUVHlwZVVSTCk7CisgICAgICAgIGlmICghdXJsLmlzTnVsbCgp
KQorICAgICAgICAgICAgY29jb2FWYWx1ZSA9IFsoTlNVUkwgKil1cmwgYWJzb2x1dGVTdHJpbmdd
OworICAgIH0gZWxzZSBpZiAoW2NvY29hVHlwZSBpc0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5nICop
a1VUVHlwZVRleHRdKSB7CisgICAgICAgIFN0cmluZyB2YWx1ZSA9IHN0cmF0ZWd5LnJlYWRTdHJp
bmdGcm9tUGFzdGVib2FyZCgwLCBrVVRUeXBlVGV4dCk7CisgICAgICAgIGlmICghdmFsdWUuaXNO
dWxsKCkpCisgICAgICAgICAgICBjb2NvYVZhbHVlID0gWyhOU1N0cmluZyAqKXZhbHVlIHByZWNv
bXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddOzsKICAgICB9IGVsc2UgaWYgKGNvY29h
VHlwZSkgewotICAgICAgICBBU1NFUlQoW3Bhc3RlYm9hcmRJdGVtLmdldCgpIGNvdW50XSA9PSAx
KTsKLSAgICAgICAgaWQgdmFsdWUgPSBbcGFzdGVib2FyZEl0ZW0uZ2V0KCkgb2JqZWN0QXRJbmRl
eDowXTsKLSAgICAgICAgaWYgKCFbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNEYXRhIGNsYXNzXV0p
IHsKLSAgICAgICAgICAgIEFTU0VSVChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNEYXRhIGNsYXNz
XV0pOwotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgICAgICB9Ci0gICAgICAgIGNv
Y29hVmFsdWUgPSBbW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOihOU0RhdGEgKil2YWx1
ZSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10gYXV0b3JlbGVhc2VdOworICAgICAgICBp
ZiAoUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gc3RyYXRlZ3kucmVhZEJ1ZmZlckZyb21Q
YXN0ZWJvYXJkKDAsIGNvY29hVHlwZS5nZXQoKSkpCisgICAgICAgICAgICBjb2NvYVZhbHVlID0g
W1tbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTpidWZmZXItPmNyZWF0ZU5TRGF0YSgpIGVu
Y29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSBhdXRvcmVsZWFzZV07CiAgICAgfQogCiAgICAg
Ly8gRW5mb3JjZSBjaGFuZ2VDb3VudCBvdXJzZWx2ZXMgZm9yIHNlY3VyaXR5LiBXZSBjaGVjayBh
ZnRlciByZWFkaW5nIGluc3RlYWQgb2YgYmVmb3JlIHRvIGJlCiAgICAgLy8gc3VyZSBpdCBkb2Vz
bid0IGNoYW5nZSBiZXR3ZWVuIG91ciB0ZXN0aW5nIHRoZSBjaGFuZ2UgY291bnQgYW5kIGFjY2Vz
c2luZyB0aGUgZGF0YS4KLSAgICBpZiAoY29jb2FWYWx1ZSAmJiBtX2NoYW5nZUNvdW50ID09IG1f
ZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT5wYXN0ZWJvYXJkQ2hhbmdlQ291bnQoKSkKKyAgICBp
ZiAoY29jb2FWYWx1ZSAmJiBtX2NoYW5nZUNvdW50ID09IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5w
YXN0ZWJvYXJkU3RyYXRlZ3koKS0+Y2hhbmdlQ291bnQoKSkKICAgICAgICAgcmV0dXJuIGNvY29h
VmFsdWU7CiAKICAgICByZXR1cm4gU3RyaW5nKCk7CkBAIC01ODAsMTkgKzU3Nyw4IEBAIGJvb2wg
UGFzdGVib2FyZDo6d3JpdGVTdHJpbmcoY29uc3QgU3RyaW4KICAgICBpZiAoIWNvY29hVHlwZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgTlNTdHJpbmcgKmNvY29hRGF0YSA9IGRhdGE7
Ci0gICAgUmV0YWluUHRyPE5TT2JqZWN0PiB2YWx1ZTsKKyAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMo
KS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPndyaXRlVG9QYXN0ZWJvYXJkKHR5cGUsIGRhdGEpOwog
Ci0gICAgaWYgKFtjb2NvYVR5cGUuZ2V0KCkgaXNFcXVhbFRvU3RyaW5nOihOU1N0cmluZyAqKWtV
VFR5cGVVUkxdKQotICAgICAgICB2YWx1ZSA9IGFkb3B0TlMoW1tOU1VSTCBhbGxvY10gaW5pdFdp
dGhTdHJpbmc6Y29jb2FEYXRhXSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIEV2ZXJ5IG90aGVy
IHR5cGUgd2UgaGFuZGxlIGdvZXMgb24gdGhlIHBhc3RlYm9hcmQgYXMgYSBzdHJpbmcuCi0gICAg
ICAgIHZhbHVlID0gY29jb2FEYXRhOwotICAgIH0KLQotICAgIFJldGFpblB0cjxOU0RpY3Rpb25h
cnk+IHJlcHJlc2VudGF0aW9ucyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9j
XSBpbml0XSk7Ci0gICAgW3JlcHJlc2VudGF0aW9ucy5nZXQoKSBzZXRWYWx1ZTp2YWx1ZS5nZXQo
KSBmb3JLZXk6Y29jb2FUeXBlLmdldCgpXTsKLSAgICBtX2ZyYW1lLT5lZGl0b3IoKS5jbGllbnQo
KS0+d3JpdGVEYXRhVG9QYXN0ZWJvYXJkKHJlcHJlc2VudGF0aW9ucy5nZXQoKSk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTYwMiw3ICs1ODgsNyBAQCBWZWN0b3I8U3RyaW5nPiBQYXN0ZWJv
YXJkOjp0eXBlcygpCiAKICAgICAvLyBFbmZvcmNlIGNoYW5nZUNvdW50IG91cnNlbHZlcyBmb3Ig
c2VjdXJpdHkuIFdlIGNoZWNrIGFmdGVyIHJlYWRpbmcgaW5zdGVhZCBvZiBiZWZvcmUgdG8gYmUK
ICAgICAvLyBzdXJlIGl0IGRvZXNuJ3QgY2hhbmdlIGJldHdlZW4gb3VyIHRlc3RpbmcgdGhlIGNo
YW5nZSBjb3VudCBhbmQgYWNjZXNzaW5nIHRoZSBkYXRhLgotICAgIGlmIChtX2NoYW5nZUNvdW50
ICE9IG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT5wYXN0ZWJvYXJkQ2hhbmdlQ291bnQoKSkK
KyAgICBpZiAobV9jaGFuZ2VDb3VudCAhPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2Fy
ZFN0cmF0ZWd5KCktPmNoYW5nZUNvdW50KCkpCiAgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5n
PigpOwogCiAgICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0JKHJl
dmlzaW9uIDE1NjU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBh
c3RlYm9hcmRJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2LTIwMTMgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMTAgKzM2LDEzIEBA
IFNPRlRfTElOS19DTEFTUyhVSUtpdCwgVUlQYXN0ZWJvYXJkKQogQGludGVyZmFjZSBVSVBhc3Rl
Ym9hcmQKICsgKFVJUGFzdGVib2FyZCAqKWdlbmVyYWxQYXN0ZWJvYXJkOwogLSAodm9pZClzZXRJ
dGVtczooTlNBcnJheSAqKWl0ZW1zOworQHByb3BlcnR5KHJlYWRvbmx5LG5vbmF0b21pYykgTlNJ
bnRlZ2VyIG51bWJlck9mSXRlbXM7CistIChOU0FycmF5ICopZGF0YUZvclBhc3RlYm9hcmRUeXBl
OihOU1N0cmluZyAqKXBhc3RlYm9hcmRUeXBlIGluSXRlbVNldDooTlNJbmRleFNldCAqKWl0ZW1T
ZXQ7CistIChOU0FycmF5ICopdmFsdWVzRm9yUGFzdGVib2FyZFR5cGU6KE5TU3RyaW5nICopcGFz
dGVib2FyZFR5cGUgaW5JdGVtU2V0OihOU0luZGV4U2V0ICopaXRlbVNldDsKKy0gKE5TSW50ZWdl
ciljaGFuZ2VDb3VudDsKIEBlbmQKIAotLy8gRklYTUU6IHRoZSBmb2xsb3dpbmcgc29mdCBsaW5r
aW5nIGFuZCAjZGVmaW5lIG5lZWRzIHRvIGJlIHNoYXJlZAotLy8gd2l0aCBQYXN0ZWJvYXJkSU9T
Lm1tLgorLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgc29mdCBsaW5raW5nIGFuZCAjZGVmaW5lIG5l
ZWRzIHRvIGJlIHNoYXJlZCB3aXRoIFBhc3RlYm9hcmRJT1MubW0uCiBTT0ZUX0xJTktfRlJBTUVX
T1JLKE1vYmlsZUNvcmVTZXJ2aWNlcykKIAogU09GVF9MSU5LX0NPTlNUQU5UKE1vYmlsZUNvcmVT
ZXJ2aWNlcywga1VUVHlwZVRleHQsIENGU3RyaW5nUmVmKQpAQCAtMTM2LDcgKzEzOSw3IEBAIGxv
bmcgUGxhdGZvcm1QYXN0ZWJvYXJkOjpzZXRTdHJpbmdGb3JUeXAKIAogbG9uZyBQbGF0Zm9ybVBh
c3RlYm9hcmQ6OmNoYW5nZUNvdW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gW21fcGFzdGVib2FyZCBjaGFuZ2VDb3VudF07CiB9CiAKIFN0cmluZyBQbGF0Zm9ybVBhc3Rl
Ym9hcmQ6OnVuaXF1ZU5hbWUoKQpAQCAtMTU2LDcgKzE1OSw3IEBAIHZvaWQgUGxhdGZvcm1QYXN0
ZWJvYXJkOjp3cml0ZShjb25zdCBQYXMKICAgICBpZiAoY29udGVudC5kYXRhSW5SVEZGb3JtYXQp
CiAgICAgICAgIFtyZXByZXNlbnRhdGlvbnMgc2V0VmFsdWU6Y29udGVudC5kYXRhSW5SVEZGb3Jt
YXQtPmNyZWF0ZU5TRGF0YSgpIGZvcktleTooTlNTdHJpbmcgKilrVVRUeXBlUlRGXTsKICAgICBb
cmVwcmVzZW50YXRpb25zIHNldFZhbHVlOmNvbnRlbnQuZGF0YUluU3RyaW5nRm9ybWF0IGZvcktl
eTooTlNTdHJpbmcgKilrVVRUeXBlVGV4dF07Ci0gICAgW21fcGFzdGVib2FyZCBzZXRJdGVtczpb
TlNBcnJheSBhcnJheVdpdGhPYmplY3Q6cmVwcmVzZW50YXRpb25zLmdldCgpXV07CisgICAgW21f
cGFzdGVib2FyZCBzZXRJdGVtczpAW3JlcHJlc2VudGF0aW9ucy5nZXQoKV1dOwogfQogCiB2b2lk
IFBsYXRmb3JtUGFzdGVib2FyZDo6d3JpdGUoY29uc3QgUGFzdGVib2FyZEltYWdlJiBwYXN0ZWJv
YXJkSW1hZ2UpCkBAIC0xNjYsMTQgKzE2OSw2OCBAQCB2b2lkIFBsYXRmb3JtUGFzdGVib2FyZDo6
d3JpdGUoY29uc3QgUGFzCiAgICAgICAgIFtyZXByZXNlbnRhdGlvbnMgc2V0T2JqZWN0OnBhc3Rl
Ym9hcmRJbWFnZS5pbWFnZS0+ZGF0YSgpLT5jcmVhdGVOU0RhdGEoKSBmb3JLZXk6cGFzdGVib2Fy
ZEltYWdlLnJlc291cmNlTUlNRVR5cGVdOwogICAgICAgICBbcmVwcmVzZW50YXRpb25zIHNldE9i
amVjdDooTlNTdHJpbmcgKilwYXN0ZWJvYXJkSW1hZ2UudXJsLnVybCBmb3JLZXk6KE5TU3RyaW5n
ICopa1VUVHlwZVVSTF07CiAgICAgfQotICAgIFttX3Bhc3RlYm9hcmQgc2V0SXRlbXM6W05TQXJy
YXkgYXJyYXlXaXRoT2JqZWN0OnJlcHJlc2VudGF0aW9ucy5nZXQoKV1dOworICAgIFttX3Bhc3Rl
Ym9hcmQgc2V0SXRlbXM6QFtyZXByZXNlbnRhdGlvbnMuZ2V0KCldXTsKIH0KIAotdm9pZCBQbGF0
Zm9ybVBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0IFN0cmluZyYgdGV4dCkKK3ZvaWQgUGxhdGZvcm1Q
YXN0ZWJvYXJkOjp3cml0ZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJp
bmcmIHRleHQpCiB7CiAgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gcmVwcmVzZW50YXRpb25z
ID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKLSAgICBbcmVw
cmVzZW50YXRpb25zIHNldFZhbHVlOnRleHQgZm9yS2V5OihOU1N0cmluZyAqKWtVVFR5cGVUZXh0
XTsKLSAgICBbbV9wYXN0ZWJvYXJkIHNldEl0ZW1zOltOU0FycmF5IGFycmF5V2l0aE9iamVjdDpy
ZXByZXNlbnRhdGlvbnMuZ2V0KCldXTsKKworICAgIGlmIChwYXN0ZWJvYXJkVHlwZSA9PSBTdHJp
bmcoa1VUVHlwZVVSTCkpCisgICAgICAgIFtyZXByZXNlbnRhdGlvbnMgc2V0VmFsdWU6W1tbTlNV
UkwgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnRleHRdIGF1dG9yZWxlYXNlXSBmb3JLZXk6cGFzdGVi
b2FyZFR5cGVdOworICAgIGVsc2UgaWYgKCFwYXN0ZWJvYXJkVHlwZS5pc051bGwoKSkKKyAgICAg
ICAgW3JlcHJlc2VudGF0aW9ucyBzZXRWYWx1ZTp0ZXh0IGZvcktleTpwYXN0ZWJvYXJkVHlwZV07
CisgICAgW21fcGFzdGVib2FyZCBzZXRJdGVtczpAW3JlcHJlc2VudGF0aW9ucy5nZXQoKV1dOwor
fQorCitpbnQgUGxhdGZvcm1QYXN0ZWJvYXJkOjpjb3VudCgpCit7CisgICAgcmV0dXJuIFttX3Bh
c3RlYm9hcmQgbnVtYmVyT2ZJdGVtc107Cit9CisKK1Bhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBQ
bGF0Zm9ybVBhc3RlYm9hcmQ6OnJlYWRCdWZmZXIoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmIHR5
cGUpCit7CisgICAgTlNJbmRleFNldCAqaW5kZXhTZXQgPSBbTlNJbmRleFNldCBpbmRleFNldFdp
dGhJbmRleDppbmRleF07CisKKyAgICBSZXRhaW5QdHI8TlNBcnJheT4gcGFzdGVib2FyZEl0ZW0g
PSBbbV9wYXN0ZWJvYXJkIGRhdGFGb3JQYXN0ZWJvYXJkVHlwZTp0eXBlIGluSXRlbVNldDppbmRl
eFNldF07CisKKyAgICBpZiAoIVtwYXN0ZWJvYXJkSXRlbS5nZXQoKSBjb3VudF0pCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OndyYXBOU0RhdGEoW3Bh
c3RlYm9hcmRJdGVtLmdldCgpIG9iamVjdEF0SW5kZXg6MF0pOworfQorCitTdHJpbmcgUGxhdGZv
cm1QYXN0ZWJvYXJkOjpyZWFkU3RyaW5nKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiB0eXBlKQor
eworICAgIE5TSW5kZXhTZXQgKmluZGV4U2V0ID0gW05TSW5kZXhTZXQgaW5kZXhTZXRXaXRoSW5k
ZXg6aW5kZXhdOworCisgICAgUmV0YWluUHRyPE5TQXJyYXk+IHBhc3RlYm9hcmRJdGVtID0gW21f
cGFzdGVib2FyZCB2YWx1ZXNGb3JQYXN0ZWJvYXJkVHlwZTp0eXBlIGluSXRlbVNldDppbmRleFNl
dF07CisKKyAgICBpZiAoIVtwYXN0ZWJvYXJkSXRlbS5nZXQoKSBjb3VudF0pCisgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKKworICAgIGlkIHZhbHVlID0gW3Bhc3RlYm9hcmRJdGVtLmdldCgpIG9i
amVjdEF0SW5kZXg6MF07CisgICAgQVNTRVJUKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmlu
ZyBjbGFzc11dKTsKKyAgICBpZiAoIVt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFz
c11dKSB7CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB9CisgICAgcmV0dXJuIFN0cmlu
Zyh2YWx1ZSk7Cit9CisKK0tVUkwgUGxhdGZvcm1QYXN0ZWJvYXJkOjpyZWFkVVJMKGludCBpbmRl
eCwgY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIE5TSW5kZXhTZXQgKmluZGV4U2V0ID0gW05T
SW5kZXhTZXQgaW5kZXhTZXRXaXRoSW5kZXg6aW5kZXhdOworCisgICAgUmV0YWluUHRyPE5TQXJy
YXk+IHBhc3RlYm9hcmRJdGVtID0gW21fcGFzdGVib2FyZCB2YWx1ZXNGb3JQYXN0ZWJvYXJkVHlw
ZTp0eXBlIGluSXRlbVNldDppbmRleFNldF07CisKKyAgICBpZiAoIVtwYXN0ZWJvYXJkSXRlbS5n
ZXQoKSBjb3VudF0pCisgICAgICAgIHJldHVybiBLVVJMKCk7CisKKyAgICBpZCB2YWx1ZSA9IFtw
YXN0ZWJvYXJkSXRlbS5nZXQoKSBvYmplY3RBdEluZGV4OjBdOworICAgIGlmICghW3ZhbHVlIGlz
S2luZE9mQ2xhc3M6W05TVVJMIGNsYXNzXV0pIHsKKyAgICAgICAgQVNTRVJUKFt2YWx1ZSBpc0tp
bmRPZkNsYXNzOltOU1VSTCBjbGFzc11dKTsKKyAgICAgICAgcmV0dXJuIEtVUkwoKTsKKyAgICB9
CisgICAgcmV0dXJuIChOU1VSTCAqKXZhbHVlOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQkocmV2aXNpb24gMTU2NTY0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTcyLDYgKzcyLDI0IEBAIGNvbnN0IGNoYXIgV2ViU21hcnRQYXN0ZVBib2FyZFR5cGVb
XSA9ICIKIGNvbnN0IGNoYXIgV2ViVVJMUGJvYXJkVHlwZVtdID0gInB1YmxpYy51cmwiOwogY29u
c3QgY2hhciBXZWJVUkxzV2l0aFRpdGxlc1Bib2FyZFR5cGVbXSA9ICJXZWJVUkxzV2l0aFRpdGxl
c1Bib2FyZFR5cGUiOwogCisvLyBNYWtpbmcgdGhpcyBub24taW5saW5lIHNvIHRoYXQgV2ViS2l0
IDIncyBkZWNvZGluZyBkb2Vzbid0IGhhdmUgdG8gaW5jbHVkZSBTaGFyZWRCdWZmZXIuaC4KK1Bh
c3RlYm9hcmRXZWJDb250ZW50OjpQYXN0ZWJvYXJkV2ViQ29udGVudCgpCit7Cit9CisKK1Bhc3Rl
Ym9hcmRXZWJDb250ZW50Ojp+UGFzdGVib2FyZFdlYkNvbnRlbnQoKQoreworfQorCisvLyBNYWtp
bmcgdGhpcyBub24taW5saW5lIHNvIHRoYXQgV2ViS2l0IDIncyBkZWNvZGluZyBkb2Vzbid0IGhh
dmUgdG8gaW5jbHVkZSBJbWFnZS5oLgorUGFzdGVib2FyZEltYWdlOjpQYXN0ZWJvYXJkSW1hZ2Uo
KQoreworfQorCitQYXN0ZWJvYXJkSW1hZ2U6On5QYXN0ZWJvYXJkSW1hZ2UoKQoreworfQorCiBz
dGF0aWMgY29uc3QgVmVjdG9yPFN0cmluZz4gd3JpdGFibGVUeXBlc0ZvclVSTCgpCiB7CiAgICAg
VmVjdG9yPFN0cmluZz4gdHlwZXM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
UGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0JKHJldmlzaW9uIDE1NjU2NCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbXBvcnQgIkNvbG9yLmgiCiAjaW1wb3J0
ICJVUkwuaCIKICNpbXBvcnQgIlBsYXRmb3JtUGFzdGVib2FyZC5oIgorI2ltcG9ydCAiU2hhcmVk
QnVmZmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNp
b24gMTU2NTcxKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMTMtMDktMjcgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxl
LmNvbT4KKworICAgICAgICBVcHN0cmVhbSBjaGFuZ2VzIHRvIFBhc3RlYm9hcmQgaW1wbGVtZW50
YXRpb24gZm9yIGlPUy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyMTgxOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHA6CisgICAgICAgIChDb3Jl
SVBDOjpkZWNvZGVTaGFyZWRCdWZmZXIpOgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1l
bnRDb2RlcnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29udGV4dC5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJDb250ZXh0Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9t
YWMvV2ViQ29udGV4dE1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6d3JpdGVX
ZWJDb250ZW50VG9QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6d3Jp
dGVJbWFnZVRvUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OndyaXRl
U3RyaW5nVG9QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6cmVhZFN0
cmluZ0Zyb21QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6cmVhZFVS
TEZyb21QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6cmVhZEJ1ZmZl
ckZyb21QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6Z2V0UGFzdGVi
b2FyZEl0ZW1zQ291bnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJh
dGVnaWVzOjp3cml0ZVRvUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6Z2V0UGFzdGVib2FyZEl0ZW1zQ291bnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnJlYWRCdWZmZXJGcm9tUGFzdGVib2FyZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6cmVhZFVSTEZyb21QYXN0ZWJvYXJkKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpyZWFkU3RyaW5nRnJvbVBh
c3RlYm9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNoYW5n
ZUNvdW50KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3Jt
U3RyYXRlZ2llcy5oOgorCiAyMDEzLTA5LTI3ICBSYWxwaCBUaG9tYXMgIDxyYWxwaHRAZ21haWwu
Y29tPgogCiAgICAgICAgIFtXSzJdW0Nvb3JkaW5hdGVkR3JhcGhpY3NdIGZpeCBidWlsZCBhZnRl
ciByMTU2NTYwCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzLmNwcAkocmV2aXNpb24gMTU2NTY0KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVk
L1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5MCw2ICs3OTAs
NyBAQCBib29sIEFyZ3VtZW50Q29kZXI8RGF0YWJhc2VEZXRhaWxzPjo6ZGVjCiAjZW5kaWYKIAog
I2lmIFBMQVRGT1JNKElPUykKKwogc3RhdGljIHZvaWQgZW5jb2RlU2hhcmVkQnVmZmVyKEFyZ3Vt
ZW50RW5jb2RlciYgZW5jb2RlciwgU2hhcmVkQnVmZmVyKiBidWZmZXIpCiB7CiAgICAgU2hhcmVk
TWVtb3J5OjpIYW5kbGUgaGFuZGxlOwpAQCAtODE0LDcgKzgxNSw3IEBAIHN0YXRpYyBib29sIGRl
Y29kZVNoYXJlZEJ1ZmZlcihBcmd1bWVudEQKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgICAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnlCdWZmZXIgPSBTaGFyZWRN
ZW1vcnk6OmNyZWF0ZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOwotICAgICAgICBi
dWZmZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyICo+
KHNoYXJlZE1lbW9yeUJ1ZmZlci0+ZGF0YSgpKSwgYnVmZmVyU2l6ZSk7CisgICAgICAgIGJ1ZmZl
ciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihzaGFy
ZWRNZW1vcnlCdWZmZXItPmRhdGEoKSksIGJ1ZmZlclNpemUpOwogICAgIH0KIAogICAgIHJldHVy
biB0cnVlOwpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuaAkocmV2aXNpb24gMTU2NTY0KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNv
cmVBcmd1bWVudENvZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICBzdHJ1Y3QgRmlsZUNob29zZXJTZXR0aW5nczsKICAgICBzdHJ1
Y3QgR3JhbW1hckRldGFpbDsKICAgICBzdHJ1Y3QgTWltZUNsYXNzSW5mbzsKKyAgICBzdHJ1Y3Qg
UGFzdGVib2FyZEltYWdlOworICAgIHN0cnVjdCBQYXN0ZWJvYXJkV2ViQ29udGVudDsKICAgICBz
dHJ1Y3QgUGx1Z2luSW5mbzsKICAgICBzdHJ1Y3QgVGV4dENoZWNraW5nUmVzdWx0OwogICAgIHN0
cnVjdCBWaWV3cG9ydEF0dHJpYnV0ZXM7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJD
b250ZXh0LmgJKHJldmlzaW9uIDE1NjU2NCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDYgQEAKICNpbmNsdWRlICJX
ZWJIaXN0b3J5Q2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVk
ZSA8V2ViQ29yZS9MaW5rSGFzaC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGFzdGVib2FyZC5oPgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtMzIxLDkgKzMyMCwxMyBAQCBwcml2YXRlOgogCiAjaWYg
UExBVEZPUk0oTUFDKQogI2lmIFBMQVRGT1JNKElPUykKLSAgICB2b2lkIHdyaXRlV2ViQ29udGVu
dFRvUGFzdGVib2FyZChjb25zdCBXZWJDb3JlOjpQYXN0ZWJvYXJkV2ViQ29udGVudCYgY29udGVu
dCk7Ci0gICAgdm9pZCB3cml0ZUltYWdlVG9QYXN0ZWJvYXJkKGNvbnN0IFdlYkNvcmU6OlBhc3Rl
Ym9hcmRJbWFnZSYgcGFzdGVib2FyZEltYWdlKTsKLSAgICB2b2lkIHdyaXRlU3RyaW5nVG9QYXN0
ZWJvYXJkKGNvbnN0IFN0cmluZyYgdGV4dCk7CisgICAgdm9pZCB3cml0ZVdlYkNvbnRlbnRUb1Bh
c3RlYm9hcmQoY29uc3QgV2ViQ29yZTo6UGFzdGVib2FyZFdlYkNvbnRlbnQmKTsKKyAgICB2b2lk
IHdyaXRlSW1hZ2VUb1Bhc3RlYm9hcmQoY29uc3QgV2ViQ29yZTo6UGFzdGVib2FyZEltYWdlJik7
CisgICAgdm9pZCB3cml0ZVN0cmluZ1RvUGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmRUeXBlLCBjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHJlYWRTdHJpbmdGcm9tUGFzdGVib2Fy
ZCh1aW50NjRfdCBpbmRleCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgV1RGOjpTdHJp
bmcmKTsKKyAgICB2b2lkIHJlYWRVUkxGcm9tUGFzdGVib2FyZCh1aW50NjRfdCBpbmRleCwgY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgU3RyaW5nJik7CisgICAgdm9pZCByZWFkQnVmZmVy
RnJvbVBhc3RlYm9hcmQodWludDY0X3QgaW5kZXgsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5
cGUsIFNoYXJlZE1lbW9yeTo6SGFuZGxlJiwgdWludDY0X3QmIHNpemUpOworICAgIHZvaWQgZ2V0
UGFzdGVib2FyZEl0ZW1zQ291bnQodWludDY0X3QmIGl0ZW1zQ291bnQpOwogI2VuZGlmCiAgICAg
dm9pZCBnZXRQYXN0ZWJvYXJkVHlwZXMoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgVmVj
dG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcyk7CiAgICAgdm9pZCBnZXRQYXN0ZWJvYXJkUGF0
aG5hbWVzRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmRUeXBlLCBWZWN0b3I8U3RyaW5nPiYgcGF0aG5hbWVzKTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0Lm1lc3NhZ2VzLmluCShyZXZpc2lv
biAxNTY1NjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5tZXNzYWdl
cy5pbgkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsMTEgQEAgbWVzc2FnZXMgLT4gV2ViQ29u
dGV4dCBMZWdhY3lSZWNlaXZlciB7CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIFdyaXRlV2ViQ29u
dGVudFRvUGFzdGVib2FyZChXZWJDb3JlOjpQYXN0ZWJvYXJkV2ViQ29udGVudCBjb250ZW50KQog
ICAgIFdyaXRlSW1hZ2VUb1Bhc3RlYm9hcmQoV2ViQ29yZTo6UGFzdGVib2FyZEltYWdlIHBhc3Rl
Ym9hcmRJbWFnZSkKLSAgICBXcml0ZVN0cmluZ1RvUGFzdGVib2FyZChXVEY6OlN0cmluZyB0ZXh0
KQorICAgIFdyaXRlU3RyaW5nVG9QYXN0ZWJvYXJkKFdURjo6U3RyaW5nIHBhc3RlYm9hcmRUeXBl
LCBXVEY6OlN0cmluZyB0ZXh0KSAKKyAgICBSZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQodWludDY0
X3QgaW5kZXgsIFdURjo6U3RyaW5nIHBhc3RlYm9hcmRUeXBlKSAtPiAoV1RGOjpTdHJpbmcgc3Ry
aW5nKQorICAgIFJlYWRVUkxGcm9tUGFzdGVib2FyZCh1aW50NjRfdCBpbmRleCwgV1RGOjpTdHJp
bmcgcGFzdGVib2FyZFR5cGUpIC0+IChXVEY6OlN0cmluZyBzdHJpbmcpCisgICAgUmVhZEJ1ZmZl
ckZyb21QYXN0ZWJvYXJkKHVpbnQ2NF90IGluZGV4LCBXVEY6OlN0cmluZyBwYXN0ZWJvYXJkVHlw
ZSkgLT4gKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlLCB1aW50NjRfdCBzaXpl
KQorICAgIEdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCkgLT4gKHVpbnQ2NF90IGl0ZW1zQ291bnQp
CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9tYWMvV2ViQ29udGV4dE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNYWMubW0JKHJldmlzaW9uIDE1NjU2NCkKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMzgsNiArMzgsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtUGFz
dGVib2FyZC5oPgorI2ltcG9ydCA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KICNpbXBvcnQgPHN5
cy9wYXJhbS5oPgogCiAjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKQEAgLTQ1NiwyMCArNDU3
LDQ3IEBAIHZvaWQgV2ViQ29udGV4dDo6c2V0UGFzdGVib2FyZEJ1ZmZlckZvclQKIH0KIAogI2lm
IFBMQVRGT1JNKElPUykKLXZvaWQgV2ViQ29udGV4dDo6d3JpdGVXZWJDb250ZW50VG9QYXN0ZWJv
YXJkKGNvbnN0IFdlYkNvcmU6OlBhc3RlYm9hcmRXZWJDb250ZW50ICZjb250ZW50KQordm9pZCBX
ZWJDb250ZXh0Ojp3cml0ZVdlYkNvbnRlbnRUb1Bhc3RlYm9hcmQoY29uc3QgV2ViQ29yZTo6UGFz
dGVib2FyZFdlYkNvbnRlbnQmIGNvbnRlbnQpCiB7CiAgICAgUGxhdGZvcm1QYXN0ZWJvYXJkKCku
d3JpdGUoY29udGVudCk7CiB9CiAKLXZvaWQgV2ViQ29udGV4dDo6d3JpdGVJbWFnZVRvUGFzdGVi
b2FyZChjb25zdCBXZWJDb3JlOjpQYXN0ZWJvYXJkSW1hZ2UgJnBhc3RlYm9hcmRJbWFnZSkKK3Zv
aWQgV2ViQ29udGV4dDo6d3JpdGVJbWFnZVRvUGFzdGVib2FyZChjb25zdCBXZWJDb3JlOjpQYXN0
ZWJvYXJkSW1hZ2UmIHBhc3RlYm9hcmRJbWFnZSkKIHsKICAgICBQbGF0Zm9ybVBhc3RlYm9hcmQo
KS53cml0ZShwYXN0ZWJvYXJkSW1hZ2UpOwogfQogCi12b2lkIFdlYkNvbnRleHQ6OndyaXRlU3Ry
aW5nVG9QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgdGV4dCkKK3ZvaWQgV2ViQ29udGV4dDo6d3Jp
dGVTdHJpbmdUb1Bhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3Qg
U3RyaW5nJiB0ZXh0KQogewotICAgIFBsYXRmb3JtUGFzdGVib2FyZCgpLndyaXRlKHRleHQpOwor
ICAgIFBsYXRmb3JtUGFzdGVib2FyZCgpLndyaXRlKHBhc3RlYm9hcmRUeXBlLCB0ZXh0KTsKIH0K
Kwordm9pZCBXZWJDb250ZXh0OjpyZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQodWludDY0X3QgaW5k
ZXgsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIFdURjo6U3RyaW5nJiB2YWx1ZSkKK3sK
KyAgICB2YWx1ZSA9IFBsYXRmb3JtUGFzdGVib2FyZCgpLnJlYWRTdHJpbmcoaW5kZXgsIHBhc3Rl
Ym9hcmRUeXBlKTsKK30KKwordm9pZCBXZWJDb250ZXh0OjpyZWFkVVJMRnJvbVBhc3RlYm9hcmQo
dWludDY0X3QgaW5kZXgsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIFN0cmluZyYgdXJs
KQoreworICAgIHVybCA9IFBsYXRmb3JtUGFzdGVib2FyZCgpLnJlYWRVUkwoaW5kZXgsIHBhc3Rl
Ym9hcmRUeXBlKTsKK30KKwordm9pZCBXZWJDb250ZXh0OjpyZWFkQnVmZmVyRnJvbVBhc3RlYm9h
cmQodWludDY0X3QgaW5kZXgsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIFNoYXJlZE1l
bW9yeTo6SGFuZGxlJiBoYW5kbGUsIHVpbnQ2NF90JiBzaXplKQoreworICAgIFJlZlB0cjxTaGFy
ZWRCdWZmZXI+IGJ1ZmZlciA9IFBsYXRmb3JtUGFzdGVib2FyZCgpLnJlYWRCdWZmZXIoaW5kZXgs
IHBhc3RlYm9hcmRUeXBlKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAg
IHNpemUgPSBidWZmZXItPnNpemUoKTsKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRN
ZW1vcnlCdWZmZXIgPSBTaGFyZWRNZW1vcnk6OmNyZWF0ZShzaXplKTsKKyAgICBtZW1jcHkoc2hh
cmVkTWVtb3J5QnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+ZGF0YSgpLCBzaXplKTsKKyAgICBzaGFy
ZWRNZW1vcnlCdWZmZXItPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9u
bHkpOworfQorCit2b2lkIFdlYkNvbnRleHQ6OmdldFBhc3RlYm9hcmRJdGVtc0NvdW50KHVpbnQ2
NF90JiBpdGVtc0NvdW50KQoreworICAgIGl0ZW1zQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQo
KS5jb3VudCgpOworfQorCiAjZW5kaWYKIAogdm9pZCBXZWJDb250ZXh0OjpzZXRQcm9jZXNzU3Vw
cHJlc3Npb25FbmFibGVkKGJvb2wgZW5hYmxlZCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3Jt
U3RyYXRlZ2llcy5jcHAJKHJldmlzaW9uIDE1NjU2NCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTA4LDE1ICs1MDgsNjAgQEAgdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6Ondy
aXRlVG9QYXN0ZQogICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkNvbnRleHQ6OldyaXRlV2ViQ29udGVudFRvUGFzdGVi
b2FyZChjb250ZW50KSwgMCk7CiB9CiAKLXZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjp3cml0
ZVRvUGFzdGVib2FyZChjb25zdCBXZWJDb3JlOjpQYXN0ZWJvYXJkSW1hZ2UmIHBhc3RlYm9hcmRJ
bWFnZSkKK3ZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjp3cml0ZVRvUGFzdGVib2FyZChjb25z
dCBXZWJDb3JlOjpQYXN0ZWJvYXJkSW1hZ2UmIGltYWdlKQogewotICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkNvbnRl
eHQ6OldyaXRlSW1hZ2VUb1Bhc3RlYm9hcmQocGFzdGVib2FyZEltYWdlKSwgMCk7CisgICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6V2ViQ29udGV4dDo6V3JpdGVJbWFnZVRvUGFzdGVib2FyZChpbWFnZSksIDApOwogfQogCi12
b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6d3JpdGVUb1Bhc3RlYm9hcmQoY29uc3QgU3RyaW5n
JiB0ZXh0KQordm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OndyaXRlVG9QYXN0ZWJvYXJkKGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKLSAgICBX
ZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJDb250ZXh0OjpXcml0ZVN0cmluZ1RvUGFzdGVib2FyZCh0ZXh0KSwgMCk7CisgICAg
V2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6V2ViQ29udGV4dDo6V3JpdGVTdHJpbmdUb1Bhc3RlYm9hcmQocGFzdGVib2FyZFR5cGUs
IHRleHQpLCAwKTsKIH0KKworaW50IFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0UGFzdGVib2Fy
ZEl0ZW1zQ291bnQoKQoreworICAgIHVpbnQ2NF90IGl0ZW1zQ291bnQ7CisgICAgV2ViUHJvY2Vz
czo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6
OldlYkNvbnRleHQ6OkdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCksCisgICAgICAgIE1lc3NhZ2Vz
OjpXZWJDb250ZXh0OjpHZXRQYXN0ZWJvYXJkSXRlbXNDb3VudDo6UmVwbHkoaXRlbXNDb3VudCks
IDApOworICAgIHJldHVybiBpdGVtc0NvdW50OworfQorCitQYXNzUmVmUHRyPFdlYkNvcmU6OlNo
YXJlZEJ1ZmZlcj4gV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpyZWFkQnVmZmVyRnJvbVBhc3RlYm9h
cmQoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKQoreworICAgIFNoYXJl
ZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKKyAgICB1aW50NjRfdCBzaXplID0gMDsKKyAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNz
YWdlczo6V2ViQ29udGV4dDo6UmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJkKGluZGV4LCBwYXN0ZWJv
YXJkVHlwZSksCisgICAgICAgIE1lc3NhZ2VzOjpXZWJDb250ZXh0OjpSZWFkQnVmZmVyRnJvbVBh
c3RlYm9hcmQ6OlJlcGx5KGhhbmRsZSwgc2l6ZSksIDApOworICAgIGlmIChoYW5kbGUuaXNOdWxs
KCkpCisgICAgICAgIHJldHVybiAwOworICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1l
bW9yeUJ1ZmZlciA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpS
ZWFkT25seSk7CisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIgKj4oc2hhcmVkTWVtb3J5QnVmZmVyLT5kYXRhKCkpLCBzaXplKTsKK30KKwor
V2ViQ29yZTo6S1VSTCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnJlYWRVUkxGcm9tUGFzdGVib2Fy
ZChpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpCit7CisgICAgU3RyaW5n
IHVybFN0cmluZzsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViQ29udGV4dDo6UmVhZFVSTEZyb21QYXN0ZWJv
YXJkKGluZGV4LCBwYXN0ZWJvYXJkVHlwZSksCisgICAgICAgIE1lc3NhZ2VzOjpXZWJDb250ZXh0
OjpSZWFkVVJMRnJvbVBhc3RlYm9hcmQ6OlJlcGx5KHVybFN0cmluZyksIDApOworICAgIHJldHVy
biBLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsU3RyaW5nKTsKK30KKworU3RyaW5nIFdlYlBsYXRm
b3JtU3RyYXRlZ2llczo6cmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKGludCBpbmRleCwgY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSkKK3sKKyAgICBTdHJpbmcgdmFsdWU7CisgICAgV2ViUHJv
Y2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2Fn
ZXM6OldlYkNvbnRleHQ6OlJlYWRTdHJpbmdGcm9tUGFzdGVib2FyZChpbmRleCwgcGFzdGVib2Fy
ZFR5cGUpLAorICAgICAgICBNZXNzYWdlczo6V2ViQ29udGV4dDo6UmVhZFN0cmluZ0Zyb21QYXN0
ZWJvYXJkOjpSZXBseSh2YWx1ZSksIDApOworICAgIHJldHVybiB2YWx1ZTsKK30KKworbG9uZyBX
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNoYW5nZUNvdW50KCkKK3sKKyAgICB1aW50NjRfdCBjaGFu
Z2VDb3VudDsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViQ29udGV4dDo6R2V0UGFzdGVib2FyZENoYW5nZUNv
dW50KFN0cmluZygpKSwKKyAgICAgICAgTWVzc2FnZXM6OldlYkNvbnRleHQ6OkdldFBhc3RlYm9h
cmRDaGFuZ2VDb3VudDo6UmVwbHkoY2hhbmdlQ291bnQpLCAwKTsKKyAgICByZXR1cm4gY2hhbmdl
Q291bnQ7Cit9CisKICNlbmRpZgogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0
cmF0ZWdpZXMuaAkocmV2aXNpb24gMTU2NTY0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtOTYsOSArOTYsMTQgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShNQUMpCiAgICAgLy8gV2Vi
Q29yZTo6UGFzdGVib2FyZFN0cmF0ZWd5CiAjaWYgUExBVEZPUk0oSU9TKQotICAgIHZpcnR1YWwg
dm9pZCB3cml0ZVRvUGFzdGVib2FyZChjb25zdCBXZWJDb3JlOjpQYXN0ZWJvYXJkV2ViQ29udGVu
dCYgY29udGVudCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHdyaXRlVG9QYXN0ZWJvYXJk
KGNvbnN0IFdlYkNvcmU6OlBhc3RlYm9hcmRJbWFnZSYgcGFzdGVib2FyZEltYWdlKSBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIHZvaWQgd3JpdGVUb1Bhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiB0ZXh0
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVUb1Bhc3RlYm9hcmQoY29uc3QgV2Vi
Q29yZTo6UGFzdGVib2FyZFdlYkNvbnRlbnQmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQg
d3JpdGVUb1Bhc3RlYm9hcmQoY29uc3QgV2ViQ29yZTo6UGFzdGVib2FyZEltYWdlJikgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIHdyaXRlVG9QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgaW50IGdl
dFBhc3RlYm9hcmRJdGVtc0NvdW50KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJpbmcgcmVh
ZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
VHlwZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1
ZmZlcj4gcmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJkKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkVHlwZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpLVVJMIHJlYWRV
UkxGcm9tUGFzdGVib2FyZChpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUp
IE9WRVJSSURFOworICAgIHZpcnR1YWwgbG9uZyBjaGFuZ2VDb3VudCgpIE9WRVJSSURFOwogI2Vu
ZGlmCiAgICAgdmlydHVhbCB2b2lkIGdldFR5cGVzKFZlY3RvcjxTdHJpbmc+JiB0eXBlcywgY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gYnVmZmVyRm9yVHlwZShjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjU3MSkKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEzLTA5LTI3ICBF
bnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgVXBzdHJlYW0gY2hh
bmdlcyB0byBQYXN0ZWJvYXJkIGltcGxlbWVudGF0aW9uIGZvciBpT1MuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE4MTgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlBs
YXRmb3JtU3RyYXRlZ2llcy5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3Jt
U3RyYXRlZ2llcy5tbToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6d3JpdGVUb1Bh
c3RlYm9hcmQpOgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRQYXN0ZWJvYXJk
SXRlbXNDb3VudCk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnJlYWRCdWZmZXJG
cm9tUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnJlYWRVUkxG
cm9tUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnJlYWRTdHJp
bmdGcm9tUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNoYW5n
ZUNvdW50KToKKwogMjAxMy0wOS0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgcmVuYW1lIEtVUkwgdG8gVVJMCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAkocmV2aXNp
b24gMTU2NTY0KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZv
cm1TdHJhdGVnaWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDkgKzI5LDYgQEAKICNpbmNsdWRl
IDxXZWJDb3JlL0Nvb2tpZXNTdHJhdGVneS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGF0YWJhc2VT
dHJhdGVneS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTG9hZGVyU3RyYXRlZ3kuaD4KLSNpZiBQTEFU
Rk9STShJT1MpCi0jaW5jbHVkZSA8V2ViQ29yZS9QYXN0ZWJvYXJkLmg+Ci0jZW5kaWYKICNpbmNs
dWRlIDxXZWJDb3JlL1Bhc3RlYm9hcmRTdHJhdGVneS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxh
dGZvcm1TdHJhdGVnaWVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5TdHJhdGVneS5oPgpA
QCAtMzksNiArMzYsOSBAQAogI2luY2x1ZGUgPFdlYkNvcmUvU3RvcmFnZVN0cmF0ZWd5Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9WaXNpdGVkTGlua1N0cmF0ZWd5Lmg+CiAKK3N0cnVjdCBQYXN0ZWJv
YXJkSW1hZ2U7CitzdHJ1Y3QgUGFzdGVib2FyZFdlYkNvbnRlbnQ7CisKIGNsYXNzIFdlYlBsYXRm
b3JtU3RyYXRlZ2llcyA6IHB1YmxpYyBXZWJDb3JlOjpQbGF0Zm9ybVN0cmF0ZWdpZXMsIHByaXZh
dGUgV2ViQ29yZTo6Q29va2llc1N0cmF0ZWd5LCBwcml2YXRlIFdlYkNvcmU6OkRhdGFiYXNlU3Ry
YXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6TG9hZGVyU3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6
UGFzdGVib2FyZFN0cmF0ZWd5LCBwcml2YXRlIFdlYkNvcmU6OlBsdWdpblN0cmF0ZWd5LCBwcml2
YXRlIFdlYkNvcmU6OlNoYXJlZFdvcmtlclN0cmF0ZWd5LCBwcml2YXRlIFdlYkNvcmU6OlN0b3Jh
Z2VTdHJhdGVneSwgcHJpdmF0ZSBXZWJDb3JlOjpWaXNpdGVkTGlua1N0cmF0ZWd5IHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplSWZOZWNlc3NhcnkoKTsKQEAgLTgzLDkgKzgz
LDE0IEBAIHByaXZhdGU6CiAgICAgCiAgICAgLy8gV2ViQ29yZTo6UGFzdGVib2FyZFN0cmF0ZWd5
CiAjaWYgUExBVEZPUk0oSU9TKQotICAgIHZpcnR1YWwgdm9pZCB3cml0ZVRvUGFzdGVib2FyZChj
b25zdCBXZWJDb3JlOjpQYXN0ZWJvYXJkV2ViQ29udGVudCYgY29udGVudCkgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCB2b2lkIHdyaXRlVG9QYXN0ZWJvYXJkKGNvbnN0IFdlYkNvcmU6OlBhc3RlYm9h
cmRJbWFnZSYgcGFzdGVib2FyZEltYWdlKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgd3Jp
dGVUb1Bhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiB0ZXh0KSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgd3JpdGVUb1Bhc3RlYm9hcmQoY29uc3QgV2ViQ29yZTo6UGFzdGVib2FyZFdlYkNvbnRl
bnQmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVUb1Bhc3RlYm9hcmQoY29uc3Qg
V2ViQ29yZTo6UGFzdGVib2FyZEltYWdlJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHdy
aXRlVG9QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmlu
ZyYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgaW50IGdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCkg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJpbmcgcmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKGlu
dCBpbmRleCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSkgT1ZFUlJJREU7CisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gcmVhZEJ1ZmZlckZyb21QYXN0
ZWJvYXJkKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSkgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBXZWJDb3JlOjpLVVJMIHJlYWRVUkxGcm9tUGFzdGVib2FyZChpbnQgaW5k
ZXgsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
bG9uZyBjaGFuZ2VDb3VudCgpIE9WRVJSSURFOwogI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGdl
dFR5cGVzKFZlY3RvcjxTdHJpbmc+JiB0eXBlcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFt
ZSkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZl
cj4gYnVmZmVyRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW0JKHJl
dmlzaW9uIDE1NjU2NCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBs
YXRmb3JtU3RyYXRlZ2llcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2lt
cG9ydCA8V2ViQ29yZS9QYWdlR3JvdXAuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1Db29r
aWVKYXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1QYXN0ZWJvYXJkLmg+CisjaW1wb3J0
IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9TdWJmcmFtZUxvYWRl
ci5oPgogI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CiAKQEAgLTIzMiwxMyArMjMz
LDM5IEBAIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjp3cml0ZVRvUGFzdGUKICAgICBQbGF0
Zm9ybVBhc3RlYm9hcmQoKS53cml0ZShjb250ZW50KTsKIH0KIAotdm9pZCBXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXM6OndyaXRlVG9QYXN0ZWJvYXJkKGNvbnN0IFdlYkNvcmU6OlBhc3RlYm9hcmRJbWFn
ZSYgcGFzdGVib2FyZEltYWdlKQordm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OndyaXRlVG9Q
YXN0ZWJvYXJkKGNvbnN0IFdlYkNvcmU6OlBhc3RlYm9hcmRJbWFnZSYgaW1hZ2UpCiB7Ci0gICAg
UGxhdGZvcm1QYXN0ZWJvYXJkKCkud3JpdGUocGFzdGVib2FyZEltYWdlKTsKKyAgICBQbGF0Zm9y
bVBhc3RlYm9hcmQoKS53cml0ZShpbWFnZSk7CiB9CiAKLXZvaWQgV2ViUGxhdGZvcm1TdHJhdGVn
aWVzOjp3cml0ZVRvUGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHRleHQpCit2b2lkIFdlYlBsYXRm
b3JtU3RyYXRlZ2llczo6d3JpdGVUb1Bhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
VHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0KQogewotICAgIFBsYXRmb3JtUGFzdGVib2FyZCgpLndy
aXRlKHRleHQpOworICAgIFBsYXRmb3JtUGFzdGVib2FyZCgpLndyaXRlKHBhc3RlYm9hcmRUeXBl
LCB0ZXh0KTsKIH0KKworaW50IFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0UGFzdGVib2FyZEl0
ZW1zQ291bnQoKQoreworICAgIHJldHVybiBQbGF0Zm9ybVBhc3RlYm9hcmQoKS5jb3VudCgpOwor
fQorCitQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gV2ViUGxhdGZvcm1TdHJhdGVn
aWVzOjpyZWFkQnVmZmVyRnJvbVBhc3RlYm9hcmQoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmIHR5
cGUpCit7CisgICAgcmV0dXJuIFBsYXRmb3JtUGFzdGVib2FyZCgpLnJlYWRCdWZmZXIoaW5kZXgs
IHR5cGUpOworfQorCitXZWJDb3JlOjpLVVJMIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6cmVhZFVS
TEZyb21QYXN0ZWJvYXJkKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIHJl
dHVybiBQbGF0Zm9ybVBhc3RlYm9hcmQoKS5yZWFkVVJMKGluZGV4LCB0eXBlKTsKK30KKworU3Ry
aW5nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6cmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKGludCBp
bmRleCwgY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIHJldHVybiBQbGF0Zm9ybVBhc3RlYm9h
cmQoKS5yZWFkU3RyaW5nKGluZGV4LCB0eXBlKTsKK30KKworbG9uZyBXZWJQbGF0Zm9ybVN0cmF0
ZWdpZXM6OmNoYW5nZUNvdW50KCkKK3sKKyAgICByZXR1cm4gUGxhdGZvcm1QYXN0ZWJvYXJkKCku
Y2hhbmdlQ291bnQoKTsKK30KKwogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212843</attachid>
            <date>2013-09-27 14:55:33 -0700</date>
            <delta_ts>2013-09-27 16:06:20 -0700</delta_ts>
            <desc>Second part with fixes</desc>
            <filename>upstreamiospasteboard-2.txt</filename>
            <type>text/plain</type>
            <size>55907</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjU3MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDEzLTA5LTI3ICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgVXBzdHJlYW0gY2hhbmdlcyB0
byBQYXN0ZWJvYXJkIGltcGxlbWVudGF0aW9uIGZvciBpT1MuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE4MTgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAq
IGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZGlzcGF0Y2hD
UFBFdmVudCk6CisgICAgICAgICogZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpXZWJDb250ZW50UmVhZGVyOjphZGRGcmFnbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OldlYkNvbnRlbnRSZWFkZXI6OnJlYWRXZWJBcmNoaXZlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6V2ViQ29udGVudFJlYWRlcjo6cmVhZEZpbGVuYW1lcyk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OldlYkNvbnRlbnRSZWFkZXI6OnJlYWRIVE1MKToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6V2ViQ29udGVudFJlYWRlcjo6cmVhZFJURkQpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkUlRGKToKKyAg
ICAgICAgKFdlYkNvcmU6OnVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkSW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkVVJMKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6V2ViQ29udGVudFJlYWRlcjo6cmVhZFBsYWluVGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OndlYkNvbnRlbnRGcm9tUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpjcmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OmNyZWF0ZUZyYWdtZW50Rm9ySW1hZ2VSZXNvdXJjZUFuZEFkZFJlc291cmNlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9QYXN0ZWJvYXJkLmg6CisgICAgICAgICogcGxhdGZvcm0vUGFzdGVi
b2FyZFN0cmF0ZWd5Lmg6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1QYXN0ZWJvYXJkLmg6
CisgICAgICAgICogcGxhdGZvcm0vaW9zL1Bhc3RlYm9hcmRJT1MubW06CisgICAgICAgIChXZWJD
b3JlOjpQYXN0ZWJvYXJkV2ViQ29udGVudDo6UGFzdGVib2FyZFdlYkNvbnRlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UGFzdGVib2FyZFdlYkNvbnRlbnQ6On5QYXN0ZWJvYXJkV2ViQ29udGVudCk6
CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkSW1hZ2U6OlBhc3RlYm9hcmRJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkSW1hZ2U6On5QYXN0ZWJvYXJkSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6UGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3Jl
OjpQYXN0ZWJvYXJkOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFk
U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlU3RyaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnR5cGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9p
b3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Q
YXN0ZWJvYXJkOjpjaGFuZ2VDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3Rl
Ym9hcmQ6OndyaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVib2FyZDo6Y291
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjpyZWFkQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVib2FyZDo6cmVhZFN0cmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OnJlYWRVUkwpOgorICAgICAgICAqIHBs
YXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2Fy
ZFdlYkNvbnRlbnQ6OlBhc3RlYm9hcmRXZWJDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBh
c3RlYm9hcmRXZWJDb250ZW50Ojp+UGFzdGVib2FyZFdlYkNvbnRlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFzdGVib2FyZEltYWdlOjpQYXN0ZWJvYXJkSW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6UGFzdGVib2FyZEltYWdlOjp+UGFzdGVib2FyZEltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9tYWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tOgorCiAyMDEzLTA5LTI3ICBUaGlhZ28gZGUg
QmFycm9zIExhY2VyZGEgIDx0aGlhZ28ubGFjZXJkYUBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAg
IFtOaXhdIFVwZGF0aW5nIE5peCB0cnVuayBmaWxlcwpJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4J
KHJldmlzaW9uIDE1NjU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3Jr
aW5nIGNvcHkpCkBAIC00ODYsNiArNDg2LDggQEAgX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRl
eHQ5dHJhbnNsYXRlRQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHREMUV2CiBfX1pON1dl
YkNvcmUxNUhpdFRlc3RMb2NhdGlvbjEycmVjdEZvclBvaW50RVJLTlNfMTFMYXlvdXRQb2ludEVq
ampqCiBfX1pON1dlYkNvcmUxNUpTRE9NV2luZG93QmFzZThjb21tb25WTUV2CitfX1pON1dlYkNv
cmUxNVBhc3RlYm9hcmRJbWFnZUMxRXYKK19fWk43V2ViQ29yZTE1UGFzdGVib2FyZEltYWdlRDFF
dgogX19aTjdXZWJDb3JlMTVQbGF0Zm9ybUNBTGF5ZXIxOHNldEdlb21ldHJ5RmxpcHBlZEViCiBf
X1pON1dlYkNvcmUxNVByb3RlY3Rpb25TcGFjZUMxRVJLTjNXVEY2U3RyaW5nRWlOU18yNVByb3Rl
Y3Rpb25TcGFjZVNlcnZlclR5cGVFUzRfTlNfMzVQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlv
blNjaGVtZUUKIF9fWk43V2ViQ29yZTE1UHJvdGVjdGlvblNwYWNlQzFFdgpAQCAtNjY4LDYgKzY3
MCw4IEBAIF9fWk43V2ViQ29yZTIwRGljdGF0aW9uQWx0ZXJuYXRpdmVDMUVqankKIF9fWk43V2Vi
Q29yZTIwRGljdGF0aW9uQWx0ZXJuYXRpdmVDMUV2CiBfX1pON1dlYkNvcmUyMERpc3BsYXlTbGVl
cERpc2FibGVyQzFFUEtjCiBfX1pON1dlYkNvcmUyMERpc3BsYXlTbGVlcERpc2FibGVyRDFFdgor
X19aTjdXZWJDb3JlMjBQYXN0ZWJvYXJkV2ViQ29udGVudEMxRXYKK19fWk43V2ViQ29yZTIwUGFz
dGVib2FyZFdlYkNvbnRlbnREMUV2CiBfX1pON1dlYkNvcmUyMFJlbmRlckVtYmVkZGVkT2JqZWN0
MjlzZXRQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbkVOUzBfMjZQbHVnaW5VbmF2YWlsYWJpbGl0
eVJlYXNvbkUKIF9fWk43V2ViQ29yZTIwUmVuZGVyRW1iZWRkZWRPYmplY3QzN3NldFVuYXZhaWxh
YmxlUGx1Z2luSW5kaWNhdG9ySXNIaWRkZW5FYgogX19aTjdXZWJDb3JlMjBSZW5kZXJFbWJlZGRl
ZE9iamVjdDQ0c2V0UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb25XaXRoRGVzY3JpcHRpb25FTlMw
XzI2UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb25FUktOM1dURjZTdHJpbmdFCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiAxNTY1NjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzOCw3ICs0MzgsNyBAQCBT
dHJpbmcgRWRpdG9yOjpwbGFpblRleHRGcm9tUGFzdGVib2FyZChjCiAKICNlbmRpZgogCi0jaWYg
IShQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpKSAmJiAhUExBVEZPUk0oRUZMKQorI2lm
ICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShFRkwpCiB2b2lkIEVkaXRvcjo6cGFzdGVXaXRo
UGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBib29sIGFsbG93UGxhaW5UZXh0KQog
ewogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7CkBAIC03MTMsMTAg
KzcxMyw2IEBAIGJvb2wgRWRpdG9yOjpkaXNwYXRjaENQUEV2ZW50KGNvbnN0IEF0b20KIAogICAg
IFJlZlB0cjxDbGlwYm9hcmQ+IGNsaXBib2FyZCA9IENsaXBib2FyZDo6Y3JlYXRlRm9yQ29weUFu
ZFBhc3RlKHBvbGljeSk7CiAKLSNpZiBQTEFURk9STShJT1MpCi0gICAgY2xpcGJvYXJkLT5wYXN0
ZWJvYXJkKCkuc2V0RnJhbWUobV9mcmFtZSk7Ci0jZW5kaWYKLQogICAgIFJlZlB0cjxFdmVudD4g
ZXZlbnQgPSBDbGlwYm9hcmRFdmVudDo6Y3JlYXRlKGV2ZW50VHlwZSwgdHJ1ZSwgdHJ1ZSwgY2xp
cGJvYXJkKTsKICAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQsIElHTk9SRV9FWENFUFRJ
T04pOwogICAgIGJvb2wgbm9EZWZhdWx0UHJvY2Vzc2luZyA9IGV2ZW50LT5kZWZhdWx0UHJldmVu
dGVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCShyZXZp
c2lvbiAxNTY1NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0J
KHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMxLDEyIEBACiAjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5o
IgogI2luY2x1ZGUgIkRPTVJhbmdlSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJEb2N1bWVudEZyYWdt
ZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJFZGl0b3JDbGll
bnQuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJG
cmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkhUTUxDb252ZXJ0ZXIuaCIKICNpbmNsdWRl
ICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC00MSwxOCAr
NDQsNDAgQEAKICNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiTGVn
YWN5V2ViQXJjaGl2ZS5oIgogI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKKyNpbmNsdWRlICJQ
YWdlLmgiCiAjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgi
CiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNp
bmNsdWRlICJTb2Z0TGlua2luZy5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKICNp
bmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVHlwaW5nQ29tbWFuZC5oIgogI2luY2x1ZGUgIldB
S0FwcEtpdFN0dWJzLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKKyNpbmNsdWRlICJtYXJr
dXAuaCIKIAogI2lmIFBMQVRGT1JNKElPUykKIAorU09GVF9MSU5LX0ZSQU1FV09SSyhBcHBTdXBw
b3J0KQorU09GVF9MSU5LKEFwcFN1cHBvcnQsIENQU2hhcmVkUmVzb3VyY2VzRGlyZWN0b3J5LCBD
RlN0cmluZ1JlZiwgKHZvaWQpLCAoKSkKKworU09GVF9MSU5LX0ZSQU1FV09SSyhNb2JpbGVDb3Jl
U2VydmljZXMpCisKK1NPRlRfTElOSyhNb2JpbGVDb3JlU2VydmljZXMsIFVUVHlwZUNvbmZvcm1z
VG8sIEJvb2xlYW4sIChDRlN0cmluZ1JlZiBpblVUSSwgQ0ZTdHJpbmdSZWYgaW5Db25mb3Jtc1Rv
VVRJKSwgKGluVVRJLCBpbkNvbmZvcm1zVG9VVEkpKQorU09GVF9MSU5LKE1vYmlsZUNvcmVTZXJ2
aWNlcywgVVRUeXBlQ3JlYXRlUHJlZmVycmVkSWRlbnRpZmllckZvclRhZywgQ0ZTdHJpbmdSZWYs
IChDRlN0cmluZ1JlZiBpblRhZ0NsYXNzLCBDRlN0cmluZ1JlZiBpblRhZywgQ0ZTdHJpbmdSZWYg
aW5Db25mb3JtaW5nVG9VVEkpLCAoaW5UYWdDbGFzcywgaW5UYWcsIGluQ29uZm9ybWluZ1RvVVRJ
KSkKK1NPRlRfTElOSyhNb2JpbGVDb3JlU2VydmljZXMsIFVUVHlwZUNvcHlQcmVmZXJyZWRUYWdX
aXRoQ2xhc3MsIENGU3RyaW5nUmVmLCAoQ0ZTdHJpbmdSZWYgaW5VVEksIENGU3RyaW5nUmVmIGlu
VGFnQ2xhc3MpLCAoaW5VVEksIGluVGFnQ2xhc3MpKQorCitTT0ZUX0xJTktfQ09OU1RBTlQoTW9i
aWxlQ29yZVNlcnZpY2VzLCBrVVRUeXBlUE5HLCBDRlN0cmluZ1JlZikKK1NPRlRfTElOS19DT05T
VEFOVChNb2JpbGVDb3JlU2VydmljZXMsIGtVVFR5cGVKUEVHLCBDRlN0cmluZ1JlZikKK1NPRlRf
TElOS19DT05TVEFOVChNb2JpbGVDb3JlU2VydmljZXMsIGtVVFRhZ0NsYXNzRmlsZW5hbWVFeHRl
bnNpb24sIENGU3RyaW5nUmVmKQorU09GVF9MSU5LX0NPTlNUQU5UKE1vYmlsZUNvcmVTZXJ2aWNl
cywga1VUVGFnQ2xhc3NNSU1FVHlwZSwgQ0ZTdHJpbmdSZWYpCisKKyNkZWZpbmUga1VUVHlwZVBO
RyAgZ2V0a1VUVHlwZVBORygpCisjZGVmaW5lIGtVVFR5cGVKUEVHIGdldGtVVFR5cGVKUEVHKCkK
KyNkZWZpbmUga1VUVGFnQ2xhc3NGaWxlbmFtZUV4dGVuc2lvbiBnZXRrVVRUYWdDbGFzc0ZpbGVu
YW1lRXh0ZW5zaW9uKCkKKyNkZWZpbmUga1VUVGFnQ2xhc3NNSU1FVHlwZSBnZXRrVVRUYWdDbGFz
c01JTUVUeXBlKCkKKwogQGludGVyZmFjZSBOU0F0dHJpYnV0ZWRTdHJpbmcgKE5TQXR0cmlidXRl
ZFN0cmluZ0tpdEFkZGl0aW9ucykKIC0gKGlkKWluaXRXaXRoUlRGOihOU0RhdGEgKilkYXRhIGRv
Y3VtZW50QXR0cmlidXRlczooTlNEaWN0aW9uYXJ5ICoqKWRpY3Q7CiAtIChpZClpbml0V2l0aFJU
RkQ6KE5TRGF0YSAqKWRhdGEgZG9jdW1lbnRBdHRyaWJ1dGVzOihOU0RpY3Rpb25hcnkgKiopZGlj
dDsKQEAgLTM1Myw2ICszNzgsMjM2IEBAIHZvaWQgRWRpdG9yOjp3cml0ZUltYWdlVG9QYXN0ZWJv
YXJkKFBhc3QKICAgICBwYXN0ZWJvYXJkLndyaXRlKHBhc3RlYm9hcmRJbWFnZSk7CiB9CiAKK2Ns
YXNzIEVkaXRvcjo6V2ViQ29udGVudFJlYWRlciBGSU5BTCA6IHB1YmxpYyBQYXN0ZWJvYXJkV2Vi
Q29udGVudFJlYWRlciB7CitwdWJsaWM6CisgICAgV2ViQ29udGVudFJlYWRlcihGcmFtZSYgZnJh
bWUsIFJhbmdlJiBjb250ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0KQorICAgIDogZnJhbWUoZnJh
bWUpCisgICAgLCBjb250ZXh0KGNvbnRleHQpCisgICAgLCBhbGxvd1BsYWluVGV4dChhbGxvd1Bs
YWluVGV4dCkKKyAgICAsIG1hZGVGcmFnbWVudEZyb21QbGFpblRleHQoZmFsc2UpCisgICAgewor
ICAgIH0KKworICAgIEZyYW1lJiBmcmFtZTsKKyAgICBSYW5nZSYgY29udGV4dDsKKyAgICBjb25z
dCBib29sIGFsbG93UGxhaW5UZXh0OworCisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZy
YWdtZW50OworICAgIGJvb2wgbWFkZUZyYWdtZW50RnJvbVBsYWluVGV4dDsKKworcHJpdmF0ZToK
KyAgICB2aXJ0dWFsIGJvb2wgcmVhZFdlYkFyY2hpdmUoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVhZEZpbGVuYW1lcyhjb25zdCBWZWN0b3I8
U3RyaW5nPiYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCByZWFkSFRNTChjb25zdCBTdHJp
bmcmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVhZFJURkQoUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVhZFJURihQYXNzUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4pIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCByZWFkSW1hZ2UoUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBjb25zdCBTdHJpbmcmIHR5cGUpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgYm9vbCByZWFkVVJMKGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYgdGl0bGUpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgYm9vbCByZWFkUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYpIE9W
RVJSSURFOworICAgIHZvaWQgYWRkRnJhZ21lbnQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50
Pik7Cit9OworCit2b2lkIEVkaXRvcjo6V2ViQ29udGVudFJlYWRlcjo6YWRkRnJhZ21lbnQoUGFz
c1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBuZXdGcmFnbWVudCkKK3sKKyAgICBpZiAoZnJhZ21l
bnQpIHsKKyAgICAgICAgaWYgKG5ld0ZyYWdtZW50ICYmIG5ld0ZyYWdtZW50LT5maXJzdENoaWxk
KCkpIHsKKyAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgICAgICAgICBmcmFnbWVu
dC0+YXBwZW5kQ2hpbGQobmV3RnJhZ21lbnQtPmZpcnN0Q2hpbGQoKSwgZWMpOworICAgICAgICB9
CisgICAgfSBlbHNlCisgICAgICAgIGZyYWdtZW50ID0gbmV3RnJhZ21lbnQ7Cit9CisKK2Jvb2wg
RWRpdG9yOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkV2ViQXJjaGl2ZShQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gYnVmZmVyKQoreworICAgIGlmICghZnJhbWUuZG9jdW1lbnQoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IGFyY2hpdmUgPSBM
ZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoVVJMKCksIGJ1ZmZlci5nZXQoKSk7CisgICAgaWYgKCFh
cmNoaXZlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8QXJjaGl2ZVJlc291
cmNlPiBtYWluUmVzb3VyY2UgPSBhcmNoaXZlLT5tYWluUmVzb3VyY2UoKTsKKyAgICBpZiAoIW1h
aW5SZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgU3RyaW5nJiB0
eXBlID0gbWFpblJlc291cmNlLT5taW1lVHlwZSgpOworCisgICAgaWYgKGZyYW1lLmxvYWRlcigp
LT5jbGllbnQoKS0+Y2FuU2hvd01JTUVUeXBlQXNIVE1MKHR5cGUpKSB7CisgICAgICAgIC8vIEZJ
WE1FOiBUaGUgY29kZSBpbiBjcmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyBjYWxscyBzZXRE
ZWZlcnNMb2FkaW5nKHRydWUpLiBEb24ndCB3ZSBuZWVkIHRoYXQgaGVyZT8KKyAgICAgICAgaWYg
KERvY3VtZW50TG9hZGVyKiBsb2FkZXIgPSBmcmFtZS5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIo
KSkKKyAgICAgICAgICAgIGxvYWRlci0+YWRkQWxsQXJjaGl2ZVJlc291cmNlcyhhcmNoaXZlLmdl
dCgpKTsKKworICAgICAgICBTdHJpbmcgbWFya3VwU3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOCht
YWluUmVzb3VyY2UtPmRhdGEoKS0+ZGF0YSgpLCBtYWluUmVzb3VyY2UtPmRhdGEoKS0+c2l6ZSgp
KTsKKyAgICAgICAgYWRkRnJhZ21lbnQoY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGZyYW1lLmRv
Y3VtZW50KCksIG1hcmt1cFN0cmluZywgbWFpblJlc291cmNlLT51cmwoKSwgRGlzYWxsb3dTY3Jp
cHRpbmdBbmRQbHVnaW5Db250ZW50KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBFZGl0b3I6OldlYkNvbnRlbnRSZWFkZXI6OnJl
YWRGaWxlbmFtZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mKQoreworICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBFZGl0b3I6OldlYkNvbnRlbnRSZWFkZXI6OnJlYWRIVE1MKGNvbnN0IFN0cmlu
ZyYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEVkaXRvcjo6V2ViQ29udGVudFJl
YWRlcjo6cmVhZFJURkQoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcikKK3sKKyAgICBh
ZGRGcmFnbWVudChmcmFtZS5lZGl0b3IoKS5jcmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyhh
ZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURkQ6YnVmZmVyLT5j
cmVhdGVOU0RhdGEoKSBkb2N1bWVudEF0dHJpYnV0ZXM6bnVsbHB0cl0pLmdldCgpKSk7CisgICAg
cmV0dXJuIGZyYWdtZW50OworfQorCitib29sIEVkaXRvcjo6V2ViQ29udGVudFJlYWRlcjo6cmVh
ZFJURihQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyKQoreworICAgIGFkZEZyYWdtZW50
KGZyYW1lLmVkaXRvcigpLmNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKGFkb3B0TlMoW1tO
U0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGOmJ1ZmZlci0+Y3JlYXRlTlNEYXRh
KCkgZG9jdW1lbnRBdHRyaWJ1dGVzOm51bGxwdHJdKS5nZXQoKSkpOworICAgIHJldHVybiBmcmFn
bWVudDsKK30KKworc3RhdGljIE5TVVJMKiB1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KE5TU3Ry
aW5nICpyZWxhdGl2ZVBhcnQpCit7CisgICAgUmV0YWluUHRyPENGVVVJRFJlZj4gVVVJRFJlZiA9
IGFkb3B0Q0YoQ0ZVVUlEQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQpKTsKKyAgICBSZXRhaW5Q
dHI8TlNTdHJpbmc+IFVVSURTdHJpbmcgPSBhZG9wdE5TKChOU1N0cmluZyAqKUNGVVVJRENyZWF0
ZVN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBVVUlEUmVmLmdldCgpKSk7CisgICAgTlNVUkwg
KlVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAi
JUA6Ly8lQC8lQCIsIEAid2Via2l0LWZha2UtdXJsIiwgVVVJRFN0cmluZy5nZXQoKSwgcmVsYXRp
dmVQYXJ0XV07CisKKyAgICByZXR1cm4gVVJMOworfQorCitib29sIEVkaXRvcjo6V2ViQ29udGVu
dFJlYWRlcjo6cmVhZEltYWdlKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIsIGNvbnN0
IFN0cmluZyYgdHlwZSkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHN0cmluZ1R5cGUg
PSB0eXBlLmNyZWF0ZUNGU3RyaW5nKCk7CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBmaWxlbmFt
ZUV4dGVuc2lvbiA9IGFkb3B0TlMoKE5TU3RyaW5nICopVVRUeXBlQ29weVByZWZlcnJlZFRhZ1dp
dGhDbGFzcyhzdHJpbmdUeXBlLmdldCgpLCBrVVRUYWdDbGFzc0ZpbGVuYW1lRXh0ZW5zaW9uKSk7
CisgICAgTlNTdHJpbmcgKnJlbGF0aXZlVVJMUGFydCA9IFtAImltYWdlIiBzdHJpbmdCeUFwcGVu
ZGluZ1N0cmluZzpmaWxlbmFtZUV4dGVuc2lvbi5nZXQoKV07CisgICAgUmV0YWluUHRyPE5TU3Ry
aW5nPiBtaW1lVHlwZSA9IGFkb3B0TlMoKE5TU3RyaW5nICopVVRUeXBlQ29weVByZWZlcnJlZFRh
Z1dpdGhDbGFzcyhzdHJpbmdUeXBlLmdldCgpLCBrVVRUYWdDbGFzc01JTUVUeXBlKSk7CisKKyAg
ICBhZGRGcmFnbWVudChmcmFtZS5lZGl0b3IoKS5jcmVhdGVGcmFnbWVudEZvckltYWdlUmVzb3Vy
Y2VBbmRBZGRSZXNvdXJjZShBcmNoaXZlUmVzb3VyY2U6OmNyZWF0ZShidWZmZXIsIHVuaXF1ZVVS
TFdpdGhSZWxhdGl2ZVBhcnQocmVsYXRpdmVVUkxQYXJ0KSwgbWltZVR5cGUuZ2V0KCksIGVtcHR5
U3RyaW5nKCksIGVtcHR5U3RyaW5nKCkpKSk7CisgICAgcmV0dXJuIGZyYWdtZW50OworfQorCiti
b29sIEVkaXRvcjo6V2ViQ29udGVudFJlYWRlcjo6cmVhZFVSTChjb25zdCBVUkwmIHVybCwgY29u
c3QgU3RyaW5nJikKK3sKKyAgICBpZiAodXJsLnN0cmluZygpLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5jbGllbnQoKS0+aGFzUmlj
aGx5RWRpdGFibGVTZWxlY3Rpb24oKSkgeworICAgICAgICBpZiAocmVhZFBsYWluVGV4dChbKE5T
VVJMICopdXJsIGFic29sdXRlU3RyaW5nXSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBpZiAoWyhOU1VSTCAqKXVybCBpc0ZpbGVVUkxdKSB7CisgICAgICAgIE5TU3Ry
aW5nICpsb2NhbFBhdGggPSBbKE5TVVJMICopdXJsIHJlbGF0aXZlUGF0aF07CisgICAgICAgIC8v
IE9ubHkgYWxsb3cgdXJsIGF0dGFjaG1lbnRzIGZyb20gfi9NZWRpYSBmb3Igbm93LgorICAgICAg
ICBpZiAoIVtsb2NhbFBhdGggaGFzUHJlZml4OlsoTlNTdHJpbmcgKilDUFNoYXJlZFJlc291cmNl
c0RpcmVjdG9yeSgpIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOkAiL01lZGlhL0RDSU0vIl1dKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFJldGFpblB0cjxOU1N0cmluZz4g
ZmlsZVR5cGUgPSBhZG9wdE5TKChOU1N0cmluZyAqKVVUVHlwZUNyZWF0ZVByZWZlcnJlZElkZW50
aWZpZXJGb3JUYWcoa1VUVGFnQ2xhc3NGaWxlbmFtZUV4dGVuc2lvbiwgKENGU3RyaW5nUmVmKVts
b2NhbFBhdGggcGF0aEV4dGVuc2lvbl0sIE5VTEwpKTsKKyAgICAgICAgTlNEYXRhICpkYXRhID0g
W05TRGF0YSBkYXRhV2l0aENvbnRlbnRzT2ZGaWxlOmxvY2FsUGF0aF07CisgICAgICAgIGlmIChV
VFR5cGVDb25mb3Jtc1RvKChDRlN0cmluZ1JlZilmaWxlVHlwZS5nZXQoKSwga1VUVHlwZVBORykp
IHsKKyAgICAgICAgICAgIGFkZEZyYWdtZW50KGZyYW1lLmVkaXRvcigpLmNyZWF0ZUZyYWdtZW50
Rm9ySW1hZ2VSZXNvdXJjZUFuZEFkZFJlc291cmNlKEFyY2hpdmVSZXNvdXJjZTo6Y3JlYXRlKFNo
YXJlZEJ1ZmZlcjo6d3JhcE5TRGF0YShbW2RhdGEgY29weV0gYXV0b3JlbGVhc2VdKSwgdW5pcXVl
VVJMV2l0aFJlbGF0aXZlUGFydChAImltYWdlLnBuZyIpLCBAImltYWdlL3BuZyIsIGVtcHR5U3Ry
aW5nKCksIGVtcHR5U3RyaW5nKCkpKSk7CisgICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Cisg
ICAgICAgIH0gZWxzZSBpZiAoVVRUeXBlQ29uZm9ybXNUbygoQ0ZTdHJpbmdSZWYpZmlsZVR5cGUu
Z2V0KCksIGtVVFR5cGVKUEVHKSkgeworICAgICAgICAgICAgYWRkRnJhZ21lbnQoZnJhbWUuZWRp
dG9yKCkuY3JlYXRlRnJhZ21lbnRGb3JJbWFnZVJlc291cmNlQW5kQWRkUmVzb3VyY2UoQXJjaGl2
ZVJlc291cmNlOjpjcmVhdGUoU2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRhKFtbZGF0YSBjb3B5XSBh
dXRvcmVsZWFzZV0pLCB1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KEAiaW1hZ2UuanBnIiksIEAi
aW1hZ2UvanBnIiwgZW1wdHlTdHJpbmcoKSwgZW1wdHlTdHJpbmcoKSkpKTsKKyAgICAgICAgICAg
IHJldHVybiBmcmFnbWVudDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIFJlZlB0
cjxFbGVtZW50PiBhbmNob3IgPSBmcmFtZS5kb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KEhUTUxO
YW1lczo6YVRhZywgZmFsc2UpOworICAgICAgICBhbmNob3ItPnNldEF0dHJpYnV0ZShIVE1MTmFt
ZXM6OmhyZWZBdHRyLCB1cmwuc3RyaW5nKCkpOworICAgICAgICBhbmNob3ItPmFwcGVuZENoaWxk
KGZyYW1lLmRvY3VtZW50KCktPmNyZWF0ZVRleHROb2RlKFtbKE5TVVJMICopdXJsIGFic29sdXRl
U3RyaW5nXSBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXSkpOworCisgICAg
ICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBuZXdGcmFnbWVudCA9IGZyYW1lLmRvY3VtZW50
KCktPmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKyAgICAgICAgbmV3RnJhZ21lbnQtPmFwcGVu
ZENoaWxkKGFuY2hvci5yZWxlYXNlKCkpOworICAgICAgICBhZGRGcmFnbWVudChuZXdGcmFnbWVu
dCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgRWRpdG9yOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkUGxhaW5UZXh0KGNvbnN0IFN0cmlu
ZyYgdGV4dCkKK3sKKyAgICBpZiAoIWFsbG93UGxhaW5UZXh0KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBhZGRGcmFnbWVudChjcmVhdGVGcmFnbWVudEZyb21UZXh0KCZjb250ZXh0LCBb
dGV4dCBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXSkpOworICAgIGlmICgh
ZnJhZ21lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1hZGVGcmFnbWVudEZyb21Q
bGFpblRleHQgPSB0cnVlOworICAgIHJldHVybiB0cnVlOworfQorCisvLyBGSVhNRTogU2hvdWxk
IGdpdmUgdGhpcyBmdW5jdGlvbiBhIG5hbWUgdGhhdCBtYWtlcyBpdCBjbGVhciBpdCBhZGRzIHJl
c291cmNlcyB0byB0aGUgZG9jdW1lbnQgbG9hZGVyIGFzIGEgc2lkZSBlZmZlY3QuCisvLyBPciBy
ZWZhY3RvciBzbyBpdCBkb2VzIG5vdCBkbyB0aGF0LgorUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBFZGl0b3I6OndlYkNvbnRlbnRGcm9tUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJv
YXJkLCBSYW5nZSYgY29udGV4dCwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFp
blRleHQpCit7CisgICAgV2ViQ29udGVudFJlYWRlciByZWFkZXIoKm1fZnJhbWUsIGNvbnRleHQs
IGFsbG93UGxhaW5UZXh0KTsKKyAgICBwYXN0ZWJvYXJkLnJlYWQocmVhZGVyKTsKKyAgICBjaG9z
ZVBsYWluVGV4dCA9IHJlYWRlci5tYWRlRnJhZ21lbnRGcm9tUGxhaW5UZXh0OworICAgIHJldHVy
biByZWFkZXIuZnJhZ21lbnQucmVsZWFzZSgpOworfQorCit2b2lkIEVkaXRvcjo6cGFzdGVXaXRo
UGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBib29sIGFsbG93UGxhaW5UZXh0KQor
eworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7CisKKyAgICBib29s
IGNob3NlUGxhaW5UZXh0OworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9
IGNsaWVudCgpLT5kb2N1bWVudEZyYWdtZW50RnJvbURlbGVnYXRlKDApOworICAgIGlmICghZnJh
Z21lbnQpCisgICAgICAgIGZyYWdtZW50ID0gd2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKCpwYXN0
ZWJvYXJkLCAqcmFuZ2UsIGFsbG93UGxhaW5UZXh0LCBjaG9zZVBsYWluVGV4dCk7CisKKyAgICBp
ZiAoZnJhZ21lbnQgJiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoZnJhZ21lbnQsIHJhbmdlLCBFZGl0
b3JJbnNlcnRBY3Rpb25QYXN0ZWQpKQorICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQs
IGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKCpwYXN0ZWJvYXJkKSwgZmFsc2UpOworfQor
CitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IEVkaXRvcjo6Y3JlYXRlRnJhZ21lbnRBbmRB
ZGRSZXNvdXJjZXMoTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcpCit7CisgICAgaWYgKCFtX2Zy
YW1lLT5wYWdlKCkgfHwgIW1fZnJhbWUtPmRvY3VtZW50KCkgfHwgIW1fZnJhbWUtPmRvY3VtZW50
KCktPmlzSFRNTERvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYg
KCFzdHJpbmcpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYm9vbCB3YXNEZWZlcnJp
bmdDYWxsYmFja3MgPSBtX2ZyYW1lLT5wYWdlKCktPmRlZmVyc0xvYWRpbmcoKTsKKyAgICBpZiAo
IXdhc0RlZmVycmluZ0NhbGxiYWNrcykKKyAgICAgICAgbV9mcmFtZS0+cGFnZSgpLT5zZXREZWZl
cnNMb2FkaW5nKHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+PiBy
ZXNvdXJjZXM7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY2xpZW50
KCktPmRvY3VtZW50RnJhZ21lbnRGcm9tQXR0cmlidXRlZFN0cmluZyhzdHJpbmcsIHJlc291cmNl
cyk7CisKKyAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9IG1fZnJhbWUtPmxvYWRlcigp
LT5kb2N1bWVudExvYWRlcigpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0g
cmVzb3VyY2VzLnNpemUoKTsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgICAgIGxvYWRlci0+YWRk
QXJjaGl2ZVJlc291cmNlKHJlc291cmNlc1tpXSk7CisgICAgfQorCisgICAgaWYgKCF3YXNEZWZl
cnJpbmdDYWxsYmFja3MpCisgICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+c2V0RGVmZXJzTG9hZGlu
ZyhmYWxzZSk7CisgICAgCisgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKK30KKworUGFz
c1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBFZGl0b3I6OmNyZWF0ZUZyYWdtZW50Rm9ySW1hZ2VS
ZXNvdXJjZUFuZEFkZFJlc291cmNlKFBhc3NSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiByZXNvdXJj
ZSkKK3sKKyAgICBpZiAoIXJlc291cmNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IFJlZlB0cjxFbGVtZW50PiBpbWFnZUVsZW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5jcmVh
dGVFbGVtZW50KEhUTUxOYW1lczo6aW1nVGFnLCBmYWxzZSk7CisgICAgLy8gRklYTUU6IFRoZSBj
b2RlIGluIGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzIGNhbGxzIHNldERlZmVyc0xvYWRp
bmcodHJ1ZSkuIERvbid0IHdlIG5lZWQgdGhhdCBoZXJlPworICAgIGlmIChEb2N1bWVudExvYWRl
ciogbG9hZGVyID0gbV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkpCisgICAgICAg
IGxvYWRlci0+YWRkQXJjaGl2ZVJlc291cmNlKHJlc291cmNlLmdldCgpKTsKKworICAgIE5TVVJM
ICpVUkwgPSByZXNvdXJjZS0+dXJsKCk7CisgICAgaW1hZ2VFbGVtZW50LT5zZXRBdHRyaWJ1dGUo
SFRNTE5hbWVzOjpzcmNBdHRyLCBbVVJMIGlzRmlsZVVSTF0gPyBbVVJMIGFic29sdXRlU3RyaW5n
XSA6IHJlc291cmNlLT51cmwoKSk7CisKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJh
Z21lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Cisg
ICAgZnJhZ21lbnQtPmFwcGVuZENoaWxkKGltYWdlRWxlbWVudC5yZWxlYXNlKCkpOworCisKKyAg
ICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBQTEFURk9STShJT1MpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9QYXN0ZWJvYXJkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFz
dGVib2FyZC5oCShyZXZpc2lvbiAxNTY1NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Q
YXN0ZWJvYXJkLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDkgKzI3LDcgQEAKICNkZWZpbmUgUGFz
dGVib2FyZF9oCiAKICNpbmNsdWRlICJEcmFnSW1hZ2UuaCIKLSNpbmNsdWRlICJJbWFnZS5oIgog
I2luY2x1ZGUgIlVSTC5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KQEAgLTM4LDYgKzM2LDExIEBACiB0eXBlZGVmIHN0cnVjdCBfR3Rr
Q2xpcGJvYXJkIEd0a0NsaXBib2FyZDsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorT0JK
Q19DTEFTUyBOU0FycmF5OworT0JKQ19DTEFTUyBOU1N0cmluZzsKKyNlbmRpZgorCiAjaWYgUExB
VEZPUk0oUVQpCiAjaW5jbHVkZSA8UU1pbWVEYXRhPgogI2VuZGlmCkBAIC01MCwxMSArNTMsNiBA
QCB0eXBlZGVmIHN0cnVjdCBfR3RrQ2xpcGJvYXJkIEd0a0NsaXBib2FyCiB0eXBlZGVmIHN0cnVj
dCBIV05EX18qIEhXTkQ7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKElPUykKLU9CSkNfQ0xBU1Mg
TlNBcnJheTsKLU9CSkNfQ0xBU1MgTlNTdHJpbmc7Ci0jZW5kaWYKLQogLy8gRklYTUU6IFRoaXMg
Y2xhc3MgdXNlcyB0aGUgRE9NIGFuZCBtYWtlcyBjYWxscyB0byBFZGl0b3IuCiAvLyBJdCBzaG91
bGQgYmUgZGl2ZXN0ZWQgb2YgaXRzIGtub3dsZWRnZSBvZiB0aGUgZnJhbWUgYW5kIGVkaXRvci4K
IApAQCAtNzUsNiArNzMsOCBAQCBlbnVtIFNob3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckNs
aXBiCiAKIHN0cnVjdCBQYXN0ZWJvYXJkV2ViQ29udGVudCB7CiAjaWYgIShQTEFURk9STShFRkwp
IHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKFdJTikpCisgICAg
UGFzdGVib2FyZFdlYkNvbnRlbnQoKTsKKyAgICB+UGFzdGVib2FyZFdlYkNvbnRlbnQoKTsKICAg
ICBib29sIGNhblNtYXJ0Q29weU9yRGVsZXRlOwogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRh
dGFJbldlYkFyY2hpdmVGb3JtYXQ7CiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YUluUlRG
REZvcm1hdDsKQEAgLTk0LDYgKzk0LDggQEAgc3RydWN0IFBhc3RlYm9hcmRVUkwgewogfTsKIAog
c3RydWN0IFBhc3RlYm9hcmRJbWFnZSB7CisgICAgUGFzdGVib2FyZEltYWdlKCk7CisgICAgflBh
c3RlYm9hcmRJbWFnZSgpOwogICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2U7CiAjaWYgIShQTEFURk9S
TShFRkwpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKFdJTikp
CiAgICAgUGFzdGVib2FyZFVSTCB1cmw7CkBAIC0xMDgsNyArMTEwLDcgQEAgY2xhc3MgUGFzdGVi
b2FyZFdlYkNvbnRlbnRSZWFkZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgflBhc3RlYm9hcmRX
ZWJDb250ZW50UmVhZGVyKCkgeyB9CiAKLSNpZiAhKFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0o
R1RLKSB8fCBQTEFURk9STShJT1MpIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShXSU4pKQor
I2lmICEoUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKSB8fCBQ
TEFURk9STShXSU4pKQogICAgIHZpcnR1YWwgYm9vbCByZWFkV2ViQXJjaGl2ZShQYXNzUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4pID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgcmVhZEZpbGVuYW1lcyhjb25z
dCBWZWN0b3I8U3RyaW5nPiYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgcmVhZEhUTUwoY29uc3Qg
U3RyaW5nJikgPSAwOwpAQCAtMTY1LDcgKzE2Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldERy
YWdJbWFnZShEcmFnSW1hZ2VSZWYsIGNvbnN0IEludFBvaW50JiBob3RTcG90KTsKICNlbmRpZgog
Ci0jaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShJT1MpIHx8IFBMQVRGT1JNKFFUKSB8fCBQ
TEFURk9STShXSU4pCisjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZP
Uk0oV0lOKQogICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZG9jdW1lbnRGcmFnbWVu
dChGcmFtZSosIFBhc3NSZWZQdHI8UmFuZ2U+LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBj
aG9zZVBsYWluVGV4dCk7IC8vIEZJWE1FOiBMYXllcmluZyB2aW9sYXRpb24uCiAjZW5kaWYKIApA
QCAtMTg1LDEwICsxODcsOCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPUykK
LSAgICB2b2lkIHNldEZyYW1lKEZyYW1lKik7IC8vIEZJWE1FOiBMYXllcmluZyB2aW9sYXRpb24u
Ci0KICAgICBzdGF0aWMgTlNBcnJheSogc3VwcG9ydGVkUGFzdGVib2FyZFR5cGVzKCk7Ci0gICAg
c3RhdGljIFN0cmluZyByZXNvdXJjZU1JTUVUeXBlKE5TU3RyaW5nICptaW1lVHlwZSk7CisgICAg
c3RhdGljIFN0cmluZyByZXNvdXJjZU1JTUVUeXBlKGNvbnN0IE5TU3RyaW5nICptaW1lVHlwZSk7
CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKQEAgLTIyMywx
MCArMjIzLDYgQEAgcHJpdmF0ZToKICAgICBQYXN0ZWJvYXJkKEd0a0NsaXBib2FyZCopOwogI2Vu
ZGlmCiAKLSNpZiBQTEFURk9STShJT1MpCi0gICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBkb2N1bWVudEZyYWdtZW50Rm9yUGFzdGVib2FyZEl0ZW1BdEluZGV4KEZyYW1lKiwgaW50IGlu
ZGV4LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCk7IC8vIEZJWE1F
OiBMYXllcmluZyB2aW9sYXRpb24uCi0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKFFUKQogICAgIFBh
c3RlYm9hcmQoY29uc3QgUU1pbWVEYXRhKiAsIGJvb2wpOwogCkBAIC0yNTAsNyArMjQ2LDYgQEAg
cHJpdmF0ZToKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKQotICAgIEZyYW1lKiBtX2ZyYW1l
OyAvLyBGSVhNRTogTGF5ZXJpbmcgdmlvbGF0aW9uLgogICAgIGxvbmcgbV9jaGFuZ2VDb3VudDsK
ICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkU3RyYXRl
Z3kuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkU3Ry
YXRlZ3kuaAkocmV2aXNpb24gMTU2NTY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFz
dGVib2FyZFN0cmF0ZWd5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEwICsyNiw2IEBACiAjaWZu
ZGVmIFBhc3RlYm9hcmRTdHJhdGVneV9oCiAjZGVmaW5lIFBhc3RlYm9hcmRTdHJhdGVneV9oCiAK
LSNpZiBQTEFURk9STShJT1MpCi0jaW5jbHVkZSAiUGFzdGVib2FyZC5oIgotI2VuZGlmCi0jaW5j
bHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTM3LDE3ICsz
MywyNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb2xvcjsKK2NsYXNzIFNoYXJl
ZEJ1ZmZlcjsKIGNsYXNzIFVSTDsKLSAgICAKK3N0cnVjdCBQYXN0ZWJvYXJkSW1hZ2U7CitzdHJ1
Y3QgUGFzdGVib2FyZFdlYkNvbnRlbnQ7CisKIGNsYXNzIFBhc3RlYm9hcmRTdHJhdGVneSB7CiBw
dWJsaWM6Ci0jaWYgUExBVEZPUk0oTUFDKQogI2lmIFBMQVRGT1JNKElPUykKLSAgICAvLyBGSVhN
RTogd2Ugc2hvdWxkIG1vdmUgTWFjIHRvIHRoaXMuCi0gICAgdmlydHVhbCB2b2lkIHdyaXRlVG9Q
YXN0ZWJvYXJkKGNvbnN0IFBhc3RlYm9hcmRXZWJDb250ZW50JiBjb250ZW50KSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHdyaXRlVG9QYXN0ZWJvYXJkKGNvbnN0IFBhc3RlYm9hcmRJbWFnZSYgcGFz
dGVib2FyZEltYWdlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHdyaXRlVG9QYXN0ZWJvYXJkKGNv
bnN0IFN0cmluZyYgdGV4dCkgPSAwOworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbW92ZSBNYWMg
dG8gdGhpcy4KKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVUb1Bhc3RlYm9hcmQoY29uc3QgUGFzdGVi
b2FyZFdlYkNvbnRlbnQmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHdyaXRlVG9QYXN0ZWJvYXJk
KGNvbnN0IFBhc3RlYm9hcmRJbWFnZSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVUb1Bh
c3RlYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJikgPSAw
OworICAgIHZpcnR1YWwgaW50IGdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCkgPSAwOworICAgIHZp
cnR1YWwgU3RyaW5nIHJlYWRTdHJpbmdGcm9tUGFzdGVib2FyZChpbnQgaW5kZXgsIGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZFR5cGUpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2hhcmVk
QnVmZmVyPiByZWFkQnVmZmVyRnJvbVBhc3RlYm9hcmQoaW50IGluZGV4LCBjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmRUeXBlKSA9IDA7CisgICAgdmlydHVhbCBVUkwgcmVhZFVSTEZyb21QYXN0ZWJv
YXJkKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSkgPSAwOworICAgIHZp
cnR1YWwgbG9uZyBjaGFuZ2VDb3VudCgpID0gMDsKKwogI2VuZGlmCisjaWYgUExBVEZPUk0oTUFD
KQogICAgIHZpcnR1YWwgdm9pZCBnZXRUeXBlcyhWZWN0b3I8U3RyaW5nPiYgdHlwZXMsIGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2hh
cmVkQnVmZmVyPiBidWZmZXJGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0UGF0
aG5hbWVzRm9yVHlwZShWZWN0b3I8U3RyaW5nPiYgcGF0aG5hbWVzLCBjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSA9IDA7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVBhc3RlYm9hcmQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVBhc3RlYm9hcmQuaAkocmV2aXNpb24g
MTU2NTY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1QYXN0ZWJvYXJkLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDEwICsyNiw5IEBACiAjaWZuZGVmIFBsYXRmb3JtUGFzdGVi
b2FyZF9oCiAjZGVmaW5lIFBsYXRmb3JtUGFzdGVib2FyZF9oCiAKLSNpbmNsdWRlICJQYXN0ZWJv
YXJkLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKICNpZiBQTEFURk9STShNQUMpICYmICFQTEFU
Rk9STShJT1MpCkBAIC00MywxNSArNDIsMTggQEAgT0JKQ19DTEFTUyBVSVBhc3RlYm9hcmQ7CiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvbG9yOworY2xhc3MgU2hhcmVkQnVmZmVyOwog
Y2xhc3MgVVJMOworc3RydWN0IFBhc3RlYm9hcmRJbWFnZTsKK3N0cnVjdCBQYXN0ZWJvYXJkV2Vi
Q29udGVudDsKIAogY2xhc3MgUGxhdGZvcm1QYXN0ZWJvYXJkIHsKIHB1YmxpYzoKKyAgICAvLyBG
SVhNRTogcHJvYmFibHkgd2UgZG9uJ3QgbmVlZCBhIGNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgYSBw
YXN0ZWJvYXJkIG5hbWUgZm9yIGlPUy4KKyAgICBleHBsaWNpdCBQbGF0Zm9ybVBhc3RlYm9hcmQo
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSk7CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIFBs
YXRmb3JtUGFzdGVib2FyZCgpOwogI2VuZGlmCi0gICAgLy8gRklYTUU6IHByb2JhYmx5IHdlIGRv
bid0IG5lZWQgYSBjb25zdHJ1Y3RvciB0aGF0IHRha2VzIGEgcGFzdGVib2FyZCBuYW1lIGZvciBp
T1MuCi0gICAgZXhwbGljaXQgUGxhdGZvcm1QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZE5hbWUpOwogICAgIHN0YXRpYyBTdHJpbmcgdW5pcXVlTmFtZSgpOwogICAgIAogICAgIHZv
aWQgZ2V0VHlwZXMoVmVjdG9yPFN0cmluZz4mIHR5cGVzKTsKQEAgLTcxLDkgKzczLDEzIEBAIHB1
YmxpYzoKICAgICBsb25nIHNldEJ1ZmZlckZvclR5cGUoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+
LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKTsKICAgICBsb25nIHNldFBhdGhuYW1lc0Zv
clR5cGUoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhuYW1lcywgY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkVHlwZSk7CiAgICAgbG9uZyBzZXRTdHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYsIGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpOwotICAgIHZvaWQgd3JpdGUoY29uc3QgUGFzdGVi
b2FyZFdlYkNvbnRlbnQmIGNvbnRlbnQpOwotICAgIHZvaWQgd3JpdGUoY29uc3QgUGFzdGVib2Fy
ZEltYWdlJiBwYXN0ZWJvYXJkSW1hZ2UpOwotICAgIHZvaWQgd3JpdGUoY29uc3QgU3RyaW5nJiB0
ZXh0KTsKKyAgICB2b2lkIHdyaXRlKGNvbnN0IFBhc3RlYm9hcmRXZWJDb250ZW50Jik7CisgICAg
dm9pZCB3cml0ZShjb25zdCBQYXN0ZWJvYXJkSW1hZ2UmKTsKKyAgICB2b2lkIHdyaXRlKGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYpOworICAgIFBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiByZWFkQnVmZmVyKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkVHlwZSk7CisgICAgU3RyaW5nIHJlYWRTdHJpbmcoaW50IGluZGV4LCBjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmRUeXBlKTsKKyAgICBVUkwgcmVhZFVSTChpbnQgaW5kZXgsIGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZFR5cGUpOworICAgIGludCBjb3VudCgpOwogCiBwcml2YXRlOgogI2lmIFBM
QVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9QYXN0ZWJvYXJkSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9QYXN0ZWJvYXJkSU9TLm1tCShyZXZpc2lvbiAxNTY1NjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGFzdGVib2FyZElPUy5tbQkod29ya2luZyBjb3B5KQpAQCAt
NTksMTIgKzU5LDEwIEBAIC0gKE5TRGF0YSAqKVJURkRGcm9tUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UK
IC0gKEJPT0wpY29udGFpbnNBdHRhY2htZW50czsKIEBlbmQKIAotLy8gRklYTUU6IHRoZSBmb2xs
b3dpbmcgc29mdCBsaW5raW5nIGFuZCAjZGVmaW5lIG5lZWRzIHRvIGJlIHNoYXJlZAotLy8gd2l0
aCBQbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0KKy8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIHNvZnQg
bGlua2luZyBhbmQgI2RlZmluZSBuZWVkcyB0byBiZSBzaGFyZWQgd2l0aCBQbGF0Zm9ybVBhc3Rl
Ym9hcmRJT1MubW0gYW5kIEVkaXRvcklPUy5tbQogCiBTT0ZUX0xJTktfRlJBTUVXT1JLKE1vYmls
ZUNvcmVTZXJ2aWNlcykKIAotU09GVF9MSU5LKE1vYmlsZUNvcmVTZXJ2aWNlcywgVVRUeXBlQ29u
Zm9ybXNUbywgQm9vbGVhbiwgKENGU3RyaW5nUmVmIGluVVRJLCBDRlN0cmluZ1JlZiBpbkNvbmZv
cm1zVG9VVEkpLCAoaW5VVEksIGluQ29uZm9ybXNUb1VUSSkpCiBTT0ZUX0xJTksoTW9iaWxlQ29y
ZVNlcnZpY2VzLCBVVFR5cGVDcmVhdGVQcmVmZXJyZWRJZGVudGlmaWVyRm9yVGFnLCBDRlN0cmlu
Z1JlZiwgKENGU3RyaW5nUmVmIGluVGFnQ2xhc3MsIENGU3RyaW5nUmVmIGluVGFnLCBDRlN0cmlu
Z1JlZiBpbkNvbmZvcm1pbmdUb1VUSSksIChpblRhZ0NsYXNzLCBpblRhZywgaW5Db25mb3JtaW5n
VG9VVEkpKQogU09GVF9MSU5LKE1vYmlsZUNvcmVTZXJ2aWNlcywgVVRUeXBlQ29weVByZWZlcnJl
ZFRhZ1dpdGhDbGFzcywgQ0ZTdHJpbmdSZWYsIChDRlN0cmluZ1JlZiBpblVUSSwgQ0ZTdHJpbmdS
ZWYgaW5UYWdDbGFzcyksIChpblVUSSwgaW5UYWdDbGFzcykpCiAKQEAgLTkwLDE2ICs4OCwzMSBA
QCBTT0ZUX0xJTktfQ09OU1RBTlQoTW9iaWxlQ29yZVNlcnZpY2VzLCBrCiAjZGVmaW5lIGtVVFR5
cGVSVEZEIGdldGtVVFR5cGVSVEZEKCkKICNkZWZpbmUga1VUVHlwZVJURiBnZXRrVVRUeXBlUlRG
KCkKIAotU09GVF9MSU5LX0ZSQU1FV09SSyhBcHBTdXBwb3J0KQotU09GVF9MSU5LKEFwcFN1cHBv
cnQsIENQU2hhcmVkUmVzb3VyY2VzRGlyZWN0b3J5LCBDRlN0cmluZ1JlZiwgKHZvaWQpLCAoKSkK
LQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBGSVhNRTogRG9lcyB0aGlzIG5lZWQgdG8gYmUg
ZGVjbGFyZWQgaW4gdGhlIGhlYWRlciBmaWxlPwogTlNTdHJpbmcgKldlYkFyY2hpdmVQYm9hcmRU
eXBlID0gQCJBcHBsZSBXZWIgQXJjaGl2ZSBwYXN0ZWJvYXJkIHR5cGUiOwogCisvLyBNYWtpbmcg
dGhpcyBub24taW5saW5lIHNvIHRoYXQgV2ViS2l0IDIncyBkZWNvZGluZyBkb2Vzbid0IGhhdmUg
dG8gaW5jbHVkZSBTaGFyZWRCdWZmZXIuaC4KK1Bhc3RlYm9hcmRXZWJDb250ZW50OjpQYXN0ZWJv
YXJkV2ViQ29udGVudCgpCit7Cit9CisKK1Bhc3RlYm9hcmRXZWJDb250ZW50Ojp+UGFzdGVib2Fy
ZFdlYkNvbnRlbnQoKQoreworfQorICAgIAorLy8gTWFraW5nIHRoaXMgbm9uLWlubGluZSBzbyB0
aGF0IFdlYktpdCAyJ3MgZGVjb2RpbmcgZG9lc24ndCBoYXZlIHRvIGluY2x1ZGUgSW1hZ2UuaC4K
K1Bhc3RlYm9hcmRJbWFnZTo6UGFzdGVib2FyZEltYWdlKCkKK3sKK30KKworUGFzdGVib2FyZElt
YWdlOjp+UGFzdGVib2FyZEltYWdlKCkKK3sKK30KKwogUGFzdGVib2FyZDo6UGFzdGVib2FyZCgp
Ci0gICAgOiBtX2ZyYW1lKDApCisgICAgOiBtX2NoYW5nZUNvdW50KHBsYXRmb3JtU3RyYXRlZ2ll
cygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Y2hhbmdlQ291bnQoKSkKIHsKIH0KIApAQCAtNDk1
LDYwICs1MDgsNDQgQEAgdm9pZCBQYXN0ZWJvYXJkOjpjbGVhcihjb25zdCBTdHJpbmcmIHR5cAog
ICAgIGlmICghY29jb2FUeXBlKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBGSVhNRTogU2hv
dWxkIHdyaXRlIHRoaXMgd2l0aCBAe30gc3ludGF4LgotICAgIFJldGFpblB0cjxOU0RpY3Rpb25h
cnk+IHJlcHJlc2VudGF0aW9ucyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9j
XSBpbml0XSk7Ci0gICAgW3JlcHJlc2VudGF0aW9ucy5nZXQoKSBzZXRWYWx1ZTowIGZvcktleTpj
b2NvYVR5cGUuZ2V0KCldOwotICAgIG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT53cml0ZURh
dGFUb1Bhc3RlYm9hcmQocmVwcmVzZW50YXRpb25zLmdldCgpKTsKKyAgICBwbGF0Zm9ybVN0cmF0
ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPndyaXRlVG9QYXN0ZWJvYXJkKGNvY29hVHlw
ZS5nZXQoKSwgU3RyaW5nKCkpOwogfQogCiB2b2lkIFBhc3RlYm9hcmQ6OmNsZWFyKCkKIHsKLSAg
ICBtX2ZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+d3JpdGVEYXRhVG9QYXN0ZWJvYXJkKEB7fSk7
CisgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT53cml0ZVRv
UGFzdGVib2FyZChTdHJpbmcoKSwgU3RyaW5nKCkpOwogfQogCiBTdHJpbmcgUGFzdGVib2FyZDo6
cmVhZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUpCiB7Ci0gICAgUmV0YWluUHRyPE5TU3RyaW5n
PiBjb2NvYVR5cGUgPSBjb2NvYVR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUodHlwZSk7CisgICAg
UGFzdGVib2FyZFN0cmF0ZWd5JiBzdHJhdGVneSA9ICpwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFz
dGVib2FyZFN0cmF0ZWd5KCk7CiAKLSAgICAvLyBHcmFiIHRoZSB2YWx1ZSBvZmYgdGhlIHBhc3Rl
Ym9hcmQgY29ycmVzcG9uZGluZyB0byB0aGUgY29jb2FUeXBlLgotICAgIFJldGFpblB0cjxOU0Fy
cmF5PiBwYXN0ZWJvYXJkSXRlbSA9IG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT5yZWFkRGF0
YUZyb21QYXN0ZWJvYXJkKGNvY29hVHlwZS5nZXQoKSwgMCk7CisgICAgaW50IG51bWJlck9mSXRl
bXMgPSBzdHJhdGVneS5nZXRQYXN0ZWJvYXJkSXRlbXNDb3VudCgpOwogCi0gICAgaWYgKFtwYXN0
ZWJvYXJkSXRlbS5nZXQoKSBjb3VudF0gPT0gMCkKKyAgICBpZiAoIW51bWJlck9mSXRlbXMpCiAg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIE5TU3RyaW5nICpjb2NvYVZhbHVlID0gbmls
OwotCi0gICAgaWYgKFtjb2NvYVR5cGUuZ2V0KCkgaXNFcXVhbFRvU3RyaW5nOihOU1N0cmluZyAq
KWtVVFR5cGVVUkxdKSB7Ci0gICAgICAgIGlkIHZhbHVlID0gW3Bhc3RlYm9hcmRJdGVtLmdldCgp
IG9iamVjdEF0SW5kZXg6MF07Ci0gICAgICAgIGlmICghW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05T
VVJMIGNsYXNzXV0pIHsKLSAgICAgICAgICAgIEFTU0VSVChbdmFsdWUgaXNLaW5kT2ZDbGFzczpb
TlNVUkwgY2xhc3NdXSk7Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgTlNVUkwqIGFic29sdXRlVVJMID0gKE5TVVJMKil2YWx1ZTsKKyAgICAvLyBHcmFi
IHRoZSB2YWx1ZSBvZmYgdGhlIHBhc3RlYm9hcmQgY29ycmVzcG9uZGluZyB0byB0aGUgY29jb2FU
eXBlLgorICAgIFJldGFpblB0cjxOU1N0cmluZz4gY29jb2FUeXBlID0gY29jb2FUeXBlRnJvbUhU
TUxDbGlwYm9hcmRUeXBlKHR5cGUpOwogCi0gICAgICAgIGlmIChhYnNvbHV0ZVVSTCkKLSAgICAg
ICAgICAgIGNvY29hVmFsdWUgPSBbYWJzb2x1dGVVUkwgYWJzb2x1dGVTdHJpbmddOwotICAgIH0g
ZWxzZSBpZiAoW2NvY29hVHlwZS5nZXQoKSBpc0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5nICopa1VU
VHlwZVRleHRdKSB7Ci0gICAgICAgIGlkIHZhbHVlID0gW3Bhc3RlYm9hcmRJdGVtLmdldCgpIG9i
amVjdEF0SW5kZXg6MF07Ci0gICAgICAgIGlmICghW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TU3Ry
aW5nIGNsYXNzXV0pIHsKLSAgICAgICAgICAgIEFTU0VSVChbdmFsdWUgaXNLaW5kT2ZDbGFzczpb
TlNTdHJpbmcgY2xhc3NdXSk7Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgICAg
IH0KKyAgICBOU1N0cmluZyAqY29jb2FWYWx1ZSA9IG5pbDsKIAotICAgICAgICBjb2NvYVZhbHVl
ID0gWyhOU1N0cmluZyAqKXZhbHVlIHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBp
bmddOworICAgIGlmIChbY29jb2FUeXBlIGlzRXF1YWxUb1N0cmluZzooTlNTdHJpbmcgKilrVVRU
eXBlVVJMXSkgeworICAgICAgICBVUkwgdXJsID0gc3RyYXRlZ3kucmVhZFVSTEZyb21QYXN0ZWJv
YXJkKDAsIGtVVFR5cGVVUkwpOworICAgICAgICBpZiAoIXVybC5pc051bGwoKSkKKyAgICAgICAg
ICAgIGNvY29hVmFsdWUgPSBbKE5TVVJMICopdXJsIGFic29sdXRlU3RyaW5nXTsKKyAgICB9IGVs
c2UgaWYgKFtjb2NvYVR5cGUgaXNFcXVhbFRvU3RyaW5nOihOU1N0cmluZyAqKWtVVFR5cGVUZXh0
XSkgeworICAgICAgICBTdHJpbmcgdmFsdWUgPSBzdHJhdGVneS5yZWFkU3RyaW5nRnJvbVBhc3Rl
Ym9hcmQoMCwga1VUVHlwZVRleHQpOworICAgICAgICBpZiAoIXZhbHVlLmlzTnVsbCgpKQorICAg
ICAgICAgICAgY29jb2FWYWx1ZSA9IFsoTlNTdHJpbmcgKil2YWx1ZSBwcmVjb21wb3NlZFN0cmlu
Z1dpdGhDYW5vbmljYWxNYXBwaW5nXTs7CiAgICAgfSBlbHNlIGlmIChjb2NvYVR5cGUpIHsKLSAg
ICAgICAgQVNTRVJUKFtwYXN0ZWJvYXJkSXRlbS5nZXQoKSBjb3VudF0gPT0gMSk7Ci0gICAgICAg
IGlkIHZhbHVlID0gW3Bhc3RlYm9hcmRJdGVtLmdldCgpIG9iamVjdEF0SW5kZXg6MF07Ci0gICAg
ICAgIGlmICghW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TRGF0YSBjbGFzc11dKSB7Ci0gICAgICAg
ICAgICBBU1NFUlQoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TRGF0YSBjbGFzc11dKTsKLSAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICAgICAgfQotICAgICAgICBjb2NvYVZhbHVlID0g
W1tbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTooTlNEYXRhICopdmFsdWUgZW5jb2Rpbmc6
TlNVVEY4U3RyaW5nRW5jb2RpbmddIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgaWYgKFJlZlB0cjxT
aGFyZWRCdWZmZXI+IGJ1ZmZlciA9IHN0cmF0ZWd5LnJlYWRCdWZmZXJGcm9tUGFzdGVib2FyZCgw
LCBjb2NvYVR5cGUuZ2V0KCkpKQorICAgICAgICAgICAgY29jb2FWYWx1ZSA9IFtbW05TU3RyaW5n
IGFsbG9jXSBpbml0V2l0aERhdGE6YnVmZmVyLT5jcmVhdGVOU0RhdGEoKSBlbmNvZGluZzpOU1VU
RjhTdHJpbmdFbmNvZGluZ10gYXV0b3JlbGVhc2VdOwogICAgIH0KIAogICAgIC8vIEVuZm9yY2Ug
Y2hhbmdlQ291bnQgb3Vyc2VsdmVzIGZvciBzZWN1cml0eS4gV2UgY2hlY2sgYWZ0ZXIgcmVhZGlu
ZyBpbnN0ZWFkIG9mIGJlZm9yZSB0byBiZQogICAgIC8vIHN1cmUgaXQgZG9lc24ndCBjaGFuZ2Ug
YmV0d2VlbiBvdXIgdGVzdGluZyB0aGUgY2hhbmdlIGNvdW50IGFuZCBhY2Nlc3NpbmcgdGhlIGRh
dGEuCi0gICAgaWYgKGNvY29hVmFsdWUgJiYgbV9jaGFuZ2VDb3VudCA9PSBtX2ZyYW1lLT5lZGl0
b3IoKS5jbGllbnQoKS0+cGFzdGVib2FyZENoYW5nZUNvdW50KCkpCisgICAgaWYgKGNvY29hVmFs
dWUgJiYgbV9jaGFuZ2VDb3VudCA9PSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0
cmF0ZWd5KCktPmNoYW5nZUNvdW50KCkpCiAgICAgICAgIHJldHVybiBjb2NvYVZhbHVlOwogCiAg
ICAgcmV0dXJuIFN0cmluZygpOwpAQCAtNTgwLDE5ICs1NzcsOCBAQCBib29sIFBhc3RlYm9hcmQ6
OndyaXRlU3RyaW5nKGNvbnN0IFN0cmluCiAgICAgaWYgKCFjb2NvYVR5cGUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIE5TU3RyaW5nICpjb2NvYURhdGEgPSBkYXRhOwotICAgIFJldGFp
blB0cjxOU09iamVjdD4gdmFsdWU7CisgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9h
cmRTdHJhdGVneSgpLT53cml0ZVRvUGFzdGVib2FyZCh0eXBlLCBkYXRhKTsKIAotICAgIGlmIChb
Y29jb2FUeXBlLmdldCgpIGlzRXF1YWxUb1N0cmluZzooTlNTdHJpbmcgKilrVVRUeXBlVVJMXSkK
LSAgICAgICAgdmFsdWUgPSBhZG9wdE5TKFtbTlNVUkwgYWxsb2NdIGluaXRXaXRoU3RyaW5nOmNv
Y29hRGF0YV0pOwotICAgIGVsc2UgewotICAgICAgICAvLyBFdmVyeSBvdGhlciB0eXBlIHdlIGhh
bmRsZSBnb2VzIG9uIHRoZSBwYXN0ZWJvYXJkIGFzIGEgc3RyaW5nLgotICAgICAgICB2YWx1ZSA9
IGNvY29hRGF0YTsKLSAgICB9Ci0KLSAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiByZXByZXNl
bnRhdGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwot
ICAgIFtyZXByZXNlbnRhdGlvbnMuZ2V0KCkgc2V0VmFsdWU6dmFsdWUuZ2V0KCkgZm9yS2V5OmNv
Y29hVHlwZS5nZXQoKV07Ci0gICAgbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPndyaXRlRGF0
YVRvUGFzdGVib2FyZChyZXByZXNlbnRhdGlvbnMuZ2V0KCkpOwogICAgIHJldHVybiB0cnVlOwog
fQogCkBAIC02MDIsNyArNTg4LDcgQEAgVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXMo
KQogCiAgICAgLy8gRW5mb3JjZSBjaGFuZ2VDb3VudCBvdXJzZWx2ZXMgZm9yIHNlY3VyaXR5LiBX
ZSBjaGVjayBhZnRlciByZWFkaW5nIGluc3RlYWQgb2YgYmVmb3JlIHRvIGJlCiAgICAgLy8gc3Vy
ZSBpdCBkb2Vzbid0IGNoYW5nZSBiZXR3ZWVuIG91ciB0ZXN0aW5nIHRoZSBjaGFuZ2UgY291bnQg
YW5kIGFjY2Vzc2luZyB0aGUgZGF0YS4KLSAgICBpZiAobV9jaGFuZ2VDb3VudCAhPSBtX2ZyYW1l
LT5lZGl0b3IoKS5jbGllbnQoKS0+cGFzdGVib2FyZENoYW5nZUNvdW50KCkpCisgICAgaWYgKG1f
Y2hhbmdlQ291bnQgIT0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgp
LT5jaGFuZ2VDb3VudCgpKQogICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKIAogICAg
IExpc3RIYXNoU2V0PFN0cmluZz4gcmVzdWx0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tCShyZXZpc2lvbiAxNTY1
NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9T
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNi0yMDEzIEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDEwICszNiwxMyBAQCBTT0ZUX0xJTktf
Q0xBU1MoVUlLaXQsIFVJUGFzdGVib2FyZCkKIEBpbnRlcmZhY2UgVUlQYXN0ZWJvYXJkCiArIChV
SVBhc3RlYm9hcmQgKilnZW5lcmFsUGFzdGVib2FyZDsKIC0gKHZvaWQpc2V0SXRlbXM6KE5TQXJy
YXkgKilpdGVtczsKK0Bwcm9wZXJ0eShyZWFkb25seSxub25hdG9taWMpIE5TSW50ZWdlciBudW1i
ZXJPZkl0ZW1zOworLSAoTlNBcnJheSAqKWRhdGFGb3JQYXN0ZWJvYXJkVHlwZTooTlNTdHJpbmcg
KilwYXN0ZWJvYXJkVHlwZSBpbkl0ZW1TZXQ6KE5TSW5kZXhTZXQgKilpdGVtU2V0OworLSAoTlNB
cnJheSAqKXZhbHVlc0ZvclBhc3RlYm9hcmRUeXBlOihOU1N0cmluZyAqKXBhc3RlYm9hcmRUeXBl
IGluSXRlbVNldDooTlNJbmRleFNldCAqKWl0ZW1TZXQ7CistIChOU0ludGVnZXIpY2hhbmdlQ291
bnQ7CiBAZW5kCiAKLS8vIEZJWE1FOiB0aGUgZm9sbG93aW5nIHNvZnQgbGlua2luZyBhbmQgI2Rl
ZmluZSBuZWVkcyB0byBiZSBzaGFyZWQKLS8vIHdpdGggUGFzdGVib2FyZElPUy5tbS4KKy8vIEZJ
WE1FOiBUaGUgZm9sbG93aW5nIHNvZnQgbGlua2luZyBhbmQgI2RlZmluZSBuZWVkcyB0byBiZSBz
aGFyZWQgd2l0aCBQYXN0ZWJvYXJkSU9TLm1tLgogU09GVF9MSU5LX0ZSQU1FV09SSyhNb2JpbGVD
b3JlU2VydmljZXMpCiAKIFNPRlRfTElOS19DT05TVEFOVChNb2JpbGVDb3JlU2VydmljZXMsIGtV
VFR5cGVUZXh0LCBDRlN0cmluZ1JlZikKQEAgLTEzNiw3ICsxMzksNyBAQCBsb25nIFBsYXRmb3Jt
UGFzdGVib2FyZDo6c2V0U3RyaW5nRm9yVHlwCiAKIGxvbmcgUGxhdGZvcm1QYXN0ZWJvYXJkOjpj
aGFuZ2VDb3VudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIFttX3Bhc3Rl
Ym9hcmQgY2hhbmdlQ291bnRdOwogfQogCiBTdHJpbmcgUGxhdGZvcm1QYXN0ZWJvYXJkOjp1bmlx
dWVOYW1lKCkKQEAgLTE1Niw3ICsxNTksNyBAQCB2b2lkIFBsYXRmb3JtUGFzdGVib2FyZDo6d3Jp
dGUoY29uc3QgUGFzCiAgICAgaWYgKGNvbnRlbnQuZGF0YUluUlRGRm9ybWF0KQogICAgICAgICBb
cmVwcmVzZW50YXRpb25zIHNldFZhbHVlOmNvbnRlbnQuZGF0YUluUlRGRm9ybWF0LT5jcmVhdGVO
U0RhdGEoKSBmb3JLZXk6KE5TU3RyaW5nICopa1VUVHlwZVJURl07CiAgICAgW3JlcHJlc2VudGF0
aW9ucyBzZXRWYWx1ZTpjb250ZW50LmRhdGFJblN0cmluZ0Zvcm1hdCBmb3JLZXk6KE5TU3RyaW5n
ICopa1VUVHlwZVRleHRdOwotICAgIFttX3Bhc3RlYm9hcmQgc2V0SXRlbXM6W05TQXJyYXkgYXJy
YXlXaXRoT2JqZWN0OnJlcHJlc2VudGF0aW9ucy5nZXQoKV1dOworICAgIFttX3Bhc3RlYm9hcmQg
c2V0SXRlbXM6QFtyZXByZXNlbnRhdGlvbnMuZ2V0KCldXTsKIH0KIAogdm9pZCBQbGF0Zm9ybVBh
c3RlYm9hcmQ6OndyaXRlKGNvbnN0IFBhc3RlYm9hcmRJbWFnZSYgcGFzdGVib2FyZEltYWdlKQpA
QCAtMTY2LDE0ICsxNjksNjggQEAgdm9pZCBQbGF0Zm9ybVBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0
IFBhcwogICAgICAgICBbcmVwcmVzZW50YXRpb25zIHNldE9iamVjdDpwYXN0ZWJvYXJkSW1hZ2Uu
aW1hZ2UtPmRhdGEoKS0+Y3JlYXRlTlNEYXRhKCkgZm9yS2V5OnBhc3RlYm9hcmRJbWFnZS5yZXNv
dXJjZU1JTUVUeXBlXTsKICAgICAgICAgW3JlcHJlc2VudGF0aW9ucyBzZXRPYmplY3Q6KE5TU3Ry
aW5nICopcGFzdGVib2FyZEltYWdlLnVybC51cmwgZm9yS2V5OihOU1N0cmluZyAqKWtVVFR5cGVV
UkxdOwogICAgIH0KLSAgICBbbV9wYXN0ZWJvYXJkIHNldEl0ZW1zOltOU0FycmF5IGFycmF5V2l0
aE9iamVjdDpyZXByZXNlbnRhdGlvbnMuZ2V0KCldXTsKKyAgICBbbV9wYXN0ZWJvYXJkIHNldEl0
ZW1zOkBbcmVwcmVzZW50YXRpb25zLmdldCgpXV07CiB9CiAKLXZvaWQgUGxhdGZvcm1QYXN0ZWJv
YXJkOjp3cml0ZShjb25zdCBTdHJpbmcmIHRleHQpCit2b2lkIFBsYXRmb3JtUGFzdGVib2FyZDo6
d3JpdGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0KQog
ewogICAgIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+IHJlcHJlc2VudGF0aW9ucyA9IGFkb3B0TlMo
W1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7Ci0gICAgW3JlcHJlc2VudGF0aW9u
cyBzZXRWYWx1ZTp0ZXh0IGZvcktleTooTlNTdHJpbmcgKilrVVRUeXBlVGV4dF07Ci0gICAgW21f
cGFzdGVib2FyZCBzZXRJdGVtczpbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6cmVwcmVzZW50YXRp
b25zLmdldCgpXV07CisKKyAgICBpZiAocGFzdGVib2FyZFR5cGUgPT0gU3RyaW5nKGtVVFR5cGVV
UkwpKQorICAgICAgICBbcmVwcmVzZW50YXRpb25zIHNldFZhbHVlOltbW05TVVJMIGFsbG9jXSBp
bml0V2l0aFN0cmluZzp0ZXh0XSBhdXRvcmVsZWFzZV0gZm9yS2V5OnBhc3RlYm9hcmRUeXBlXTsK
KyAgICBlbHNlIGlmICghcGFzdGVib2FyZFR5cGUuaXNOdWxsKCkpCisgICAgICAgIFtyZXByZXNl
bnRhdGlvbnMgc2V0VmFsdWU6dGV4dCBmb3JLZXk6cGFzdGVib2FyZFR5cGVdOworICAgIFttX3Bh
c3RlYm9hcmQgc2V0SXRlbXM6QFtyZXByZXNlbnRhdGlvbnMuZ2V0KCldXTsKK30KKworaW50IFBs
YXRmb3JtUGFzdGVib2FyZDo6Y291bnQoKQoreworICAgIHJldHVybiBbbV9wYXN0ZWJvYXJkIG51
bWJlck9mSXRlbXNdOworfQorCitQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gUGxhdGZvcm1QYXN0
ZWJvYXJkOjpyZWFkQnVmZmVyKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAg
IE5TSW5kZXhTZXQgKmluZGV4U2V0ID0gW05TSW5kZXhTZXQgaW5kZXhTZXRXaXRoSW5kZXg6aW5k
ZXhdOworCisgICAgUmV0YWluUHRyPE5TQXJyYXk+IHBhc3RlYm9hcmRJdGVtID0gW21fcGFzdGVi
b2FyZCBkYXRhRm9yUGFzdGVib2FyZFR5cGU6dHlwZSBpbkl0ZW1TZXQ6aW5kZXhTZXRdOworCisg
ICAgaWYgKCFbcGFzdGVib2FyZEl0ZW0uZ2V0KCkgY291bnRdKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRhKFtwYXN0ZWJvYXJkSXRl
bS5nZXQoKSBvYmplY3RBdEluZGV4OjBdKTsKK30KKworU3RyaW5nIFBsYXRmb3JtUGFzdGVib2Fy
ZDo6cmVhZFN0cmluZyhpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBOU0lu
ZGV4U2V0ICppbmRleFNldCA9IFtOU0luZGV4U2V0IGluZGV4U2V0V2l0aEluZGV4OmluZGV4XTsK
KworICAgIFJldGFpblB0cjxOU0FycmF5PiBwYXN0ZWJvYXJkSXRlbSA9IFttX3Bhc3RlYm9hcmQg
dmFsdWVzRm9yUGFzdGVib2FyZFR5cGU6dHlwZSBpbkl0ZW1TZXQ6aW5kZXhTZXRdOworCisgICAg
aWYgKCFbcGFzdGVib2FyZEl0ZW0uZ2V0KCkgY291bnRdKQorICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CisKKyAgICBpZCB2YWx1ZSA9IFtwYXN0ZWJvYXJkSXRlbS5nZXQoKSBvYmplY3RBdEluZGV4
OjBdOworICAgIEFTU0VSVChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSk7
CisgICAgaWYgKCFbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkgeworICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorICAgIHJldHVybiBTdHJpbmcodmFsdWUpOwor
fQorCitVUkwgUGxhdGZvcm1QYXN0ZWJvYXJkOjpyZWFkVVJMKGludCBpbmRleCwgY29uc3QgU3Ry
aW5nJiB0eXBlKQoreworICAgIE5TSW5kZXhTZXQgKmluZGV4U2V0ID0gW05TSW5kZXhTZXQgaW5k
ZXhTZXRXaXRoSW5kZXg6aW5kZXhdOworCisgICAgUmV0YWluUHRyPE5TQXJyYXk+IHBhc3RlYm9h
cmRJdGVtID0gW21fcGFzdGVib2FyZCB2YWx1ZXNGb3JQYXN0ZWJvYXJkVHlwZTp0eXBlIGluSXRl
bVNldDppbmRleFNldF07CisKKyAgICBpZiAoIVtwYXN0ZWJvYXJkSXRlbS5nZXQoKSBjb3VudF0p
CisgICAgICAgIHJldHVybiBVUkwoKTsKKworICAgIGlkIHZhbHVlID0gW3Bhc3RlYm9hcmRJdGVt
LmdldCgpIG9iamVjdEF0SW5kZXg6MF07CisgICAgaWYgKCFbdmFsdWUgaXNLaW5kT2ZDbGFzczpb
TlNVUkwgY2xhc3NdXSkgeworICAgICAgICBBU1NFUlQoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05T
VVJMIGNsYXNzXV0pOworICAgICAgICByZXR1cm4gVVJMKCk7CisgICAgfQorICAgIHJldHVybiAo
TlNVUkwgKil2YWx1ZTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1Bhc3RlYm9hcmRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1Bhc3RlYm9hcmRNYWMubW0JKHJldmlzaW9uIDE1NjU2NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3
MiwyNCBAQCBjb25zdCBjaGFyIFdlYlNtYXJ0UGFzdGVQYm9hcmRUeXBlW10gPSAiCiBjb25zdCBj
aGFyIFdlYlVSTFBib2FyZFR5cGVbXSA9ICJwdWJsaWMudXJsIjsKIGNvbnN0IGNoYXIgV2ViVVJM
c1dpdGhUaXRsZXNQYm9hcmRUeXBlW10gPSAiV2ViVVJMc1dpdGhUaXRsZXNQYm9hcmRUeXBlIjsK
IAorLy8gTWFraW5nIHRoaXMgbm9uLWlubGluZSBzbyB0aGF0IFdlYktpdCAyJ3MgZGVjb2Rpbmcg
ZG9lc24ndCBoYXZlIHRvIGluY2x1ZGUgU2hhcmVkQnVmZmVyLmguCitQYXN0ZWJvYXJkV2ViQ29u
dGVudDo6UGFzdGVib2FyZFdlYkNvbnRlbnQoKQoreworfQorCitQYXN0ZWJvYXJkV2ViQ29udGVu
dDo6flBhc3RlYm9hcmRXZWJDb250ZW50KCkKK3sKK30KKworLy8gTWFraW5nIHRoaXMgbm9uLWlu
bGluZSBzbyB0aGF0IFdlYktpdCAyJ3MgZGVjb2RpbmcgZG9lc24ndCBoYXZlIHRvIGluY2x1ZGUg
SW1hZ2UuaC4KK1Bhc3RlYm9hcmRJbWFnZTo6UGFzdGVib2FyZEltYWdlKCkKK3sKK30KKworUGFz
dGVib2FyZEltYWdlOjp+UGFzdGVib2FyZEltYWdlKCkKK3sKK30KKwogc3RhdGljIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+IHdyaXRhYmxlVHlwZXNGb3JVUkwoKQogewogICAgIFZlY3RvcjxTdHJpbmc+
IHR5cGVzOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtUGFzdGVi
b2FyZE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxh
dGZvcm1QYXN0ZWJvYXJkTWFjLm1tCShyZXZpc2lvbiAxNTY1NjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw2ICsyNyw3IEBACiAjaW1wb3J0ICJDb2xvci5oIgogI2ltcG9ydCAiVVJMLmgiCiAjaW1w
b3J0ICJQbGF0Zm9ybVBhc3RlYm9hcmQuaCIKKyNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjU3MSkKKysr
IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBA
CisyMDEzLTA5LTI3ICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAg
ICAgVXBzdHJlYW0gY2hhbmdlcyB0byBQYXN0ZWJvYXJkIGltcGxlbWVudGF0aW9uIGZvciBpT1Mu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE4MTgK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJl
ZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoQ29yZUlQQzo6ZGVjb2RlU2hh
cmVkQnVmZmVyKToKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYkNvbnRleHQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
Q29udGV4dC5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRN
YWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OndyaXRlV2ViQ29udGVudFRvUGFz
dGVib2FyZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OndyaXRlSW1hZ2VUb1Bhc3Rl
Ym9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0Ojp3cml0ZVN0cmluZ1RvUGFzdGVi
b2FyZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OnJlYWRTdHJpbmdGcm9tUGFzdGVi
b2FyZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OnJlYWRVUkxGcm9tUGFzdGVib2Fy
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OnJlYWRCdWZmZXJGcm9tUGFzdGVib2Fy
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OmdldFBhc3RlYm9hcmRJdGVtc0NvdW50
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRl
Z2llcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6d3JpdGVU
b1Bhc3RlYm9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6Omdl
dFBhc3RlYm9hcmRJdGVtc0NvdW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJh
dGVnaWVzOjpyZWFkQnVmZmVyRnJvbVBhc3RlYm9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OnJlYWRVUkxGcm9tUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6cmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjaGFuZ2VDb3VudCk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaDoK
KwogMjAxMy0wOS0yNyAgUmFscGggVGhvbWFzICA8cmFscGh0QGdtYWlsLmNvbT4KIAogICAgICAg
ICBbV0syXVtDb29yZGluYXRlZEdyYXBoaWNzXSBmaXggYnVpbGQgYWZ0ZXIgcjE1NjU2MApJbmRl
eDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJ
KHJldmlzaW9uIDE1NjU2NCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1l
bnRDb2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OTAsNiArNzkwLDcgQEAgYm9vbCBBcmd1
bWVudENvZGVyPERhdGFiYXNlRGV0YWlscz46OmRlYwogI2VuZGlmCiAKICNpZiBQTEFURk9STShJ
T1MpCisKIHN0YXRpYyB2b2lkIGVuY29kZVNoYXJlZEJ1ZmZlcihBcmd1bWVudEVuY29kZXImIGVu
Y29kZXIsIFNoYXJlZEJ1ZmZlciogYnVmZmVyKQogewogICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxl
IGhhbmRsZTsKQEAgLTgxNCw3ICs4MTUsNyBAQCBzdGF0aWMgYm9vbCBkZWNvZGVTaGFyZWRCdWZm
ZXIoQXJndW1lbnRECiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgUmVmUHRy
PFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5QnVmZmVyID0gU2hhcmVkTWVtb3J5OjpjcmVhdGUo
aGFuZGxlLCBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KTsKLSAgICAgICAgYnVmZmVyID0gU2hhcmVk
QnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhciAqPihzaGFyZWRNZW1vcnlC
dWZmZXItPmRhdGEoKSksIGJ1ZmZlclNpemUpOworICAgICAgICBidWZmZXIgPSBTaGFyZWRCdWZm
ZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oc2hhcmVkTWVtb3J5QnVmZmVy
LT5kYXRhKCkpLCBidWZmZXJTaXplKTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgJKHJldmlz
aW9uIDE1NjU2NCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2Rl
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgc3RydWN0IEZpbGVDaG9vc2VyU2V0dGluZ3M7CiAgICAgc3RydWN0IEdyYW1tYXJEZXRh
aWw7CiAgICAgc3RydWN0IE1pbWVDbGFzc0luZm87CisgICAgc3RydWN0IFBhc3RlYm9hcmRJbWFn
ZTsKKyAgICBzdHJ1Y3QgUGFzdGVib2FyZFdlYkNvbnRlbnQ7CiAgICAgc3RydWN0IFBsdWdpbklu
Zm87CiAgICAgc3RydWN0IFRleHRDaGVja2luZ1Jlc3VsdDsKICAgICBzdHJ1Y3QgVmlld3BvcnRB
dHRyaWJ1dGVzOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oCShyZXZp
c2lvbiAxNTY1NjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw2IEBACiAjaW5jbHVkZSAiV2ViSGlzdG9yeUNsaWVu
dC5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvTGlu
a0hhc2guaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Bhc3RlYm9hcmQuaD4KICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KQEAgLTMyMSw5ICszMjAsMTMgQEAgcHJpdmF0ZToKIAogI2lmIFBMQVRGT1JNKE1BQykK
ICNpZiBQTEFURk9STShJT1MpCi0gICAgdm9pZCB3cml0ZVdlYkNvbnRlbnRUb1Bhc3RlYm9hcmQo
Y29uc3QgV2ViQ29yZTo6UGFzdGVib2FyZFdlYkNvbnRlbnQmIGNvbnRlbnQpOwotICAgIHZvaWQg
d3JpdGVJbWFnZVRvUGFzdGVib2FyZChjb25zdCBXZWJDb3JlOjpQYXN0ZWJvYXJkSW1hZ2UmIHBh
c3RlYm9hcmRJbWFnZSk7Ci0gICAgdm9pZCB3cml0ZVN0cmluZ1RvUGFzdGVib2FyZChjb25zdCBT
dHJpbmcmIHRleHQpOworICAgIHZvaWQgd3JpdGVXZWJDb250ZW50VG9QYXN0ZWJvYXJkKGNvbnN0
IFdlYkNvcmU6OlBhc3RlYm9hcmRXZWJDb250ZW50Jik7CisgICAgdm9pZCB3cml0ZUltYWdlVG9Q
YXN0ZWJvYXJkKGNvbnN0IFdlYkNvcmU6OlBhc3RlYm9hcmRJbWFnZSYpOworICAgIHZvaWQgd3Jp
dGVTdHJpbmdUb1Bhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3Qg
U3RyaW5nJik7CisgICAgdm9pZCByZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQodWludDY0X3QgaW5k
ZXgsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIFdURjo6U3RyaW5nJik7CisgICAgdm9p
ZCByZWFkVVJMRnJvbVBhc3RlYm9hcmQodWludDY0X3QgaW5kZXgsIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZFR5cGUsIFN0cmluZyYpOworICAgIHZvaWQgcmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJk
KHVpbnQ2NF90IGluZGV4LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBTaGFyZWRNZW1v
cnk6OkhhbmRsZSYsIHVpbnQ2NF90JiBzaXplKTsKKyAgICB2b2lkIGdldFBhc3RlYm9hcmRJdGVt
c0NvdW50KHVpbnQ2NF90JiBpdGVtc0NvdW50KTsKICNlbmRpZgogICAgIHZvaWQgZ2V0UGFzdGVi
b2FyZFR5cGVzKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIFZlY3RvcjxTdHJpbmc+JiBw
YXN0ZWJvYXJkVHlwZXMpOwogICAgIHZvaWQgZ2V0UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5cGUo
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlw
ZSwgVmVjdG9yPFN0cmluZz4mIHBhdGhuYW1lcyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViQ29udGV4dC5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5tZXNzYWdlcy5pbgkocmV2aXNpb24gMTU2NTY0KQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQubWVzc2FnZXMuaW4JKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDcgKzMwLDExIEBAIG1lc3NhZ2VzIC0+IFdlYkNvbnRleHQgTGVnYWN5UmVj
ZWl2ZXIgewogI2lmIFBMQVRGT1JNKElPUykKICAgICBXcml0ZVdlYkNvbnRlbnRUb1Bhc3RlYm9h
cmQoV2ViQ29yZTo6UGFzdGVib2FyZFdlYkNvbnRlbnQgY29udGVudCkKICAgICBXcml0ZUltYWdl
VG9QYXN0ZWJvYXJkKFdlYkNvcmU6OlBhc3RlYm9hcmRJbWFnZSBwYXN0ZWJvYXJkSW1hZ2UpCi0g
ICAgV3JpdGVTdHJpbmdUb1Bhc3RlYm9hcmQoV1RGOjpTdHJpbmcgdGV4dCkKKyAgICBXcml0ZVN0
cmluZ1RvUGFzdGVib2FyZChXVEY6OlN0cmluZyBwYXN0ZWJvYXJkVHlwZSwgV1RGOjpTdHJpbmcg
dGV4dCkgCisgICAgUmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKHVpbnQ2NF90IGluZGV4LCBXVEY6
OlN0cmluZyBwYXN0ZWJvYXJkVHlwZSkgLT4gKFdURjo6U3RyaW5nIHN0cmluZykKKyAgICBSZWFk
VVJMRnJvbVBhc3RlYm9hcmQodWludDY0X3QgaW5kZXgsIFdURjo6U3RyaW5nIHBhc3RlYm9hcmRU
eXBlKSAtPiAoV1RGOjpTdHJpbmcgc3RyaW5nKQorICAgIFJlYWRCdWZmZXJGcm9tUGFzdGVib2Fy
ZCh1aW50NjRfdCBpbmRleCwgV1RGOjpTdHJpbmcgcGFzdGVib2FyZFR5cGUpIC0+IChXZWJLaXQ6
OlNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZSwgdWludDY0X3Qgc2l6ZSkKKyAgICBHZXRQYXN0
ZWJvYXJkSXRlbXNDb3VudCgpIC0+ICh1aW50NjRfdCBpdGVtc0NvdW50KQogI2VuZGlmCiAKICNp
ZiBQTEFURk9STShNQUMpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkNv
bnRleHRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9X
ZWJDb250ZXh0TWFjLm1tCShyZXZpc2lvbiAxNTY1NjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvbWFjL1dlYkNvbnRleHRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcg
QEAKICNpbXBvcnQgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Ob3RJ
bXBsZW1lbnRlZC5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVBhc3RlYm9hcmQuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CiAjaW1wb3J0IDxzeXMvcGFyYW0uaD4KIAog
I2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCkBAIC00NTYsMjAgKzQ1Nyw0NyBAQCB2b2lkIFdl
YkNvbnRleHQ6OnNldFBhc3RlYm9hcmRCdWZmZXJGb3JUCiB9CiAKICNpZiBQTEFURk9STShJT1Mp
Ci12b2lkIFdlYkNvbnRleHQ6OndyaXRlV2ViQ29udGVudFRvUGFzdGVib2FyZChjb25zdCBXZWJD
b3JlOjpQYXN0ZWJvYXJkV2ViQ29udGVudCAmY29udGVudCkKK3ZvaWQgV2ViQ29udGV4dDo6d3Jp
dGVXZWJDb250ZW50VG9QYXN0ZWJvYXJkKGNvbnN0IFdlYkNvcmU6OlBhc3RlYm9hcmRXZWJDb250
ZW50JiBjb250ZW50KQogewogICAgIFBsYXRmb3JtUGFzdGVib2FyZCgpLndyaXRlKGNvbnRlbnQp
OwogfQogCi12b2lkIFdlYkNvbnRleHQ6OndyaXRlSW1hZ2VUb1Bhc3RlYm9hcmQoY29uc3QgV2Vi
Q29yZTo6UGFzdGVib2FyZEltYWdlICZwYXN0ZWJvYXJkSW1hZ2UpCit2b2lkIFdlYkNvbnRleHQ6
OndyaXRlSW1hZ2VUb1Bhc3RlYm9hcmQoY29uc3QgV2ViQ29yZTo6UGFzdGVib2FyZEltYWdlJiBw
YXN0ZWJvYXJkSW1hZ2UpCiB7CiAgICAgUGxhdGZvcm1QYXN0ZWJvYXJkKCkud3JpdGUocGFzdGVi
b2FyZEltYWdlKTsKIH0KIAotdm9pZCBXZWJDb250ZXh0Ojp3cml0ZVN0cmluZ1RvUGFzdGVib2Fy
ZChjb25zdCBTdHJpbmcmIHRleHQpCit2b2lkIFdlYkNvbnRleHQ6OndyaXRlU3RyaW5nVG9QYXN0
ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCkK
IHsKLSAgICBQbGF0Zm9ybVBhc3RlYm9hcmQoKS53cml0ZSh0ZXh0KTsKKyAgICBQbGF0Zm9ybVBh
c3RlYm9hcmQoKS53cml0ZShwYXN0ZWJvYXJkVHlwZSwgdGV4dCk7CiB9CisKK3ZvaWQgV2ViQ29u
dGV4dDo6cmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKHVpbnQ2NF90IGluZGV4LCBjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmRUeXBlLCBXVEY6OlN0cmluZyYgdmFsdWUpCit7CisgICAgdmFsdWUgPSBQ
bGF0Zm9ybVBhc3RlYm9hcmQoKS5yZWFkU3RyaW5nKGluZGV4LCBwYXN0ZWJvYXJkVHlwZSk7Cit9
CisKK3ZvaWQgV2ViQ29udGV4dDo6cmVhZFVSTEZyb21QYXN0ZWJvYXJkKHVpbnQ2NF90IGluZGV4
LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBTdHJpbmcmIHVybCkKK3sKKyAgICB1cmwg
PSBQbGF0Zm9ybVBhc3RlYm9hcmQoKS5yZWFkVVJMKGluZGV4LCBwYXN0ZWJvYXJkVHlwZSk7Cit9
CisKK3ZvaWQgV2ViQ29udGV4dDo6cmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJkKHVpbnQ2NF90IGlu
ZGV4LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYg
aGFuZGxlLCB1aW50NjRfdCYgc2l6ZSkKK3sKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZm
ZXIgPSBQbGF0Zm9ybVBhc3RlYm9hcmQoKS5yZWFkQnVmZmVyKGluZGV4LCBwYXN0ZWJvYXJkVHlw
ZSk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBzaXplID0gYnVmZmVy
LT5zaXplKCk7CisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5QnVmZmVyID0g
U2hhcmVkTWVtb3J5OjpjcmVhdGUoc2l6ZSk7CisgICAgbWVtY3B5KHNoYXJlZE1lbW9yeUJ1ZmZl
ci0+ZGF0YSgpLCBidWZmZXItPmRhdGEoKSwgc2l6ZSk7CisgICAgc2hhcmVkTWVtb3J5QnVmZmVy
LT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KTsKK30KKwordm9p
ZCBXZWJDb250ZXh0OjpnZXRQYXN0ZWJvYXJkSXRlbXNDb3VudCh1aW50NjRfdCYgaXRlbXNDb3Vu
dCkKK3sKKyAgICBpdGVtc0NvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKCkuY291bnQoKTsKK30K
KwogI2VuZGlmCiAKIHZvaWQgV2ViQ29udGV4dDo6c2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxl
ZChib29sIGVuYWJsZWQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3Bw
CShyZXZpc2lvbiAxNTY1NjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwOCwx
NSArNTA4LDYwIEBAIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjp3cml0ZVRvUGFzdGUKICAg
ICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJDb250ZXh0OjpXcml0ZVdlYkNvbnRlbnRUb1Bhc3RlYm9hcmQoY29udGVudCks
IDApOwogfQogCi12b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6d3JpdGVUb1Bhc3RlYm9hcmQo
Y29uc3QgV2ViQ29yZTo6UGFzdGVib2FyZEltYWdlJiBwYXN0ZWJvYXJkSW1hZ2UpCit2b2lkIFdl
YlBsYXRmb3JtU3RyYXRlZ2llczo6d3JpdGVUb1Bhc3RlYm9hcmQoY29uc3QgV2ViQ29yZTo6UGFz
dGVib2FyZEltYWdlJiBpbWFnZSkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb250ZXh0OjpXcml0ZUltYWdl
VG9QYXN0ZWJvYXJkKHBhc3RlYm9hcmRJbWFnZSksIDApOworICAgIFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkNvbnRleHQ6
OldyaXRlSW1hZ2VUb1Bhc3RlYm9hcmQoaW1hZ2UpLCAwKTsKIH0KIAotdm9pZCBXZWJQbGF0Zm9y
bVN0cmF0ZWdpZXM6OndyaXRlVG9QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgdGV4dCkKK3ZvaWQg
V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjp3cml0ZVRvUGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hh
cmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViQ29udGV4
dDo6V3JpdGVTdHJpbmdUb1Bhc3RlYm9hcmQodGV4dCksIDApOworICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkNvbnRl
eHQ6OldyaXRlU3RyaW5nVG9QYXN0ZWJvYXJkKHBhc3RlYm9hcmRUeXBlLCB0ZXh0KSwgMCk7CiB9
CisKK2ludCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCkK
K3sKKyAgICB1aW50NjRfdCBpdGVtc0NvdW50OworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBh
cmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJDb250ZXh0OjpH
ZXRQYXN0ZWJvYXJkSXRlbXNDb3VudCgpLAorICAgICAgICBNZXNzYWdlczo6V2ViQ29udGV4dDo6
R2V0UGFzdGVib2FyZEl0ZW1zQ291bnQ6OlJlcGx5KGl0ZW1zQ291bnQpLCAwKTsKKyAgICByZXR1
cm4gaXRlbXNDb3VudDsKK30KKworUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IFdl
YlBsYXRmb3JtU3RyYXRlZ2llczo6cmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJkKGludCBpbmRleCwg
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSkKK3sKKyAgICBTaGFyZWRNZW1vcnk6OkhhbmRs
ZSBoYW5kbGU7CisgICAgdWludDY0X3Qgc2l6ZSA9IDA7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVk
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYkNvbnRl
eHQ6OlJlYWRCdWZmZXJGcm9tUGFzdGVib2FyZChpbmRleCwgcGFzdGVib2FyZFR5cGUpLAorICAg
ICAgICBNZXNzYWdlczo6V2ViQ29udGV4dDo6UmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJkOjpSZXBs
eShoYW5kbGUsIHNpemUpLCAwKTsKKyAgICBpZiAoaGFuZGxlLmlzTnVsbCgpKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnlCdWZmZXIgPSBT
aGFyZWRNZW1vcnk6OmNyZWF0ZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOworICAg
IHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyICo+
KHNoYXJlZE1lbW9yeUJ1ZmZlci0+ZGF0YSgpKSwgc2l6ZSk7Cit9CisKK1dlYkNvcmU6OlVSTCBX
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnJlYWRVUkxGcm9tUGFzdGVib2FyZChpbnQgaW5kZXgsIGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpCit7CisgICAgU3RyaW5nIHVybFN0cmluZzsKKyAg
ICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3lu
YyhNZXNzYWdlczo6V2ViQ29udGV4dDo6UmVhZFVSTEZyb21QYXN0ZWJvYXJkKGluZGV4LCBwYXN0
ZWJvYXJkVHlwZSksCisgICAgICAgIE1lc3NhZ2VzOjpXZWJDb250ZXh0OjpSZWFkVVJMRnJvbVBh
c3RlYm9hcmQ6OlJlcGx5KHVybFN0cmluZyksIDApOworICAgIHJldHVybiBVUkwoUGFyc2VkVVJM
U3RyaW5nLCB1cmxTdHJpbmcpOworfQorCitTdHJpbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpy
ZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmRUeXBlKQoreworICAgIFN0cmluZyB2YWx1ZTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViQ29udGV4dDo6
UmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKGluZGV4LCBwYXN0ZWJvYXJkVHlwZSksCisgICAgICAg
IE1lc3NhZ2VzOjpXZWJDb250ZXh0OjpSZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQ6OlJlcGx5KHZh
bHVlKSwgMCk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitsb25nIFdlYlBsYXRmb3JtU3RyYXRl
Z2llczo6Y2hhbmdlQ291bnQoKQoreworICAgIHVpbnQ2NF90IGNoYW5nZUNvdW50OworICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1l
c3NhZ2VzOjpXZWJDb250ZXh0OjpHZXRQYXN0ZWJvYXJkQ2hhbmdlQ291bnQoU3RyaW5nKCkpLAor
ICAgICAgICBNZXNzYWdlczo6V2ViQ29udGV4dDo6R2V0UGFzdGVib2FyZENoYW5nZUNvdW50OjpS
ZXBseShjaGFuZ2VDb3VudCksIDApOworICAgIHJldHVybiBjaGFuZ2VDb3VudDsKK30KKwogI2Vu
ZGlmCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCShyZXZp
c2lvbiAxNTY1NjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05MywxMyArOTMsMTgg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNMaW5rVmlzaXRlZChXZWJDb3JlOjpQYWdl
KiwgV2ViQ29yZTo6TGlua0hhc2gsIGNvbnN0IFdlYkNvcmU6OlVSTCYgYmFzZVVSTCwgY29uc3Qg
V1RGOjpBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2
b2lkIGFkZFZpc2l0ZWRMaW5rKFdlYkNvcmU6OlBhZ2UqLCBXZWJDb3JlOjpMaW5rSGFzaCkgT1ZF
UlJJREU7CiAKLSNpZiBQTEFURk9STShNQUMpCiAgICAgLy8gV2ViQ29yZTo6UGFzdGVib2FyZFN0
cmF0ZWd5CiAjaWYgUExBVEZPUk0oSU9TKQotICAgIHZpcnR1YWwgdm9pZCB3cml0ZVRvUGFzdGVi
b2FyZChjb25zdCBXZWJDb3JlOjpQYXN0ZWJvYXJkV2ViQ29udGVudCYgY29udGVudCkgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCB2b2lkIHdyaXRlVG9QYXN0ZWJvYXJkKGNvbnN0IFdlYkNvcmU6OlBh
c3RlYm9hcmRJbWFnZSYgcGFzdGVib2FyZEltYWdlKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZv
aWQgd3JpdGVUb1Bhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiB0ZXh0KSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgd3JpdGVUb1Bhc3RlYm9hcmQoY29uc3QgV2ViQ29yZTo6UGFzdGVib2FyZFdl
YkNvbnRlbnQmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVUb1Bhc3RlYm9hcmQo
Y29uc3QgV2ViQ29yZTo6UGFzdGVib2FyZEltYWdlJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIHdyaXRlVG9QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0
IFN0cmluZyYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgaW50IGdldFBhc3RlYm9hcmRJdGVtc0Nv
dW50KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJpbmcgcmVhZFN0cmluZ0Zyb21QYXN0ZWJv
YXJkKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSkgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gcmVhZEJ1ZmZlckZy
b21QYXN0ZWJvYXJkKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpVUkwgcmVhZFVSTEZyb21QYXN0ZWJvYXJkKGlu
dCBpbmRleCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSkgT1ZFUlJJREU7CisgICAgdmly
dHVhbCBsb25nIGNoYW5nZUNvdW50KCkgT1ZFUlJJREU7CiAjZW5kaWYKKyNpZiBQTEFURk9STShN
QUMpCiAgICAgdmlydHVhbCB2b2lkIGdldFR5cGVzKFZlY3RvcjxTdHJpbmc+JiB0eXBlcywgY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gYnVmZmVyRm9yVHlwZShjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKICAg
ICB2aXJ0dWFsIHZvaWQgZ2V0UGF0aG5hbWVzRm9yVHlwZShWZWN0b3I8U3RyaW5nPiYgcGF0aG5h
bWVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lKSBPVkVSUklERTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjU3MSkK
KysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE5IEBACisyMDEzLTA5LTI3ICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisK
KyAgICAgICAgVXBzdHJlYW0gY2hhbmdlcyB0byBQYXN0ZWJvYXJkIGltcGxlbWVudGF0aW9uIGZv
ciBpT1MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MjE4MTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oOgorICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbToKKyAgICAgICAgKFdlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6d3JpdGVUb1Bhc3RlYm9hcmQpOgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJh
dGVnaWVzOjpnZXRQYXN0ZWJvYXJkSXRlbXNDb3VudCk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXM6OnJlYWRCdWZmZXJGcm9tUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJQbGF0Zm9y
bVN0cmF0ZWdpZXM6OnJlYWRVUkxGcm9tUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJQbGF0Zm9y
bVN0cmF0ZWdpZXM6OnJlYWRTdHJpbmdGcm9tUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJQbGF0
Zm9ybVN0cmF0ZWdpZXM6OmNoYW5nZUNvdW50KToKKwogMjAxMy0wOS0yNiAgRGFyaW4gQWRsZXIg
IDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgcmVuYW1lIEtVUkwgdG8gVVJMCkluZGV4OiBT
b3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9y
bVN0cmF0ZWdpZXMuaAkocmV2aXNpb24gMTU2NTY0KQorKysgU291cmNlL1dlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDkgKzI5LDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tpZXNTdHJhdGVneS5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvRGF0YWJhc2VTdHJhdGVneS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTG9hZGVy
U3RyYXRlZ3kuaD4KLSNpZiBQTEFURk9STShJT1MpCi0jaW5jbHVkZSA8V2ViQ29yZS9QYXN0ZWJv
YXJkLmg+Ci0jZW5kaWYKICNpbmNsdWRlIDxXZWJDb3JlL1Bhc3RlYm9hcmRTdHJhdGVneS5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1TdHJhdGVnaWVzLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9QbHVnaW5TdHJhdGVneS5oPgpAQCAtMzksNiArMzYsOSBAQAogI2luY2x1ZGUgPFdlYkNvcmUv
U3RvcmFnZVN0cmF0ZWd5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9WaXNpdGVkTGlua1N0cmF0ZWd5
Lmg+CiAKK3N0cnVjdCBQYXN0ZWJvYXJkSW1hZ2U7CitzdHJ1Y3QgUGFzdGVib2FyZFdlYkNvbnRl
bnQ7CisKIGNsYXNzIFdlYlBsYXRmb3JtU3RyYXRlZ2llcyA6IHB1YmxpYyBXZWJDb3JlOjpQbGF0
Zm9ybVN0cmF0ZWdpZXMsIHByaXZhdGUgV2ViQ29yZTo6Q29va2llc1N0cmF0ZWd5LCBwcml2YXRl
IFdlYkNvcmU6OkRhdGFiYXNlU3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6TG9hZGVyU3RyYXRl
Z3ksIHByaXZhdGUgV2ViQ29yZTo6UGFzdGVib2FyZFN0cmF0ZWd5LCBwcml2YXRlIFdlYkNvcmU6
OlBsdWdpblN0cmF0ZWd5LCBwcml2YXRlIFdlYkNvcmU6OlNoYXJlZFdvcmtlclN0cmF0ZWd5LCBw
cml2YXRlIFdlYkNvcmU6OlN0b3JhZ2VTdHJhdGVneSwgcHJpdmF0ZSBXZWJDb3JlOjpWaXNpdGVk
TGlua1N0cmF0ZWd5IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplSWZOZWNl
c3NhcnkoKTsKQEAgLTgzLDkgKzgzLDE0IEBAIHByaXZhdGU6CiAgICAgCiAgICAgLy8gV2ViQ29y
ZTo6UGFzdGVib2FyZFN0cmF0ZWd5CiAjaWYgUExBVEZPUk0oSU9TKQotICAgIHZpcnR1YWwgdm9p
ZCB3cml0ZVRvUGFzdGVib2FyZChjb25zdCBXZWJDb3JlOjpQYXN0ZWJvYXJkV2ViQ29udGVudCYg
Y29udGVudCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHdyaXRlVG9QYXN0ZWJvYXJkKGNv
bnN0IFdlYkNvcmU6OlBhc3RlYm9hcmRJbWFnZSYgcGFzdGVib2FyZEltYWdlKSBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIHZvaWQgd3JpdGVUb1Bhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiB0ZXh0KSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVUb1Bhc3RlYm9hcmQoY29uc3QgV2ViQ29y
ZTo6UGFzdGVib2FyZFdlYkNvbnRlbnQmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgd3Jp
dGVUb1Bhc3RlYm9hcmQoY29uc3QgV2ViQ29yZTo6UGFzdGVib2FyZEltYWdlJikgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIHdyaXRlVG9QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZFR5cGUsIGNvbnN0IFN0cmluZyYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgaW50IGdldFBh
c3RlYm9hcmRJdGVtc0NvdW50KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJpbmcgcmVhZFN0
cmluZ0Zyb21QYXN0ZWJvYXJkKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlw
ZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZl
cj4gcmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJkKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkVHlwZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpVUkwgcmVhZFVSTEZy
b21QYXN0ZWJvYXJkKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBsb25nIGNoYW5nZUNvdW50KCkgT1ZFUlJJREU7CiAjZW5kaWYK
ICAgICB2aXJ0dWFsIHZvaWQgZ2V0VHlwZXMoVmVjdG9yPFN0cmluZz4mIHR5cGVzLCBjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBidWZmZXJGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIE9WRVJSSURFOwpJbmRleDog
U291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRm
b3JtU3RyYXRlZ2llcy5tbQkocmV2aXNpb24gMTU2NTY0KQorKysgU291cmNlL1dlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw2ICszNSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2VHcm91cC5oPgogI2ltcG9ydCA8
V2ViQ29yZS9QbGF0Zm9ybUNvb2tpZUphci5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVBh
c3RlYm9hcmQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1N1YmZyYW1lTG9hZGVyLmg+CiAjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2Uu
aD4KIApAQCAtMjMyLDEzICsyMzMsMzkgQEAgdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6Ondy
aXRlVG9QYXN0ZQogICAgIFBsYXRmb3JtUGFzdGVib2FyZCgpLndyaXRlKGNvbnRlbnQpOwogfQog
Ci12b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6d3JpdGVUb1Bhc3RlYm9hcmQoY29uc3QgV2Vi
Q29yZTo6UGFzdGVib2FyZEltYWdlJiBwYXN0ZWJvYXJkSW1hZ2UpCit2b2lkIFdlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6d3JpdGVUb1Bhc3RlYm9hcmQoY29uc3QgV2ViQ29yZTo6UGFzdGVib2FyZElt
YWdlJiBpbWFnZSkKIHsKLSAgICBQbGF0Zm9ybVBhc3RlYm9hcmQoKS53cml0ZShwYXN0ZWJvYXJk
SW1hZ2UpOworICAgIFBsYXRmb3JtUGFzdGVib2FyZCgpLndyaXRlKGltYWdlKTsKIH0KIAotdm9p
ZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OndyaXRlVG9QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYg
dGV4dCkKK3ZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjp3cml0ZVRvUGFzdGVib2FyZChjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgUGxh
dGZvcm1QYXN0ZWJvYXJkKCkud3JpdGUodGV4dCk7CisgICAgUGxhdGZvcm1QYXN0ZWJvYXJkKCku
d3JpdGUocGFzdGVib2FyZFR5cGUsIHRleHQpOwogfQorCitpbnQgV2ViUGxhdGZvcm1TdHJhdGVn
aWVzOjpnZXRQYXN0ZWJvYXJkSXRlbXNDb3VudCgpCit7CisgICAgcmV0dXJuIFBsYXRmb3JtUGFz
dGVib2FyZCgpLmNvdW50KCk7Cit9CisKK1Bhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVy
PiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnJlYWRCdWZmZXJGcm9tUGFzdGVib2FyZChpbnQgaW5k
ZXgsIGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICByZXR1cm4gUGxhdGZvcm1QYXN0ZWJvYXJk
KCkucmVhZEJ1ZmZlcihpbmRleCwgdHlwZSk7Cit9CisKK1dlYkNvcmU6OlVSTCBXZWJQbGF0Zm9y
bVN0cmF0ZWdpZXM6OnJlYWRVUkxGcm9tUGFzdGVib2FyZChpbnQgaW5kZXgsIGNvbnN0IFN0cmlu
ZyYgdHlwZSkKK3sKKyAgICByZXR1cm4gUGxhdGZvcm1QYXN0ZWJvYXJkKCkucmVhZFVSTChpbmRl
eCwgdHlwZSk7Cit9CisKK1N0cmluZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnJlYWRTdHJpbmdG
cm9tUGFzdGVib2FyZChpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICByZXR1
cm4gUGxhdGZvcm1QYXN0ZWJvYXJkKCkucmVhZFN0cmluZyhpbmRleCwgdHlwZSk7Cit9CisKK2xv
bmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjaGFuZ2VDb3VudCgpCit7CisgICAgcmV0dXJuIFBs
YXRmb3JtUGFzdGVib2FyZCgpLmNoYW5nZUNvdW50KCk7Cit9CisKICNlbmRpZgo=
</data>
<flag name="review"
          id="235112"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>