<?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>176123</bug_id>
          
          <creation_ts>2017-08-30 13:56:33 -0700</creation_ts>
          <short_desc>Layering violation in Editor::createFragment</short_desc>
          <delta_ts>2017-09-29 19:11: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>WebKit Misc.</component>
          <version>Safari 9</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=176986</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>achristensen</cc>
    
    <cc>buildbot</cc>
    
    <cc>darin</cc>
    
    <cc>mitz</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1343682</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2017-08-30 13:56:33 -0700</bug_when>
    <thetext>Pasting in a modern WebKit application calls WebCore::Editor::createFragment, which calls _WebCreateFragment from WebKitLegacy, which calls into AppKit, which calls into WebKitLegacy to create a DOMDocumentFragment and to generate temporary URLs. This is quite a layering violation, and a lot of legacy technology use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343685</commentid>
    <comment_count>1</comment_count>
      <attachid>319396</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2017-08-30 14:11:18 -0700</bug_when>
    <thetext>Created attachment 319396
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343689</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-30 14:13:30 -0700</bug_when>
    <thetext>Attachment 319396 did not pass style-queue:


ERROR: Source/WebKitLegacy/mac/WebView/WebFrame.mm:2295:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:2579:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:2589:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:2600:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKitLegacy/mac/WebCoreSupport/WebEditorClient.mm:441:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 5 in 10 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>1343785</commentid>
    <comment_count>3</comment_count>
      <attachid>319421</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2017-08-30 16:32:52 -0700</bug_when>
    <thetext>Created attachment 319421
proposed patch

Build fix for accidental edit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343786</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-30 16:35:14 -0700</bug_when>
    <thetext>Attachment 319421 did not pass style-queue:


ERROR: Source/WebKitLegacy/mac/WebView/WebFrame.mm:2295:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:2579:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:2589:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:2600:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 4 in 10 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>1343827</commentid>
    <comment_count>5</comment_count>
      <attachid>319421</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-08-30 18:29:05 -0700</bug_when>
    <thetext>Comment on attachment 319421
proposed patch

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

&gt; Source/WebCore/editing/cocoa/EditorCocoa.mm:57
&gt; +#if (PLATFORM(IOS) &amp;&amp; __IPHONE_OS_VERSION_MIN_REQUIRED &gt;= 110000) || (PLATFORM(MAC) &amp;&amp; __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 101300)

This occurs many times in this patch.  Could we replace it with #if HAVE(SOMETHING)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343848</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-08-30 20:44:47 -0700</bug_when>
    <thetext>Seems like the layering violation could be avoided by adding an EditorClient function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343943</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2017-08-31 09:21:16 -0700</bug_when>
    <thetext>&gt; This occurs many times in this patch.  Could we replace it with #if HAVE(SOMETHING)?

We could, but why? Checking versions in this manner is the norm in WebKit, and it makes it slightly easier to eventually remove the old code.

&gt; Seems like the layering violation could be avoided by adding an EditorClient function.

I&apos;m not sure what you mean by this. There is a whole chain of violations here, the worst being that AppKit calls into WebKitLegacy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343944</commentid>
    <comment_count>8</comment_count>
      <attachid>319467</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2017-08-31 09:22:57 -0700</bug_when>
    <thetext>Created attachment 319467
proposed patch

More build fixing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343945</commentid>
    <comment_count>9</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-31 09:25:22 -0700</bug_when>
    <thetext>Attachment 319467 did not pass style-queue:


ERROR: Source/WebKitLegacy/mac/WebView/WebFrame.mm:2295:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:2579:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:2589:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:2600:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 4 in 10 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>1345122</commentid>
    <comment_count>10</comment_count>
      <attachid>319467</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-03 20:31:57 -0700</bug_when>
    <thetext>Comment on attachment 319467
proposed patch

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

I don’t completely understand this patch, but I will say r=me I guess.

&gt; Source/WebCore/editing/cocoa/EditorCocoa.mm:57
&gt; +#if (PLATFORM(IOS) &amp;&amp; __IPHONE_OS_VERSION_MIN_REQUIRED &gt;= 110000) || (PLATFORM(MAC) &amp;&amp; __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 101300)

Instead of repeating this conditional three times, in its two different forms (old and new version), can we define something at the top of the file and use that three times? Or, better, define it in the header file so it can be used in WebKitLegacy too.

&gt; Source/WebCore/editing/cocoa/EditorCocoa.mm:157
&gt; +    // This function needs to be kept in sync with identically named one in WebKitLegacy, which is used on older OS versions.

Can we change WebKitLegacy to call this instead of keeping two copies around?

&gt; Source/WebCore/editing/cocoa/EditorCocoa.mm:179
&gt; +        @&quot;WebResourceHandler&quot;: [WebArchiveResourceAsWebResourceHandler class],

TextKit code expects a WebResourceHandler to be an object, but you chose to implement it as a class instead. This will work, but seems an unusual choice.

&gt; Source/WebCore/editing/cocoa/EditorCocoa.mm:191
&gt; +    NSString *htmlFragmentString = [string _htmlDocumentFragmentString:NSMakeRange(0, [string length]) documentAttributes:attributesForAttributedStringConversion() subresources:&amp;subresources];

I think the name here could be fragmentString, no need to prefix with &quot;html&quot;.

&gt; Source/WebCore/editing/cocoa/EditorCocoa.mm:192
&gt; +    RefPtr&lt;DocumentFragment&gt; fragment = DocumentFragment::create(document);

The result of DocumentFragment::create is a Ref, not a RefPtr. I suggest using auto here and letting this local variable be a Ref.

&gt; Source/WebCore/editing/cocoa/EditorCocoa.mm:195
&gt; +    result.fragment = fragment;

Should use WTFMove here to avoid a tiny bit of reference count churn.

&gt; Source/WebCore/editing/cocoa/WebArchiveResourceAsWebResourceHandler.h:38
&gt; +@interface WebArchiveResourceAsWebResourceHandler : NSObject {
&gt; +@package
&gt; +    RefPtr&lt;WebCore::ArchiveResource&gt; resource;
&gt; +}
&gt; +@end

As far as I can tell, this class itself is a WebResourceHandle. Then instances of the class are returned as WebResource objects. Both sort of treated as “informal protocols”. Do we really have to combine both together in one class like that? There is economy in doing it that way, but also subtlety that I find a bit confusing. The name of the class is also misleading, because the instances are not WebResourceHandler but that is what the class name implies. Normally the class name describes the role of the instances, not the role of the class object.

I think it would be good to emphasize the WebResourceHandler interface we intend to implement by defining it here in the interface, not just the implementation:

+ (id)resourceForData:(NSData *)data URL:(NSURL *)url MIMEType:(NSString *)mimeType textEncodingName:(NSString *)textEncodingName frameName:(NSString *)frameName;

I think it would be good to emphasize the WebResource interface we intend to implement by defining it here in the interface:

@property (nonatomic, readonly, copy) NSData *data;
@property (nonatomic, readonly, strong) NSURL *URL;
@property (nonatomic, readonly, copy) NSString *MIMEType;
@property (nonatomic, readonly, copy) NSString *textEncodingName;
@property (nonatomic, readonly, copy) NSString *frameName;

Except it seems that we only implement the URL property. Why is it OK for us to not implement the other properties?

&gt; Source/WebCore/editing/cocoa/WebArchiveResourceAsWebResourceHandler.mm:45
&gt; +    resource = WebCore::ArchiveResource::create(SharedBuffer::create([[data copy] autorelease]), URL, MIMEType, textEncodingName, frameName, nil);

Seems unnecessary to use autorelease here. Could use RetainPtr instead, by writing &quot;adoptNS([data copy]).get()&quot;.

&gt; Source/WebCore/editing/cocoa/WebArchiveResourceAsWebResourceHandler.mm:57
&gt; +    if (!resource)
&gt; +        return nil;

I don’t think this is needed, because the init function will self destruct if the resource is nil.

&gt; Source/WebKitLegacy/mac/Misc/WebNSURLExtras.h:-77
&gt; -#if TARGET_OS_IPHONE
&gt; -// FIXME: This method name needs a prefix.
&gt; -+ (NSURL *)uniqueURLWithRelativePart:(NSString *)relativePart;
&gt; -#endif

You checked that there are no clients outside WebKit depending on this?

&gt; Source/WebKitLegacy/mac/WebCoreSupport/WebEditorClient.mm:440
&gt; +// FIXME: Remove this function once we don&apos;t use it on any supported platform.

This comment has wording that is confusing. We already don’t use this function. It’s just here to make the &quot;exp&quot; file not cause a build failure. The comment should say something more like this:

// FIXME: Remove both this stub and the real version of this function below once we don&apos;t need the real version on any supported platform.
// This stub is not used outside WebKit, but it&apos;s here so we won&apos;t get a linker error.

&gt; Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:1
&gt; -/*
&gt; + /*

Should undo this change.

&gt; Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:7582
&gt; -// This is used by AppKit and is included here so that WebDataProtocolScheme is only defined once.
&gt; +#if (PLATFORM(IOS) &amp;&amp; __IPHONE_OS_VERSION_MIN_REQUIRED &lt; 110000) || (PLATFORM(MAC) &amp;&amp; __MAC_OS_X_VERSION_MIN_REQUIRED &lt; 101300)
&gt;  @implementation NSURL (WebDataURL)
&gt;  
&gt;  + (NSURL *)_web_uniqueWebDataURL

There is a call to this method in -[NSHTMLReader readDocumentFragment:]. Why is it OK to not compile it in newer versions of iOS and macOS?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349500</commentid>
    <comment_count>11</comment_count>
      <attachid>319467</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-09-15 13:25:37 -0700</bug_when>
    <thetext>Comment on attachment 319467
proposed patch

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

&gt;&gt; Source/WebKitLegacy/mac/Misc/WebNSURLExtras.h:-77
&gt;&gt; -#endif
&gt; 
&gt; You checked that there are no clients outside WebKit depending on this?

As far as I can tell, there&apos;s no use of this function outside WebKit at least in OS itself.

&gt;&gt; Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:7582
&gt;&gt;  + (NSURL *)_web_uniqueWebDataURL
&gt; 
&gt; There is a call to this method in -[NSHTMLReader readDocumentFragment:]. Why is it OK to not compile it in newer versions of iOS and macOS?

Indeed this appears to be still used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349504</commentid>
    <comment_count>12</comment_count>
      <attachid>319467</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-09-15 13:29:42 -0700</bug_when>
    <thetext>Comment on attachment 319467
proposed patch

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

&gt; Source/WebCore/platform/URL.h:78
&gt; -    static URL fakeURLWithRelativePart(const String&amp;);
&gt; +    WEBCORE_EXPORT static URL fakeURLWithRelativePart(const String&amp;);

We should either wrap this in if-def PLATFORM(COCOA) or rename it to something scary like deprecatedFakeURLWithRelativePart so that people don&apos;t start using it elsewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350491</commentid>
    <comment_count>13</comment_count>
      <attachid>319467</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2017-09-19 13:56:09 -0700</bug_when>
    <thetext>Comment on attachment 319467
proposed patch

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

&gt;&gt; Source/WebCore/editing/cocoa/WebArchiveResourceAsWebResourceHandler.h:38
&gt;&gt; +@end
&gt; 
&gt; As far as I can tell, this class itself is a WebResourceHandle. Then instances of the class are returned as WebResource objects. Both sort of treated as “informal protocols”. Do we really have to combine both together in one class like that? There is economy in doing it that way, but also subtlety that I find a bit confusing. The name of the class is also misleading, because the instances are not WebResourceHandler but that is what the class name implies. Normally the class name describes the role of the instances, not the role of the class object.
&gt; 
&gt; I think it would be good to emphasize the WebResourceHandler interface we intend to implement by defining it here in the interface, not just the implementation:
&gt; 
&gt; + (id)resourceForData:(NSData *)data URL:(NSURL *)url MIMEType:(NSString *)mimeType textEncodingName:(NSString *)textEncodingName frameName:(NSString *)frameName;
&gt; 
&gt; I think it would be good to emphasize the WebResource interface we intend to implement by defining it here in the interface:
&gt; 
&gt; @property (nonatomic, readonly, copy) NSData *data;
&gt; @property (nonatomic, readonly, strong) NSURL *URL;
&gt; @property (nonatomic, readonly, copy) NSString *MIMEType;
&gt; @property (nonatomic, readonly, copy) NSString *textEncodingName;
&gt; @property (nonatomic, readonly, copy) NSString *frameName;
&gt; 
&gt; Except it seems that we only implement the URL property. Why is it OK for us to not implement the other properties?

I&apos;ll split this into two classes. The archive class is not meant to mimic WebResource though - the only accessor called by TextKit is -URL, and it&apos;s arguably a bug that it relies on a method that&apos;s not documented to be required.

Naming is a challenge for me. Here is what I have for now:
- WebArchiveResourceWebResourceHandler - objects of this class are passed as values for the &quot;WebResourceHandler&quot; key.
- WebArchiveResourceFromNSAttributedString - the handler creates those, and they are returned from the NSAttributedString call.

&gt;&gt;&gt; Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:7582
&gt;&gt;&gt;  + (NSURL *)_web_uniqueWebDataURL
&gt;&gt; 
&gt;&gt; There is a call to this method in -[NSHTMLReader readDocumentFragment:]. Why is it OK to not compile it in newer versions of iOS and macOS?
&gt; 
&gt; Indeed this appears to be still used.

It is only used in implementation of an SPI call that is no longer used after this patch. But I agree, it is not right to remove it earlier than the SPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350526</commentid>
    <comment_count>14</comment_count>
      <attachid>321245</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2017-09-19 14:56:19 -0700</bug_when>
    <thetext>Created attachment 321245
patch for landing

In the interest of getting this landed finally, I didn&apos;t implement some of the improvement suggestions (unifying compile time checks, de-duplicating the code, renaming fakeURLWithRelativePart).

Also fixed issues with attribute dictionary - one object was leaking, and another was getting over-released.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350531</commentid>
    <comment_count>15</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-19 14:59:21 -0700</bug_when>
    <thetext>Attachment 321245 did not pass style-queue:


ERROR: Source/WebKitLegacy/mac/WebView/WebFrame.mm:2298:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 1 in 12 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>1350599</commentid>
    <comment_count>16</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2017-09-19 18:20:44 -0700</bug_when>
    <thetext>Committed http://trac.webkit.org/r222239</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353643</commentid>
    <comment_count>17</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 12:46:25 -0700</bug_when>
    <thetext>&lt;rdar://problem/34693918&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354739</commentid>
    <comment_count>18</comment_count>
      <attachid>321245</attachid>
    <who name="">mitz</who>
    <bug_when>2017-09-29 15:29:18 -0700</bug_when>
    <thetext>Comment on attachment 321245
patch for landing

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

&gt; Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:7293
&gt; +#if (PLATFORM(IOS) &amp;&amp; __IPHONE_OS_VERSION_MIN_REQUIRED &lt; 110000) || (PLATFORM(MAC) &amp;&amp; __MAC_OS_X_VERSION_MIN_REQUIRED &lt; 101300)

-_web_uniqueWebDataURL is still being used in shipping macOS. This change caused Mail to crash when pasting rich text into a compose window.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354818</commentid>
    <comment_count>19</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2017-09-29 19:05:36 -0700</bug_when>
    <thetext>I&apos;m not sure how I landed it with the #if, definitely intended to keep _web_uniqueWebDataURL intact.

The other cause for crashing is that I overlooked NSAttributedString SPI still being used in -[WebHTMLView(WebPrivate) _documentFragmentFromPasteboard:forType:inContext:subresources:].</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354820</commentid>
    <comment_count>20</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2017-09-29 19:11:49 -0700</bug_when>
    <thetext>Reverted this unintended change in http://trac.webkit.org/r222676</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319396</attachid>
            <date>2017-08-30 14:11:18 -0700</date>
            <delta_ts>2017-08-30 16:32:52 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>HTMLWriter.txt</filename>
            <type>text/plain</type>
            <size>26645</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMDk3NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDE3LTA4LTMwICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIExheWVyaW5nIHZpb2xhdGlv
biBpbiBFZGl0b3I6OmNyZWF0ZUZyYWdtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBlZGl0aW5nL2NvY29hL1dlYkFyY2hpdmVSZXNvdXJjZUFzV2ViUmVzb3VyY2VI
YW5kbGVyLmg6CisgICAgICAgICogZWRpdGluZy9jb2NvYS9XZWJBcmNoaXZlUmVzb3VyY2VBc1dl
YlJlc291cmNlSGFuZGxlci5tbToKKyAgICAgICAgQWRkZWQgYSB3cmFwcGVyIGNsYXNzIGZvciBB
cmNoaXZlUmVzb3VyY2UsIHN1aXRhYmxlIGZvciB1c2UgYXMgYSBXZWJSZXNvdXJjZUhhbmRsZXIu
CisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6YXR0cmlidXRlc0ZvckF0dHJpYnV0ZWRTdHJpbmdDb252ZXJzaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6Y3JlYXRlRnJhZ21lbnQpOgorICAgICAgICBPbiBuZXdlciBPUyB2
ZXJzaW9ucywgZG9uJ3QgdXNlIFdlYktpdExlZ2FjeSB0byBjb252ZXJ0IE5TQXR0cmlidXRlZFN0
cmluZyB0byBhCisgICAgICAgIGRvY3VtZW50IGZyYWdtZW50LiBXZSBub3cgb25seSB1c2Ugc3lz
dGVtIGZyYW1ld29ya3MgdG8gY29udmVydCB0aGUgYXR0cmlidXRlZAorICAgICAgICBzdHJpbmcg
dG8gSFRNTCBzb3VyY2UsIGFuZCBwYXJzZSBIVE1MIGludG8gYSBmcmFnbWVudCBkaXJlY3RseSBp
biBXZWJDb3JlLgorCisgICAgICAgICogcGxhdGZvcm0vVVJMLmg6IEV4cG9ydGVkIGZha2VVUkxX
aXRoUmVsYXRpdmVQYXJ0LgorCiAyMDE3LTA4LTIxICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxl
LmNvbT4KIAogICAgICAgICBbUGF5bWVudCBSZXF1ZXN0XSBJbXBsZW1lbnQgdGhlIFBheW1lbnRS
ZXF1ZXN0IGNvbnN0cnVjdG9yCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjA5NzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTY2MTAsNiArNjYxMCw4IEBACiAJCUUxODI1NjhGMEVGMkIwMkQwMDkzMzI0MiAvKiBKU1dvcmtl
ckdsb2JhbFNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxODI1NjhEMEVGMkIwMkQwMDkzMzI0MiAvKiBKU1dvcmtlckdsb2JhbFNjb3BlLmNw
cCAqLzsgfTsKIAkJRTE4MjU2OTAwRUYyQjAyRDAwOTMzMjQyIC8qIEpTV29ya2VyR2xvYmFsU2Nv
cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxODI1
NjhFMEVGMkIwMkQwMDkzMzI0MiAvKiBKU1dvcmtlckdsb2JhbFNjb3BlLmggKi87IH07CiAJCUUx
ODI1OEFDMEVGM0NENzAwMDkzMzI0MiAvKiBKU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxODI1OEFCMEVG
M0NENzAwMDkzMzI0MiAvKiBKU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcCAqLzsgfTsKKwkJ
RTE4NTM2ODQxRjRFNDgxNDAwRkUwOTFCIC8qIFdlYkFyY2hpdmVSZXNvdXJjZUFzV2ViUmVzb3Vy
Y2VIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMTg1MzY4MTFGNEU0NzI3MDBGRTA5MUIgLyogV2ViQXJjaGl2ZVJlc291cmNlQXNXZWJSZXNv
dXJjZUhhbmRsZXIuaCAqLzsgfTsKKwkJRTE4NTM2ODUxRjUwOTA2MTAwRkUwOTFCIC8qIFdlYkFy
Y2hpdmVSZXNvdXJjZUFzV2ViUmVzb3VyY2VIYW5kbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4NTM2ODIxRjRFNDcyNzAwRkUwOTFCIC8qIFdl
YkFyY2hpdmVSZXNvdXJjZUFzV2ViUmVzb3VyY2VIYW5kbGVyLm1tICovOyB9OwogCQlFMTg3NzJG
MTEyNkUyNjI5MDAzREQ1ODYgLyogTGFuZ3VhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4NzcyRjAxMjZFMjYyOTAwM0RENTg2IC8qIExhbmd1
YWdlLmNwcCAqLzsgfTsKIAkJRTE4REYzMzUxOEFBRjEyQzAwNzczRTU5IC8qIFNlcmlhbGl6ZWRD
cnlwdG9LZXlXcmFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMThERjMzNDE4QUFGMTJDMDA3NzNFNTkgLyogU2VyaWFsaXplZENyeXB0b0tleVdyYXAu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMThE
RjMzODE4QUFGMTREMDA3NzNFNTkgLyogU2VyaWFsaXplZENyeXB0b0tleVdyYXBNYWMubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMThERjMzNjE4QUFG
MTREMDA3NzNFNTkgLyogU2VyaWFsaXplZENyeXB0b0tleVdyYXBNYWMubW0gKi87IH07CkBAIC0x
NTI2NSw2ICsxNTI2Nyw4IEBACiAJCUUxODI1NjhEMEVGMkIwMkQwMDkzMzI0MiAvKiBKU1dvcmtl
ckdsb2JhbFNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
V29ya2VyR2xvYmFsU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTgy
NTY4RTBFRjJCMDJEMDA5MzMyNDIgLyogSlNXb3JrZXJHbG9iYWxTY29wZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dvcmtlckdsb2JhbFNjb3BlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUxODI1OEFCMEVGM0NENzAwMDkzMzI0MiAvKiBKU1dvcmtlckds
b2JhbFNjb3BlQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlFMTg1MzY4MTFGNEU0NzI3MDBGRTA5MUIgLyogV2ViQXJjaGl2ZVJlc291cmNlQXNXZWJS
ZXNvdXJjZUhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQXJjaGl2ZVJlc291cmNlQXNXZWJS
ZXNvdXJjZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTE4NTM2ODIx
RjRFNDcyNzAwRkUwOTFCIC8qIFdlYkFyY2hpdmVSZXNvdXJjZUFzV2ViUmVzb3VyY2VIYW5kbGVy
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQXJjaGl2ZVJlc291cmNlQXNXZWJSZXNvdXJj
ZUhhbmRsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxODc3MkYwMTI2RTI2
MjkwMDNERDU4NiAvKiBMYW5ndWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBMYW5ndWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxOERG
MzM0MThBQUYxMkMwMDc3M0U1OSAvKiBTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMThERjMzNjE4QUFGMTREMDA3NzNFNTkgLyogU2Vy
aWFsaXplZENyeXB0b0tleVdyYXBNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE5ODk2LDYgKzE5OTAwLDggQEAKIAkJCQk5QjU1RUVFODFCM0U4ODk4
MDA1MzQyQkMgLyogRWRpdG9yQ29jb2EubW0gKi8sCiAJCQkJN0MzRTUxMDgxOERGOEYzNTAwQzEx
MkY3IC8qIEhUTUxDb252ZXJ0ZXIuaCAqLywKIAkJCQk3QzNFNTEwOTE4REY4RjM1MDBDMTEyRjcg
LyogSFRNTENvbnZlcnRlci5tbSAqLywKKwkJCQlFMTg1MzY4MTFGNEU0NzI3MDBGRTA5MUIgLyog
V2ViQXJjaGl2ZVJlc291cmNlQXNXZWJSZXNvdXJjZUhhbmRsZXIuaCAqLywKKwkJCQlFMTg1MzY4
MjFGNEU0NzI3MDBGRTA5MUIgLyogV2ViQXJjaGl2ZVJlc291cmNlQXNXZWJSZXNvdXJjZUhhbmRs
ZXIubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9IGNvY29hOwogCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKQEAgLTI5OTA5LDYgKzI5OTE1LDcgQEAKIAkJCQkwODA2RTU3QTEyODkzMDQ1MDA3Q0VE
MzIgLyogU1ZHTWF0cml4LmggaW4gSGVhZGVycyAqLywKIAkJCQkwOENBM0Q0NDEyODk0QTM4MDBG
RkYyNjAgLyogU1ZHTWF0cml4VGVhck9mZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NFNThENUMx
REQ3RUM5QzAwMTI4NTUyIC8qIFNWR01hdHJpeFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQlF
MTg1MzY4NDFGNEU0ODE0MDBGRTA5MUIgLyogV2ViQXJjaGl2ZVJlc291cmNlQXNXZWJSZXNvdXJj
ZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTRCMEQwMEJGMjIwMDcxQjc4MiAv
KiBTVkdNZXRhZGF0YUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTFGMkIxMENFRjBB
QkYwMDQ0MkY2QSAvKiBTVkdNaXNzaW5nR2x5cGhFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCMjIyN0E0RTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHTVBhdGhFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKQEAgLTMyMzg1LDYgKzMyMzkyLDcgQEAKIAkJCQlBMUNDNTY3ODFGNDYxNEE1MDBBNDU1
NUIgLyogSlNQYXltZW50UmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMUY2MDA1NzFG
NDc2NTA1MDA3N0U4M0YgLyogSlNQYXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUExRjYwMDU5MUY0NzY1MDUwMDc3RTgzRiAvKiBKU1BheW1lbnRSZXF1ZXN0
VXBkYXRlRXZlbnRJbml0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUxODUzNjg1MUY1MDkwNjEw
MEZFMDkxQiAvKiBXZWJBcmNoaXZlUmVzb3VyY2VBc1dlYlJlc291cmNlSGFuZGxlci5tbSBpbiBT
b3VyY2VzICovLAogCQkJCUExQ0M1NjdBMUY0NjE0QUEwMEE0NTU1QiAvKiBKU1BheW1lbnRSZXNw
b25zZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMUNDNTY3QzFGNDYxNEFGMDBBNDU1NUIgLyog
SlNQYXltZW50U2hpcHBpbmdPcHRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTFDQzU2N0Ux
RjQ2MTRCNDAwQTQ1NTVCIC8qIEpTUGF5bWVudFNoaXBwaW5nVHlwZS5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQko
cmV2aXNpb24gMjIwOTc0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JD
b2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2ltcG9ydCAiRnJhbWUu
aCIKICNpbXBvcnQgIkZyYW1lTG9hZGVyLmgiCiAjaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5oIgor
I2ltcG9ydCAiSFRNTEJvZHlFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MQ29udmVydGVyLmgiCiAj
aW1wb3J0ICJIVE1MSW1hZ2VFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MU3BhbkVsZW1lbnQuaCIK
QEAgLTQ4LDIwICs0OSwyNCBAQAogI2ltcG9ydCAiUmVuZGVyRWxlbWVudC5oIgogI2ltcG9ydCAi
UmVuZGVyU3R5bGUuaCIKICNpbXBvcnQgIlRleHQuaCIKKyNpbXBvcnQgIldlYkFyY2hpdmVSZXNv
dXJjZUFzV2ViUmVzb3VyY2VIYW5kbGVyLmgiCiAjaW1wb3J0IDxwYWwvc3BpL2NvY29hL05TQXR0
cmlidXRlZFN0cmluZ1NQSS5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4K
ICNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgogCi0jaWYgUExBVEZPUk0oSU9TKQorI2lmIChQ
TEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDExMDAw
MCkgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+
PSAxMDEzMDApCitAaW50ZXJmYWNlIE5TQXR0cmlidXRlZFN0cmluZyAoKQorLSAoTlNTdHJpbmcg
KilfaHRtbERvY3VtZW50RnJhZ21lbnRTdHJpbmc6KE5TUmFuZ2UpcmFuZ2UgZG9jdW1lbnRBdHRy
aWJ1dGVzOihOU0RpY3Rpb25hcnkgKilkaWN0IHN1YnJlc291cmNlczooTlNBcnJheSAqKilzdWJy
ZXNvdXJjZXM7CitAZW5kCisjZWxpZiBQTEFURk9STShJT1MpCiBTT0ZUX0xJTktfUFJJVkFURV9G
UkFNRVdPUksoV2ViS2l0TGVnYWN5KQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMpCisjZWxp
ZiBQTEFURk9STShNQUMpCiBTT0ZUX0xJTktfRlJBTUVXT1JLX0lOX1VNQlJFTExBKFdlYktpdCwg
V2ViS2l0TGVnYWN5KQogI2VuZGlmCiAKLS8vIEZJWE1FOiBHZXQgcmlkIG9mIHRoaXMgYW5kIGNo
YW5nZSBOU0F0dHJpYnV0ZWRTdHJpbmcgY29udmVyc2lvbiBzbyBpdCBkb2Vzbid0IHVzZSBXZWJL
aXRMZWdhY3kgKGNmLiByZGFyOi8vcHJvYmxlbS8zMDU5NzM1MikuCisjaWYgKFBMQVRGT1JNKElP
UykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMTAwMDApIHx8IChQTEFU
Rk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDEzMDApCiBT
T0ZUX0xJTksoV2ViS2l0TGVnYWN5LCBfV2ViQ3JlYXRlRnJhZ21lbnQsIHZvaWQsIChXZWJDb3Jl
OjpEb2N1bWVudCYgZG9jdW1lbnQsIE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nLCBXZWJDb3Jl
OjpGcmFnbWVudEFuZFJlc291cmNlcyYgcmVzdWx0KSwgKGRvY3VtZW50LCBzdHJpbmcsIHJlc3Vs
dCkpCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xNDUsMTUgKzE1MCw2NiBA
QCBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBFZGl0b3I6OmZvbnRBdHRyCiAgICAgcmV0dXJuIGF0
dHJpYnV0ZXM7CiB9CiAKKyNpZiAoUExBVEZPUk0oSU9TKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9O
X01JTl9SRVFVSVJFRCA+PSAxMTAwMDApIHx8IChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMzAwKQorCitzdGF0aWMgTlNEaWN0aW9uYXJ5ICph
dHRyaWJ1dGVzRm9yQXR0cmlidXRlZFN0cmluZ0NvbnZlcnNpb24oKQoreworICAgIC8vIFRoaXMg
ZnVuY3Rpb24gbmVlZHMgdG8gYmUga2VwdCBpbiBzeW5jIHdpdGggaWRlbnRpY2FsbHkgbmFtZWQg
b25lIGluIFdlYktpdExlZ2FjeSwgd2hpY2ggaXMgdXNlZCBvbiBvbGRlciBPUyB2ZXJzaW9ucy4K
KyAgICBSZXRhaW5QdHI8TlNBcnJheT4gZXhjbHVkZWRFbGVtZW50cyA9IGFkb3B0TlMoW1tOU0Fy
cmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6CisgICAgICAgIC8vIE9taXQgc3R5bGUgc2luY2Ug
d2Ugd2FudCBzdHlsZSB0byBiZSBpbmxpbmUgc28gdGhlIGZyYWdtZW50IGNhbiBiZSBlYXNpbHkg
aW5zZXJ0ZWQuCisgICAgICAgIEAic3R5bGUiLAorICAgICAgICAvLyBPbWl0IHhtbCBzbyB0aGUg
cmVzdWx0IGlzIG5vdCBYSFRNTC4KKyAgICAgICAgQCJ4bWwiLAorICAgICAgICAvLyBPbWl0IHRh
Z3MgdGhhdCB3aWxsIGdldCBzdHJpcHBlZCB3aGVuIGNvbnZlcnRlZCB0byBhIGZyYWdtZW50IGFu
eXdheS4KKyAgICAgICAgQCJkb2N0eXBlIiwgQCJodG1sIiwgQCJoZWFkIiwgQCJib2R5IiwKKyAg
ICAgICAgLy8gT21pdCBkZXByZWNhdGVkIHRhZ3MuCisgICAgICAgIEAiYXBwbGV0IiwgQCJiYXNl
Zm9udCIsIEAiY2VudGVyIiwgQCJkaXIiLCBAImZvbnQiLCBAIm1lbnUiLCBAInMiLCBAInN0cmlr
ZSIsIEAidSIsCisgICAgICAgIC8vIE9taXQgb2JqZWN0IHNvIG5vIGZpbGUgYXR0YWNobWVudHMg
YXJlIHBhcnQgb2YgdGhlIGZyYWdtZW50LgorICAgICAgICBAIm9iamVjdCIsIG5pbF0pOworCisj
aWYgUExBVEZPUk0oSU9TKQorICAgIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IE5TRXhjbHVkZWRF
bGVtZW50c0RvY3VtZW50QXR0cmlidXRlID0gQCJFeGNsdWRlZEVsZW1lbnRzIjsKKyNlbmRpZgor
CisgICAgTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gQHsKKyAgICAgICAgTlNFeGNsdWRlZEVs
ZW1lbnRzRG9jdW1lbnRBdHRyaWJ1dGU6IGV4Y2x1ZGVkRWxlbWVudHMuZ2V0KCksCisgICAgICAg
IEAiSW50ZXJjaGFuZ2VOZXdsaW5lIjogQFlFUywKKyAgICAgICAgQCJDb2FsZXNjZVRhYlNwYW5z
IjogQFlFUywKKyAgICAgICAgQCJPdXRwdXRCYXNlVVJMIjogKE5TVVJMICopVVJMOjpmYWtlVVJM
V2l0aFJlbGF0aXZlUGFydChlbXB0eVN0cmluZygpKSwKKyAgICAgICAgQCJXZWJSZXNvdXJjZUhh
bmRsZXIiOiBbV2ViQXJjaGl2ZVJlc291cmNlQXNXZWJSZXNvdXJjZUhhbmRsZXIgY2xhc3NdLAor
ICAgIH07CisKKyAgICByZXR1cm4gZGljdGlvbmFyeTsKK30KKworRnJhZ21lbnRBbmRSZXNvdXJj
ZXMgRWRpdG9yOjpjcmVhdGVGcmFnbWVudChOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZykKK3sK
KyAgICBGcmFnbWVudEFuZFJlc291cmNlcyByZXN1bHQ7CisgICAgRG9jdW1lbnQmIGRvY3VtZW50
ID0gKm1fZnJhbWUuZG9jdW1lbnQoKTsKKworICAgIE5TQXJyYXkgKnN1YnJlc291cmNlcyA9IG5p
bDsKKyAgICBOU1N0cmluZyAqaHRtbEZyYWdtZW50U3RyaW5nID0gW3N0cmluZyBfaHRtbERvY3Vt
ZW50RnJhZ21lbnRTdHJpbmc6TlNNYWtlUmFuZ2UoMCwgW3N0cmluZyBsZW5ndGhdKSBkb2N1bWVu
dEF0dHJpYnV0ZXM6YXR0cmlidXRlc0ZvckF0dHJpYnV0ZWRTdHJpbmdDb252ZXJzaW9uKCkgc3Vi
cmVzb3VyY2VzOiZzdWJyZXNvdXJjZXNdOworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBm
cmFnbWVudCA9IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgZnJhZ21l
bnQtPnBhcnNlSFRNTChodG1sRnJhZ21lbnRTdHJpbmcsIGRvY3VtZW50LmJvZHkoKSwgRGlzYWxs
b3dTY3JpcHRpbmdBbmRQbHVnaW5Db250ZW50KTsKKworICAgIHJlc3VsdC5mcmFnbWVudCA9IGZy
YWdtZW50OworICAgIGZvciAoV2ViQXJjaGl2ZVJlc291cmNlQXNXZWJSZXNvdXJjZUhhbmRsZXIg
KnJlc291cmNlIGluIHN1YnJlc291cmNlcykKKyAgICAgICAgcmVzdWx0LnJlc291cmNlcy5hcHBl
bmQoKnJlc291cmNlLT5yZXNvdXJjZSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisjZWxz
ZQorCiBGcmFnbWVudEFuZFJlc291cmNlcyBFZGl0b3I6OmNyZWF0ZUZyYWdtZW50KE5TQXR0cmli
dXRlZFN0cmluZyAqc3RyaW5nKQogewotICAgIC8vIEZJWE1FOiBUaGUgYWxnb3JpdGhtIHRvIGNv
bnZlcnQgYW4gYXR0cmlidXRlZCBzdHJpbmcgaW50byBIVE1MIHNob3VsZCBiZSBpbXBsZW1lbnRl
ZCBoZXJlIGluIFdlYkNvcmUuCi0gICAgLy8gRm9yIG5vdywgdGhvdWdoLCB3ZSBjYWxsIGludG8g
V2ViS2l0TGVnYWN5LCB3aGljaCBpbiB0dXJuIGNhbGxzIGludG8gQXBwS2l0L1RleHRLaXQuCiAg
ICAgRnJhZ21lbnRBbmRSZXNvdXJjZXMgcmVzdWx0OwogICAgIF9XZWJDcmVhdGVGcmFnbWVudCgq
bV9mcmFtZS5kb2N1bWVudCgpLCBzdHJpbmcsIHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAorI2VuZGlmCisKIHN0YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBhcmNoaXZlZERhdGFG
b3JBdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZykK
IHsKICAgICBpZiAoIWF0dHJpYnV0ZWRTdHJpbmcubGVuZ3RoKQpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9XZWJBcmNoaXZlUmVzb3VyY2VBc1dlYlJlc291cmNlSGFuZGxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQXJjaGl2ZVJl
c291cmNlQXNXZWJSZXNvdXJjZUhhbmRsZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL1dlYkFyY2hpdmVSZXNvdXJjZUFzV2ViUmVzb3VyY2VIYW5kbGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW1wb3J0IDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2Ns
YXNzIEFyY2hpdmVSZXNvdXJjZTsKK30KKworQGludGVyZmFjZSBXZWJBcmNoaXZlUmVzb3VyY2VB
c1dlYlJlc291cmNlSGFuZGxlciA6IE5TT2JqZWN0IHsKK0BwYWNrYWdlCisgICAgUmVmUHRyPFdl
YkNvcmU6OkFyY2hpdmVSZXNvdXJjZT4gcmVzb3VyY2U7Cit9CitAZW5kCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkFyY2hpdmVSZXNvdXJjZUFzV2ViUmVzb3VyY2VIYW5k
bGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQXJj
aGl2ZVJlc291cmNlQXNXZWJSZXNvdXJjZUhhbmRsZXIubW0JKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJBcmNoaXZlUmVzb3VyY2VBc1dlYlJlc291cmNl
SGFuZGxlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXZWJBcmNoaXZlUmVzb3VyY2VBc1dlYlJlc291
cmNlSGFuZGxlci5oIgorCisjaW1wb3J0ICJBcmNoaXZlUmVzb3VyY2UuaCIKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK0BpbXBsZW1lbnRhdGlvbiBXZWJBcmNoaXZlUmVzb3VyY2VBc1dl
YlJlc291cmNlSGFuZGxlcgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEYXRhOihOU0RhdGEg
KilkYXRhIFVSTDooTlNVUkwgKilVUkwgTUlNRVR5cGU6KE5TU3RyaW5nICopTUlNRVR5cGUgdGV4
dEVuY29kaW5nTmFtZTooTlNTdHJpbmcgKil0ZXh0RW5jb2RpbmdOYW1lIGZyYW1lTmFtZTooTlNT
dHJpbmcgKilmcmFtZU5hbWUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKworICAgIGlmICghZGF0YSB8fCAhVVJMIHx8ICFNSU1FVHlwZSkg
eworICAgICAgICBbc2VsZiByZWxlYXNlXTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisK
KyAgICByZXNvdXJjZSA9IFdlYkNvcmU6OkFyY2hpdmVSZXNvdXJjZTo6Y3JlYXRlKFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKFtbZGF0YSBjb3B5XSBhdXRvcmVsZWFzZV0pLCBVUkwsIE1JTUVUeXBlLCB0
ZXh0RW5jb2RpbmdOYW1lLCBmcmFtZU5hbWUsIG5pbCk7CisgICAgaWYgKCFyZXNvdXJjZSkgewor
ICAgICAgICBbc2VsZiByZWxlYXNlXTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworLSAoTlNVUkwgKilVUkwKK3sKKyAgICBpZiAoIXJlc291cmNl
KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiByZXNvdXJjZS0+dXJsKCk7Cit9CisK
KysgKGlkKXJlc291cmNlRm9yRGF0YTooTlNEYXRhICopZGF0YSBVUkw6KE5TVVJMICopdXJsIE1J
TUVUeXBlOihOU1N0cmluZyAqKW1pbWVUeXBlIHRleHRFbmNvZGluZ05hbWU6KE5TU3RyaW5nICop
dGV4dEVuY29kaW5nTmFtZSBmcmFtZU5hbWU6KE5TU3RyaW5nICopZnJhbWVOYW1lCit7CisgICAg
cmV0dXJuIFtbW1dlYkFyY2hpdmVSZXNvdXJjZUFzV2ViUmVzb3VyY2VIYW5kbGVyIGFsbG9jXSBp
bml0V2l0aERhdGE6ZGF0YSBVUkw6dXJsIE1JTUVUeXBlOm1pbWVUeXBlIHRleHRFbmNvZGluZ05h
bWU6dGV4dEVuY29kaW5nTmFtZSBmcmFtZU5hbWU6ZnJhbWVOYW1lXSBhdXRvcmVsZWFzZV07Cit9
CisKK0BlbmQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTC5oCShyZXZpc2lvbiAyMjA5NzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkwuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUs
NyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgVVJMKGNvbnN0IFVSTCYgYmFzZSwgY29u
c3QgU3RyaW5nJiByZWxhdGl2ZSk7CiAgICAgVVJMKGNvbnN0IFVSTCYgYmFzZSwgY29uc3QgU3Ry
aW5nJiByZWxhdGl2ZSwgY29uc3QgVGV4dEVuY29kaW5nJik7CiAKLSAgICBzdGF0aWMgVVJMIGZh
a2VVUkxXaXRoUmVsYXRpdmVQYXJ0KGNvbnN0IFN0cmluZyYpOworICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBVUkwgZmFrZVVSTFdpdGhSZWxhdGl2ZVBhcnQoY29uc3QgU3RyaW5nJik7CiAgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIFVSTCBmaWxlVVJMV2l0aEZpbGVTeXN0ZW1QYXRoKGNvbnN0
IFN0cmluZyYpOwogCiAgICAgU3RyaW5nIHN0cmlwcGVkRm9yVXNlQXNSZWZlcnJlcigpIGNvbnN0
OwpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMjIxMzk2KQorKysg
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjEgQEAKKzIwMTctMDgtMzAgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+
CisKKyAgICAgICAgTGF5ZXJpbmcgdmlvbGF0aW9uIGluIEVkaXRvcjo6Y3JlYXRlRnJhZ21lbnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjEyMwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTWlzYy9X
ZWJOU1VSTEV4dHJhcy5oOgorICAgICAgICAqIE1pc2MvV2ViTlNVUkxFeHRyYXMubW06CisgICAg
ICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3
Lm1tOgorICAgICAgICBSZW1vdmVkIG11bHRpcGxlIGNvcGllcyBvZiB3ZWJraXQtZmFrZS11cmwg
Y3JlYXRpb24gY29kZSwgc3dpdGNoaW5nIHRvIFVSTDo6ZmFrZVVSTFdpdGhSZWxhdGl2ZVBhcnQo
KS4KKyAgICAgICAgCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1t
OgorICAgICAgICAoX1dlYkNyZWF0ZUZyYWdtZW50KTogQWRkZWQgYSBzdHViIGltcGxlbWVudGF0
aW9uIGZvciBvbGRlciBPU2VzLiBUaGlzIGlzIG5lZWRlZAorICAgICAgICBiZWNhdXNlIFdlYktp
dExlZ2FjeS5leHAgaXMgbm90IHBhc3NlZCB0aHJvdWdoIHByZXByb2Nlc3Nvciwgc28gdGhlcmUg
aXMgbm8gc2FuZQorICAgICAgICB3YXkgdG8gYXZvaWQgZXhwb3J0aW5nIHRoZSBzeW1ib2wganVz
dCBvbiBuZXdlciBPU2VzLgorCiAyMDE3LTA4LTMwICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxl
LmNvbT4KIAogICAgICAgICBbTWFjXSBVcHN0cmVhbSBBY2Nlc3NpYmlsaXR5LXJlbGF0ZWQgV2Vi
S2l0U3lzdGVtSW50ZXJmYWNlIGZ1bmN0aW9ucwpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvTWlzYy9XZWJOU1VSTEV4dHJhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL01pc2MvV2ViTlNVUkxFeHRyYXMuaAkocmV2aXNpb24gMjIwOTc0KQorKysgU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJOU1VSTEV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MSwxMSArNzEsNiBAQCBAaW50ZXJmYWNlIE5TVVJMIChXZWJOU1VSTEV4dHJhcykKIAogLSAo
TlNVUkwgKilfd2Via2l0X1VSTEZyb21VUkxPclNjaGVtZWxlc3NGaWxlVVJMOwogCi0jaWYgVEFS
R0VUX09TX0lQSE9ORQotLy8gRklYTUU6IFRoaXMgbWV0aG9kIG5hbWUgbmVlZHMgYSBwcmVmaXgu
Ci0rIChOU1VSTCAqKXVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQ6KE5TU3RyaW5nICopcmVsYXRp
dmVQYXJ0OwotI2VuZGlmCi0KIEBlbmQKIAogQGludGVyZmFjZSBOU1N0cmluZyAoV2ViTlNVUkxF
eHRyYXMpCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYk5TVVJMRXh0cmFz
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViTlNVUkxF
eHRyYXMubW0JKHJldmlzaW9uIDIyMDk3NCkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01p
c2MvV2ViTlNVUkxFeHRyYXMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ2LDExICs0Niw2IEBACiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKLSNpZiBQTEFU
Rk9STShJT1MpCi0vLyBGYWtlIFVSTCBzY2hlbWUuCi0jZGVmaW5lIFdlYkRhdGFQcm90b2NvbFNj
aGVtZSBAIndlYmtpdC1mYWtlLXVybCIKLSNlbmRpZgotCiAjZGVmaW5lIFVSTF9CWVRFU19CVUZG
RVJfTEVOR1RIIDIwNDgKIAogQGltcGxlbWVudGF0aW9uIE5TVVJMIChXZWJOU1VSTEV4dHJhcykK
QEAgLTIxNywyMCArMjEyLDYgQEAgLSAoTlNVUkwgKilfd2Via2l0X1VSTEZyb21VUkxPclNjaGVt
ZWxlcwogCiAgICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOltAImZpbGU6IiBzdHJpbmdC
eUFwcGVuZGluZ1N0cmluZzpbc2VsZiBhYnNvbHV0ZVN0cmluZ11dXTsKIH0KLQotI2lmIFBMQVRG
T1JNKElPUykKLSsgKE5TVVJMICopdW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydDooTlNTdHJpbmcg
KilyZWxhdGl2ZVBhcnQKLXsKLSAgICBDRlVVSURSZWYgVVVJRFJlZiA9IENGVVVJRENyZWF0ZShr
Q0ZBbGxvY2F0b3JEZWZhdWx0KTsKLSAgICBOU1N0cmluZyAqVVVJRFN0cmluZyA9IChOU1N0cmlu
ZyAqKUNGVVVJRENyZWF0ZVN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBVVUlEUmVmKTsKLSAg
ICBDRlJlbGVhc2UoVVVJRFJlZik7Ci0gICAgTlNVUkwgKlVSTCA9IFtOU1VSTCBVUkxXaXRoU3Ry
aW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUA6Ly8lQC8lQCIsIFdlYkRhdGFQcm90
b2NvbFNjaGVtZSwgVVVJRFN0cmluZywgcmVsYXRpdmVQYXJ0XV07Ci0gICAgQ0ZSZWxlYXNlKFVV
SURTdHJpbmcpOwotICAgIAotICAgIHJldHVybiBVUkw7Ci19Ci0KLSNlbmRpZiAvLyBQTEFURk9S
TShJT1MpCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBOU1N0cmluZyAoV2ViTlNVUkxFeHRyYXMp
CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCShyZXZpc2lvbiAyMjA5NzQpCisrKyBTb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTk5LDkgKzk5LDExIEBAIC0gKE5TU3RyaW5nICopbGFuZ3VhZ2VGb3JXb3JkUmFu
Z2U6KE5TUmEKIEBlbmQKICNlbmRpZgogCisjaWYgKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVf
T1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMTAwMDApIHx8IChQTEFURk9STShNQUMpICYmIF9f
TUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDEzMDApCiBAaW50ZXJmYWNlIE5TQXR0
cmlidXRlZFN0cmluZyAoV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRGV0YWlscykKIC0gKERPTURvY3Vt
ZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcm9tUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UgZG9jdW1lbnQ6
KERPTURvY3VtZW50ICopZG9jdW1lbnQgZG9jdW1lbnRBdHRyaWJ1dGVzOihOU0RpY3Rpb25hcnkg
KilhdHRyaWJ1dGVzIHN1YnJlc291cmNlczooTlNBcnJheSAqKilzdWJyZXNvdXJjZXM7CiBAZW5k
CisjZW5kaWYKIAogc3RhdGljIFdlYlZpZXdJbnNlcnRBY3Rpb24ga2l0KEVkaXRvckluc2VydEFj
dGlvbiBhY3Rpb24pCiB7CkBAIC00MzMsOCArNDM1LDIwIEBAIE5TVVJMICpXZWJFZGl0b3JDbGll
bnQ6OmNhbm9uaWNhbGl6ZVVSTFMKICAgICByZXR1cm4gVVJMOwogfQogCisjaWYgKFBMQVRGT1JN
KElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMDAwKSB8fCAo
UExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTMw
MCkKKworLy8gRklYTUU6IFJlbW92ZSB0aGlzIGZ1bmN0aW9uIG9uY2Ugd2UgZG9uJ3QgdXNlIGl0
IG9uIGFueSBzdXBwb3J0ZWQgcGxhdGZvcm0uCitfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9f
KSkKK3ZvaWQgX1dlYkNyZWF0ZUZyYWdtZW50KERvY3VtZW50JiwgTlNBdHRyaWJ1dGVkU3RyaW5n
ICosIEZyYWdtZW50QW5kUmVzb3VyY2VzJikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCisjZWxzZQorCiBzdGF0aWMgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzRm9y
QXR0cmlidXRlZFN0cmluZ0NvbnZlcnNpb24oKQogeworICAgIC8vIFRoaXMgZnVuY3Rpb24gbmVl
ZHMgdG8gYmUga2VwdCBpbiBzeW5jIHdpdGggaWRlbnRpY2FsbHkgbmFtZWQgb25lIGluIFdlYkNv
cmUsIHdoaWNoIGlzIHVzZWQgb24gbmV3ZXIgT1MgdmVyc2lvbnMuCiAgICAgTlNBcnJheSAqZXhj
bHVkZWRFbGVtZW50cyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOgogICAgICAg
ICAvLyBPbWl0IHN0eWxlIHNpbmNlIHdlIHdhbnQgc3R5bGUgdG8gYmUgaW5saW5lIHNvIHRoZSBm
cmFnbWVudCBjYW4gYmUgZWFzaWx5IGluc2VydGVkLgogICAgICAgICBAInN0eWxlIiwKQEAgLTQ2
NCwxMSArNDc4LDEzIEBAIHZvaWQgX1dlYkNyZWF0ZUZyYWdtZW50KERvY3VtZW50JiBkb2N1bWUK
ICAgICBOU0FycmF5ICpzdWJyZXNvdXJjZXM7CiAgICAgRE9NRG9jdW1lbnRGcmFnbWVudCogZnJh
Z21lbnQgPSBbc3RyaW5nIF9kb2N1bWVudEZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBbc3RyaW5n
IGxlbmd0aF0pCiAgICAgICAgIGRvY3VtZW50OmtpdCgmZG9jdW1lbnQpIGRvY3VtZW50QXR0cmli
dXRlczpkb2N1bWVudEF0dHJpYnV0ZXMgc3VicmVzb3VyY2VzOiZzdWJyZXNvdXJjZXNdOwotICAg
IHJlc3VsdC5mcmFnbWVudCA9IGNvcmUoZnJhZ21lbnQpOworCiAgICAgZm9yIChXZWJSZXNvdXJj
ZSogcmVzb3VyY2UgaW4gc3VicmVzb3VyY2VzKQogICAgICAgICByZXN1bHQucmVzb3VyY2VzLmFw
cGVuZChbcmVzb3VyY2UgX2NvcmVSZXNvdXJjZV0pOwogfQogCisjZW5kaWYKKwogdm9pZCBXZWJF
ZGl0b3JDbGllbnQ6OnNldEluc2VydGlvblBhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkTmFtZSkKIHsKICNpZiAhUExBVEZPUk0oSU9TKQpJbmRleDogU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCShyZXZpc2lvbiAyMjA5NzQpCisrKyBTb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0y
MjkyLDcgKzIyOTIsNyBAQCAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21l
CiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRGb3JJbWFnZURhdGE6
KE5TRGF0YSAqKWRhdGEgd2l0aFJlbGF0aXZlVVJMUGFydDooTlNTdHJpbmcgKilyZWxhdGl2ZVVS
TFBhcnQgYW5kTUlNRVR5cGU6KE5TU3RyaW5nICopbWltZVR5cGUKIHsKICAgICBXZWJSZXNvdXJj
ZSAqcmVzb3VyY2UgPSBbW1dlYlJlc291cmNlIGFsbG9jXSBpbml0V2l0aERhdGE6ZGF0YQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVS
TDpbTlNVUkwgdW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydDpyZWxhdGl2ZVVSTFBhcnRdCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJM
OlVSTDo6dW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChyZWxhdGl2ZVVSTFBhcnQpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JTUVUeXBlOm1p
bWVUeXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
RW5jb2RpbmdOYW1lOm5pbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZyYW1lTmFtZTpuaWxdOwpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCShyZXZpc2lvbiAyMjA5NzQpCisrKyBTb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDQgKzEsNCBAQAotLyoKKyAvKgogICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTAsIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogICAgICAgICAgIChDKSAyMDA2
LCAyMDA3IEdyYWhhbSBEZW5uaXMgKGdyYWhhbS5kZW5uaXNAZ21haWwuY29tKQogICoKQEAgLTc4
MSw5ICs3ODEsNiBAQCBjb25zdCBmbG9hdCBfV2ViSFRNTFZpZXdQcmludGluZ01heGltdW1TCiAj
ZGVmaW5lIE1JTl9CT0xEX1dFSUdIVCA3CiAjZGVmaW5lIFNUQU5EQVJEX0JPTERfV0VJR0hUIDkK
IAotLy8gRmFrZSBVUkwgc2NoZW1lLgotI2RlZmluZSBXZWJEYXRhUHJvdG9jb2xTY2hlbWUgQCJ3
ZWJraXQtZmFrZS11cmwiCi0KICNpZiAhUExBVEZPUk0oSU9TKQogLy8gPHJkYXI6Ly9wcm9ibGVt
LzQ5ODU1MjQ+IFJlZmVyZW5jZXMgdG8gV2ViQ29yZVNjcm9sbFZpZXcgYXMgYSBzdWJ2aWV3IG9m
IGEgV2ViSFRNTFZpZXcgbWF5IGJlIHByZXNlbnQKIC8vIGluIHNvbWUgTklCIGZpbGVzLCBzbyBO
U1VuYXJjaGl2ZXIgbXVzdCBiZSBzdGlsbCBhYmxlIHRvIGxvb2sgdXAgdGhpcyBub3ctdW51c2Vk
IGNsYXNzLgpAQCAtMTIwMiwxNyArMTE5OSw2IEBAICsgKE5TQXJyYXkgKilfZXhjbHVkZWRFbGVt
ZW50c0ZvckF0dHJpYnUKICAgICByZXR1cm4gZWxlbWVudHM7CiB9CiAKLXN0YXRpYyBOU1VSTCog
dW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChOU1N0cmluZyAqcmVsYXRpdmVQYXJ0KQotewotICAg
IENGVVVJRFJlZiBVVUlEUmVmID0gQ0ZVVUlEQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQpOwot
ICAgIE5TU3RyaW5nICpVVUlEU3RyaW5nID0gKE5TU3RyaW5nICopQ0ZVVUlEQ3JlYXRlU3RyaW5n
KGtDRkFsbG9jYXRvckRlZmF1bHQsIFVVSURSZWYpOwotICAgIENGUmVsZWFzZShVVUlEUmVmKTsK
LSAgICBOU1VSTCAqVVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCIlQDovLyVALyVAIiwgV2ViRGF0YVByb3RvY29sU2NoZW1lLCBVVUlEU3RyaW5n
LCByZWxhdGl2ZVBhcnRdXTsKLSAgICBDRlJlbGVhc2UoVVVJRFN0cmluZyk7Ci0KLSAgICByZXR1
cm4gVVJMOwotfQotCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRG
cm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6KERPTVJhbmdlICopY29u
dGV4dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dQbGFp
blRleHQ6KEJPT0wpYWxsb3dQbGFpblRleHQKQEAgLTI1OTAsNyArMjU3Niw3IEBAIC0gKERPTURv
Y3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWUKICAgICB9CiAgICAgaWYgKHBib2FyZFR5
cGUgPT0gTlNUSUZGUGJvYXJkVHlwZSkgewogICAgICAgICBXZWJSZXNvdXJjZSAqcmVzb3VyY2Ug
PSBbW1dlYlJlc291cmNlIGFsbG9jXSBpbml0V2l0aERhdGE6W3Bhc3RlYm9hcmQgZGF0YUZvclR5
cGU6TlNUSUZGUGJvYXJkVHlwZV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMOnVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQo
QCJpbWFnZS50aWZmIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVVJMOihOU1VSTCAqKVVSTDo6ZmFrZVVSTFdpdGhSZWxhdGl2
ZVBhcnQoImltYWdlLnRpZmYiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6QCJpbWFnZS90aWZmIiAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RW5jb2RpbmdOYW1lOm5p
bAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmcmFtZU5hbWU6bmlsXTsKQEAgLTI2MDAsNyArMjU4Niw3IEBAIC0gKERPTURvY3VtZW50RnJh
Z21lbnQgKilfZG9jdW1lbnRGcmFnbWUKICAgICB9CiAgICAgaWYgKHBib2FyZFR5cGUgPT0gTlNQ
REZQYm9hcmRUeXBlKSB7CiAgICAgICAgIFdlYlJlc291cmNlICpyZXNvdXJjZSA9IFtbV2ViUmVz
b3VyY2UgYWxsb2NdIGluaXRXaXRoRGF0YTpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTpOU1BERlBi
b2FyZFR5cGVdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFVSTDp1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KEAiYXBwbGljYXRp
b24ucGRmIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVVJMOihOU1VSTCAqKVVSTDo6ZmFrZVVSTFdpdGhSZWxhdGl2ZVBhcnQo
ImFwcGxpY2F0aW9uLnBkZiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBNSU1FVHlwZTpAImFwcGxpY2F0aW9uL3BkZiIgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEVuY29kaW5nTmFt
ZTpuaWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZnJhbWVOYW1lOm5pbF07CkBAIC0yNjExLDcgKzI1OTcsNyBAQCAtIChET01Eb2N1bWVu
dEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lCiAKICAgICBpZiAoW3Bib2FyZFR5cGUgaXNFcXVh
bFRvU3RyaW5nOihOU1N0cmluZyopa1VUVHlwZVBOR10pIHsKICAgICAgICAgV2ViUmVzb3VyY2Ug
KnJlc291cmNlID0gW1tXZWJSZXNvdXJjZSBhbGxvY10gaW5pdFdpdGhEYXRhOltwYXN0ZWJvYXJk
IGRhdGFGb3JUeXBlOihOU1N0cmluZyopa1VUVHlwZVBOR10KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMOnVuaXF1ZVVSTFdp
dGhSZWxhdGl2ZVBhcnQoQCJpbWFnZS5wbmciKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkw6KE5TVVJMICopVVJMOjpmYWtl
VVJMV2l0aFJlbGF0aXZlUGFydCgiaW1hZ2UucG5nIikKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JTUVUeXBlOkAiaW1hZ2UvcG5nIiAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RW5j
b2RpbmdOYW1lOm5pbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmcmFtZU5hbWU6bmlsXTsKQEAgLTc1OTAsMjAgKzc1NzYsMTYgQEAgLSAo
Qk9PTClfZmluZFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgbwogCiBAZW5kCiAKLS8vIFRoaXMg
aXMgdXNlZCBieSBBcHBLaXQgYW5kIGlzIGluY2x1ZGVkIGhlcmUgc28gdGhhdCBXZWJEYXRhUHJv
dG9jb2xTY2hlbWUgaXMgb25seSBkZWZpbmVkIG9uY2UuCisjaWYgKFBMQVRGT1JNKElPUykgJiYg
X19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMTAwMDApIHx8IChQTEFURk9STShN
QUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDEzMDApCiBAaW1wbGVt
ZW50YXRpb24gTlNVUkwgKFdlYkRhdGFVUkwpCiAKICsgKE5TVVJMICopX3dlYl91bmlxdWVXZWJE
YXRhVVJMCiB7Ci0gICAgQ0ZVVUlEUmVmIFVVSURSZWYgPSBDRlVVSURDcmVhdGUoa0NGQWxsb2Nh
dG9yRGVmYXVsdCk7Ci0gICAgTlNTdHJpbmcgKlVVSURTdHJpbmcgPSAoTlNTdHJpbmcgKilDRlVV
SURDcmVhdGVTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgVVVJRFJlZik7Ci0gICAgQ0ZSZWxl
YXNlKFVVSURSZWYpOwotICAgIE5TVVJMICpVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpbTlNT
dHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAOi8vJUAiLCBXZWJEYXRhUHJvdG9jb2xTY2hlbWUs
IFVVSURTdHJpbmddXTsKLSAgICBDRlJlbGVhc2UoVVVJRFN0cmluZyk7Ci0gICAgcmV0dXJuIFVS
TDsKKyAgICByZXR1cm4gVVJMOjpmYWtlVVJMV2l0aFJlbGF0aXZlUGFydChlbXB0eVN0cmluZygp
KTsKIH0KIAogQGVuZAorI2VuZGlmCiAKICNpZiAhUExBVEZPUk0oSU9TKQogQGltcGxlbWVudGF0
aW9uIFdlYlJlc3BvbmRlckNoYWluU2luawo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319421</attachid>
            <date>2017-08-30 16:32:52 -0700</date>
            <delta_ts>2017-08-31 09:22:57 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>HTMLWriter.txt</filename>
            <type>text/plain</type>
            <size>26328</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMDk3NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDE3LTA4LTMwICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIExheWVyaW5nIHZpb2xhdGlv
biBpbiBFZGl0b3I6OmNyZWF0ZUZyYWdtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBlZGl0aW5nL2NvY29hL1dlYkFyY2hpdmVSZXNvdXJjZUFzV2ViUmVzb3VyY2VI
YW5kbGVyLmg6CisgICAgICAgICogZWRpdGluZy9jb2NvYS9XZWJBcmNoaXZlUmVzb3VyY2VBc1dl
YlJlc291cmNlSGFuZGxlci5tbToKKyAgICAgICAgQWRkZWQgYSB3cmFwcGVyIGNsYXNzIGZvciBB
cmNoaXZlUmVzb3VyY2UsIHN1aXRhYmxlIGZvciB1c2UgYXMgYSBXZWJSZXNvdXJjZUhhbmRsZXIu
CisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6YXR0cmlidXRlc0ZvckF0dHJpYnV0ZWRTdHJpbmdDb252ZXJzaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6Y3JlYXRlRnJhZ21lbnQpOgorICAgICAgICBPbiBuZXdlciBPUyB2
ZXJzaW9ucywgZG9uJ3QgdXNlIFdlYktpdExlZ2FjeSB0byBjb252ZXJ0IE5TQXR0cmlidXRlZFN0
cmluZyB0byBhCisgICAgICAgIGRvY3VtZW50IGZyYWdtZW50LiBXZSBub3cgb25seSB1c2Ugc3lz
dGVtIGZyYW1ld29ya3MgdG8gY29udmVydCB0aGUgYXR0cmlidXRlZAorICAgICAgICBzdHJpbmcg
dG8gSFRNTCBzb3VyY2UsIGFuZCBwYXJzZSBIVE1MIGludG8gYSBmcmFnbWVudCBkaXJlY3RseSBp
biBXZWJDb3JlLgorCisgICAgICAgICogcGxhdGZvcm0vVVJMLmg6IEV4cG9ydGVkIGZha2VVUkxX
aXRoUmVsYXRpdmVQYXJ0LgorCiAyMDE3LTA4LTIxICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxl
LmNvbT4KIAogICAgICAgICBbUGF5bWVudCBSZXF1ZXN0XSBJbXBsZW1lbnQgdGhlIFBheW1lbnRS
ZXF1ZXN0IGNvbnN0cnVjdG9yCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjA5NzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTY2MTAsNiArNjYxMCw4IEBACiAJCUUxODI1NjhGMEVGMkIwMkQwMDkzMzI0MiAvKiBKU1dvcmtl
ckdsb2JhbFNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxODI1NjhEMEVGMkIwMkQwMDkzMzI0MiAvKiBKU1dvcmtlckdsb2JhbFNjb3BlLmNw
cCAqLzsgfTsKIAkJRTE4MjU2OTAwRUYyQjAyRDAwOTMzMjQyIC8qIEpTV29ya2VyR2xvYmFsU2Nv
cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxODI1
NjhFMEVGMkIwMkQwMDkzMzI0MiAvKiBKU1dvcmtlckdsb2JhbFNjb3BlLmggKi87IH07CiAJCUUx
ODI1OEFDMEVGM0NENzAwMDkzMzI0MiAvKiBKU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxODI1OEFCMEVG
M0NENzAwMDkzMzI0MiAvKiBKU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcCAqLzsgfTsKKwkJ
RTE4NTM2ODQxRjRFNDgxNDAwRkUwOTFCIC8qIFdlYkFyY2hpdmVSZXNvdXJjZUFzV2ViUmVzb3Vy
Y2VIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMTg1MzY4MTFGNEU0NzI3MDBGRTA5MUIgLyogV2ViQXJjaGl2ZVJlc291cmNlQXNXZWJSZXNv
dXJjZUhhbmRsZXIuaCAqLzsgfTsKKwkJRTE4NTM2ODUxRjUwOTA2MTAwRkUwOTFCIC8qIFdlYkFy
Y2hpdmVSZXNvdXJjZUFzV2ViUmVzb3VyY2VIYW5kbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4NTM2ODIxRjRFNDcyNzAwRkUwOTFCIC8qIFdl
YkFyY2hpdmVSZXNvdXJjZUFzV2ViUmVzb3VyY2VIYW5kbGVyLm1tICovOyB9OwogCQlFMTg3NzJG
MTEyNkUyNjI5MDAzREQ1ODYgLyogTGFuZ3VhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4NzcyRjAxMjZFMjYyOTAwM0RENTg2IC8qIExhbmd1
YWdlLmNwcCAqLzsgfTsKIAkJRTE4REYzMzUxOEFBRjEyQzAwNzczRTU5IC8qIFNlcmlhbGl6ZWRD
cnlwdG9LZXlXcmFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMThERjMzNDE4QUFGMTJDMDA3NzNFNTkgLyogU2VyaWFsaXplZENyeXB0b0tleVdyYXAu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMThE
RjMzODE4QUFGMTREMDA3NzNFNTkgLyogU2VyaWFsaXplZENyeXB0b0tleVdyYXBNYWMubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMThERjMzNjE4QUFG
MTREMDA3NzNFNTkgLyogU2VyaWFsaXplZENyeXB0b0tleVdyYXBNYWMubW0gKi87IH07CkBAIC0x
NTI2NSw2ICsxNTI2Nyw4IEBACiAJCUUxODI1NjhEMEVGMkIwMkQwMDkzMzI0MiAvKiBKU1dvcmtl
ckdsb2JhbFNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
V29ya2VyR2xvYmFsU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTgy
NTY4RTBFRjJCMDJEMDA5MzMyNDIgLyogSlNXb3JrZXJHbG9iYWxTY29wZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dvcmtlckdsb2JhbFNjb3BlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUxODI1OEFCMEVGM0NENzAwMDkzMzI0MiAvKiBKU1dvcmtlckds
b2JhbFNjb3BlQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlFMTg1MzY4MTFGNEU0NzI3MDBGRTA5MUIgLyogV2ViQXJjaGl2ZVJlc291cmNlQXNXZWJS
ZXNvdXJjZUhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQXJjaGl2ZVJlc291cmNlQXNXZWJS
ZXNvdXJjZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTE4NTM2ODIx
RjRFNDcyNzAwRkUwOTFCIC8qIFdlYkFyY2hpdmVSZXNvdXJjZUFzV2ViUmVzb3VyY2VIYW5kbGVy
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQXJjaGl2ZVJlc291cmNlQXNXZWJSZXNvdXJj
ZUhhbmRsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxODc3MkYwMTI2RTI2
MjkwMDNERDU4NiAvKiBMYW5ndWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBMYW5ndWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxOERG
MzM0MThBQUYxMkMwMDc3M0U1OSAvKiBTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMThERjMzNjE4QUFGMTREMDA3NzNFNTkgLyogU2Vy
aWFsaXplZENyeXB0b0tleVdyYXBNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE5ODk2LDYgKzE5OTAwLDggQEAKIAkJCQk5QjU1RUVFODFCM0U4ODk4
MDA1MzQyQkMgLyogRWRpdG9yQ29jb2EubW0gKi8sCiAJCQkJN0MzRTUxMDgxOERGOEYzNTAwQzEx
MkY3IC8qIEhUTUxDb252ZXJ0ZXIuaCAqLywKIAkJCQk3QzNFNTEwOTE4REY4RjM1MDBDMTEyRjcg
LyogSFRNTENvbnZlcnRlci5tbSAqLywKKwkJCQlFMTg1MzY4MTFGNEU0NzI3MDBGRTA5MUIgLyog
V2ViQXJjaGl2ZVJlc291cmNlQXNXZWJSZXNvdXJjZUhhbmRsZXIuaCAqLywKKwkJCQlFMTg1MzY4
MjFGNEU0NzI3MDBGRTA5MUIgLyogV2ViQXJjaGl2ZVJlc291cmNlQXNXZWJSZXNvdXJjZUhhbmRs
ZXIubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9IGNvY29hOwogCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKQEAgLTI5OTA5LDYgKzI5OTE1LDcgQEAKIAkJCQkwODA2RTU3QTEyODkzMDQ1MDA3Q0VE
MzIgLyogU1ZHTWF0cml4LmggaW4gSGVhZGVycyAqLywKIAkJCQkwOENBM0Q0NDEyODk0QTM4MDBG
RkYyNjAgLyogU1ZHTWF0cml4VGVhck9mZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NFNThENUMx
REQ3RUM5QzAwMTI4NTUyIC8qIFNWR01hdHJpeFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQlF
MTg1MzY4NDFGNEU0ODE0MDBGRTA5MUIgLyogV2ViQXJjaGl2ZVJlc291cmNlQXNXZWJSZXNvdXJj
ZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTRCMEQwMEJGMjIwMDcxQjc4MiAv
KiBTVkdNZXRhZGF0YUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTFGMkIxMENFRjBB
QkYwMDQ0MkY2QSAvKiBTVkdNaXNzaW5nR2x5cGhFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCMjIyN0E0RTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHTVBhdGhFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKQEAgLTMyMzg1LDYgKzMyMzkyLDcgQEAKIAkJCQlBMUNDNTY3ODFGNDYxNEE1MDBBNDU1
NUIgLyogSlNQYXltZW50UmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMUY2MDA1NzFG
NDc2NTA1MDA3N0U4M0YgLyogSlNQYXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUExRjYwMDU5MUY0NzY1MDUwMDc3RTgzRiAvKiBKU1BheW1lbnRSZXF1ZXN0
VXBkYXRlRXZlbnRJbml0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUxODUzNjg1MUY1MDkwNjEw
MEZFMDkxQiAvKiBXZWJBcmNoaXZlUmVzb3VyY2VBc1dlYlJlc291cmNlSGFuZGxlci5tbSBpbiBT
b3VyY2VzICovLAogCQkJCUExQ0M1NjdBMUY0NjE0QUEwMEE0NTU1QiAvKiBKU1BheW1lbnRSZXNw
b25zZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMUNDNTY3QzFGNDYxNEFGMDBBNDU1NUIgLyog
SlNQYXltZW50U2hpcHBpbmdPcHRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTFDQzU2N0Ux
RjQ2MTRCNDAwQTQ1NTVCIC8qIEpTUGF5bWVudFNoaXBwaW5nVHlwZS5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQko
cmV2aXNpb24gMjIwOTc0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JD
b2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2ltcG9ydCAiRnJhbWUu
aCIKICNpbXBvcnQgIkZyYW1lTG9hZGVyLmgiCiAjaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5oIgor
I2ltcG9ydCAiSFRNTEJvZHlFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MQ29udmVydGVyLmgiCiAj
aW1wb3J0ICJIVE1MSW1hZ2VFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MU3BhbkVsZW1lbnQuaCIK
QEAgLTQ4LDIwICs0OSwyNCBAQAogI2ltcG9ydCAiUmVuZGVyRWxlbWVudC5oIgogI2ltcG9ydCAi
UmVuZGVyU3R5bGUuaCIKICNpbXBvcnQgIlRleHQuaCIKKyNpbXBvcnQgIldlYkFyY2hpdmVSZXNv
dXJjZUFzV2ViUmVzb3VyY2VIYW5kbGVyLmgiCiAjaW1wb3J0IDxwYWwvc3BpL2NvY29hL05TQXR0
cmlidXRlZFN0cmluZ1NQSS5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4K
ICNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgogCi0jaWYgUExBVEZPUk0oSU9TKQorI2lmIChQ
TEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDExMDAw
MCkgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+
PSAxMDEzMDApCitAaW50ZXJmYWNlIE5TQXR0cmlidXRlZFN0cmluZyAoKQorLSAoTlNTdHJpbmcg
KilfaHRtbERvY3VtZW50RnJhZ21lbnRTdHJpbmc6KE5TUmFuZ2UpcmFuZ2UgZG9jdW1lbnRBdHRy
aWJ1dGVzOihOU0RpY3Rpb25hcnkgKilkaWN0IHN1YnJlc291cmNlczooTlNBcnJheSAqKilzdWJy
ZXNvdXJjZXM7CitAZW5kCisjZWxpZiBQTEFURk9STShJT1MpCiBTT0ZUX0xJTktfUFJJVkFURV9G
UkFNRVdPUksoV2ViS2l0TGVnYWN5KQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMpCisjZWxp
ZiBQTEFURk9STShNQUMpCiBTT0ZUX0xJTktfRlJBTUVXT1JLX0lOX1VNQlJFTExBKFdlYktpdCwg
V2ViS2l0TGVnYWN5KQogI2VuZGlmCiAKLS8vIEZJWE1FOiBHZXQgcmlkIG9mIHRoaXMgYW5kIGNo
YW5nZSBOU0F0dHJpYnV0ZWRTdHJpbmcgY29udmVyc2lvbiBzbyBpdCBkb2Vzbid0IHVzZSBXZWJL
aXRMZWdhY3kgKGNmLiByZGFyOi8vcHJvYmxlbS8zMDU5NzM1MikuCisjaWYgKFBMQVRGT1JNKElP
UykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMTAwMDApIHx8IChQTEFU
Rk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDEzMDApCiBT
T0ZUX0xJTksoV2ViS2l0TGVnYWN5LCBfV2ViQ3JlYXRlRnJhZ21lbnQsIHZvaWQsIChXZWJDb3Jl
OjpEb2N1bWVudCYgZG9jdW1lbnQsIE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nLCBXZWJDb3Jl
OjpGcmFnbWVudEFuZFJlc291cmNlcyYgcmVzdWx0KSwgKGRvY3VtZW50LCBzdHJpbmcsIHJlc3Vs
dCkpCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xNDUsMTUgKzE1MCw2NiBA
QCBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBFZGl0b3I6OmZvbnRBdHRyCiAgICAgcmV0dXJuIGF0
dHJpYnV0ZXM7CiB9CiAKKyNpZiAoUExBVEZPUk0oSU9TKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9O
X01JTl9SRVFVSVJFRCA+PSAxMTAwMDApIHx8IChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMzAwKQorCitzdGF0aWMgTlNEaWN0aW9uYXJ5ICph
dHRyaWJ1dGVzRm9yQXR0cmlidXRlZFN0cmluZ0NvbnZlcnNpb24oKQoreworICAgIC8vIFRoaXMg
ZnVuY3Rpb24gbmVlZHMgdG8gYmUga2VwdCBpbiBzeW5jIHdpdGggaWRlbnRpY2FsbHkgbmFtZWQg
b25lIGluIFdlYktpdExlZ2FjeSwgd2hpY2ggaXMgdXNlZCBvbiBvbGRlciBPUyB2ZXJzaW9ucy4K
KyAgICBSZXRhaW5QdHI8TlNBcnJheT4gZXhjbHVkZWRFbGVtZW50cyA9IGFkb3B0TlMoW1tOU0Fy
cmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6CisgICAgICAgIC8vIE9taXQgc3R5bGUgc2luY2Ug
d2Ugd2FudCBzdHlsZSB0byBiZSBpbmxpbmUgc28gdGhlIGZyYWdtZW50IGNhbiBiZSBlYXNpbHkg
aW5zZXJ0ZWQuCisgICAgICAgIEAic3R5bGUiLAorICAgICAgICAvLyBPbWl0IHhtbCBzbyB0aGUg
cmVzdWx0IGlzIG5vdCBYSFRNTC4KKyAgICAgICAgQCJ4bWwiLAorICAgICAgICAvLyBPbWl0IHRh
Z3MgdGhhdCB3aWxsIGdldCBzdHJpcHBlZCB3aGVuIGNvbnZlcnRlZCB0byBhIGZyYWdtZW50IGFu
eXdheS4KKyAgICAgICAgQCJkb2N0eXBlIiwgQCJodG1sIiwgQCJoZWFkIiwgQCJib2R5IiwKKyAg
ICAgICAgLy8gT21pdCBkZXByZWNhdGVkIHRhZ3MuCisgICAgICAgIEAiYXBwbGV0IiwgQCJiYXNl
Zm9udCIsIEAiY2VudGVyIiwgQCJkaXIiLCBAImZvbnQiLCBAIm1lbnUiLCBAInMiLCBAInN0cmlr
ZSIsIEAidSIsCisgICAgICAgIC8vIE9taXQgb2JqZWN0IHNvIG5vIGZpbGUgYXR0YWNobWVudHMg
YXJlIHBhcnQgb2YgdGhlIGZyYWdtZW50LgorICAgICAgICBAIm9iamVjdCIsIG5pbF0pOworCisj
aWYgUExBVEZPUk0oSU9TKQorICAgIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IE5TRXhjbHVkZWRF
bGVtZW50c0RvY3VtZW50QXR0cmlidXRlID0gQCJFeGNsdWRlZEVsZW1lbnRzIjsKKyNlbmRpZgor
CisgICAgTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gQHsKKyAgICAgICAgTlNFeGNsdWRlZEVs
ZW1lbnRzRG9jdW1lbnRBdHRyaWJ1dGU6IGV4Y2x1ZGVkRWxlbWVudHMuZ2V0KCksCisgICAgICAg
IEAiSW50ZXJjaGFuZ2VOZXdsaW5lIjogQFlFUywKKyAgICAgICAgQCJDb2FsZXNjZVRhYlNwYW5z
IjogQFlFUywKKyAgICAgICAgQCJPdXRwdXRCYXNlVVJMIjogKE5TVVJMICopVVJMOjpmYWtlVVJM
V2l0aFJlbGF0aXZlUGFydChlbXB0eVN0cmluZygpKSwKKyAgICAgICAgQCJXZWJSZXNvdXJjZUhh
bmRsZXIiOiBbV2ViQXJjaGl2ZVJlc291cmNlQXNXZWJSZXNvdXJjZUhhbmRsZXIgY2xhc3NdLAor
ICAgIH07CisKKyAgICByZXR1cm4gZGljdGlvbmFyeTsKK30KKworRnJhZ21lbnRBbmRSZXNvdXJj
ZXMgRWRpdG9yOjpjcmVhdGVGcmFnbWVudChOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZykKK3sK
KyAgICBGcmFnbWVudEFuZFJlc291cmNlcyByZXN1bHQ7CisgICAgRG9jdW1lbnQmIGRvY3VtZW50
ID0gKm1fZnJhbWUuZG9jdW1lbnQoKTsKKworICAgIE5TQXJyYXkgKnN1YnJlc291cmNlcyA9IG5p
bDsKKyAgICBOU1N0cmluZyAqaHRtbEZyYWdtZW50U3RyaW5nID0gW3N0cmluZyBfaHRtbERvY3Vt
ZW50RnJhZ21lbnRTdHJpbmc6TlNNYWtlUmFuZ2UoMCwgW3N0cmluZyBsZW5ndGhdKSBkb2N1bWVu
dEF0dHJpYnV0ZXM6YXR0cmlidXRlc0ZvckF0dHJpYnV0ZWRTdHJpbmdDb252ZXJzaW9uKCkgc3Vi
cmVzb3VyY2VzOiZzdWJyZXNvdXJjZXNdOworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBm
cmFnbWVudCA9IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgZnJhZ21l
bnQtPnBhcnNlSFRNTChodG1sRnJhZ21lbnRTdHJpbmcsIGRvY3VtZW50LmJvZHkoKSwgRGlzYWxs
b3dTY3JpcHRpbmdBbmRQbHVnaW5Db250ZW50KTsKKworICAgIHJlc3VsdC5mcmFnbWVudCA9IGZy
YWdtZW50OworICAgIGZvciAoV2ViQXJjaGl2ZVJlc291cmNlQXNXZWJSZXNvdXJjZUhhbmRsZXIg
KnJlc291cmNlIGluIHN1YnJlc291cmNlcykKKyAgICAgICAgcmVzdWx0LnJlc291cmNlcy5hcHBl
bmQoKnJlc291cmNlLT5yZXNvdXJjZSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisjZWxz
ZQorCiBGcmFnbWVudEFuZFJlc291cmNlcyBFZGl0b3I6OmNyZWF0ZUZyYWdtZW50KE5TQXR0cmli
dXRlZFN0cmluZyAqc3RyaW5nKQogewotICAgIC8vIEZJWE1FOiBUaGUgYWxnb3JpdGhtIHRvIGNv
bnZlcnQgYW4gYXR0cmlidXRlZCBzdHJpbmcgaW50byBIVE1MIHNob3VsZCBiZSBpbXBsZW1lbnRl
ZCBoZXJlIGluIFdlYkNvcmUuCi0gICAgLy8gRm9yIG5vdywgdGhvdWdoLCB3ZSBjYWxsIGludG8g
V2ViS2l0TGVnYWN5LCB3aGljaCBpbiB0dXJuIGNhbGxzIGludG8gQXBwS2l0L1RleHRLaXQuCiAg
ICAgRnJhZ21lbnRBbmRSZXNvdXJjZXMgcmVzdWx0OwogICAgIF9XZWJDcmVhdGVGcmFnbWVudCgq
bV9mcmFtZS5kb2N1bWVudCgpLCBzdHJpbmcsIHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAorI2VuZGlmCisKIHN0YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBhcmNoaXZlZERhdGFG
b3JBdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZykK
IHsKICAgICBpZiAoIWF0dHJpYnV0ZWRTdHJpbmcubGVuZ3RoKQpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9XZWJBcmNoaXZlUmVzb3VyY2VBc1dlYlJlc291cmNlSGFuZGxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQXJjaGl2ZVJl
c291cmNlQXNXZWJSZXNvdXJjZUhhbmRsZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL1dlYkFyY2hpdmVSZXNvdXJjZUFzV2ViUmVzb3VyY2VIYW5kbGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW1wb3J0IDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2Ns
YXNzIEFyY2hpdmVSZXNvdXJjZTsKK30KKworQGludGVyZmFjZSBXZWJBcmNoaXZlUmVzb3VyY2VB
c1dlYlJlc291cmNlSGFuZGxlciA6IE5TT2JqZWN0IHsKK0BwYWNrYWdlCisgICAgUmVmUHRyPFdl
YkNvcmU6OkFyY2hpdmVSZXNvdXJjZT4gcmVzb3VyY2U7Cit9CitAZW5kCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkFyY2hpdmVSZXNvdXJjZUFzV2ViUmVzb3VyY2VIYW5k
bGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQXJj
aGl2ZVJlc291cmNlQXNXZWJSZXNvdXJjZUhhbmRsZXIubW0JKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJBcmNoaXZlUmVzb3VyY2VBc1dlYlJlc291cmNl
SGFuZGxlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXZWJBcmNoaXZlUmVzb3VyY2VBc1dlYlJlc291
cmNlSGFuZGxlci5oIgorCisjaW1wb3J0ICJBcmNoaXZlUmVzb3VyY2UuaCIKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK0BpbXBsZW1lbnRhdGlvbiBXZWJBcmNoaXZlUmVzb3VyY2VBc1dl
YlJlc291cmNlSGFuZGxlcgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEYXRhOihOU0RhdGEg
KilkYXRhIFVSTDooTlNVUkwgKilVUkwgTUlNRVR5cGU6KE5TU3RyaW5nICopTUlNRVR5cGUgdGV4
dEVuY29kaW5nTmFtZTooTlNTdHJpbmcgKil0ZXh0RW5jb2RpbmdOYW1lIGZyYW1lTmFtZTooTlNT
dHJpbmcgKilmcmFtZU5hbWUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKworICAgIGlmICghZGF0YSB8fCAhVVJMIHx8ICFNSU1FVHlwZSkg
eworICAgICAgICBbc2VsZiByZWxlYXNlXTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisK
KyAgICByZXNvdXJjZSA9IFdlYkNvcmU6OkFyY2hpdmVSZXNvdXJjZTo6Y3JlYXRlKFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKFtbZGF0YSBjb3B5XSBhdXRvcmVsZWFzZV0pLCBVUkwsIE1JTUVUeXBlLCB0
ZXh0RW5jb2RpbmdOYW1lLCBmcmFtZU5hbWUsIG5pbCk7CisgICAgaWYgKCFyZXNvdXJjZSkgewor
ICAgICAgICBbc2VsZiByZWxlYXNlXTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworLSAoTlNVUkwgKilVUkwKK3sKKyAgICBpZiAoIXJlc291cmNl
KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiByZXNvdXJjZS0+dXJsKCk7Cit9CisK
KysgKGlkKXJlc291cmNlRm9yRGF0YTooTlNEYXRhICopZGF0YSBVUkw6KE5TVVJMICopdXJsIE1J
TUVUeXBlOihOU1N0cmluZyAqKW1pbWVUeXBlIHRleHRFbmNvZGluZ05hbWU6KE5TU3RyaW5nICop
dGV4dEVuY29kaW5nTmFtZSBmcmFtZU5hbWU6KE5TU3RyaW5nICopZnJhbWVOYW1lCit7CisgICAg
cmV0dXJuIFtbW1dlYkFyY2hpdmVSZXNvdXJjZUFzV2ViUmVzb3VyY2VIYW5kbGVyIGFsbG9jXSBp
bml0V2l0aERhdGE6ZGF0YSBVUkw6dXJsIE1JTUVUeXBlOm1pbWVUeXBlIHRleHRFbmNvZGluZ05h
bWU6dGV4dEVuY29kaW5nTmFtZSBmcmFtZU5hbWU6ZnJhbWVOYW1lXSBhdXRvcmVsZWFzZV07Cit9
CisKK0BlbmQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTC5oCShyZXZpc2lvbiAyMjA5NzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkwuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUs
NyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgVVJMKGNvbnN0IFVSTCYgYmFzZSwgY29u
c3QgU3RyaW5nJiByZWxhdGl2ZSk7CiAgICAgVVJMKGNvbnN0IFVSTCYgYmFzZSwgY29uc3QgU3Ry
aW5nJiByZWxhdGl2ZSwgY29uc3QgVGV4dEVuY29kaW5nJik7CiAKLSAgICBzdGF0aWMgVVJMIGZh
a2VVUkxXaXRoUmVsYXRpdmVQYXJ0KGNvbnN0IFN0cmluZyYpOworICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBVUkwgZmFrZVVSTFdpdGhSZWxhdGl2ZVBhcnQoY29uc3QgU3RyaW5nJik7CiAgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIFVSTCBmaWxlVVJMV2l0aEZpbGVTeXN0ZW1QYXRoKGNvbnN0
IFN0cmluZyYpOwogCiAgICAgU3RyaW5nIHN0cmlwcGVkRm9yVXNlQXNSZWZlcnJlcigpIGNvbnN0
OwpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMjIxMzk2KQorKysg
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjEgQEAKKzIwMTctMDgtMzAgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+
CisKKyAgICAgICAgTGF5ZXJpbmcgdmlvbGF0aW9uIGluIEVkaXRvcjo6Y3JlYXRlRnJhZ21lbnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjEyMwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTWlzYy9X
ZWJOU1VSTEV4dHJhcy5oOgorICAgICAgICAqIE1pc2MvV2ViTlNVUkxFeHRyYXMubW06CisgICAg
ICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3
Lm1tOgorICAgICAgICBSZW1vdmVkIG11bHRpcGxlIGNvcGllcyBvZiB3ZWJraXQtZmFrZS11cmwg
Y3JlYXRpb24gY29kZSwgc3dpdGNoaW5nIHRvIFVSTDo6ZmFrZVVSTFdpdGhSZWxhdGl2ZVBhcnQo
KS4KKyAgICAgICAgCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1t
OgorICAgICAgICAoX1dlYkNyZWF0ZUZyYWdtZW50KTogQWRkZWQgYSBzdHViIGltcGxlbWVudGF0
aW9uIGZvciBvbGRlciBPU2VzLiBUaGlzIGlzIG5lZWRlZAorICAgICAgICBiZWNhdXNlIFdlYktp
dExlZ2FjeS5leHAgaXMgbm90IHBhc3NlZCB0aHJvdWdoIHByZXByb2Nlc3Nvciwgc28gdGhlcmUg
aXMgbm8gc2FuZQorICAgICAgICB3YXkgdG8gYXZvaWQgZXhwb3J0aW5nIHRoZSBzeW1ib2wganVz
dCBvbiBuZXdlciBPU2VzLgorCiAyMDE3LTA4LTMwICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxl
LmNvbT4KIAogICAgICAgICBbTWFjXSBVcHN0cmVhbSBBY2Nlc3NpYmlsaXR5LXJlbGF0ZWQgV2Vi
S2l0U3lzdGVtSW50ZXJmYWNlIGZ1bmN0aW9ucwpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvTWlzYy9XZWJOU1VSTEV4dHJhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL01pc2MvV2ViTlNVUkxFeHRyYXMuaAkocmV2aXNpb24gMjIwOTc0KQorKysgU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJOU1VSTEV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MSwxMSArNzEsNiBAQCBAaW50ZXJmYWNlIE5TVVJMIChXZWJOU1VSTEV4dHJhcykKIAogLSAo
TlNVUkwgKilfd2Via2l0X1VSTEZyb21VUkxPclNjaGVtZWxlc3NGaWxlVVJMOwogCi0jaWYgVEFS
R0VUX09TX0lQSE9ORQotLy8gRklYTUU6IFRoaXMgbWV0aG9kIG5hbWUgbmVlZHMgYSBwcmVmaXgu
Ci0rIChOU1VSTCAqKXVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQ6KE5TU3RyaW5nICopcmVsYXRp
dmVQYXJ0OwotI2VuZGlmCi0KIEBlbmQKIAogQGludGVyZmFjZSBOU1N0cmluZyAoV2ViTlNVUkxF
eHRyYXMpCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYk5TVVJMRXh0cmFz
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViTlNVUkxF
eHRyYXMubW0JKHJldmlzaW9uIDIyMDk3NCkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01p
c2MvV2ViTlNVUkxFeHRyYXMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ2LDExICs0Niw2IEBACiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKLSNpZiBQTEFU
Rk9STShJT1MpCi0vLyBGYWtlIFVSTCBzY2hlbWUuCi0jZGVmaW5lIFdlYkRhdGFQcm90b2NvbFNj
aGVtZSBAIndlYmtpdC1mYWtlLXVybCIKLSNlbmRpZgotCiAjZGVmaW5lIFVSTF9CWVRFU19CVUZG
RVJfTEVOR1RIIDIwNDgKIAogQGltcGxlbWVudGF0aW9uIE5TVVJMIChXZWJOU1VSTEV4dHJhcykK
QEAgLTIxNywyMCArMjEyLDYgQEAgLSAoTlNVUkwgKilfd2Via2l0X1VSTEZyb21VUkxPclNjaGVt
ZWxlcwogCiAgICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOltAImZpbGU6IiBzdHJpbmdC
eUFwcGVuZGluZ1N0cmluZzpbc2VsZiBhYnNvbHV0ZVN0cmluZ11dXTsKIH0KLQotI2lmIFBMQVRG
T1JNKElPUykKLSsgKE5TVVJMICopdW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydDooTlNTdHJpbmcg
KilyZWxhdGl2ZVBhcnQKLXsKLSAgICBDRlVVSURSZWYgVVVJRFJlZiA9IENGVVVJRENyZWF0ZShr
Q0ZBbGxvY2F0b3JEZWZhdWx0KTsKLSAgICBOU1N0cmluZyAqVVVJRFN0cmluZyA9IChOU1N0cmlu
ZyAqKUNGVVVJRENyZWF0ZVN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBVVUlEUmVmKTsKLSAg
ICBDRlJlbGVhc2UoVVVJRFJlZik7Ci0gICAgTlNVUkwgKlVSTCA9IFtOU1VSTCBVUkxXaXRoU3Ry
aW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUA6Ly8lQC8lQCIsIFdlYkRhdGFQcm90
b2NvbFNjaGVtZSwgVVVJRFN0cmluZywgcmVsYXRpdmVQYXJ0XV07Ci0gICAgQ0ZSZWxlYXNlKFVV
SURTdHJpbmcpOwotICAgIAotICAgIHJldHVybiBVUkw7Ci19Ci0KLSNlbmRpZiAvLyBQTEFURk9S
TShJT1MpCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBOU1N0cmluZyAoV2ViTlNVUkxFeHRyYXMp
CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCShyZXZpc2lvbiAyMjA5NzQpCisrKyBTb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTk5LDkgKzk5LDExIEBAIC0gKE5TU3RyaW5nICopbGFuZ3VhZ2VGb3JXb3JkUmFu
Z2U6KE5TUmEKIEBlbmQKICNlbmRpZgogCisjaWYgKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVf
T1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMTAwMDApIHx8IChQTEFURk9STShNQUMpICYmIF9f
TUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDEzMDApCiBAaW50ZXJmYWNlIE5TQXR0
cmlidXRlZFN0cmluZyAoV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRGV0YWlscykKIC0gKERPTURvY3Vt
ZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcm9tUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UgZG9jdW1lbnQ6
KERPTURvY3VtZW50ICopZG9jdW1lbnQgZG9jdW1lbnRBdHRyaWJ1dGVzOihOU0RpY3Rpb25hcnkg
KilhdHRyaWJ1dGVzIHN1YnJlc291cmNlczooTlNBcnJheSAqKilzdWJyZXNvdXJjZXM7CiBAZW5k
CisjZW5kaWYKIAogc3RhdGljIFdlYlZpZXdJbnNlcnRBY3Rpb24ga2l0KEVkaXRvckluc2VydEFj
dGlvbiBhY3Rpb24pCiB7CkBAIC00MzMsOCArNDM1LDIwIEBAIE5TVVJMICpXZWJFZGl0b3JDbGll
bnQ6OmNhbm9uaWNhbGl6ZVVSTFMKICAgICByZXR1cm4gVVJMOwogfQogCisjaWYgKFBMQVRGT1JN
KElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMDAwKSB8fCAo
UExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTMw
MCkKKworLy8gRklYTUU6IFJlbW92ZSB0aGlzIGZ1bmN0aW9uIG9uY2Ugd2UgZG9uJ3QgdXNlIGl0
IG9uIGFueSBzdXBwb3J0ZWQgcGxhdGZvcm0uCitfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18p
KQordm9pZCBfV2ViQ3JlYXRlRnJhZ21lbnQoRG9jdW1lbnQmLCBOU0F0dHJpYnV0ZWRTdHJpbmcg
KiwgRnJhZ21lbnRBbmRSZXNvdXJjZXMmKQoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKKyNlbHNlCisKIHN0YXRpYyBOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXNGb3JB
dHRyaWJ1dGVkU3RyaW5nQ29udmVyc2lvbigpCiB7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVk
cyB0byBiZSBrZXB0IGluIHN5bmMgd2l0aCBpZGVudGljYWxseSBuYW1lZCBvbmUgaW4gV2ViQ29y
ZSwgd2hpY2ggaXMgdXNlZCBvbiBuZXdlciBPUyB2ZXJzaW9ucy4KICAgICBOU0FycmF5ICpleGNs
dWRlZEVsZW1lbnRzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6CiAgICAgICAg
IC8vIE9taXQgc3R5bGUgc2luY2Ugd2Ugd2FudCBzdHlsZSB0byBiZSBpbmxpbmUgc28gdGhlIGZy
YWdtZW50IGNhbiBiZSBlYXNpbHkgaW5zZXJ0ZWQuCiAgICAgICAgIEAic3R5bGUiLApAQCAtNDY5
LDYgKzQ4Myw4IEBAIHZvaWQgX1dlYkNyZWF0ZUZyYWdtZW50KERvY3VtZW50JiBkb2N1bWUKICAg
ICAgICAgcmVzdWx0LnJlc291cmNlcy5hcHBlbmQoW3Jlc291cmNlIF9jb3JlUmVzb3VyY2VdKTsK
IH0KIAorI2VuZGlmCisKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzZXRJbnNlcnRpb25QYXN0ZWJv
YXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7CiAjaWYgIVBMQVRGT1JNKElPUykK
SW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2
aXNpb24gMjIwOTc0KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFt
ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjI5Miw3ICsyMjkyLDcgQEAgLSAoRE9NRG9jdW1lbnRG
cmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZQogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1
bWVudEZyYWdtZW50Rm9ySW1hZ2VEYXRhOihOU0RhdGEgKilkYXRhIHdpdGhSZWxhdGl2ZVVSTFBh
cnQ6KE5TU3RyaW5nICopcmVsYXRpdmVVUkxQYXJ0IGFuZE1JTUVUeXBlOihOU1N0cmluZyAqKW1p
bWVUeXBlCiB7CiAgICAgV2ViUmVzb3VyY2UgKnJlc291cmNlID0gW1tXZWJSZXNvdXJjZSBhbGxv
Y10gaW5pdFdpdGhEYXRhOmRhdGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBVUkw6W05TVVJMIHVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBh
cnQ6cmVsYXRpdmVVUkxQYXJ0XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFVSTDpVUkw6OnVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQo
cmVsYXRpdmVVUkxQYXJ0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBNSU1FVHlwZTptaW1lVHlwZQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dEVuY29kaW5nTmFtZTpuaWwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZU5hbWU6bmlsXTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQko
cmV2aXNpb24gMjIwOTc0KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJI
VE1MVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLS8qCisgLyoKICAqIENv
cHlyaWdodCAoQykgMjAwNS0yMDEwLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqICAgICAgICAgICAoQykgMjAwNiwgMjAwNyBHcmFoYW0gRGVubmlzIChncmFoYW0uZGVu
bmlzQGdtYWlsLmNvbSkKICAqCkBAIC03ODEsOSArNzgxLDYgQEAgY29uc3QgZmxvYXQgX1dlYkhU
TUxWaWV3UHJpbnRpbmdNYXhpbXVtUwogI2RlZmluZSBNSU5fQk9MRF9XRUlHSFQgNwogI2RlZmlu
ZSBTVEFOREFSRF9CT0xEX1dFSUdIVCA5CiAKLS8vIEZha2UgVVJMIHNjaGVtZS4KLSNkZWZpbmUg
V2ViRGF0YVByb3RvY29sU2NoZW1lIEAid2Via2l0LWZha2UtdXJsIgotCiAjaWYgIVBMQVRGT1JN
KElPUykKIC8vIDxyZGFyOi8vcHJvYmxlbS80OTg1NTI0PiBSZWZlcmVuY2VzIHRvIFdlYkNvcmVT
Y3JvbGxWaWV3IGFzIGEgc3VidmlldyBvZiBhIFdlYkhUTUxWaWV3IG1heSBiZSBwcmVzZW50CiAv
LyBpbiBzb21lIE5JQiBmaWxlcywgc28gTlNVbmFyY2hpdmVyIG11c3QgYmUgc3RpbGwgYWJsZSB0
byBsb29rIHVwIHRoaXMgbm93LXVudXNlZCBjbGFzcy4KQEAgLTEyMDIsMTcgKzExOTksNiBAQCAr
IChOU0FycmF5ICopX2V4Y2x1ZGVkRWxlbWVudHNGb3JBdHRyaWJ1CiAgICAgcmV0dXJuIGVsZW1l
bnRzOwogfQogCi1zdGF0aWMgTlNVUkwqIHVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQoTlNTdHJp
bmcgKnJlbGF0aXZlUGFydCkKLXsKLSAgICBDRlVVSURSZWYgVVVJRFJlZiA9IENGVVVJRENyZWF0
ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0KTsKLSAgICBOU1N0cmluZyAqVVVJRFN0cmluZyA9IChOU1N0
cmluZyAqKUNGVVVJRENyZWF0ZVN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBVVUlEUmVmKTsK
LSAgICBDRlJlbGVhc2UoVVVJRFJlZik7Ci0gICAgTlNVUkwgKlVSTCA9IFtOU1VSTCBVUkxXaXRo
U3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUA6Ly8lQC8lQCIsIFdlYkRhdGFQ
cm90b2NvbFNjaGVtZSwgVVVJRFN0cmluZywgcmVsYXRpdmVQYXJ0XV07Ci0gICAgQ0ZSZWxlYXNl
KFVVSURTdHJpbmcpOwotCi0gICAgcmV0dXJuIFVSTDsKLX0KLQogLSAoRE9NRG9jdW1lbnRGcmFn
bWVudCAqKV9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBh
c3RlYm9hcmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5Db250ZXh0OihET01SYW5nZSAqKWNvbnRleHQKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFsbG93UGxhaW5UZXh0OihCT09MKWFsbG93UGxhaW5UZXh0CkBAIC0y
NTkwLDcgKzI1NzYsNyBAQCAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21l
CiAgICAgfQogICAgIGlmIChwYm9hcmRUeXBlID09IE5TVElGRlBib2FyZFR5cGUpIHsKICAgICAg
ICAgV2ViUmVzb3VyY2UgKnJlc291cmNlID0gW1tXZWJSZXNvdXJjZSBhbGxvY10gaW5pdFdpdGhE
YXRhOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOk5TVElGRlBib2FyZFR5cGVdCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTDp1
bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KEAiaW1hZ2UudGlmZiIpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTDooTlNVUkwg
KilVUkw6OmZha2VVUkxXaXRoUmVsYXRpdmVQYXJ0KCJpbWFnZS50aWZmIikKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JTUVUeXBlOkAi
aW1hZ2UvdGlmZiIgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dEVuY29kaW5nTmFtZTpuaWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVOYW1lOm5pbF07CkBAIC0yNjAwLDcgKzI1
ODYsNyBAQCAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lCiAgICAgfQog
ICAgIGlmIChwYm9hcmRUeXBlID09IE5TUERGUGJvYXJkVHlwZSkgewogICAgICAgICBXZWJSZXNv
dXJjZSAqcmVzb3VyY2UgPSBbW1dlYlJlc291cmNlIGFsbG9jXSBpbml0V2l0aERhdGE6W3Bhc3Rl
Ym9hcmQgZGF0YUZvclR5cGU6TlNQREZQYm9hcmRUeXBlXQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkw6dW5pcXVlVVJMV2l0
aFJlbGF0aXZlUGFydChAImFwcGxpY2F0aW9uLnBkZiIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTDooTlNVUkwgKilVUkw6
OmZha2VVUkxXaXRoUmVsYXRpdmVQYXJ0KCJhcHBsaWNhdGlvbi5wZGYiKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6QCJh
cHBsaWNhdGlvbi9wZGYiIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHRFbmNvZGluZ05hbWU6bmlsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lTmFtZTpuaWxdOwpAQCAtMjYxMSw3
ICsyNTk3LDcgQEAgLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZQogCiAg
ICAgaWYgKFtwYm9hcmRUeXBlIGlzRXF1YWxUb1N0cmluZzooTlNTdHJpbmcqKWtVVFR5cGVQTkdd
KSB7CiAgICAgICAgIFdlYlJlc291cmNlICpyZXNvdXJjZSA9IFtbV2ViUmVzb3VyY2UgYWxsb2Nd
IGluaXRXaXRoRGF0YTpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTooTlNTdHJpbmcqKWtVVFR5cGVQ
TkddCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFVSTDp1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KEAiaW1hZ2UucG5nIikKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVVJMOihOU1VSTCAqKVVSTDo6ZmFrZVVSTFdpdGhSZWxhdGl2ZVBhcnQoImltYWdlLnBuZyIp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBNSU1FVHlwZTpAImltYWdlL3BuZyIgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGV4dEVuY29kaW5nTmFtZTpuaWwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVOYW1lOm5pbF07CkBA
IC03NTkwLDIwICs3NTc2LDE2IEBAIC0gKEJPT0wpX2ZpbmRTdHJpbmc6KE5TU3RyaW5nICopc3Ry
aW5nIG8KIAogQGVuZAogCi0vLyBUaGlzIGlzIHVzZWQgYnkgQXBwS2l0IGFuZCBpcyBpbmNsdWRl
ZCBoZXJlIHNvIHRoYXQgV2ViRGF0YVByb3RvY29sU2NoZW1lIGlzIG9ubHkgZGVmaW5lZCBvbmNl
LgorI2lmIChQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVE
IDwgMTEwMDAwKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEIDwgMTAxMzAwKQogQGltcGxlbWVudGF0aW9uIE5TVVJMIChXZWJEYXRhVVJMKQogCiAr
IChOU1VSTCAqKV93ZWJfdW5pcXVlV2ViRGF0YVVSTAogewotICAgIENGVVVJRFJlZiBVVUlEUmVm
ID0gQ0ZVVUlEQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQpOwotICAgIE5TU3RyaW5nICpVVUlE
U3RyaW5nID0gKE5TU3RyaW5nICopQ0ZVVUlEQ3JlYXRlU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1
bHQsIFVVSURSZWYpOwotICAgIENGUmVsZWFzZShVVUlEUmVmKTsKLSAgICBOU1VSTCAqVVJMID0g
W05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQDovLyVA
IiwgV2ViRGF0YVByb3RvY29sU2NoZW1lLCBVVUlEU3RyaW5nXV07Ci0gICAgQ0ZSZWxlYXNlKFVV
SURTdHJpbmcpOwotICAgIHJldHVybiBVUkw7CisgICAgcmV0dXJuIFVSTDo6ZmFrZVVSTFdpdGhS
ZWxhdGl2ZVBhcnQoZW1wdHlTdHJpbmcoKSk7CiB9CiAKIEBlbmQKKyNlbmRpZgogCiAjaWYgIVBM
QVRGT1JNKElPUykKIEBpbXBsZW1lbnRhdGlvbiBXZWJSZXNwb25kZXJDaGFpblNpbmsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319467</attachid>
            <date>2017-08-31 09:22:57 -0700</date>
            <delta_ts>2017-09-19 14:56:19 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>HTMLWriter.txt</filename>
            <type>text/plain</type>
            <size>26326</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMDk3NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDE3LTA4LTMwICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIExheWVyaW5nIHZpb2xhdGlv
biBpbiBFZGl0b3I6OmNyZWF0ZUZyYWdtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBlZGl0aW5nL2NvY29hL1dlYkFyY2hpdmVSZXNvdXJjZUFzV2ViUmVzb3VyY2VI
YW5kbGVyLmg6CisgICAgICAgICogZWRpdGluZy9jb2NvYS9XZWJBcmNoaXZlUmVzb3VyY2VBc1dl
YlJlc291cmNlSGFuZGxlci5tbToKKyAgICAgICAgQWRkZWQgYSB3cmFwcGVyIGNsYXNzIGZvciBB
cmNoaXZlUmVzb3VyY2UsIHN1aXRhYmxlIGZvciB1c2UgYXMgYSBXZWJSZXNvdXJjZUhhbmRsZXIu
CisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6YXR0cmlidXRlc0ZvckF0dHJpYnV0ZWRTdHJpbmdDb252ZXJzaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6Y3JlYXRlRnJhZ21lbnQpOgorICAgICAgICBPbiBuZXdlciBPUyB2
ZXJzaW9ucywgZG9uJ3QgdXNlIFdlYktpdExlZ2FjeSB0byBjb252ZXJ0IE5TQXR0cmlidXRlZFN0
cmluZyB0byBhCisgICAgICAgIGRvY3VtZW50IGZyYWdtZW50LiBXZSBub3cgb25seSB1c2Ugc3lz
dGVtIGZyYW1ld29ya3MgdG8gY29udmVydCB0aGUgYXR0cmlidXRlZAorICAgICAgICBzdHJpbmcg
dG8gSFRNTCBzb3VyY2UsIGFuZCBwYXJzZSBIVE1MIGludG8gYSBmcmFnbWVudCBkaXJlY3RseSBp
biBXZWJDb3JlLgorCisgICAgICAgICogcGxhdGZvcm0vVVJMLmg6IEV4cG9ydGVkIGZha2VVUkxX
aXRoUmVsYXRpdmVQYXJ0LgorCiAyMDE3LTA4LTIxICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxl
LmNvbT4KIAogICAgICAgICBbUGF5bWVudCBSZXF1ZXN0XSBJbXBsZW1lbnQgdGhlIFBheW1lbnRS
ZXF1ZXN0IGNvbnN0cnVjdG9yCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjA5NzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTY2MTAsNiArNjYxMCw4IEBACiAJCUUxODI1NjhGMEVGMkIwMkQwMDkzMzI0MiAvKiBKU1dvcmtl
ckdsb2JhbFNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxODI1NjhEMEVGMkIwMkQwMDkzMzI0MiAvKiBKU1dvcmtlckdsb2JhbFNjb3BlLmNw
cCAqLzsgfTsKIAkJRTE4MjU2OTAwRUYyQjAyRDAwOTMzMjQyIC8qIEpTV29ya2VyR2xvYmFsU2Nv
cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxODI1
NjhFMEVGMkIwMkQwMDkzMzI0MiAvKiBKU1dvcmtlckdsb2JhbFNjb3BlLmggKi87IH07CiAJCUUx
ODI1OEFDMEVGM0NENzAwMDkzMzI0MiAvKiBKU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxODI1OEFCMEVG
M0NENzAwMDkzMzI0MiAvKiBKU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcCAqLzsgfTsKKwkJ
RTE4NTM2ODQxRjRFNDgxNDAwRkUwOTFCIC8qIFdlYkFyY2hpdmVSZXNvdXJjZUFzV2ViUmVzb3Vy
Y2VIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMTg1MzY4MTFGNEU0NzI3MDBGRTA5MUIgLyogV2ViQXJjaGl2ZVJlc291cmNlQXNXZWJSZXNv
dXJjZUhhbmRsZXIuaCAqLzsgfTsKKwkJRTE4NTM2ODUxRjUwOTA2MTAwRkUwOTFCIC8qIFdlYkFy
Y2hpdmVSZXNvdXJjZUFzV2ViUmVzb3VyY2VIYW5kbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4NTM2ODIxRjRFNDcyNzAwRkUwOTFCIC8qIFdl
YkFyY2hpdmVSZXNvdXJjZUFzV2ViUmVzb3VyY2VIYW5kbGVyLm1tICovOyB9OwogCQlFMTg3NzJG
MTEyNkUyNjI5MDAzREQ1ODYgLyogTGFuZ3VhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4NzcyRjAxMjZFMjYyOTAwM0RENTg2IC8qIExhbmd1
YWdlLmNwcCAqLzsgfTsKIAkJRTE4REYzMzUxOEFBRjEyQzAwNzczRTU5IC8qIFNlcmlhbGl6ZWRD
cnlwdG9LZXlXcmFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMThERjMzNDE4QUFGMTJDMDA3NzNFNTkgLyogU2VyaWFsaXplZENyeXB0b0tleVdyYXAu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMThE
RjMzODE4QUFGMTREMDA3NzNFNTkgLyogU2VyaWFsaXplZENyeXB0b0tleVdyYXBNYWMubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMThERjMzNjE4QUFG
MTREMDA3NzNFNTkgLyogU2VyaWFsaXplZENyeXB0b0tleVdyYXBNYWMubW0gKi87IH07CkBAIC0x
NTI2NSw2ICsxNTI2Nyw4IEBACiAJCUUxODI1NjhEMEVGMkIwMkQwMDkzMzI0MiAvKiBKU1dvcmtl
ckdsb2JhbFNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
V29ya2VyR2xvYmFsU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTgy
NTY4RTBFRjJCMDJEMDA5MzMyNDIgLyogSlNXb3JrZXJHbG9iYWxTY29wZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dvcmtlckdsb2JhbFNjb3BlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUxODI1OEFCMEVGM0NENzAwMDkzMzI0MiAvKiBKU1dvcmtlckds
b2JhbFNjb3BlQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlFMTg1MzY4MTFGNEU0NzI3MDBGRTA5MUIgLyogV2ViQXJjaGl2ZVJlc291cmNlQXNXZWJS
ZXNvdXJjZUhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQXJjaGl2ZVJlc291cmNlQXNXZWJS
ZXNvdXJjZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTE4NTM2ODIx
RjRFNDcyNzAwRkUwOTFCIC8qIFdlYkFyY2hpdmVSZXNvdXJjZUFzV2ViUmVzb3VyY2VIYW5kbGVy
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQXJjaGl2ZVJlc291cmNlQXNXZWJSZXNvdXJj
ZUhhbmRsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxODc3MkYwMTI2RTI2
MjkwMDNERDU4NiAvKiBMYW5ndWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBMYW5ndWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxOERG
MzM0MThBQUYxMkMwMDc3M0U1OSAvKiBTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMThERjMzNjE4QUFGMTREMDA3NzNFNTkgLyogU2Vy
aWFsaXplZENyeXB0b0tleVdyYXBNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE5ODk2LDYgKzE5OTAwLDggQEAKIAkJCQk5QjU1RUVFODFCM0U4ODk4
MDA1MzQyQkMgLyogRWRpdG9yQ29jb2EubW0gKi8sCiAJCQkJN0MzRTUxMDgxOERGOEYzNTAwQzEx
MkY3IC8qIEhUTUxDb252ZXJ0ZXIuaCAqLywKIAkJCQk3QzNFNTEwOTE4REY4RjM1MDBDMTEyRjcg
LyogSFRNTENvbnZlcnRlci5tbSAqLywKKwkJCQlFMTg1MzY4MTFGNEU0NzI3MDBGRTA5MUIgLyog
V2ViQXJjaGl2ZVJlc291cmNlQXNXZWJSZXNvdXJjZUhhbmRsZXIuaCAqLywKKwkJCQlFMTg1MzY4
MjFGNEU0NzI3MDBGRTA5MUIgLyogV2ViQXJjaGl2ZVJlc291cmNlQXNXZWJSZXNvdXJjZUhhbmRs
ZXIubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9IGNvY29hOwogCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKQEAgLTI5OTA5LDYgKzI5OTE1LDcgQEAKIAkJCQkwODA2RTU3QTEyODkzMDQ1MDA3Q0VE
MzIgLyogU1ZHTWF0cml4LmggaW4gSGVhZGVycyAqLywKIAkJCQkwOENBM0Q0NDEyODk0QTM4MDBG
RkYyNjAgLyogU1ZHTWF0cml4VGVhck9mZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NFNThENUMx
REQ3RUM5QzAwMTI4NTUyIC8qIFNWR01hdHJpeFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQlF
MTg1MzY4NDFGNEU0ODE0MDBGRTA5MUIgLyogV2ViQXJjaGl2ZVJlc291cmNlQXNXZWJSZXNvdXJj
ZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTRCMEQwMEJGMjIwMDcxQjc4MiAv
KiBTVkdNZXRhZGF0YUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTFGMkIxMENFRjBB
QkYwMDQ0MkY2QSAvKiBTVkdNaXNzaW5nR2x5cGhFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCMjIyN0E0RTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHTVBhdGhFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKQEAgLTMyMzg1LDYgKzMyMzkyLDcgQEAKIAkJCQlBMUNDNTY3ODFGNDYxNEE1MDBBNDU1
NUIgLyogSlNQYXltZW50UmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMUY2MDA1NzFG
NDc2NTA1MDA3N0U4M0YgLyogSlNQYXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUExRjYwMDU5MUY0NzY1MDUwMDc3RTgzRiAvKiBKU1BheW1lbnRSZXF1ZXN0
VXBkYXRlRXZlbnRJbml0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUxODUzNjg1MUY1MDkwNjEw
MEZFMDkxQiAvKiBXZWJBcmNoaXZlUmVzb3VyY2VBc1dlYlJlc291cmNlSGFuZGxlci5tbSBpbiBT
b3VyY2VzICovLAogCQkJCUExQ0M1NjdBMUY0NjE0QUEwMEE0NTU1QiAvKiBKU1BheW1lbnRSZXNw
b25zZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMUNDNTY3QzFGNDYxNEFGMDBBNDU1NUIgLyog
SlNQYXltZW50U2hpcHBpbmdPcHRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTFDQzU2N0Ux
RjQ2MTRCNDAwQTQ1NTVCIC8qIEpTUGF5bWVudFNoaXBwaW5nVHlwZS5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQko
cmV2aXNpb24gMjIwOTc0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JD
b2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2ltcG9ydCAiRnJhbWUu
aCIKICNpbXBvcnQgIkZyYW1lTG9hZGVyLmgiCiAjaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5oIgor
I2ltcG9ydCAiSFRNTEJvZHlFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MQ29udmVydGVyLmgiCiAj
aW1wb3J0ICJIVE1MSW1hZ2VFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MU3BhbkVsZW1lbnQuaCIK
QEAgLTQ4LDIwICs0OSwyNCBAQAogI2ltcG9ydCAiUmVuZGVyRWxlbWVudC5oIgogI2ltcG9ydCAi
UmVuZGVyU3R5bGUuaCIKICNpbXBvcnQgIlRleHQuaCIKKyNpbXBvcnQgIldlYkFyY2hpdmVSZXNv
dXJjZUFzV2ViUmVzb3VyY2VIYW5kbGVyLmgiCiAjaW1wb3J0IDxwYWwvc3BpL2NvY29hL05TQXR0
cmlidXRlZFN0cmluZ1NQSS5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4K
ICNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgogCi0jaWYgUExBVEZPUk0oSU9TKQorI2lmIChQ
TEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDExMDAw
MCkgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+
PSAxMDEzMDApCitAaW50ZXJmYWNlIE5TQXR0cmlidXRlZFN0cmluZyAoKQorLSAoTlNTdHJpbmcg
KilfaHRtbERvY3VtZW50RnJhZ21lbnRTdHJpbmc6KE5TUmFuZ2UpcmFuZ2UgZG9jdW1lbnRBdHRy
aWJ1dGVzOihOU0RpY3Rpb25hcnkgKilkaWN0IHN1YnJlc291cmNlczooTlNBcnJheSAqKilzdWJy
ZXNvdXJjZXM7CitAZW5kCisjZWxpZiBQTEFURk9STShJT1MpCiBTT0ZUX0xJTktfUFJJVkFURV9G
UkFNRVdPUksoV2ViS2l0TGVnYWN5KQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMpCisjZWxp
ZiBQTEFURk9STShNQUMpCiBTT0ZUX0xJTktfRlJBTUVXT1JLX0lOX1VNQlJFTExBKFdlYktpdCwg
V2ViS2l0TGVnYWN5KQogI2VuZGlmCiAKLS8vIEZJWE1FOiBHZXQgcmlkIG9mIHRoaXMgYW5kIGNo
YW5nZSBOU0F0dHJpYnV0ZWRTdHJpbmcgY29udmVyc2lvbiBzbyBpdCBkb2Vzbid0IHVzZSBXZWJL
aXRMZWdhY3kgKGNmLiByZGFyOi8vcHJvYmxlbS8zMDU5NzM1MikuCisjaWYgKFBMQVRGT1JNKElP
UykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMTAwMDApIHx8IChQTEFU
Rk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDEzMDApCiBT
T0ZUX0xJTksoV2ViS2l0TGVnYWN5LCBfV2ViQ3JlYXRlRnJhZ21lbnQsIHZvaWQsIChXZWJDb3Jl
OjpEb2N1bWVudCYgZG9jdW1lbnQsIE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nLCBXZWJDb3Jl
OjpGcmFnbWVudEFuZFJlc291cmNlcyYgcmVzdWx0KSwgKGRvY3VtZW50LCBzdHJpbmcsIHJlc3Vs
dCkpCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xNDUsMTUgKzE1MCw2NiBA
QCBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBFZGl0b3I6OmZvbnRBdHRyCiAgICAgcmV0dXJuIGF0
dHJpYnV0ZXM7CiB9CiAKKyNpZiAoUExBVEZPUk0oSU9TKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9O
X01JTl9SRVFVSVJFRCA+PSAxMTAwMDApIHx8IChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMzAwKQorCitzdGF0aWMgTlNEaWN0aW9uYXJ5ICph
dHRyaWJ1dGVzRm9yQXR0cmlidXRlZFN0cmluZ0NvbnZlcnNpb24oKQoreworICAgIC8vIFRoaXMg
ZnVuY3Rpb24gbmVlZHMgdG8gYmUga2VwdCBpbiBzeW5jIHdpdGggaWRlbnRpY2FsbHkgbmFtZWQg
b25lIGluIFdlYktpdExlZ2FjeSwgd2hpY2ggaXMgdXNlZCBvbiBvbGRlciBPUyB2ZXJzaW9ucy4K
KyAgICBSZXRhaW5QdHI8TlNBcnJheT4gZXhjbHVkZWRFbGVtZW50cyA9IGFkb3B0TlMoW1tOU0Fy
cmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6CisgICAgICAgIC8vIE9taXQgc3R5bGUgc2luY2Ug
d2Ugd2FudCBzdHlsZSB0byBiZSBpbmxpbmUgc28gdGhlIGZyYWdtZW50IGNhbiBiZSBlYXNpbHkg
aW5zZXJ0ZWQuCisgICAgICAgIEAic3R5bGUiLAorICAgICAgICAvLyBPbWl0IHhtbCBzbyB0aGUg
cmVzdWx0IGlzIG5vdCBYSFRNTC4KKyAgICAgICAgQCJ4bWwiLAorICAgICAgICAvLyBPbWl0IHRh
Z3MgdGhhdCB3aWxsIGdldCBzdHJpcHBlZCB3aGVuIGNvbnZlcnRlZCB0byBhIGZyYWdtZW50IGFu
eXdheS4KKyAgICAgICAgQCJkb2N0eXBlIiwgQCJodG1sIiwgQCJoZWFkIiwgQCJib2R5IiwKKyAg
ICAgICAgLy8gT21pdCBkZXByZWNhdGVkIHRhZ3MuCisgICAgICAgIEAiYXBwbGV0IiwgQCJiYXNl
Zm9udCIsIEAiY2VudGVyIiwgQCJkaXIiLCBAImZvbnQiLCBAIm1lbnUiLCBAInMiLCBAInN0cmlr
ZSIsIEAidSIsCisgICAgICAgIC8vIE9taXQgb2JqZWN0IHNvIG5vIGZpbGUgYXR0YWNobWVudHMg
YXJlIHBhcnQgb2YgdGhlIGZyYWdtZW50LgorICAgICAgICBAIm9iamVjdCIsIG5pbF0pOworCisj
aWYgUExBVEZPUk0oSU9TKQorICAgIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IE5TRXhjbHVkZWRF
bGVtZW50c0RvY3VtZW50QXR0cmlidXRlID0gQCJFeGNsdWRlZEVsZW1lbnRzIjsKKyNlbmRpZgor
CisgICAgTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gQHsKKyAgICAgICAgTlNFeGNsdWRlZEVs
ZW1lbnRzRG9jdW1lbnRBdHRyaWJ1dGU6IGV4Y2x1ZGVkRWxlbWVudHMuZ2V0KCksCisgICAgICAg
IEAiSW50ZXJjaGFuZ2VOZXdsaW5lIjogQFlFUywKKyAgICAgICAgQCJDb2FsZXNjZVRhYlNwYW5z
IjogQFlFUywKKyAgICAgICAgQCJPdXRwdXRCYXNlVVJMIjogKE5TVVJMICopVVJMOjpmYWtlVVJM
V2l0aFJlbGF0aXZlUGFydChlbXB0eVN0cmluZygpKSwKKyAgICAgICAgQCJXZWJSZXNvdXJjZUhh
bmRsZXIiOiBbV2ViQXJjaGl2ZVJlc291cmNlQXNXZWJSZXNvdXJjZUhhbmRsZXIgY2xhc3NdLAor
ICAgIH07CisKKyAgICByZXR1cm4gZGljdGlvbmFyeTsKK30KKworRnJhZ21lbnRBbmRSZXNvdXJj
ZXMgRWRpdG9yOjpjcmVhdGVGcmFnbWVudChOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZykKK3sK
KyAgICBGcmFnbWVudEFuZFJlc291cmNlcyByZXN1bHQ7CisgICAgRG9jdW1lbnQmIGRvY3VtZW50
ID0gKm1fZnJhbWUuZG9jdW1lbnQoKTsKKworICAgIE5TQXJyYXkgKnN1YnJlc291cmNlcyA9IG5p
bDsKKyAgICBOU1N0cmluZyAqaHRtbEZyYWdtZW50U3RyaW5nID0gW3N0cmluZyBfaHRtbERvY3Vt
ZW50RnJhZ21lbnRTdHJpbmc6TlNNYWtlUmFuZ2UoMCwgW3N0cmluZyBsZW5ndGhdKSBkb2N1bWVu
dEF0dHJpYnV0ZXM6YXR0cmlidXRlc0ZvckF0dHJpYnV0ZWRTdHJpbmdDb252ZXJzaW9uKCkgc3Vi
cmVzb3VyY2VzOiZzdWJyZXNvdXJjZXNdOworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBm
cmFnbWVudCA9IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgZnJhZ21l
bnQtPnBhcnNlSFRNTChodG1sRnJhZ21lbnRTdHJpbmcsIGRvY3VtZW50LmJvZHkoKSwgRGlzYWxs
b3dTY3JpcHRpbmdBbmRQbHVnaW5Db250ZW50KTsKKworICAgIHJlc3VsdC5mcmFnbWVudCA9IGZy
YWdtZW50OworICAgIGZvciAoV2ViQXJjaGl2ZVJlc291cmNlQXNXZWJSZXNvdXJjZUhhbmRsZXIg
KnJlc291cmNlIGluIHN1YnJlc291cmNlcykKKyAgICAgICAgcmVzdWx0LnJlc291cmNlcy5hcHBl
bmQoKnJlc291cmNlLT5yZXNvdXJjZSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisjZWxz
ZQorCiBGcmFnbWVudEFuZFJlc291cmNlcyBFZGl0b3I6OmNyZWF0ZUZyYWdtZW50KE5TQXR0cmli
dXRlZFN0cmluZyAqc3RyaW5nKQogewotICAgIC8vIEZJWE1FOiBUaGUgYWxnb3JpdGhtIHRvIGNv
bnZlcnQgYW4gYXR0cmlidXRlZCBzdHJpbmcgaW50byBIVE1MIHNob3VsZCBiZSBpbXBsZW1lbnRl
ZCBoZXJlIGluIFdlYkNvcmUuCi0gICAgLy8gRm9yIG5vdywgdGhvdWdoLCB3ZSBjYWxsIGludG8g
V2ViS2l0TGVnYWN5LCB3aGljaCBpbiB0dXJuIGNhbGxzIGludG8gQXBwS2l0L1RleHRLaXQuCiAg
ICAgRnJhZ21lbnRBbmRSZXNvdXJjZXMgcmVzdWx0OwogICAgIF9XZWJDcmVhdGVGcmFnbWVudCgq
bV9mcmFtZS5kb2N1bWVudCgpLCBzdHJpbmcsIHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAorI2VuZGlmCisKIHN0YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBhcmNoaXZlZERhdGFG
b3JBdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZykK
IHsKICAgICBpZiAoIWF0dHJpYnV0ZWRTdHJpbmcubGVuZ3RoKQpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9XZWJBcmNoaXZlUmVzb3VyY2VBc1dlYlJlc291cmNlSGFuZGxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQXJjaGl2ZVJl
c291cmNlQXNXZWJSZXNvdXJjZUhhbmRsZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL1dlYkFyY2hpdmVSZXNvdXJjZUFzV2ViUmVzb3VyY2VIYW5kbGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW1wb3J0IDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2Ns
YXNzIEFyY2hpdmVSZXNvdXJjZTsKK30KKworQGludGVyZmFjZSBXZWJBcmNoaXZlUmVzb3VyY2VB
c1dlYlJlc291cmNlSGFuZGxlciA6IE5TT2JqZWN0IHsKK0BwYWNrYWdlCisgICAgUmVmUHRyPFdl
YkNvcmU6OkFyY2hpdmVSZXNvdXJjZT4gcmVzb3VyY2U7Cit9CitAZW5kCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkFyY2hpdmVSZXNvdXJjZUFzV2ViUmVzb3VyY2VIYW5k
bGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQXJj
aGl2ZVJlc291cmNlQXNXZWJSZXNvdXJjZUhhbmRsZXIubW0JKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJBcmNoaXZlUmVzb3VyY2VBc1dlYlJlc291cmNl
SGFuZGxlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXZWJBcmNoaXZlUmVzb3VyY2VBc1dlYlJlc291
cmNlSGFuZGxlci5oIgorCisjaW1wb3J0ICJBcmNoaXZlUmVzb3VyY2UuaCIKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK0BpbXBsZW1lbnRhdGlvbiBXZWJBcmNoaXZlUmVzb3VyY2VBc1dl
YlJlc291cmNlSGFuZGxlcgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEYXRhOihOU0RhdGEg
KilkYXRhIFVSTDooTlNVUkwgKilVUkwgTUlNRVR5cGU6KE5TU3RyaW5nICopTUlNRVR5cGUgdGV4
dEVuY29kaW5nTmFtZTooTlNTdHJpbmcgKil0ZXh0RW5jb2RpbmdOYW1lIGZyYW1lTmFtZTooTlNT
dHJpbmcgKilmcmFtZU5hbWUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKworICAgIGlmICghZGF0YSB8fCAhVVJMIHx8ICFNSU1FVHlwZSkg
eworICAgICAgICBbc2VsZiByZWxlYXNlXTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisK
KyAgICByZXNvdXJjZSA9IFdlYkNvcmU6OkFyY2hpdmVSZXNvdXJjZTo6Y3JlYXRlKFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKFtbZGF0YSBjb3B5XSBhdXRvcmVsZWFzZV0pLCBVUkwsIE1JTUVUeXBlLCB0
ZXh0RW5jb2RpbmdOYW1lLCBmcmFtZU5hbWUsIG5pbCk7CisgICAgaWYgKCFyZXNvdXJjZSkgewor
ICAgICAgICBbc2VsZiByZWxlYXNlXTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworLSAoTlNVUkwgKilVUkwKK3sKKyAgICBpZiAoIXJlc291cmNl
KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiByZXNvdXJjZS0+dXJsKCk7Cit9CisK
KysgKGlkKXJlc291cmNlRm9yRGF0YTooTlNEYXRhICopZGF0YSBVUkw6KE5TVVJMICopdXJsIE1J
TUVUeXBlOihOU1N0cmluZyAqKW1pbWVUeXBlIHRleHRFbmNvZGluZ05hbWU6KE5TU3RyaW5nICop
dGV4dEVuY29kaW5nTmFtZSBmcmFtZU5hbWU6KE5TU3RyaW5nICopZnJhbWVOYW1lCit7CisgICAg
cmV0dXJuIFtbW1dlYkFyY2hpdmVSZXNvdXJjZUFzV2ViUmVzb3VyY2VIYW5kbGVyIGFsbG9jXSBp
bml0V2l0aERhdGE6ZGF0YSBVUkw6dXJsIE1JTUVUeXBlOm1pbWVUeXBlIHRleHRFbmNvZGluZ05h
bWU6dGV4dEVuY29kaW5nTmFtZSBmcmFtZU5hbWU6ZnJhbWVOYW1lXSBhdXRvcmVsZWFzZV07Cit9
CisKK0BlbmQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTC5oCShyZXZpc2lvbiAyMjA5NzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkwuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUs
NyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgVVJMKGNvbnN0IFVSTCYgYmFzZSwgY29u
c3QgU3RyaW5nJiByZWxhdGl2ZSk7CiAgICAgVVJMKGNvbnN0IFVSTCYgYmFzZSwgY29uc3QgU3Ry
aW5nJiByZWxhdGl2ZSwgY29uc3QgVGV4dEVuY29kaW5nJik7CiAKLSAgICBzdGF0aWMgVVJMIGZh
a2VVUkxXaXRoUmVsYXRpdmVQYXJ0KGNvbnN0IFN0cmluZyYpOworICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBVUkwgZmFrZVVSTFdpdGhSZWxhdGl2ZVBhcnQoY29uc3QgU3RyaW5nJik7CiAgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIFVSTCBmaWxlVVJMV2l0aEZpbGVTeXN0ZW1QYXRoKGNvbnN0
IFN0cmluZyYpOwogCiAgICAgU3RyaW5nIHN0cmlwcGVkRm9yVXNlQXNSZWZlcnJlcigpIGNvbnN0
OwpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMjIxMzk2KQorKysg
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjEgQEAKKzIwMTctMDgtMzAgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+
CisKKyAgICAgICAgTGF5ZXJpbmcgdmlvbGF0aW9uIGluIEVkaXRvcjo6Y3JlYXRlRnJhZ21lbnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjEyMwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTWlzYy9X
ZWJOU1VSTEV4dHJhcy5oOgorICAgICAgICAqIE1pc2MvV2ViTlNVUkxFeHRyYXMubW06CisgICAg
ICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3
Lm1tOgorICAgICAgICBSZW1vdmVkIG11bHRpcGxlIGNvcGllcyBvZiB3ZWJraXQtZmFrZS11cmwg
Y3JlYXRpb24gY29kZSwgc3dpdGNoaW5nIHRvIFVSTDo6ZmFrZVVSTFdpdGhSZWxhdGl2ZVBhcnQo
KS4KKyAgICAgICAgCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1t
OgorICAgICAgICAoX1dlYkNyZWF0ZUZyYWdtZW50KTogQWRkZWQgYSBzdHViIGltcGxlbWVudGF0
aW9uIGZvciBvbGRlciBPU2VzLiBUaGlzIGlzIG5lZWRlZAorICAgICAgICBiZWNhdXNlIFdlYktp
dExlZ2FjeS5leHAgaXMgbm90IHBhc3NlZCB0aHJvdWdoIHByZXByb2Nlc3Nvciwgc28gdGhlcmUg
aXMgbm8gc2FuZQorICAgICAgICB3YXkgdG8gYXZvaWQgZXhwb3J0aW5nIHRoZSBzeW1ib2wganVz
dCBvbiBuZXdlciBPU2VzLgorCiAyMDE3LTA4LTMwICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxl
LmNvbT4KIAogICAgICAgICBbTWFjXSBVcHN0cmVhbSBBY2Nlc3NpYmlsaXR5LXJlbGF0ZWQgV2Vi
S2l0U3lzdGVtSW50ZXJmYWNlIGZ1bmN0aW9ucwpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvTWlzYy9XZWJOU1VSTEV4dHJhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL01pc2MvV2ViTlNVUkxFeHRyYXMuaAkocmV2aXNpb24gMjIwOTc0KQorKysgU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJOU1VSTEV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MSwxMSArNzEsNiBAQCBAaW50ZXJmYWNlIE5TVVJMIChXZWJOU1VSTEV4dHJhcykKIAogLSAo
TlNVUkwgKilfd2Via2l0X1VSTEZyb21VUkxPclNjaGVtZWxlc3NGaWxlVVJMOwogCi0jaWYgVEFS
R0VUX09TX0lQSE9ORQotLy8gRklYTUU6IFRoaXMgbWV0aG9kIG5hbWUgbmVlZHMgYSBwcmVmaXgu
Ci0rIChOU1VSTCAqKXVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQ6KE5TU3RyaW5nICopcmVsYXRp
dmVQYXJ0OwotI2VuZGlmCi0KIEBlbmQKIAogQGludGVyZmFjZSBOU1N0cmluZyAoV2ViTlNVUkxF
eHRyYXMpCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYk5TVVJMRXh0cmFz
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViTlNVUkxF
eHRyYXMubW0JKHJldmlzaW9uIDIyMDk3NCkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01p
c2MvV2ViTlNVUkxFeHRyYXMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ2LDExICs0Niw2IEBACiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKLSNpZiBQTEFU
Rk9STShJT1MpCi0vLyBGYWtlIFVSTCBzY2hlbWUuCi0jZGVmaW5lIFdlYkRhdGFQcm90b2NvbFNj
aGVtZSBAIndlYmtpdC1mYWtlLXVybCIKLSNlbmRpZgotCiAjZGVmaW5lIFVSTF9CWVRFU19CVUZG
RVJfTEVOR1RIIDIwNDgKIAogQGltcGxlbWVudGF0aW9uIE5TVVJMIChXZWJOU1VSTEV4dHJhcykK
QEAgLTIxNywyMCArMjEyLDYgQEAgLSAoTlNVUkwgKilfd2Via2l0X1VSTEZyb21VUkxPclNjaGVt
ZWxlcwogCiAgICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOltAImZpbGU6IiBzdHJpbmdC
eUFwcGVuZGluZ1N0cmluZzpbc2VsZiBhYnNvbHV0ZVN0cmluZ11dXTsKIH0KLQotI2lmIFBMQVRG
T1JNKElPUykKLSsgKE5TVVJMICopdW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydDooTlNTdHJpbmcg
KilyZWxhdGl2ZVBhcnQKLXsKLSAgICBDRlVVSURSZWYgVVVJRFJlZiA9IENGVVVJRENyZWF0ZShr
Q0ZBbGxvY2F0b3JEZWZhdWx0KTsKLSAgICBOU1N0cmluZyAqVVVJRFN0cmluZyA9IChOU1N0cmlu
ZyAqKUNGVVVJRENyZWF0ZVN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBVVUlEUmVmKTsKLSAg
ICBDRlJlbGVhc2UoVVVJRFJlZik7Ci0gICAgTlNVUkwgKlVSTCA9IFtOU1VSTCBVUkxXaXRoU3Ry
aW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUA6Ly8lQC8lQCIsIFdlYkRhdGFQcm90
b2NvbFNjaGVtZSwgVVVJRFN0cmluZywgcmVsYXRpdmVQYXJ0XV07Ci0gICAgQ0ZSZWxlYXNlKFVV
SURTdHJpbmcpOwotICAgIAotICAgIHJldHVybiBVUkw7Ci19Ci0KLSNlbmRpZiAvLyBQTEFURk9S
TShJT1MpCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBOU1N0cmluZyAoV2ViTlNVUkxFeHRyYXMp
CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCShyZXZpc2lvbiAyMjA5NzQpCisrKyBTb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTk5LDkgKzk5LDExIEBAIC0gKE5TU3RyaW5nICopbGFuZ3VhZ2VGb3JXb3JkUmFu
Z2U6KE5TUmEKIEBlbmQKICNlbmRpZgogCisjaWYgKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVf
T1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMTAwMDApIHx8IChQTEFURk9STShNQUMpICYmIF9f
TUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDEzMDApCiBAaW50ZXJmYWNlIE5TQXR0
cmlidXRlZFN0cmluZyAoV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRGV0YWlscykKIC0gKERPTURvY3Vt
ZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcm9tUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UgZG9jdW1lbnQ6
KERPTURvY3VtZW50ICopZG9jdW1lbnQgZG9jdW1lbnRBdHRyaWJ1dGVzOihOU0RpY3Rpb25hcnkg
KilhdHRyaWJ1dGVzIHN1YnJlc291cmNlczooTlNBcnJheSAqKilzdWJyZXNvdXJjZXM7CiBAZW5k
CisjZW5kaWYKIAogc3RhdGljIFdlYlZpZXdJbnNlcnRBY3Rpb24ga2l0KEVkaXRvckluc2VydEFj
dGlvbiBhY3Rpb24pCiB7CkBAIC00MzMsOCArNDM1LDIwIEBAIE5TVVJMICpXZWJFZGl0b3JDbGll
bnQ6OmNhbm9uaWNhbGl6ZVVSTFMKICAgICByZXR1cm4gVVJMOwogfQogCisjaWYgKFBMQVRGT1JN
KElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMDAwKSB8fCAo
UExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTMw
MCkKKworLy8gRklYTUU6IFJlbW92ZSB0aGlzIGZ1bmN0aW9uIG9uY2Ugd2UgZG9uJ3QgdXNlIGl0
IG9uIGFueSBzdXBwb3J0ZWQgcGxhdGZvcm0uCitfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18p
KQordm9pZCBfV2ViQ3JlYXRlRnJhZ21lbnQoRG9jdW1lbnQmLCBOU0F0dHJpYnV0ZWRTdHJpbmcg
KiwgRnJhZ21lbnRBbmRSZXNvdXJjZXMmKQoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKKyNlbHNlCisKIHN0YXRpYyBOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXNGb3JB
dHRyaWJ1dGVkU3RyaW5nQ29udmVyc2lvbigpCiB7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVk
cyB0byBiZSBrZXB0IGluIHN5bmMgd2l0aCBpZGVudGljYWxseSBuYW1lZCBvbmUgaW4gV2ViQ29y
ZSwgd2hpY2ggaXMgdXNlZCBvbiBuZXdlciBPUyB2ZXJzaW9ucy4KICAgICBOU0FycmF5ICpleGNs
dWRlZEVsZW1lbnRzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6CiAgICAgICAg
IC8vIE9taXQgc3R5bGUgc2luY2Ugd2Ugd2FudCBzdHlsZSB0byBiZSBpbmxpbmUgc28gdGhlIGZy
YWdtZW50IGNhbiBiZSBlYXNpbHkgaW5zZXJ0ZWQuCiAgICAgICAgIEAic3R5bGUiLApAQCAtNDY5
LDYgKzQ4Myw4IEBAIHZvaWQgX1dlYkNyZWF0ZUZyYWdtZW50KERvY3VtZW50JiBkb2N1bWUKICAg
ICAgICAgcmVzdWx0LnJlc291cmNlcy5hcHBlbmQoW3Jlc291cmNlIF9jb3JlUmVzb3VyY2VdKTsK
IH0KIAorI2VuZGlmCisKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzZXRJbnNlcnRpb25QYXN0ZWJv
YXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7CiAjaWYgIVBMQVRGT1JNKElPUykK
SW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2
aXNpb24gMjIwOTc0KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFt
ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjI5Miw3ICsyMjkyLDcgQEAgLSAoRE9NRG9jdW1lbnRG
cmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZQogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1
bWVudEZyYWdtZW50Rm9ySW1hZ2VEYXRhOihOU0RhdGEgKilkYXRhIHdpdGhSZWxhdGl2ZVVSTFBh
cnQ6KE5TU3RyaW5nICopcmVsYXRpdmVVUkxQYXJ0IGFuZE1JTUVUeXBlOihOU1N0cmluZyAqKW1p
bWVUeXBlCiB7CiAgICAgV2ViUmVzb3VyY2UgKnJlc291cmNlID0gW1tXZWJSZXNvdXJjZSBhbGxv
Y10gaW5pdFdpdGhEYXRhOmRhdGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBVUkw6W05TVVJMIHVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBh
cnQ6cmVsYXRpdmVVUkxQYXJ0XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFVSTDpVUkw6OmZha2VVUkxXaXRoUmVsYXRpdmVQYXJ0KHJl
bGF0aXZlVVJMUGFydCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTUlNRVR5cGU6bWltZVR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRleHRFbmNvZGluZ05hbWU6bmlsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVOYW1lOm5pbF07CkluZGV4
OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHJl
dmlzaW9uIDIyMDk3NCkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRN
TFZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0vKgorIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDUtMjAxMCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiAgICAgICAgICAgKEMpIDIwMDYsIDIwMDcgR3JhaGFtIERlbm5pcyAoZ3JhaGFtLmRlbm5p
c0BnbWFpbC5jb20pCiAgKgpAQCAtNzgxLDkgKzc4MSw2IEBAIGNvbnN0IGZsb2F0IF9XZWJIVE1M
Vmlld1ByaW50aW5nTWF4aW11bVMKICNkZWZpbmUgTUlOX0JPTERfV0VJR0hUIDcKICNkZWZpbmUg
U1RBTkRBUkRfQk9MRF9XRUlHSFQgOQogCi0vLyBGYWtlIFVSTCBzY2hlbWUuCi0jZGVmaW5lIFdl
YkRhdGFQcm90b2NvbFNjaGVtZSBAIndlYmtpdC1mYWtlLXVybCIKLQogI2lmICFQTEFURk9STShJ
T1MpCiAvLyA8cmRhcjovL3Byb2JsZW0vNDk4NTUyND4gUmVmZXJlbmNlcyB0byBXZWJDb3JlU2Ny
b2xsVmlldyBhcyBhIHN1YnZpZXcgb2YgYSBXZWJIVE1MVmlldyBtYXkgYmUgcHJlc2VudAogLy8g
aW4gc29tZSBOSUIgZmlsZXMsIHNvIE5TVW5hcmNoaXZlciBtdXN0IGJlIHN0aWxsIGFibGUgdG8g
bG9vayB1cCB0aGlzIG5vdy11bnVzZWQgY2xhc3MuCkBAIC0xMjAyLDE3ICsxMTk5LDYgQEAgKyAo
TlNBcnJheSAqKV9leGNsdWRlZEVsZW1lbnRzRm9yQXR0cmlidQogICAgIHJldHVybiBlbGVtZW50
czsKIH0KIAotc3RhdGljIE5TVVJMKiB1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KE5TU3RyaW5n
ICpyZWxhdGl2ZVBhcnQpCi17Ci0gICAgQ0ZVVUlEUmVmIFVVSURSZWYgPSBDRlVVSURDcmVhdGUo
a0NGQWxsb2NhdG9yRGVmYXVsdCk7Ci0gICAgTlNTdHJpbmcgKlVVSURTdHJpbmcgPSAoTlNTdHJp
bmcgKilDRlVVSURDcmVhdGVTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgVVVJRFJlZik7Ci0g
ICAgQ0ZSZWxlYXNlKFVVSURSZWYpOwotICAgIE5TVVJMICpVUkwgPSBbTlNVUkwgVVJMV2l0aFN0
cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAOi8vJUAvJUAiLCBXZWJEYXRhUHJv
dG9jb2xTY2hlbWUsIFVVSURTdHJpbmcsIHJlbGF0aXZlUGFydF1dOwotICAgIENGUmVsZWFzZShV
VUlEU3RyaW5nKTsKLQotICAgIHJldHVybiBVUkw7Ci19Ci0KIC0gKERPTURvY3VtZW50RnJhZ21l
bnQgKilfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0
ZWJvYXJkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
Q29udGV4dDooRE9NUmFuZ2UgKiljb250ZXh0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhbGxvd1BsYWluVGV4dDooQk9PTClhbGxvd1BsYWluVGV4dApAQCAtMjU5
MCw3ICsyNTc2LDcgQEAgLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZQog
ICAgIH0KICAgICBpZiAocGJvYXJkVHlwZSA9PSBOU1RJRkZQYm9hcmRUeXBlKSB7CiAgICAgICAg
IFdlYlJlc291cmNlICpyZXNvdXJjZSA9IFtbV2ViUmVzb3VyY2UgYWxsb2NdIGluaXRXaXRoRGF0
YTpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTpOU1RJRkZQYm9hcmRUeXBlXQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkw6dW5p
cXVlVVJMV2l0aFJlbGF0aXZlUGFydChAImltYWdlLnRpZmYiKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkw6KE5TVVJMICop
VVJMOjpmYWtlVVJMV2l0aFJlbGF0aXZlUGFydCgiaW1hZ2UudGlmZiIpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSU1FVHlwZTpAImlt
YWdlL3RpZmYiIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHRFbmNvZGluZ05hbWU6bmlsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lTmFtZTpuaWxdOwpAQCAtMjYwMCw3ICsyNTg2
LDcgQEAgLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZQogICAgIH0KICAg
ICBpZiAocGJvYXJkVHlwZSA9PSBOU1BERlBib2FyZFR5cGUpIHsKICAgICAgICAgV2ViUmVzb3Vy
Y2UgKnJlc291cmNlID0gW1tXZWJSZXNvdXJjZSBhbGxvY10gaW5pdFdpdGhEYXRhOltwYXN0ZWJv
YXJkIGRhdGFGb3JUeXBlOk5TUERGUGJvYXJkVHlwZV0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMOnVuaXF1ZVVSTFdpdGhS
ZWxhdGl2ZVBhcnQoQCJhcHBsaWNhdGlvbi5wZGYiKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkw6KE5TVVJMICopVVJMOjpm
YWtlVVJMV2l0aFJlbGF0aXZlUGFydCgiYXBwbGljYXRpb24ucGRmIikKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JTUVUeXBlOkAiYXBw
bGljYXRpb24vcGRmIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0RW5jb2RpbmdOYW1lOm5pbAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZU5hbWU6bmlsXTsKQEAgLTI2MTEsNyAr
MjU5Nyw3IEBAIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWUKIAogICAg
IGlmIChbcGJvYXJkVHlwZSBpc0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5nKilrVVRUeXBlUE5HXSkg
ewogICAgICAgICBXZWJSZXNvdXJjZSAqcmVzb3VyY2UgPSBbW1dlYlJlc291cmNlIGFsbG9jXSBp
bml0V2l0aERhdGE6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6KE5TU3RyaW5nKilrVVRUeXBlUE5H
XQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBVUkw6dW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChAImltYWdlLnBuZyIpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFVSTDooTlNVUkwgKilVUkw6OmZha2VVUkxXaXRoUmVsYXRpdmVQYXJ0KCJpbWFnZS5wbmciKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TUlNRVR5cGU6QCJpbWFnZS9wbmciIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHRFbmNvZGluZ05hbWU6bmlsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lTmFtZTpuaWxdOwpAQCAt
NzU5MCwyMCArNzU3NiwxNiBAQCAtIChCT09MKV9maW5kU3RyaW5nOihOU1N0cmluZyAqKXN0cmlu
ZyBvCiAKIEBlbmQKIAotLy8gVGhpcyBpcyB1c2VkIGJ5IEFwcEtpdCBhbmQgaXMgaW5jbHVkZWQg
aGVyZSBzbyB0aGF0IFdlYkRhdGFQcm90b2NvbFNjaGVtZSBpcyBvbmx5IGRlZmluZWQgb25jZS4K
KyNpZiAoUExBVEZPUk0oSU9TKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA8
IDExMDAwMCkgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFV
SVJFRCA8IDEwMTMwMCkKIEBpbXBsZW1lbnRhdGlvbiBOU1VSTCAoV2ViRGF0YVVSTCkKIAogKyAo
TlNVUkwgKilfd2ViX3VuaXF1ZVdlYkRhdGFVUkwKIHsKLSAgICBDRlVVSURSZWYgVVVJRFJlZiA9
IENGVVVJRENyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0KTsKLSAgICBOU1N0cmluZyAqVVVJRFN0
cmluZyA9IChOU1N0cmluZyAqKUNGVVVJRENyZWF0ZVN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBVVUlEUmVmKTsKLSAgICBDRlJlbGVhc2UoVVVJRFJlZik7Ci0gICAgTlNVUkwgKlVSTCA9IFtO
U1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUA6Ly8lQCIs
IFdlYkRhdGFQcm90b2NvbFNjaGVtZSwgVVVJRFN0cmluZ11dOwotICAgIENGUmVsZWFzZShVVUlE
U3RyaW5nKTsKLSAgICByZXR1cm4gVVJMOworICAgIHJldHVybiBVUkw6OmZha2VVUkxXaXRoUmVs
YXRpdmVQYXJ0KGVtcHR5U3RyaW5nKCkpOwogfQogCiBAZW5kCisjZW5kaWYKIAogI2lmICFQTEFU
Rk9STShJT1MpCiBAaW1wbGVtZW50YXRpb24gV2ViUmVzcG9uZGVyQ2hhaW5TaW5rCg==
</data>
<flag name="review"
          id="339746"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321245</attachid>
            <date>2017-09-19 14:56:19 -0700</date>
            <delta_ts>2017-09-19 14:56:19 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>HTMLWriter2.txt</filename>
            <type>text/plain</type>
            <size>31651</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjIxNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDE3LTA5LTE5ICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIExheWVyaW5nIHZpb2xhdGlv
biBpbiBFZGl0b3I6OmNyZWF0ZUZyYWdtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBlZGl0aW5nL2NvY29hL1dlYkFyY2hpdmVSZXNvdXJjZUZyb21OU0F0dHJpYnV0
ZWRTdHJpbmcuaDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9jb2NvYS9XZWJBcmNoaXZlUmVz
b3VyY2VGcm9tTlNBdHRyaWJ1dGVkU3RyaW5nLm1tOiBBZGRlZC4KKyAgICAgICAgQWRkZWQgYSB3
cmFwcGVyIGNsYXNzIGZvciBBcmNoaXZlUmVzb3VyY2UsIHN1aXRhYmxlIGZvciB1c2UgYXMgYSBX
ZWJSZXNvdXJjZUhhbmRsZXIuCisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL1dlYkFyY2hpdmVS
ZXNvdXJjZVdlYlJlc291cmNlSGFuZGxlci5oOiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL2Nv
Y29hL1dlYkFyY2hpdmVSZXNvdXJjZVdlYlJlc291cmNlSGFuZGxlci5tbTogQWRkZWQuCisgICAg
ICAgIE9iamVjdHMgb2YgdGhpcyBjbGFzcyBjYW4gYmUgcGFzc2VkIGFzICJXZWJSZXNvdXJjZUhh
bmRsZXIiLCBhbmQgY3JlYXRlZCBpbnN0YW5jZXMKKyAgICAgICAgb2YgdGhlIGFib3ZlIGNsYXNz
LgorCisgICAgICAgICogZWRpdGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW06Cisg
ICAgICAgIChXZWJDb3JlOjphdHRyaWJ1dGVzRm9yQXR0cmlidXRlZFN0cmluZ0NvbnZlcnNpb24p
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRnJhZ21lbnQpOgorICAgICAgICBPbiBuZXdlciBP
UyB2ZXJzaW9ucywgZG9uJ3QgdXNlIFdlYktpdExlZ2FjeSB0byBjb252ZXJ0IE5TQXR0cmlidXRl
ZFN0cmluZyB0byBhCisgICAgICAgIGRvY3VtZW50IGZyYWdtZW50LiBXZSBub3cgb25seSB1c2Ug
c3lzdGVtIGZyYW1ld29ya3MgdG8gY29udmVydCB0aGUgYXR0cmlidXRlZAorICAgICAgICBzdHJp
bmcgdG8gSFRNTCBzb3VyY2UsIGFuZCBwYXJzZSBIVE1MIGludG8gYSBmcmFnbWVudCBkaXJlY3Rs
eSBpbiBXZWJDb3JlLgorCisgICAgICAgICogcGxhdGZvcm0vVVJMLmg6IEV4cG9ydGVkIGZha2VV
UkxXaXRoUmVsYXRpdmVQYXJ0LgorCiAyMDE3LTA5LTE5ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBh
cHBsZS5jb20+CiAKICAgICAgICAgQXR0ZW1wdCB0byBmaXggTGludXggYnVpbGQuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAyMjIxMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTY3MTMsNiArNjcxMywxMCBAQAogCQlFMTgy
NTY4RjBFRjJCMDJEMDA5MzMyNDIgLyogSlNXb3JrZXJHbG9iYWxTY29wZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTgyNTY4RDBFRjJCMDJEMDA5
MzMyNDIgLyogSlNXb3JrZXJHbG9iYWxTY29wZS5jcHAgKi87IH07CiAJCUUxODI1NjkwMEVGMkIw
MkQwMDkzMzI0MiAvKiBKU1dvcmtlckdsb2JhbFNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTgyNTY4RTBFRjJCMDJEMDA5MzMyNDIgLyogSlNX
b3JrZXJHbG9iYWxTY29wZS5oICovOyB9OwogCQlFMTgyNThBQzBFRjNDRDcwMDA5MzMyNDIgLyog
SlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMTgyNThBQjBFRjNDRDcwMDA5MzMyNDIgLyogSlNXb3JrZXJH
bG9iYWxTY29wZUN1c3RvbS5jcHAgKi87IH07CisJCUUxODUzNjg0MUY0RTQ4MTQwMEZFMDkxQiAv
KiBXZWJBcmNoaXZlUmVzb3VyY2VGcm9tTlNBdHRyaWJ1dGVkU3RyaW5nLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTg1MzY4MTFGNEU0NzI3MDBGRTA5
MUIgLyogV2ViQXJjaGl2ZVJlc291cmNlRnJvbU5TQXR0cmlidXRlZFN0cmluZy5oICovOyB9Owor
CQlFMTg1MzY4NTFGNTA5MDYxMDBGRTA5MUIgLyogV2ViQXJjaGl2ZVJlc291cmNlRnJvbU5TQXR0
cmlidXRlZFN0cmluZy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxODUzNjgyMUY0RTQ3MjcwMEZFMDkxQiAvKiBXZWJBcmNoaXZlUmVzb3VyY2VGcm9t
TlNBdHRyaWJ1dGVkU3RyaW5nLm1tICovOyB9OworCQlFMThDMzU0MzFGNzE5NzAxMDBGRjYzMkQg
LyogV2ViQXJjaGl2ZVJlc291cmNlV2ViUmVzb3VyY2VIYW5kbGVyLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4QzM1NDIxRjcxOTcwMTAwRkY2MzJE
IC8qIFdlYkFyY2hpdmVSZXNvdXJjZVdlYlJlc291cmNlSGFuZGxlci5tbSAqLzsgfTsKKwkJRTE4
QzM1NDQxRjcxOTcwQzAwRkY2MzJEIC8qIFdlYkFyY2hpdmVSZXNvdXJjZVdlYlJlc291cmNlSGFu
ZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4
QzM1NDExRjcxOTZDRDAwRkY2MzJEIC8qIFdlYkFyY2hpdmVSZXNvdXJjZVdlYlJlc291cmNlSGFu
ZGxlci5oICovOyB9OwogCQlFMThERjMzNTE4QUFGMTJDMDA3NzNFNTkgLyogU2VyaWFsaXplZENy
eXB0b0tleVdyYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUxOERGMzM0MThBQUYxMkMwMDc3M0U1OSAvKiBTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUxOERG
MzM4MThBQUYxNEQwMDc3M0U1OSAvKiBTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOERGMzM2MThBQUYx
NEQwMDc3M0U1OSAvKiBTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5tbSAqLzsgfTsKIAkJRTE5
NzI3MTYxODIwNTQ5RTAwNTkyRDUxIC8qIENyeXB0b0tleVR5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOTcyNzE1MTgyMDU0OUUwMDU5MkQ1MSAv
KiBDcnlwdG9LZXlUeXBlLmggKi87IH07CkBAIC0xNTUyMCw2ICsxNTUyNCwxMCBAQAogCQlFMTgy
NTY4RDBFRjJCMDJEMDA5MzMyNDIgLyogSlNXb3JrZXJHbG9iYWxTY29wZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dvcmtlckdsb2JhbFNjb3BlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE4MjU2OEUwRUYyQjAyRDAwOTMzMjQyIC8qIEpT
V29ya2VyR2xvYmFsU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNX
b3JrZXJHbG9iYWxTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTgyNThB
QjBFRjNDRDcwMDA5MzMyNDIgLyogSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9t
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTE4NTM2ODExRjRFNDcyNzAwRkUw
OTFCIC8qIFdlYkFyY2hpdmVSZXNvdXJjZUZyb21OU0F0dHJpYnV0ZWRTdHJpbmcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViQXJjaGl2ZVJlc291cmNlRnJvbU5TQXR0cmlidXRlZFN0cmluZy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMTg1MzY4MjFGNEU0NzI3MDBGRTA5MUIgLyogV2Vi
QXJjaGl2ZVJlc291cmNlRnJvbU5TQXR0cmlidXRlZFN0cmluZy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFdlYkFyY2hpdmVSZXNvdXJjZUZyb21OU0F0dHJpYnV0ZWRTdHJpbmcubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxOEMzNTQxMUY3MTk2Q0QwMEZGNjMyRCAvKiBXZWJB
cmNoaXZlUmVzb3VyY2VXZWJSZXNvdXJjZUhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQXJj
aGl2ZVJlc291cmNlV2ViUmVzb3VyY2VIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUUxOEMzNTQyMUY3MTk3MDEwMEZGNjMyRCAvKiBXZWJBcmNoaXZlUmVzb3VyY2VXZWJS
ZXNvdXJjZUhhbmRsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJBcmNoaXZlUmVzb3Vy
Y2VXZWJSZXNvdXJjZUhhbmRsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUx
OERGMzM0MThBQUYxMkMwMDc3M0U1OSAvKiBTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMThERjMzNjE4QUFGMTREMDA3NzNFNTkgLyog
U2VyaWFsaXplZENyeXB0b0tleVdyYXBNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTE5NzI3MTUxODIwNTQ5RTAwNTkyRDUxIC8qIENyeXB0b0tleVR5
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3J5cHRvS2V5VHlwZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjAyNjAsNiArMjAyNjgsMTAgQEAKIAkJCQk5
QjU1RUVFODFCM0U4ODk4MDA1MzQyQkMgLyogRWRpdG9yQ29jb2EubW0gKi8sCiAJCQkJN0MzRTUx
MDgxOERGOEYzNTAwQzExMkY3IC8qIEhUTUxDb252ZXJ0ZXIuaCAqLywKIAkJCQk3QzNFNTEwOTE4
REY4RjM1MDBDMTEyRjcgLyogSFRNTENvbnZlcnRlci5tbSAqLywKKwkJCQlFMTg1MzY4MTFGNEU0
NzI3MDBGRTA5MUIgLyogV2ViQXJjaGl2ZVJlc291cmNlRnJvbU5TQXR0cmlidXRlZFN0cmluZy5o
ICovLAorCQkJCUUxODUzNjgyMUY0RTQ3MjcwMEZFMDkxQiAvKiBXZWJBcmNoaXZlUmVzb3VyY2VG
cm9tTlNBdHRyaWJ1dGVkU3RyaW5nLm1tICovLAorCQkJCUUxOEMzNTQxMUY3MTk2Q0QwMEZGNjMy
RCAvKiBXZWJBcmNoaXZlUmVzb3VyY2VXZWJSZXNvdXJjZUhhbmRsZXIuaCAqLywKKwkJCQlFMThD
MzU0MjFGNzE5NzAxMDBGRjYzMkQgLyogV2ViQXJjaGl2ZVJlc291cmNlV2ViUmVzb3VyY2VIYW5k
bGVyLm1tICovLAogCQkJCTlCOTI5OUIwMUY2Nzk2QTQwMDY3MjNDMiAvKiBXZWJDb250ZW50UmVh
ZGVyQ29jb2EubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9IGNvY29hOwpAQCAtMjg4NzAsNiArMjg4
ODIsNyBAQAogCQkJCTMxNkRDQjIwMUU3OENBNTUwMDFCNUY4NyAvKiBKU1JUQ09mZmVyQW5zd2Vy
T3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc5NjlEQkExN0QxNDE1MTAwN0ZGODQyIC8q
IEpTUlRDUGVlckNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTA3OTY5REI4MTdEMTQx
NTEwMDdGRjg0MiAvKiBKU1JUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQuaCBpbiBIZWFkZXJzICov
LAorCQkJCUUxOEMzNTQ0MUY3MTk3MEMwMEZGNjMyRCAvKiBXZWJBcmNoaXZlUmVzb3VyY2VXZWJS
ZXNvdXJjZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTVFMkM0Mzc0MUJDRjBENzUwMDAx
RTJCRSAvKiBKU1JUQ1J0cFBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVFMkM0Mzcy
MUJDRjBENzUwMDAxRTJCQyAvKiBKU1JUQ1J0cFJlY2VpdmVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1RTJDNDM3NDFCQ0YwRDc1MDAwMUUyQkMgLyogSlNSVENSdHBTZW5kZXIuaCBpbiBIZWFkZXJz
ICovLApAQCAtMzAzNTgsNiArMzAzNzEsNyBAQAogCQkJCTA4MDZFNTdBMTI4OTMwNDUwMDdDRUQz
MiAvKiBTVkdNYXRyaXguaCBpbiBIZWFkZXJzICovLAogCQkJCTA4Q0EzRDQ0MTI4OTRBMzgwMEZG
RjI2MCAvKiBTVkdNYXRyaXhUZWFyT2ZmLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0U1OEQ1QzFE
RDdFQzlDMDAxMjg1NTIgLyogU1ZHTWF0cml4VmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCUUx
ODUzNjg0MUY0RTQ4MTQwMEZFMDkxQiAvKiBXZWJBcmNoaXZlUmVzb3VyY2VGcm9tTlNBdHRyaWJ1
dGVkU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0E0QjBEMDBCRjIyMDA3MUI3ODIg
LyogU1ZHTWV0YWRhdGFFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkExRjJCMTBDRUYw
QUJGMDA0NDJGNkEgLyogU1ZHTWlzc2luZ0dseXBoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjIyMjdBNEUwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR01QYXRoRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zMjY5OCw2ICszMjcxMiw3IEBACiAJCQkJQTYxNDhBNzgxMkU0MUUzQjAwNDRB
Nzg0IC8qIEpTSFRNTEtleWdlbkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFFMkFC
MjEwQTFDRTYzQjAwQjQyQjI1IC8qIEpTSFRNTExhYmVsRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxQUUyQUIyMzBBMUNFNjNCMDBCNDJCMjUgLyogSlNIVE1MTGVnZW5kRWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlFMThDMzU0MzFGNzE5NzAxMDBGRjYzMkQgLyogV2ViQXJj
aGl2ZVJlc291cmNlV2ViUmVzb3VyY2VIYW5kbGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFF
MkFCMjUwQTFDRTYzQjAwQjQyQjI1IC8qIEpTSFRNTExJRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBODBFN0IxMDBBMTlENjA2MDA3RkI4QzUgLyogSlNIVE1MTGlua0VsZW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUFFMkFCMjcwQTFDRTYzQjAwQjQyQjI1IC8qIEpTSFRNTE1h
cEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMjg2NSw2ICszMjg4MCw3IEBACiAJCQkJ
QTFDQzU2NzgxRjQ2MTRBNTAwQTQ1NTVCIC8qIEpTUGF5bWVudFJlcXVlc3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTFGNjAwNTcxRjQ3NjUwNTAwNzdFODNGIC8qIEpTUGF5bWVudFJlcXVlc3RV
cGRhdGVFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMUY2MDA1OTFGNDc2NTA1MDA3N0U4
M0YgLyogSlNQYXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50SW5pdC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlFMTg1MzY4NTFGNTA5MDYxMDBGRTA5MUIgLyogV2ViQXJjaGl2ZVJlc291cmNlRnJvbU5T
QXR0cmlidXRlZFN0cmluZy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUExQ0M1NjdBMUY0NjE0QUEw
MEE0NTU1QiAvKiBKU1BheW1lbnRSZXNwb25zZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMUND
NTY3QzFGNDYxNEFGMDBBNDU1NUIgLyogSlNQYXltZW50U2hpcHBpbmdPcHRpb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTFDQzU2N0UxRjQ2MTRCNDAwQTQ1NTVCIC8qIEpTUGF5bWVudFNoaXBw
aW5nVHlwZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Y29jb2EvV2ViQXJjaGl2ZVJlc291cmNlRnJvbU5TQXR0cmlidXRlZFN0cmluZy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQXJjaGl2ZVJlc291cmNlRnJv
bU5TQXR0cmlidXRlZFN0cmluZy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvY29jb2EvV2ViQXJjaGl2ZVJlc291cmNlRnJvbU5TQXR0cmlidXRlZFN0cmluZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBB
cmNoaXZlUmVzb3VyY2U7Cit9CisKK0BpbnRlcmZhY2UgV2ViQXJjaGl2ZVJlc291cmNlRnJvbU5T
QXR0cmlidXRlZFN0cmluZyA6IE5TT2JqZWN0IHsKK0BwYWNrYWdlCisgICAgUmVmUHRyPFdlYkNv
cmU6OkFyY2hpdmVSZXNvdXJjZT4gcmVzb3VyY2U7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhEYXRhOihOU0RhdGEgKilkYXRhIFVSTDooTlNVUkwgKilVUkwgTUlNRVR5cGU6KE5TU3RyaW5n
ICopTUlNRVR5cGUgdGV4dEVuY29kaW5nTmFtZTooTlNTdHJpbmcgKil0ZXh0RW5jb2RpbmdOYW1l
IGZyYW1lTmFtZTooTlNTdHJpbmcgKilmcmFtZU5hbWU7CistIChOU1VSTCAqKVVSTDsKKworQGVu
ZApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJBcmNoaXZlUmVzb3VyY2VG
cm9tTlNBdHRyaWJ1dGVkU3RyaW5nLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvY29jb2EvV2ViQXJjaGl2ZVJlc291cmNlRnJvbU5TQXR0cmlidXRlZFN0cmluZy5tbQko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkFyY2hpdmVS
ZXNvdXJjZUZyb21OU0F0dHJpYnV0ZWRTdHJpbmcubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV2ViQXJj
aGl2ZVJlc291cmNlRnJvbU5TQXR0cmlidXRlZFN0cmluZy5oIgorCisjaW1wb3J0ICJBcmNoaXZl
UmVzb3VyY2UuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0BpbXBsZW1lbnRhdGlv
biBXZWJBcmNoaXZlUmVzb3VyY2VGcm9tTlNBdHRyaWJ1dGVkU3RyaW5nCisKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aERhdGE6KE5TRGF0YSAqKWRhdGEgVVJMOihOU1VSTCAqKVVSTCBNSU1FVHlw
ZTooTlNTdHJpbmcgKilNSU1FVHlwZSB0ZXh0RW5jb2RpbmdOYW1lOihOU1N0cmluZyAqKXRleHRF
bmNvZGluZ05hbWUgZnJhbWVOYW1lOihOU1N0cmluZyAqKWZyYW1lTmFtZQoreworICAgIGlmICgh
KHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgaWYgKCFk
YXRhIHx8ICFVUkwgfHwgIU1JTUVUeXBlKSB7CisgICAgICAgIFtzZWxmIHJlbGVhc2VdOworICAg
ICAgICByZXR1cm4gbmlsOworICAgIH0KKworICAgIHJlc291cmNlID0gQXJjaGl2ZVJlc291cmNl
OjpjcmVhdGUoU2hhcmVkQnVmZmVyOjpjcmVhdGUoYWRvcHROUyhbZGF0YSBjb3B5XSkuZ2V0KCkp
LCBVUkwsIE1JTUVUeXBlLCB0ZXh0RW5jb2RpbmdOYW1lLCBmcmFtZU5hbWUsIG5pbCk7CisgICAg
aWYgKCFyZXNvdXJjZSkgeworICAgICAgICBbc2VsZiByZWxlYXNlXTsKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICB9CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoTlNVUkwgKilVUkwKK3sK
KyAgICByZXR1cm4gcmVzb3VyY2UtPnVybCgpOworfQorCitAZW5kCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL1dlYkFyY2hpdmVSZXNvdXJjZVdlYlJlc291cmNlSGFuZGxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQXJjaGl2ZVJl
c291cmNlV2ViUmVzb3VyY2VIYW5kbGVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9XZWJBcmNoaXZlUmVzb3VyY2VXZWJSZXNvdXJjZUhhbmRsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKK0BpbnRlcmZhY2UgV2ViQXJjaGl2ZVJlc291cmNlV2ViUmVzb3VyY2VIYW5kbGVyIDogTlNP
YmplY3QgeworfQorLSAoaWQpcmVzb3VyY2VGb3JEYXRhOihOU0RhdGEgKilkYXRhIFVSTDooTlNV
UkwgKil1cmwgTUlNRVR5cGU6KE5TU3RyaW5nICopbWltZVR5cGUgdGV4dEVuY29kaW5nTmFtZToo
TlNTdHJpbmcgKil0ZXh0RW5jb2RpbmdOYW1lIGZyYW1lTmFtZTooTlNTdHJpbmcgKilmcmFtZU5h
bWU7CitAZW5kCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkFyY2hpdmVS
ZXNvdXJjZVdlYlJlc291cmNlSGFuZGxlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2NvY29hL1dlYkFyY2hpdmVSZXNvdXJjZVdlYlJlc291cmNlSGFuZGxlci5tbQko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkFyY2hpdmVS
ZXNvdXJjZVdlYlJlc291cmNlSGFuZGxlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5
IEBACisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldlYkFyY2hp
dmVSZXNvdXJjZVdlYlJlc291cmNlSGFuZGxlci5oIgorCisjaW1wb3J0ICJXZWJBcmNoaXZlUmVz
b3VyY2VGcm9tTlNBdHRyaWJ1dGVkU3RyaW5nLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJBcmNo
aXZlUmVzb3VyY2VXZWJSZXNvdXJjZUhhbmRsZXIKKworLSAoaWQpcmVzb3VyY2VGb3JEYXRhOihO
U0RhdGEgKilkYXRhIFVSTDooTlNVUkwgKil1cmwgTUlNRVR5cGU6KE5TU3RyaW5nICopbWltZVR5
cGUgdGV4dEVuY29kaW5nTmFtZTooTlNTdHJpbmcgKil0ZXh0RW5jb2RpbmdOYW1lIGZyYW1lTmFt
ZTooTlNTdHJpbmcgKilmcmFtZU5hbWUKK3sKKyAgICByZXR1cm4gW1tbV2ViQXJjaGl2ZVJlc291
cmNlRnJvbU5TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOmRhdGEgVVJMOnVy
bCBNSU1FVHlwZTptaW1lVHlwZSB0ZXh0RW5jb2RpbmdOYW1lOnRleHRFbmNvZGluZ05hbWUgZnJh
bWVOYW1lOmZyYW1lTmFtZV0gYXV0b3JlbGVhc2VdOworfQorCitAZW5kCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5t
bQkocmV2aXNpb24gMjIyMTIyKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJD
b250ZW50UmVhZGVyQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTIzLDUwICsyMywxMDUgQEAK
ICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldl
YkNvbnRlbnRSZWFkZXIuaCIKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV2ViQ29udGVu
dFJlYWRlci5oIgogCi0jaW5jbHVkZSAiQXJjaGl2ZVJlc291cmNlLmgiCi0jaW5jbHVkZSAiQmxv
Yi5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCi0jaW5jbHVkZSAiRE9NVVJM
LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50Lmgi
Ci0jaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKLSNpbmNs
dWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCi0jaW5jbHVkZSAiTGVnYWN5V2ViQXJjaGl2ZS5oIgot
I2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIldlYk5T
QXR0cmlidXRlZFN0cmluZ0V4dHJhcy5oIgotI2luY2x1ZGUgIm1hcmt1cC5oIgotI2luY2x1ZGUg
PHBhbC9zcGkvY29jb2EvTlNBdHRyaWJ1dGVkU3RyaW5nU1BJLmg+Ci0jaW5jbHVkZSA8d3RmL1Nv
ZnRMaW5raW5nLmg+Ci0KLSNpZiBQTEFURk9STShJT1MpCisjaW1wb3J0ICJBcmNoaXZlUmVzb3Vy
Y2UuaCIKKyNpbXBvcnQgIkJsb2IuaCIKKyNpbXBvcnQgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgi
CisjaW1wb3J0ICJET01VUkwuaCIKKyNpbXBvcnQgIkRvY3VtZW50LmgiCisjaW1wb3J0ICJEb2N1
bWVudEZyYWdtZW50LmgiCisjaW1wb3J0ICJEb2N1bWVudExvYWRlci5oIgorI2ltcG9ydCAiRnJh
bWUuaCIKKyNpbXBvcnQgIkZyYW1lTG9hZGVyLmgiCisjaW1wb3J0ICJGcmFtZUxvYWRlckNsaWVu
dC5oIgorI2ltcG9ydCAiSFRNTEJvZHlFbGVtZW50LmgiCisjaW1wb3J0ICJIVE1MSW1hZ2VFbGVt
ZW50LmgiCisjaW1wb3J0ICJMZWdhY3lXZWJBcmNoaXZlLmgiCisjaW1wb3J0ICJQYWdlLmgiCisj
aW1wb3J0ICJTZXR0aW5ncy5oIgorI2ltcG9ydCAiV2ViQXJjaGl2ZVJlc291cmNlRnJvbU5TQXR0
cmlidXRlZFN0cmluZy5oIgorI2ltcG9ydCAiV2ViQXJjaGl2ZVJlc291cmNlV2ViUmVzb3VyY2VI
YW5kbGVyLmgiCisjaW1wb3J0ICJXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMuaCIKKyNpbXBv
cnQgIm1hcmt1cC5oIgorI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9OU0F0dHJpYnV0ZWRTdHJpbmdT
UEkuaD4KKyNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgorCisjaWYgKFBMQVRGT1JNKElPUykg
JiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMDAwKSB8fCAoUExBVEZP
Uk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTMwMCkKK0Bp
bnRlcmZhY2UgTlNBdHRyaWJ1dGVkU3RyaW5nICgpCistIChOU1N0cmluZyAqKV9odG1sRG9jdW1l
bnRGcmFnbWVudFN0cmluZzooTlNSYW5nZSlyYW5nZSBkb2N1bWVudEF0dHJpYnV0ZXM6KE5TRGlj
dGlvbmFyeSAqKWRpY3Qgc3VicmVzb3VyY2VzOihOU0FycmF5ICoqKXN1YnJlc291cmNlczsKK0Bl
bmQKKyNlbGlmIFBMQVRGT1JNKElPUykKIFNPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SSyhXZWJL
aXRMZWdhY3kpCi0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKE1BQykKKyNlbGlmIFBMQVRGT1JNKE1B
QykKIFNPRlRfTElOS19GUkFNRVdPUktfSU5fVU1CUkVMTEEoV2ViS2l0LCBXZWJLaXRMZWdhY3kp
CiAjZW5kaWYKIAotLy8gRklYTUU6IEdldCByaWQgb2YgdGhpcyBhbmQgY2hhbmdlIE5TQXR0cmli
dXRlZFN0cmluZyBjb252ZXJzaW9uIHNvIGl0IGRvZXNuJ3QgdXNlIFdlYktpdExlZ2FjeSAoY2Yu
IHJkYXI6Ly9wcm9ibGVtLzMwNTk3MzUyKS4KKyNpZiAoUExBVEZPUk0oSU9TKSAmJiBfX0lQSE9O
RV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA8IDExMDAwMCkgfHwgKFBMQVRGT1JNKE1BQykgJiYg
X19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8IDEwMTMwMCkKIFNPRlRfTElOSyhXZWJL
aXRMZWdhY3ksIF9XZWJDcmVhdGVGcmFnbWVudCwgdm9pZCwgKFdlYkNvcmU6OkRvY3VtZW50JiBk
b2N1bWVudCwgTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcsIFdlYkNvcmU6OkZyYWdtZW50QW5k
UmVzb3VyY2VzJiByZXN1bHQpLCAoZG9jdW1lbnQsIHN0cmluZywgcmVzdWx0KSkKKyNlbmRpZgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiAoUExBVEZPUk0oSU9TKSAmJiBfX0lQSE9ORV9P
U19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAwMDApIHx8IChQTEFURk9STShNQUMpICYmIF9f
TUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMzAwKQorCitzdGF0aWMgTlNEaWN0
aW9uYXJ5ICphdHRyaWJ1dGVzRm9yQXR0cmlidXRlZFN0cmluZ0NvbnZlcnNpb24oKQoreworICAg
IC8vIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUga2VwdCBpbiBzeW5jIHdpdGggaWRlbnRpY2Fs
bHkgbmFtZWQgb25lIGluIFdlYktpdExlZ2FjeSwgd2hpY2ggaXMgdXNlZCBvbiBvbGRlciBPUyB2
ZXJzaW9ucy4KKyAgICBSZXRhaW5QdHI8TlNBcnJheT4gZXhjbHVkZWRFbGVtZW50cyA9IGFkb3B0
TlMoW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6CisgICAgICAgIC8vIE9taXQgc3R5
bGUgc2luY2Ugd2Ugd2FudCBzdHlsZSB0byBiZSBpbmxpbmUgc28gdGhlIGZyYWdtZW50IGNhbiBi
ZSBlYXNpbHkgaW5zZXJ0ZWQuCisgICAgICAgIEAic3R5bGUiLAorICAgICAgICAvLyBPbWl0IHht
bCBzbyB0aGUgcmVzdWx0IGlzIG5vdCBYSFRNTC4KKyAgICAgICAgQCJ4bWwiLAorICAgICAgICAv
LyBPbWl0IHRhZ3MgdGhhdCB3aWxsIGdldCBzdHJpcHBlZCB3aGVuIGNvbnZlcnRlZCB0byBhIGZy
YWdtZW50IGFueXdheS4KKyAgICAgICAgQCJkb2N0eXBlIiwgQCJodG1sIiwgQCJoZWFkIiwgQCJi
b2R5IiwKKyAgICAgICAgLy8gT21pdCBkZXByZWNhdGVkIHRhZ3MuCisgICAgICAgIEAiYXBwbGV0
IiwgQCJiYXNlZm9udCIsIEAiY2VudGVyIiwgQCJkaXIiLCBAImZvbnQiLCBAIm1lbnUiLCBAInMi
LCBAInN0cmlrZSIsIEAidSIsCisgICAgICAgIC8vIE9taXQgb2JqZWN0IHNvIG5vIGZpbGUgYXR0
YWNobWVudHMgYXJlIHBhcnQgb2YgdGhlIGZyYWdtZW50LgorICAgICAgICBAIm9iamVjdCIsIG5p
bF0pOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IE5T
RXhjbHVkZWRFbGVtZW50c0RvY3VtZW50QXR0cmlidXRlID0gQCJFeGNsdWRlZEVsZW1lbnRzIjsK
KyNlbmRpZgorCisgICAgcmV0dXJuIEB7CisgICAgICAgIE5TRXhjbHVkZWRFbGVtZW50c0RvY3Vt
ZW50QXR0cmlidXRlOiBleGNsdWRlZEVsZW1lbnRzLmdldCgpLAorICAgICAgICBAIkludGVyY2hh
bmdlTmV3bGluZSI6IEBZRVMsCisgICAgICAgIEAiQ29hbGVzY2VUYWJTcGFucyI6IEBZRVMsCisg
ICAgICAgIEAiT3V0cHV0QmFzZVVSTCI6IFsoTlNVUkwgKilVUkw6OmZha2VVUkxXaXRoUmVsYXRp
dmVQYXJ0KGVtcHR5U3RyaW5nKCkpIHJldGFpbl0sIC8vIFRoZSB2YWx1ZSBuZWVkcyArMSByZWZj
b3VudCwgYXMgTlNBdHRyaWJ1dGVkU3RyaW5nIG92ZXItcmVsZWFzZXMgaXQuCisgICAgICAgIEAi
V2ViUmVzb3VyY2VIYW5kbGVyIjogW1dlYkFyY2hpdmVSZXNvdXJjZVdlYlJlc291cmNlSGFuZGxl
ciBuZXddLAorICAgIH07Cit9CisKK3N0YXRpYyBGcmFnbWVudEFuZFJlc291cmNlcyBjcmVhdGVG
cmFnbWVudChGcmFtZSYgZnJhbWUsIE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nKQoreworICAg
IEZyYWdtZW50QW5kUmVzb3VyY2VzIHJlc3VsdDsKKyAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSAq
ZnJhbWUuZG9jdW1lbnQoKTsKKworICAgIE5TQXJyYXkgKnN1YnJlc291cmNlcyA9IG5pbDsKKyAg
ICBOU1N0cmluZyAqZnJhZ21lbnRTdHJpbmcgPSBbc3RyaW5nIF9odG1sRG9jdW1lbnRGcmFnbWVu
dFN0cmluZzpOU01ha2VSYW5nZSgwLCBbc3RyaW5nIGxlbmd0aF0pIGRvY3VtZW50QXR0cmlidXRl
czphdHRyaWJ1dGVzRm9yQXR0cmlidXRlZFN0cmluZ0NvbnZlcnNpb24oKSBzdWJyZXNvdXJjZXM6
JnN1YnJlc291cmNlc107CisgICAgYXV0byBmcmFnbWVudCA9IERvY3VtZW50RnJhZ21lbnQ6OmNy
ZWF0ZShkb2N1bWVudCk7CisgICAgZnJhZ21lbnQtPnBhcnNlSFRNTChmcmFnbWVudFN0cmluZywg
ZG9jdW1lbnQuYm9keSgpLCBEaXNhbGxvd1NjcmlwdGluZ0FuZFBsdWdpbkNvbnRlbnQpOworCisg
ICAgcmVzdWx0LmZyYWdtZW50ID0gV1RGTW92ZShmcmFnbWVudCk7CisgICAgZm9yIChXZWJBcmNo
aXZlUmVzb3VyY2VGcm9tTlNBdHRyaWJ1dGVkU3RyaW5nICpyZXNvdXJjZSBpbiBzdWJyZXNvdXJj
ZXMpCisgICAgICAgIHJlc3VsdC5yZXNvdXJjZXMuYXBwZW5kKCpyZXNvdXJjZS0+cmVzb3VyY2Up
OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2Vsc2UKKwogc3RhdGljIEZyYWdtZW50QW5k
UmVzb3VyY2VzIGNyZWF0ZUZyYWdtZW50KEZyYW1lJiBmcmFtZSwgTlNBdHRyaWJ1dGVkU3RyaW5n
ICpzdHJpbmcpCiB7Ci0gICAgLy8gRklYTUU6IFRoZSBhbGdvcml0aG0gdG8gY29udmVydCBhbiBh
dHRyaWJ1dGVkIHN0cmluZyBpbnRvIEhUTUwgc2hvdWxkIGJlIGltcGxlbWVudGVkIGhlcmUgaW4g
V2ViQ29yZS4KLSAgICAvLyBGb3Igbm93LCB0aG91Z2gsIHdlIGNhbGwgaW50byBXZWJLaXRMZWdh
Y3ksIHdoaWNoIGluIHR1cm4gY2FsbHMgaW50byBBcHBLaXQvVGV4dEtpdC4KICAgICBGcmFnbWVu
dEFuZFJlc291cmNlcyByZXN1bHQ7CiAgICAgX1dlYkNyZWF0ZUZyYWdtZW50KCpmcmFtZS5kb2N1
bWVudCgpLCBzdHJpbmcsIHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorI2VuZGlm
CisKIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNl
cyhGcmFtZSYgZnJhbWUsIE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nKQogewogICAgIGlmICgh
ZnJhbWUucGFnZSgpIHx8ICFmcmFtZS5kb2N1bWVudCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vVVJMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJM
LmgJKHJldmlzaW9uIDIyMjEyMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTC5oCSh3
b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9S
VCBVUkwoY29uc3QgVVJMJiBiYXNlLCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlKTsKICAgICBVUkwo
Y29uc3QgVVJMJiBiYXNlLCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlLCBjb25zdCBUZXh0RW5jb2Rp
bmcmKTsKIAotICAgIHN0YXRpYyBVUkwgZmFrZVVSTFdpdGhSZWxhdGl2ZVBhcnQoY29uc3QgU3Ry
aW5nJik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFVSTCBmYWtlVVJMV2l0aFJlbGF0aXZl
UGFydChjb25zdCBTdHJpbmcmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgVVJMIGZpbGVV
UkxXaXRoRmlsZVN5c3RlbVBhdGgoY29uc3QgU3RyaW5nJik7CiAKICAgICBTdHJpbmcgc3RyaXBw
ZWRGb3JVc2VBc1JlZmVycmVyKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdl
TG9nCShyZXZpc2lvbiAyMjIyMTcpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAxNy0wOS0xOSAgQWxleGV5IFBy
b3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KKworICAgICAgICBMYXllcmluZyB2aW9sYXRpb24g
aW4gRWRpdG9yOjpjcmVhdGVGcmFnbWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc2MTIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuCisKKyAgICAgICAgKiBNaXNjL1dlYk5TVVJMRXh0cmFzLmg6CisgICAgICAgICogTWlzYy9X
ZWJOU1VSTEV4dHJhcy5tbToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAg
ICAqIFdlYlZpZXcvV2ViSFRNTFZpZXcubW06CisgICAgICAgIFJlbW92ZWQgbXVsdGlwbGUgY29w
aWVzIG9mIHdlYmtpdC1mYWtlLXVybCBjcmVhdGlvbiBjb2RlLCBzd2l0Y2hpbmcgdG8gVVJMOjpm
YWtlVVJMV2l0aFJlbGF0aXZlUGFydCgpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2Vi
RWRpdG9yQ2xpZW50Lm1tOgorICAgICAgICAoX1dlYkNyZWF0ZUZyYWdtZW50KTogQWRkZWQgYSBz
dHViIGltcGxlbWVudGF0aW9uIGZvciBvbGRlciBPU2VzLiBUaGlzIGlzIG5lZWRlZAorICAgICAg
ICBiZWNhdXNlIFdlYktpdExlZ2FjeS5leHAgaXMgbm90IHBhc3NlZCB0aHJvdWdoIHByZXByb2Nl
c3Nvciwgc28gdGhlcmUgaXMgbm8gc2FuZQorICAgICAgICB3YXkgdG8gYXZvaWQgZXhwb3J0aW5n
IHRoZSBzeW1ib2wganVzdCBvbiBuZXdlciBPU2VzLgorCiAyMDE3LTA5LTE4ICBBbmR5IEVzdGVz
ICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBVcHN0cmVhbSBtaXNjZWxsYW5l
b3VzIFdlYktpdFN5c3RlbUludGVyZmFjZSBmdW5jdGlvbnMKSW5kZXg6IFNvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL01pc2MvV2ViTlNVUkxFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9NaXNjL1dlYk5TVVJMRXh0cmFzLmgJKHJldmlzaW9uIDIyMjEyMikKKysr
IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViTlNVUkxFeHRyYXMuaAkod29ya2luZyBj
b3B5KQpAQCAtNzEsMTEgKzcxLDYgQEAgQGludGVyZmFjZSBOU1VSTCAoV2ViTlNVUkxFeHRyYXMp
CiAKIC0gKE5TVVJMICopX3dlYmtpdF9VUkxGcm9tVVJMT3JTY2hlbWVsZXNzRmlsZVVSTDsKIAot
I2lmIFRBUkdFVF9PU19JUEhPTkUKLS8vIEZJWE1FOiBUaGlzIG1ldGhvZCBuYW1lIG5lZWRzIGEg
cHJlZml4LgotKyAoTlNVUkwgKil1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0OihOU1N0cmluZyAq
KXJlbGF0aXZlUGFydDsKLSNlbmRpZgotCiBAZW5kCiAKIEBpbnRlcmZhY2UgTlNTdHJpbmcgKFdl
Yk5TVVJMRXh0cmFzKQpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJOU1VS
TEV4dHJhcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dl
Yk5TVVJMRXh0cmFzLm1tCShyZXZpc2lvbiAyMjIxMjIpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9NaXNjL1dlYk5TVVJMRXh0cmFzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMSArNDYs
NiBAQAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCi0j
aWYgUExBVEZPUk0oSU9TKQotLy8gRmFrZSBVUkwgc2NoZW1lLgotI2RlZmluZSBXZWJEYXRhUHJv
dG9jb2xTY2hlbWUgQCJ3ZWJraXQtZmFrZS11cmwiCi0jZW5kaWYKLQogI2RlZmluZSBVUkxfQllU
RVNfQlVGRkVSX0xFTkdUSCAyMDQ4CiAKIEBpbXBsZW1lbnRhdGlvbiBOU1VSTCAoV2ViTlNVUkxF
eHRyYXMpCkBAIC0yMTcsMjAgKzIxMiw2IEBAIC0gKE5TVVJMICopX3dlYmtpdF9VUkxGcm9tVVJM
T3JTY2hlbWVsZXMKIAogICAgIHJldHVybiBbTlNVUkwgVVJMV2l0aFN0cmluZzpbQCJmaWxlOiIg
c3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6W3NlbGYgYWJzb2x1dGVTdHJpbmddXV07CiB9Ci0KLSNp
ZiBQTEFURk9STShJT1MpCi0rIChOU1VSTCAqKXVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQ6KE5T
U3RyaW5nICopcmVsYXRpdmVQYXJ0Ci17Ci0gICAgQ0ZVVUlEUmVmIFVVSURSZWYgPSBDRlVVSURD
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCk7Ci0gICAgTlNTdHJpbmcgKlVVSURTdHJpbmcgPSAo
TlNTdHJpbmcgKilDRlVVSURDcmVhdGVTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgVVVJRFJl
Zik7Ci0gICAgQ0ZSZWxlYXNlKFVVSURSZWYpOwotICAgIE5TVVJMICpVUkwgPSBbTlNVUkwgVVJM
V2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAOi8vJUAvJUAiLCBXZWJE
YXRhUHJvdG9jb2xTY2hlbWUsIFVVSURTdHJpbmcsIHJlbGF0aXZlUGFydF1dOwotICAgIENGUmVs
ZWFzZShVVUlEU3RyaW5nKTsKLSAgICAKLSAgICByZXR1cm4gVVJMOwotfQotCi0jZW5kaWYgLy8g
UExBVEZPUk0oSU9TKQogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gTlNTdHJpbmcgKFdlYk5TVVJM
RXh0cmFzKQpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
RWRpdG9yQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQkocmV2aXNpb24gMjIyMTIyKQorKysgU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDEsOSArMTAxLDExIEBAIC0gKE5TU3RyaW5nICopbGFuZ3VhZ2VG
b3JXb3JkUmFuZ2U6KE5TUmEKIEBlbmQKICNlbmRpZgogCisjaWYgKFBMQVRGT1JNKElPUykgJiYg
X19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMTAwMDApIHx8IChQTEFURk9STShN
QUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDEzMDApCiBAaW50ZXJm
YWNlIE5TQXR0cmlidXRlZFN0cmluZyAoV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRGV0YWlscykKIC0g
KERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcm9tUmFuZ2U6KE5TUmFuZ2UpcmFuZ2Ug
ZG9jdW1lbnQ6KERPTURvY3VtZW50ICopZG9jdW1lbnQgZG9jdW1lbnRBdHRyaWJ1dGVzOihOU0Rp
Y3Rpb25hcnkgKilhdHRyaWJ1dGVzIHN1YnJlc291cmNlczooTlNBcnJheSAqKilzdWJyZXNvdXJj
ZXM7CiBAZW5kCisjZW5kaWYKIAogc3RhdGljIFdlYlZpZXdJbnNlcnRBY3Rpb24ga2l0KEVkaXRv
ckluc2VydEFjdGlvbiBhY3Rpb24pCiB7CkBAIC00MzUsOCArNDM3LDIxIEBAIE5TVVJMICpXZWJF
ZGl0b3JDbGllbnQ6OmNhbm9uaWNhbGl6ZVVSTFMKICAgICByZXR1cm4gVVJMOwogfQogCisjaWYg
KFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEw
MDAwKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDEwMTMwMCkKKworLy8gRklYTUU6IFJlbW92ZSBib3RoIHRoaXMgc3R1YiBhbmQgdGhlIHJl
YWwgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uIGJlbG93IG9uY2Ugd2UgZG9uJ3QgbmVlZCB0aGUg
cmVhbCB2ZXJzaW9uIG9uIGFueSBzdXBwb3J0ZWQgcGxhdGZvcm0uCisvLyBUaGlzIHN0dWIgaXMg
bm90IHVzZWQgb3V0c2lkZSBXZWJLaXQsIGJ1dCBpdCdzIGhlcmUgc28gd2Ugd29uJ3QgZ2V0IGEg
bGlua2VyIGVycm9yLgorX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSkKK3ZvaWQgX1dlYkNy
ZWF0ZUZyYWdtZW50KERvY3VtZW50JiwgTlNBdHRyaWJ1dGVkU3RyaW5nICosIEZyYWdtZW50QW5k
UmVzb3VyY2VzJikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCisj
ZWxzZQorCiBzdGF0aWMgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzRm9yQXR0cmlidXRlZFN0cmlu
Z0NvbnZlcnNpb24oKQogeworICAgIC8vIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUga2VwdCBp
biBzeW5jIHdpdGggaWRlbnRpY2FsbHkgbmFtZWQgb25lIGluIFdlYkNvcmUsIHdoaWNoIGlzIHVz
ZWQgb24gbmV3ZXIgT1MgdmVyc2lvbnMuCiAgICAgTlNBcnJheSAqZXhjbHVkZWRFbGVtZW50cyA9
IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOgogICAgICAgICAvLyBPbWl0IHN0eWxl
IHNpbmNlIHdlIHdhbnQgc3R5bGUgdG8gYmUgaW5saW5lIHNvIHRoZSBmcmFnbWVudCBjYW4gYmUg
ZWFzaWx5IGluc2VydGVkLgogICAgICAgICBAInN0eWxlIiwKQEAgLTQ3MSw2ICs0ODYsOCBAQCB2
b2lkIF9XZWJDcmVhdGVGcmFnbWVudChEb2N1bWVudCYgZG9jdW1lCiAgICAgICAgIHJlc3VsdC5y
ZXNvdXJjZXMuYXBwZW5kKFtyZXNvdXJjZSBfY29yZVJlc291cmNlXSk7CiB9CiAKKyNlbmRpZgor
CiB2b2lkIFdlYkVkaXRvckNsaWVudDo6c2V0SW5zZXJ0aW9uUGFzdGVib2FyZChjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lKQogewogI2lmICFQTEFURk9STShJT1MpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHJldmlzaW9uIDIyMjEyMikK
KysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTIyOTUsNyArMjI5NSw3IEBAIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9j
dW1lbnRGcmFnbWUKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudEZv
ckltYWdlRGF0YTooTlNEYXRhICopZGF0YSB3aXRoUmVsYXRpdmVVUkxQYXJ0OihOU1N0cmluZyAq
KXJlbGF0aXZlVVJMUGFydCBhbmRNSU1FVHlwZTooTlNTdHJpbmcgKiltaW1lVHlwZQogewogICAg
IFdlYlJlc291cmNlICpyZXNvdXJjZSA9IFtbV2ViUmVzb3VyY2UgYWxsb2NdIGluaXRXaXRoRGF0
YTpkYXRhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVVJMOltOU1VSTCB1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0OnJlbGF0aXZlVVJM
UGFydF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBVUkw6VVJMOjpmYWtlVVJMV2l0aFJlbGF0aXZlUGFydChyZWxhdGl2ZVVSTFBhcnQp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1J
TUVUeXBlOm1pbWVUeXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0RW5jb2RpbmdOYW1lOm5pbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZyYW1lTmFtZTpuaWxdOwpJbmRleDogU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCShyZXZpc2lvbiAyMjIxMjIp
CisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC03ODQsOSArNzg0LDYgQEAgY29uc3QgZmxvYXQgX1dlYkhUTUxWaWV3UHJp
bnRpbmdNYXhpbXVtUwogI2RlZmluZSBNSU5fQk9MRF9XRUlHSFQgNwogI2RlZmluZSBTVEFOREFS
RF9CT0xEX1dFSUdIVCA5CiAKLS8vIEZha2UgVVJMIHNjaGVtZS4KLSNkZWZpbmUgV2ViRGF0YVBy
b3RvY29sU2NoZW1lIEAid2Via2l0LWZha2UtdXJsIgotCiAjaWYgUExBVEZPUk0oTUFDKQogCiAv
LyA8cmRhcjovL3Byb2JsZW0vNDk4NTUyND4gUmVmZXJlbmNlcyB0byBXZWJDb3JlU2Nyb2xsVmll
dyBhcyBhIHN1YnZpZXcgb2YgYSBXZWJIVE1MVmlldyBtYXkgYmUgcHJlc2VudApAQCAtMTEyNywx
MSArMTEyNCw2IEBAICsgKE5TQXJyYXkgKilfZXhjbHVkZWRFbGVtZW50c0ZvckF0dHJpYnUKICAg
ICByZXR1cm4gZWxlbWVudHM7CiB9CiAKLXN0YXRpYyBOU1VSTCAqdW5pcXVlVVJMV2l0aFJlbGF0
aXZlUGFydChOU1N0cmluZyAqcmVsYXRpdmVQYXJ0KQotewotICAgIHJldHVybiBbTlNVUkwgVVJM
V2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAOi8vJUAvJUAiLCBXZWJE
YXRhUHJvdG9jb2xTY2hlbWUsIFtOU1VVSUQgVVVJRF0sIHJlbGF0aXZlUGFydF1dOwotfQotCiAt
IChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDoo
TlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6KERPTVJhbmdlICopY29udGV4dAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dQbGFpblRleHQ6KEJPT0wpYWxs
b3dQbGFpblRleHQKQEAgLTIzMzAsNyArMjMyMiw3IEBAIC0gKERPTURvY3VtZW50RnJhZ21lbnQg
Kilfd2ViX2RvY3VtZW50RnIKIHsKICAgICBhdXRvIGZpbGVuYW1lID0gW2ltYWdlTUlNRVR5cGUg
c3RyaW5nQnlSZXBsYWNpbmdPY2N1cnJlbmNlc09mU3RyaW5nOkAiLyIgd2l0aFN0cmluZzpAIi4i
XTsKICAgICBhdXRvIHJlc291cmNlID0gYWRvcHROUyhbW1dlYlJlc291cmNlIGFsbG9jXSBpbml0
V2l0aERhdGE6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6cGFzdGVib2FyZFR5cGVdCi0gICAgICAg
IFVSTDp1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KGZpbGVuYW1lKSBNSU1FVHlwZTppbWFnZU1J
TUVUeXBlIHRleHRFbmNvZGluZ05hbWU6bmlsIGZyYW1lTmFtZTpuaWxdKTsKKyAgICAgICAgVVJM
OlVSTDo6ZmFrZVVSTFdpdGhSZWxhdGl2ZVBhcnQoZmlsZW5hbWUpIE1JTUVUeXBlOmltYWdlTUlN
RVR5cGUgdGV4dEVuY29kaW5nTmFtZTpuaWwgZnJhbWVOYW1lOm5pbF0pOwogICAgIHJldHVybiBb
W3NlbGYgX2RhdGFTb3VyY2VdIF9kb2N1bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2U6cmVz
b3VyY2UuZ2V0KCldOwogfQogCkBAIC03Mjk4LDE2ICs3MjkwLDE4IEBAIC0gKEJPT0wpX2ZpbmRT
dHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIG8KIAogQGVuZAogCisjaWYgKFBMQVRGT1JNKElPUykg
JiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMTAwMDApIHx8IChQTEFURk9S
TShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDEzMDApCiAvLyBU
aGlzIGlzIHVzZWQgYnkgQXBwS2l0L1RleHRLaXQgYW5kIGlzIGltcGxlbWVudGVkIGhlcmUgaW4g
cGFydCBzbyB0aGF0IFdlYkRhdGFQcm90b2NvbFNjaGVtZSBpcyBvbmx5IGRlZmluZWQgb25jZS4K
IC8vIEZJWE1FOiBSZWFsbHkgc2hvdWxkIGhhdmUgYW4gQGludGVyZmFjZSBmb3IgdGhpcyBzb21l
d2hlcmUgaW4gdGhpcyBmaWxlIG9yIGFuIGluY2x1ZGUuIE5vdCBzdXJlIHdoeSBpdCBjb21waWxl
cyB3aXRob3V0IG9uZS4KIEBpbXBsZW1lbnRhdGlvbiBOU1VSTCAoV2ViRGF0YVVSTCkKIAogKyAo
TlNVUkwgKilfd2ViX3VuaXF1ZVdlYkRhdGFVUkwKIHsKLSAgICByZXR1cm4gW05TVVJMIFVSTFdp
dGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQDovLyVAIiwgV2ViRGF0YVBy
b3RvY29sU2NoZW1lLCBbTlNVVUlEIFVVSURdXV07CisgICAgcmV0dXJuIFVSTDo6ZmFrZVVSTFdp
dGhSZWxhdGl2ZVBhcnQoZW1wdHlTdHJpbmcoKSk7CiB9CiAKIEBlbmQKKyNlbmRpZgogCiAjaWYg
UExBVEZPUk0oTUFDKQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>