<?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>231339</bug_id>
          
          <creation_ts>2021-10-06 16:54:32 -0700</creation_ts>
          <short_desc>Add support for icons in web app manifest</short_desc>
          <delta_ts>2021-11-11 12:15:00 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>rginsberg</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>david_quesada</cc>
    
    <cc>dvpdiner2</cc>
    
    <cc>hi</cc>
    
    <cc>lwarlow</cc>
    
    <cc>rginsberg</cc>
    
    <cc>tomac</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1801424</commentid>
    <comment_count>0</comment_count>
    <who name="">rginsberg</who>
    <bug_when>2021-10-06 16:54:32 -0700</bug_when>
    <thetext>rdar://83844541</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1804994</commentid>
    <comment_count>1</comment_count>
      <attachid>441423</attachid>
    <who name="">rginsberg</who>
    <bug_when>2021-10-15 13:50:46 -0700</bug_when>
    <thetext>Created attachment 441423
Patch for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1805017</commentid>
    <comment_count>2</comment_count>
      <attachid>441423</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-10-15 14:24:31 -0700</bug_when>
    <thetext>Comment on attachment 441423
Patch for review

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

&gt; Source/WebCore/ChangeLog:4
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=231339

Please include &lt;rdar&gt; here.

&gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.cpp:194
&gt; +        logDeveloperWarning(makeString(&quot;The value of icons is not a valid list.&quot;_s));

I think you can just pass &quot;The value of icons is not a valid list.&quot;_s

&gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.cpp:341
&gt; +String ApplicationManifestParser::parseGenericStringInIcon(RefPtr&lt;WTF::JSONImpl::Object&gt; &amp;manifest, const String&amp; propertyName)

In C++, space should be after the ampersand

&gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.h:57
&gt; +    String parseGenericStringInIcon(RefPtr&lt;WTF::JSONImpl::Object&gt; &amp;, const String&amp;);

No space before the ampersand.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1805018</commentid>
    <comment_count>3</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-10-15 14:25:11 -0700</bug_when>
    <thetext>error: missing field &apos;icons&apos; initializer [-Werror,-Wmissing-field-initializers]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1805021</commentid>
    <comment_count>4</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-10-15 14:27:41 -0700</bug_when>
    <thetext>It looks like your patch won&apos;t compile, because the WebKit layer needs you to initialize the new &apos;icons&apos; member. Can you add just that bit to _WKApplicationManifest.mm to avoid breaking the build?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1805028</commentid>
    <comment_count>5</comment_count>
      <attachid>441423</attachid>
    <who name="David Quesada">david_quesada</who>
    <bug_when>2021-10-15 14:39:34 -0700</bug_when>
    <thetext>Comment on attachment 441423
Patch for review

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

&gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifest.h:45
&gt; +    enum class Purpose {

The &quot;Purpose&quot; isn&apos;t really a property of the manifest itself, so I don&apos;t think &quot;ApplicationManifest::Purpose&quot; is the clearest name. What about &quot;ApplicationManifest::IconPurpose&quot; or &quot;ApplicationManifest::Icon::Purpose&quot; ?

&gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifest.h:51
&gt; +    struct ApplicationManifestIcon {

Since this is embedded *within* ApplicationManifest, I think just calling it &quot;ApplicationManifest::Icon&quot; might be a better name. The full name of &quot;ApplicationManifest::ApplicationManifestIcon&quot; is somewhat redundant.

&gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifest.h:67
&gt;      template&lt;class Encoder&gt; void encode(Encoder&amp;) const;

Is there a reason to not also update ApplicationManifest::encode() and ApplicationManifest::decode() in this patch? Those methods will need to learn about `icons` in order to send the icon information from the web process to the UI process.

&gt;&gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.cpp:194
&gt;&gt; +        logDeveloperWarning(makeString(&quot;The value of icons is not a valid list.&quot;_s));
&gt; 
&gt; I think you can just pass &quot;The value of icons is not a valid list.&quot;_s

I think calling it an &quot;array&quot; rather than &quot;list&quot; might be more accurate with respect to JSON terminology. (I did just check the spec and notice it uses &quot;list&quot; in this part of the algorithm, but maybe &quot;array&quot; is more familiar term to developers who might see this message.)

&gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.cpp:198
&gt; +    for (auto&amp; iconValue : *arrayValue) {

Nit: I think `const auto&amp;` might be preferred here since you&apos;re not mutating the icons.

&gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.cpp:216
&gt; +                    logManifestPropertyInvalidURL(&quot;scope&quot;_s);

Should this be &quot;src&quot; rather than &quot;scope&quot;?

&gt;&gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.cpp:341
&gt;&gt; +String ApplicationManifestParser::parseGenericStringInIcon(RefPtr&lt;WTF::JSONImpl::Object&gt; &amp;manifest, const String&amp; propertyName)
&gt; 
&gt; In C++, space should be after the ampersand

Can `manifest` be made const?

&gt;&gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.h:57
&gt;&gt; +    String parseGenericStringInIcon(RefPtr&lt;WTF::JSONImpl::Object&gt; &amp;, const String&amp;);
&gt; 
&gt; No space before the ampersand.

Why does this method take a `WTF::JSONImpl::Object` while other methods use `JSON::Object` ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1805681</commentid>
    <comment_count>6</comment_count>
      <attachid>441632</attachid>
    <who name="">rginsberg</who>
    <bug_when>2021-10-18 12:43:46 -0700</bug_when>
    <thetext>Created attachment 441632
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1805683</commentid>
    <comment_count>7</comment_count>
    <who name="">rginsberg</who>
    <bug_when>2021-10-18 12:44:30 -0700</bug_when>
    <thetext>(In reply to Brent Fulgham from comment #2)
&gt; Comment on attachment 441423 [details]
&gt; Patch for review
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=441423&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:4
&gt; &gt; +        https://bugs.webkit.org/show_bug.cgi?id=231339
&gt; 
&gt; Please include &lt;rdar&gt; here.
&gt; 
&gt; &gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.cpp:194
&gt; &gt; +        logDeveloperWarning(makeString(&quot;The value of icons is not a valid list.&quot;_s));
&gt; 
&gt; I think you can just pass &quot;The value of icons is not a valid list.&quot;_s
&gt; 
&gt; &gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.cpp:341
&gt; &gt; +String ApplicationManifestParser::parseGenericStringInIcon(RefPtr&lt;WTF::JSONImpl::Object&gt; &amp;manifest, const String&amp; propertyName)
&gt; 
&gt; In C++, space should be after the ampersand
&gt; 
&gt; &gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.h:57
&gt; &gt; +    String parseGenericStringInIcon(RefPtr&lt;WTF::JSONImpl::Object&gt; &amp;, const String&amp;);
&gt; 
&gt; No space before the ampersand.

Thanks for these comments. They should all be fixed in the new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1805689</commentid>
    <comment_count>8</comment_count>
    <who name="">rginsberg</who>
    <bug_when>2021-10-18 12:52:25 -0700</bug_when>
    <thetext>(In reply to David Quesada from comment #5)
&gt; Comment on attachment 441423 [details]
&gt; Patch for review
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=441423&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifest.h:45
&gt; &gt; +    enum class Purpose {
&gt; 
&gt; The &quot;Purpose&quot; isn&apos;t really a property of the manifest itself, so I don&apos;t
&gt; think &quot;ApplicationManifest::Purpose&quot; is the clearest name. What about
&gt; &quot;ApplicationManifest::IconPurpose&quot; or &quot;ApplicationManifest::Icon::Purpose&quot; ?

Just changed &quot;Purpose&quot; to &quot;IconPurpose&quot;.
&gt; 
&gt; &gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifest.h:51
&gt; &gt; +    struct ApplicationManifestIcon {
&gt; 
&gt; Since this is embedded *within* ApplicationManifest, I think just calling it
&gt; &quot;ApplicationManifest::Icon&quot; might be a better name. The full name of
&gt; &quot;ApplicationManifest::ApplicationManifestIcon&quot; is somewhat redundant.
Just changed to &quot;ApplicationManifest::Icon&quot;
&gt; 
&gt; &gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifest.h:67
&gt; &gt;      template&lt;class Encoder&gt; void encode(Encoder&amp;) const;
&gt; 
&gt; Is there a reason to not also update ApplicationManifest::encode() and
&gt; ApplicationManifest::decode() in this patch? Those methods will need to
&gt; learn about `icons` in order to send the icon information from the web
&gt; process to the UI process.
&gt; 
I just added the `icons` to ApplicationManifest::encode() and 
ApplicationManifest::Decode.
I also added ApplicationManifest::Icon:encode() and 
ApplicationManifest::Icon::decode() because they were necessary for the 
existing functions.
&gt; &gt;&gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.cpp:194
&gt; &gt;&gt; +        logDeveloperWarning(makeString(&quot;The value of icons is not a valid list.&quot;_s));
&gt; &gt; 
&gt; &gt; I think you can just pass &quot;The value of icons is not a valid list.&quot;_s
Just changed this.
&gt; 
&gt; I think calling it an &quot;array&quot; rather than &quot;list&quot; might be more accurate with
&gt; respect to JSON terminology. (I did just check the spec and notice it uses
&gt; &quot;list&quot; in this part of the algorithm, but maybe &quot;array&quot; is more familiar
&gt; term to developers who might see this message.)

Also swapped the phrasing out for &quot;array&quot;. I did take &quot;list&quot; from the spec originally,
but since array is used more with JSON terminology this change makes sense.
&gt; 
&gt; &gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.cpp:198
&gt; &gt; +    for (auto&amp; iconValue : *arrayValue) {
&gt; 
&gt; Nit: I think `const auto&amp;` might be preferred here since you&apos;re not mutating
&gt; the icons.
Just changed this.
&gt; 
&gt; &gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.cpp:216
&gt; &gt; +                    logManifestPropertyInvalidURL(&quot;scope&quot;_s);
&gt; 
&gt; Should this be &quot;src&quot; rather than &quot;scope&quot;?
Yes thank you that was a mistake.
&gt; 
&gt; &gt;&gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.cpp:341
&gt; &gt;&gt; +String ApplicationManifestParser::parseGenericStringInIcon(RefPtr&lt;WTF::JSONImpl::Object&gt; &amp;manifest, const String&amp; propertyName)
&gt; &gt; 
&gt; &gt; In C++, space should be after the ampersand
&gt; 
&gt; Can `manifest` be made const?
&gt; 
&gt; &gt;&gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.h:57
&gt; &gt;&gt; +    String parseGenericStringInIcon(RefPtr&lt;WTF::JSONImpl::Object&gt; &amp;, const String&amp;);
&gt; &gt; 
&gt; &gt; No space before the ampersand.
&gt; 
&gt; Why does this method take a `WTF::JSONImpl::Object` while other methods use
&gt; `JSON::Object` ?
By casting the result of `iconValue-&gt;asObject()` in `parseIcons` to 
`const JSON::Object *` I was able to get rid of the `parseGenericStringInIcon` 
function and just call `parseGenericString`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806731</commentid>
    <comment_count>9</comment_count>
      <attachid>441909</attachid>
    <who name="">rginsberg</who>
    <bug_when>2021-10-20 11:32:46 -0700</bug_when>
    <thetext>Created attachment 441909
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806959</commentid>
    <comment_count>10</comment_count>
      <attachid>441909</attachid>
    <who name="David Quesada">david_quesada</who>
    <bug_when>2021-10-20 17:44:13 -0700</bug_when>
    <thetext>Comment on attachment 441909
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        Tests are added to OpenSource/Tools/TestWebKitAPI/Tests/WebCore/ApplicationManifestParse.cpp

Nit: OpenSource/Tools/TestWebKitAPI/Tests/WebCore/ApplicationManifestParse **r** .cpp

&gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.cpp:207
&gt; +            currentIcon.src = { };

Is it valid to have an icon without a src? I would guess no since the `Processing an image resource from JSON` algorithm returns failure if the input src isn&apos;t a string or fails to parse as a URL. Should this method filter out those src-less images by replacing these `.src = {}` lines with `continue;`?

&gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.cpp:223
&gt; +                    logDeveloperWarning(makeString(&quot;The icon&apos;s src url origin of \&quot;&quot;_s, srcURLOrigin-&gt;toString(), &quot;\&quot; is different from the document&apos;s origin of \&quot;&quot;_s, documentOrigin-&gt;toString(), &quot;\&quot;.&quot;_s));

Is this same-origin check part of the spec? This check is specified for comparing the startURL and scope, but I don&apos;t think it needs to apply to icons.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.h:29
&gt; +#import &lt;wtf/cocoa/VectorCocoa.h&gt;

Are these necessary? Unless directly related to WTF-level code, I don&apos;t think WebKit headers meant for other clients should be importing WTF headers since it is really meant to be an implementation detail of the WebKit stack. (These, of course, would be ok in _WKApplicationManifestInternal.h if you need to define methods that work with Vector for use in other WebKit-internal code.)

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.h:61
&gt; +@property (nonatomic, readonly) NSArray *icons WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));

This should be `NSArray&lt;_WKApplicationManifestIcon *&gt; *`. (With a `@class _WKApplicationManifestIcon;` forward declaration above)

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.h:73
&gt; +@interface _WKApplicationManifestIcon : NSObject &lt;NSSecureCoding&gt;

Nit: WK_CLASS_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA))

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.h:80
&gt; +- (void) src:(NSURL *) srcUrl;

If these setters need to be exposed, it would be better to not include these methods explicitly, but just *not* make the properties readonly. That being said, is it actually necessary to expose these setters?

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:47
&gt; +        case _WKApplicationManifestIconPurposeMonochrome:

There are a few style checker errors here:
ERROR: Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:47:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:46:  Missing space before ( in switch(  [whitespace/parens] [5]

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:59
&gt; +    _WKApplicationManifestIcon *item = arrayElement;

It looks like other implementations of makeVectorElement() add an -isKindOfClass: check to filter out unexpected classes. I think this function should do the same, unless there&apos;s a reason not to here. (Generally we shouldn&apos;t assume that the array we get from the NSCoder is guaranteed to be well-formed)

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:64
&gt; +        WKPurposeToWebCorePurpose([item purpose]),

Nit: Dot syntax. item.src, item.sizes, item.type, item.purpose.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:86
&gt; +    NSArray *icons = [aDecoder decodeObjectOfClass:[NSArray class] forKey:@&quot;icons&quot;];

Nit: NSArray&lt;_WKApplicationManifestIcon *&gt;

And I believe this should use -decodeObjectOfClasses:forKey: with NSArray *and* _WKApplicationManifestIcon, otherwise this line would only be allowed to decode an empty array. (Or an array of empty arrays, or arrays which contain empty arrays, …)

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:188
&gt; +- (NSArray *)icons

Nit: NSArray&lt;_WKApplicationManifestIcon *&gt;

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:190
&gt; +    return nil;

Can you implement this method since you&apos;re adding it in this patch?

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:250
&gt; +- (NSArray *)icons

Ditto: NSArray&lt;_WKApplicationManifestIcon *&gt;

&gt; Tools/ChangeLog:11
&gt; +        necessary because icons are in a list, wheras all other

Typo: wheras -&gt; whereas</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1812754</commentid>
    <comment_count>11</comment_count>
      <attachid>443585</attachid>
    <who name="">rginsberg</who>
    <bug_when>2021-11-08 12:18:54 -0800</bug_when>
    <thetext>Created attachment 443585
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1812756</commentid>
    <comment_count>12</comment_count>
    <who name="">rginsberg</who>
    <bug_when>2021-11-08 12:22:46 -0800</bug_when>
    <thetext>(In reply to David Quesada from comment #10)
&gt; Comment on attachment 441909 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=441909&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:9
&gt; &gt; +        Tests are added to OpenSource/Tools/TestWebKitAPI/Tests/WebCore/ApplicationManifestParse.cpp
&gt; 
&gt; Nit: OpenSource/Tools/TestWebKitAPI/Tests/WebCore/ApplicationManifestParse
&gt; **r** .cpp
Fixed
&gt; 
&gt; &gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.cpp:207
&gt; &gt; +            currentIcon.src = { };
&gt; 
&gt; Is it valid to have an icon without a src? I would guess no since the
&gt; `Processing an image resource from JSON` algorithm returns failure if the
&gt; input src isn&apos;t a string or fails to parse as a URL. Should this method
&gt; filter out those src-less images by replacing these `.src = {}` lines with
&gt; `continue;`?
&gt; 
Changed this from `.src = {}` to `continue;`

&gt; &gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.cpp:223
&gt; &gt; +                    logDeveloperWarning(makeString(&quot;The icon&apos;s src url origin of \&quot;&quot;_s, srcURLOrigin-&gt;toString(), &quot;\&quot; is different from the document&apos;s origin of \&quot;&quot;_s, documentOrigin-&gt;toString(), &quot;\&quot;.&quot;_s));
&gt; 
&gt; Is this same-origin check part of the spec? This check is specified for
&gt; comparing the startURL and scope, but I don&apos;t think it needs to apply to
&gt; icons.
&gt; 
Removed.
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.h:29
&gt; &gt; +#import &lt;wtf/cocoa/VectorCocoa.h&gt;
&gt; 
&gt; Are these necessary? Unless directly related to WTF-level code, I don&apos;t
&gt; think WebKit headers meant for other clients should be importing WTF headers
&gt; since it is really meant to be an implementation detail of the WebKit stack.
&gt; (These, of course, would be ok in _WKApplicationManifestInternal.h if you
&gt; need to define methods that work with Vector for use in other
&gt; WebKit-internal code.)
&gt; 

Moved to _WKApplicationManifestInternal.h
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.h:61
&gt; &gt; +@property (nonatomic, readonly) NSArray *icons WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
&gt; 
&gt; This should be `NSArray&lt;_WKApplicationManifestIcon *&gt; *`. (With a `@class
&gt; _WKApplicationManifestIcon;` forward declaration above)
&gt; 
Changed this.
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.h:73
&gt; &gt; +@interface _WKApplicationManifestIcon : NSObject &lt;NSSecureCoding&gt;
&gt; 
&gt; Nit: WK_CLASS_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA))
Added this.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.h:80
&gt; &gt; +- (void) src:(NSURL *) srcUrl;
&gt; 
&gt; If these setters need to be exposed, it would be better to not include these
&gt; methods explicitly, but just *not* make the properties readonly. That being
&gt; said, is it actually necessary to expose these setters?
Removed the setters.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:47
&gt; &gt; +        case _WKApplicationManifestIconPurposeMonochrome:
&gt; 
&gt; There are a few style checker errors here:
&gt; ERROR: Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:47:  A
&gt; case label should not be indented, but line up with its switch statement. 
&gt; [whitespace/indent] [4]
&gt; ERROR: Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:46: 
&gt; Missing space before ( in switch(  [whitespace/parens] [5]
Fixed the style errors.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:59
&gt; &gt; +    _WKApplicationManifestIcon *item = arrayElement;
&gt; 
&gt; It looks like other implementations of makeVectorElement() add an
&gt; -isKindOfClass: check to filter out unexpected classes. I think this
&gt; function should do the same, unless there&apos;s a reason not to here. (Generally
&gt; we shouldn&apos;t assume that the array we get from the NSCoder is guaranteed to
&gt; be well-formed)
Added that check.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:64
&gt; &gt; +        WKPurposeToWebCorePurpose([item purpose]),
&gt; 
&gt; Nit: Dot syntax. item.src, item.sizes, item.type, item.purpose.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:86
&gt; &gt; +    NSArray *icons = [aDecoder decodeObjectOfClass:[NSArray class] forKey:@&quot;icons&quot;];
&gt; 
&gt; Nit: NSArray&lt;_WKApplicationManifestIcon *&gt;
Fixed this.
&gt; 
&gt; And I believe this should use -decodeObjectOfClasses:forKey: with NSArray
&gt; *and* _WKApplicationManifestIcon, otherwise this line would only be allowed
&gt; to decode an empty array. (Or an array of empty arrays, or arrays which
&gt; contain empty arrays, …)
Fixed this.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:188
&gt; &gt; +- (NSArray *)icons
&gt; 
&gt; Nit: NSArray&lt;_WKApplicationManifestIcon *&gt;
Fixed this.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:190
&gt; &gt; +    return nil;
&gt; 
&gt; Can you implement this method since you&apos;re adding it in this patch?
I&apos;m trying to see if I can make a first patch with really just the WebCore changes
and as little as needed in WebKit, just to not break the build.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:250
&gt; &gt; +- (NSArray *)icons
&gt; 
&gt; Ditto: NSArray&lt;_WKApplicationManifestIcon *&gt;
Fixed this.
&gt; 
&gt; &gt; Tools/ChangeLog:11
&gt; &gt; +        necessary because icons are in a list, wheras all other
&gt; 
&gt; Typo: wheras -&gt; whereas
Fixed this</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813008</commentid>
    <comment_count>13</comment_count>
      <attachid>443585</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-11-09 00:11:11 -0800</bug_when>
    <thetext>Comment on attachment 443585
Patch

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

&gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifest.h:46
&gt; +        enum class Purpose {

NIT: `enum class Purpose : uint8_t`

&gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifest.h:49
&gt; +            Any,

It seems like below this is the default value, so maybe this should be first in the list?

&gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifest.h:55
&gt; +        Vector&lt;Purpose&gt; purposes;

Can we make `Purpose` into a set of flags (e.g. `1 &lt;&lt; 0`, `1 &lt;&lt; 1`, etc.) so that we can use `OptionSet` instead?

&gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.cpp:180
&gt; +    auto value = manifest.getValue(&quot;icons&quot;);

Can we name this something more descriptive?  Maybe `manifestIcons`?  You could then have `manifestIconsArray` down below :)

NIT: `&quot;icons&quot;_s`
NIT: I&apos;d also move this right above `if (!value)`

&gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.cpp:186
&gt; +    auto arrayValue = value-&gt;asArray();

NIT: I&apos;d move this one line below so it&apos;s right above `if (!arrayValue)

&gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.cpp:195
&gt; +        auto autoObjectValue = iconValue-&gt;asObject();

`iconObject`?

&gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.cpp:198
&gt; +        const JSON::Object *objectValue = autoObjectValue.get();

I think you should `const auto&amp; iconJSON = *iconObject;` so that you don&apos;t have to keep dereferencing below

&gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.cpp:238
&gt; +                

Style: unnecessary newline

&gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.cpp:246
&gt; +                        continue;

having the `continue` here means that the following line wont run, which I don&apos;t think you want/intend

in fact, you don&apos;t really `need` the `continue` at all since this is the end of the `if` chain and there&apos;s no other logic below this anyways</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813257</commentid>
    <comment_count>14</comment_count>
      <attachid>443715</attachid>
    <who name="">rginsberg</who>
    <bug_when>2021-11-09 12:02:01 -0800</bug_when>
    <thetext>Created attachment 443715
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813259</commentid>
    <comment_count>15</comment_count>
      <attachid>443585</attachid>
    <who name="">rginsberg</who>
    <bug_when>2021-11-09 12:05:23 -0800</bug_when>
    <thetext>Comment on attachment 443585
Patch

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

&gt;&gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifest.h:46
&gt;&gt; +        enum class Purpose {
&gt; 
&gt; NIT: `enum class Purpose : uint8_t`

Added this

&gt;&gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifest.h:49
&gt;&gt; +            Any,
&gt; 
&gt; It seems like below this is the default value, so maybe this should be first in the list?

Any is the default, moved to the top of the list

&gt;&gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifest.h:55
&gt;&gt; +        Vector&lt;Purpose&gt; purposes;
&gt; 
&gt; Can we make `Purpose` into a set of flags (e.g. `1 &lt;&lt; 0`, `1 &lt;&lt; 1`, etc.) so that we can use `OptionSet` instead?

Added flags and changed `Vector&lt;Purpose&gt;` to `OptionSet&lt;Purpose&gt;`

&gt;&gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.cpp:246
&gt;&gt; +                        continue;
&gt; 
&gt; having the `continue` here means that the following line wont run, which I don&apos;t think you want/intend
&gt; 
&gt; in fact, you don&apos;t really `need` the `continue` at all since this is the end of the `if` chain and there&apos;s no other logic below this anyways

Made all the changes recommended in the function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813299</commentid>
    <comment_count>16</comment_count>
      <attachid>443715</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-11-09 13:39:06 -0800</bug_when>
    <thetext>Comment on attachment 443715
Patch

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

&gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.cpp:252
&gt; +        imageResources.append(currentIcon);

Style: I&apos;d add a newline before this

NIT: I think you can `WTFMove(currentIcon)`

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.h:74
&gt; +

Oops?

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:51
&gt; +    return WebCore::ApplicationManifest::Icon {
&gt; +    };

Oops?

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:82
&gt; +        Vector&lt;WebCore::ApplicationManifest::Icon&gt;(makeVector&lt;WebCore::ApplicationManifest::Icon&gt;(icons)),

you shouldn&apos;t need the cast, e.g. just `makeVector&lt;WebCore::ApplicationManifest::Icon&gt;(icons)`

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:176
&gt; +    return nil;

Oops?

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:269
&gt; +    [super dealloc];

I think this may also need to manually delete the WebCore object too, assuming you&apos;re gonna add an ivar that holds one.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifestInternal.h:31
&gt; +#import &lt;wtf/Vector.h&gt;
&gt; +#import &lt;wtf/cocoa/VectorCocoa.h&gt;

Are these needed?

&gt; Tools/TestWebKitAPI/Tests/WebCore/ApplicationManifestParser.cpp:375
&gt; +    OptionSet&lt;ApplicationManifest::Icon::Purpose&gt; purpose_any;
&gt; +    purpose_any.add(ApplicationManifest::Icon::Purpose::Any);

You can simplify this to just
```
    OptionSet&lt;ApplicationManifest::Icon::Purpose&gt; purposeAny { ApplicationManifest::Icon::Purpose::Any };
```
ditto for the others below too

Style: we prefer camelCase over snake_case in C++/ObjC :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813669</commentid>
    <comment_count>17</comment_count>
      <attachid>443825</attachid>
    <who name="">rginsberg</who>
    <bug_when>2021-11-10 10:01:27 -0800</bug_when>
    <thetext>Created attachment 443825
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813672</commentid>
    <comment_count>18</comment_count>
    <who name="">rginsberg</who>
    <bug_when>2021-11-10 10:06:18 -0800</bug_when>
    <thetext>(In reply to Devin Rousso from comment #16)
&gt; Comment on attachment 443715 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=443715&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.cpp:252
&gt; &gt; +        imageResources.append(currentIcon);
&gt; 
&gt; Style: I&apos;d add a newline before this
&gt; 
&gt; NIT: I think you can `WTFMove(currentIcon)`
Made these two changes
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.h:74
&gt; &gt; +
&gt; 
&gt; Oops?
I&apos;m just trying to get the changes in WebCore/Modules/applicationmanifest/* made here.
I had to add a little to the _WKApplicationManifest files to not break the build.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:51
&gt; &gt; +    return WebCore::ApplicationManifest::Icon {
&gt; &gt; +    };
&gt; 
&gt; Oops?
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:82
&gt; &gt; +        Vector&lt;WebCore::ApplicationManifest::Icon&gt;(makeVector&lt;WebCore::ApplicationManifest::Icon&gt;(icons)),
&gt; 
&gt; you shouldn&apos;t need the cast, e.g. just
&gt; `makeVector&lt;WebCore::ApplicationManifest::Icon&gt;(icons)`
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:176
&gt; &gt; +    return nil;
&gt; 
&gt; Oops?
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:269
&gt; &gt; +    [super dealloc];
&gt; 
&gt; I think this may also need to manually delete the WebCore object too,
&gt; assuming you&apos;re gonna add an ivar that holds one.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifestInternal.h:31
&gt; &gt; +#import &lt;wtf/Vector.h&gt;
&gt; &gt; +#import &lt;wtf/cocoa/VectorCocoa.h&gt;
&gt; 
&gt; Are these needed?
&lt;Wtf/cocoa/VectorCocoa.h&gt; is needed for the `makeVector` function
I removed &lt;wtf/Vector.h&gt; as it was not needed.
&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebCore/ApplicationManifestParser.cpp:375
&gt; &gt; +    OptionSet&lt;ApplicationManifest::Icon::Purpose&gt; purpose_any;
&gt; &gt; +    purpose_any.add(ApplicationManifest::Icon::Purpose::Any);
&gt; 
&gt; You can simplify this to just
&gt; ```
&gt;     OptionSet&lt;ApplicationManifest::Icon::Purpose&gt; purposeAny {
&gt; ApplicationManifest::Icon::Purpose::Any };
&gt; ```
&gt; ditto for the others below too
&gt; 
&gt; Style: we prefer camelCase over snake_case in C++/ObjC :)
Made these changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813674</commentid>
    <comment_count>19</comment_count>
      <attachid>443825</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-11-10 10:08:16 -0800</bug_when>
    <thetext>Comment on attachment 443825
Patch

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

&gt; Tools/TestWebKitAPI/Tests/WebCore/ApplicationManifestParser.cpp:77
&gt; +    ApplicationManifest parseIconFirstTopLevelProperty(const String &amp; key, const String&amp; value)

Extra space between &quot;String &amp;&quot; here

&gt; Tools/TestWebKitAPI/Tests/WebCore/ApplicationManifestParser.cpp:83
&gt; +    ApplicationManifest parseIconFirstTopLevelPropertyForSrc(const String &amp; key, const String&amp; value)

Ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813677</commentid>
    <comment_count>20</comment_count>
      <attachid>443829</attachid>
    <who name="">rginsberg</who>
    <bug_when>2021-11-10 10:13:06 -0800</bug_when>
    <thetext>Created attachment 443829
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813678</commentid>
    <comment_count>21</comment_count>
    <who name="">rginsberg</who>
    <bug_when>2021-11-10 10:13:28 -0800</bug_when>
    <thetext>(In reply to Brent Fulgham from comment #19)
&gt; Comment on attachment 443825 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=443825&amp;action=review
&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebCore/ApplicationManifestParser.cpp:77
&gt; &gt; +    ApplicationManifest parseIconFirstTopLevelProperty(const String &amp; key, const String&amp; value)
&gt; 
&gt; Extra space between &quot;String &amp;&quot; here
&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebCore/ApplicationManifestParser.cpp:83
&gt; &gt; +    ApplicationManifest parseIconFirstTopLevelPropertyForSrc(const String &amp; key, const String&amp; value)
&gt; 
&gt; Ditto
Thanks, just fixed this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813715</commentid>
    <comment_count>22</comment_count>
      <attachid>443829</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-11-10 11:17:11 -0800</bug_when>
    <thetext>Comment on attachment 443829
Patch

Looks good! r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813720</commentid>
    <comment_count>23</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-11-10 11:28:22 -0800</bug_when>
    <thetext>(In reply to rginsberg from comment #18)
&gt; (In reply to Devin Rousso from comment #16)
&gt; &gt; Comment on attachment 443715 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=443715&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.h:74
&gt; &gt; &gt; +
&gt; &gt; 
&gt; &gt; Oops?
&gt; I&apos;m just trying to get the changes in WebCore/Modules/applicationmanifest/* made here.
&gt; I had to add a little to the _WKApplicationManifest files to not break the build.
Are you planning on getting `_WKApplicationManifest` working next?  It would be preferable to create a bug for that work and include it in a FIXME comment where there is still work that needs to be done so that it&apos;s not forgotten.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813733</commentid>
    <comment_count>24</comment_count>
    <who name="">rginsberg</who>
    <bug_when>2021-11-10 11:40:32 -0800</bug_when>
    <thetext>(In reply to Devin Rousso from comment #23)
&gt; (In reply to rginsberg from comment #18)
&gt; &gt; (In reply to Devin Rousso from comment #16)
&gt; &gt; &gt; Comment on attachment 443715 [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=443715&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.h:74
&gt; &gt; &gt; &gt; +
&gt; &gt; &gt; 
&gt; &gt; &gt; Oops?
&gt; &gt; I&apos;m just trying to get the changes in WebCore/Modules/applicationmanifest/* made here.
&gt; &gt; I had to add a little to the _WKApplicationManifest files to not break the build.
&gt; Are you planning on getting `_WKApplicationManifest` working next?  It would
&gt; be preferable to create a bug for that work and include it in a FIXME
&gt; comment where there is still work that needs to be done so that it&apos;s not
&gt; forgotten.

There was already a radar for that, but I just created a bugzilla
(https://bugs.webkit.org/show_bug.cgi?id=232959) linked to the radar and will upload a
new patch here with // FIXME: https://bugs.webkit.org/show_bug.cgi?id=232959 in the
places where changes need to be made.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813735</commentid>
    <comment_count>25</comment_count>
      <attachid>443842</attachid>
    <who name="">rginsberg</who>
    <bug_when>2021-11-10 11:47:47 -0800</bug_when>
    <thetext>Created attachment 443842
Patch

Just added `// FIXME: https://bugs.webkit.org/show_bug.cgi?id=232959`
where changes need to be made.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813795</commentid>
    <comment_count>26</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-11-10 14:19:53 -0800</bug_when>
    <thetext>Will cq+ once EWS is done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814099</commentid>
    <comment_count>27</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-11-11 10:26:03 -0800</bug_when>
    <thetext>Traceback (most recent call last):
  File &quot;/Volumes/Data/worker/Commit-Queue/build/Tools/Scripts/webkitpy/common/checkout/changelog.py&quot;, line 348, in parse_entries_from_file
    raise StopIteration
StopIteration

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File &quot;Tools/Scripts/webkit-patch&quot;, line 80, in &lt;module&gt;
    main()
  File &quot;Tools/Scripts/webkit-patch&quot;, line 75, in main
    WebKitPatch(os.path.abspath(__file__)).main()
  File &quot;/Volumes/Data/worker/Commit-Queue/build/Tools/Scripts/webkitpy/tool/multicommandtool.py&quot;, line 305, in main
    result = command.check_arguments_and_execute(options, args, self)
  File &quot;/Volumes/Data/worker/Commit-Queue/build/Tools/Scripts/webkitpy/tool/multicommandtool.py&quot;, line 123, in check_arguments_and_execute
    return self.execute(options, args, tool) or 0
  File &quot;/Volumes/Data/worker/Commit-Queue/build/Tools/Scripts/webkitpy/tool/commands/abstractsequencedcommand.py&quot;, line 55, in execute
    self._sequence.run_and_handle_errors(tool, options, state)
  File &quot;/Volumes/Data/worker/Commit-Queue/build/Tools/Scripts/webkitpy/tool/commands/stepsequence.py&quot;, line 73, in run_and_handle_errors
    self._run(tool, options, state)
  File &quot;/Volumes/Data/worker/Commit-Queue/build/Tools/Scripts/webkitpy/tool/commands/stepsequence.py&quot;, line 67, in _run
    step(tool, options).run(state)
  File &quot;/Volumes/Data/worker/Commit-Queue/build/Tools/Scripts/webkitpy/tool/steps/validatereviewer.py&quot;, line 52, in run
    changelog_entry = ChangeLog(changelog_path).latest_entry()
  File &quot;/Volumes/Data/worker/Commit-Queue/build/Tools/Scripts/webkitpy/common/checkout/changelog.py&quot;, line 377, in latest_entry
    return self.parse_latest_entry_from_file(changelog_file)
  File &quot;/Volumes/Data/worker/Commit-Queue/build/Tools/Scripts/webkitpy/common/checkout/changelog.py&quot;, line 323, in parse_latest_entry_from_file
    return next(cls.parse_entries_from_file(changelog_file))
RuntimeError: generator raised StopIteration</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814115</commentid>
    <comment_count>28</comment_count>
      <attachid>443974</attachid>
    <who name="">rginsberg</who>
    <bug_when>2021-11-11 10:49:05 -0800</bug_when>
    <thetext>Created attachment 443974
Patch

The changelog was not up to date, which I believe caused the commit bot to fail. Should be all good now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814140</commentid>
    <comment_count>29</comment_count>
      <attachid>443974</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-11-11 11:27:54 -0800</bug_when>
    <thetext>Comment on attachment 443974
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814155</commentid>
    <comment_count>30</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-11-11 12:14:58 -0800</bug_when>
    <thetext>Committed r285645 (244146@main): &lt;https://commits.webkit.org/244146@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 443974.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>441423</attachid>
            <date>2021-10-15 13:50:46 -0700</date>
            <delta_ts>2021-10-18 12:43:46 -0700</delta_ts>
            <desc>Patch for review</desc>
            <filename>rdar_82738657</filename>
            <type>text/plain</type>
            <size>15053</size>
            <attacher>rginsberg</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzMzdhZTAwNjllZDcuLjVhMzIxOWFlZDk2ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDMzIEBACisyMDIxLTEwLTE1ICBSYWNoZWwgR2luc2JlcmcgIDxyZ2luc2JlcmdAYXBw
bGUuY29tPgorCisgICAgICAgIHJkYXI6Ly84NDMxMTMwNiAoQWRkIHN1cHBvcnQgaW4gV2ViQ29y
ZSBmb3Igd2ViIGFwcCBtYW5pZmVzdCBpY29ucykKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTMzOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzIGFyZSBhZGRlZCB0byBPcGVuU291cmNlL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2UuY3Bw
CisKKyAgICAgICAgKiBNb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5p
ZmVzdC5oOgorICAgICAgICBBIG5ldyBlbnVtIGZvciB0aGUgaWNvbiBwdXJwb3NlIHdhcyBhZGRl
ZCB0byB0aGUgQXBwbGljYXRpb25NYW5pZmVzdCBzdHJ1Y3QuCisgICAgICAgIEEgbmV3IEFwcGxp
Y2F0aW9uTWFuaWZlc3RJY29uIHN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlIGZvciB0aGUgc3Jj
LCBzaXplcywKKyAgICAgICAgdHlwZSwgYW5kIHB1cnBvc2UgYXR0cmlidXRlcyBmb3IgYXBwIG1h
bmlmZXN0IGljb25zIHdhcyBhZGRlZCB0byB0aGUgQXBwbGljYXRpb25NYW5pZmVzdAorICAgICAg
ICBzdHJ1Y3QuIEEgdmVjdG9yIG9mIEFwcGxpY2F0aW9uTWFuaWZlc3RJY29uJ3MgaXMgYWRkZWQg
YXMgYSB2YXJpYWJsZSBmb3IKKyAgICAgICAgdGhlIEFwcGxpY2F0aW9uTWFuaWZlc3Qgc3RydWN0
LiAKKyAgICAgICAgCisgICAgICAgICogTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxp
Y2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25N
YW5pZmVzdFBhcnNlcjo6cGFyc2VNYW5pZmVzdCk6CisgICAgICAgIEFkZGVkIGNhbGwgdG8gcGFy
c2VJY29ucworICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFy
c2VJY29ucyk6CisgICAgICAgIHBhcnNlSWNvbnMgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgbGlzdCBv
ZiBpY29ucywgcGVyZm9ybXMgY2hlY2tzIGZvciBhdHRyaWJ1dGUsCisgICAgICAgIGFuZCB0aGVu
LCBpZiB2YWxpZCwgYWRkcyB0aGUgYXR0cmlidXRlIHRvIGFuIEFwcGxpY2F0aW9uTWFuaWZlc3RJ
Y29uIHN0cnVjdAorICAgICAgICB0aGF0IGlzIGFwcGVuZGVkIHRvIGEgbmV3IFZlY3RvciBvZiBB
cHBsaWNhdGlvbk1hbmlmZXN0SWNvbnMuICAgICAgICAKKworICAgICAgICAoV2ViQ29yZTo6QXBw
bGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2VHZW5lcmljU3RyaW5nSW5JY29uKToKKyAgICAg
ICAgVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIHBhcnNlR2VuZXJpY1N0cmluZywgd2l0aCBh
IHNsaWdodGx5IGRpZmZlcmVudCBwYXJhbWV0ZXIuCisKKyAgICAgICAgKiBNb2R1bGVzL2FwcGxp
Y2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5oOgorICAgICAgICBEZWNs
YXJlIGZ1bmN0aW9ucyBmb3IgQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcgorCiAyMDIxLTA5LTIw
ICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkIGJ1aWxkIGZpeCBmb3IgV2luQ2Fpcm8gd2l0aCBFTkFCTEVfRVhQRVJJTUVOVEFMX0ZF
QVRVUkVTIG9mZi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRp
b25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdC5oCmluZGV4IGZhNTQxYjJi
MzJiYS4uNWFiYTAzYjJiZmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Fw
cGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0LmgKQEAg
LTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgPHd0Zi9FbnVtVHJh
aXRzLmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MSw2ICs0MiwxOSBAQCBzdHJ1Y3QgQXBwbGljYXRp
b25NYW5pZmVzdCB7CiAgICAgICAgIEZ1bGxzY3JlZW4sCiAgICAgfTsKIAorICAgIGVudW0gY2xh
c3MgUHVycG9zZSB7CisgICAgICAgIE1vbm9jaHJvbWUsCisgICAgICAgIE1hc2thYmxlLAorICAg
ICAgICBBbnksCisgICAgfTsKKyAgICAKKyAgICBzdHJ1Y3QgQXBwbGljYXRpb25NYW5pZmVzdElj
b24geworICAgICAgICBVUkwgc3JjOworICAgICAgICBTdHJpbmcgc2l6ZXM7CisgICAgICAgIFN0
cmluZyB0eXBlOworICAgICAgICBQdXJwb3NlIHB1cnBvc2U7CisgICAgfTsKKyAgICAKICAgICBT
dHJpbmcgbmFtZTsKICAgICBTdHJpbmcgc2hvcnROYW1lOwogICAgIFN0cmluZyBkZXNjcmlwdGlv
bjsKQEAgLTQ4LDYgKzYyLDcgQEAgc3RydWN0IEFwcGxpY2F0aW9uTWFuaWZlc3QgewogICAgIERp
c3BsYXkgZGlzcGxheTsKICAgICBVUkwgc3RhcnRVUkw7CiAgICAgQ29sb3IgdGhlbWVDb2xvcjsK
KyAgICBWZWN0b3I8QXBwbGljYXRpb25NYW5pZmVzdEljb24+IGljb25zOwogCiAgICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEFwcGxpY2F0aW9uTWFuaWZl
c3Q+IGRlY29kZShEZWNvZGVyJik7CkBAIC05Niw2ICsxMTEsMTUgQEAgdGVtcGxhdGU8PiBzdHJ1
Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpEaXNwbGF5PiB7CiAg
ICAgPjsKIH07CiAKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6QXBwbGlj
YXRpb25NYW5pZmVzdDo6UHVycG9zZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8
CisgICAgICAgIFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q6OlB1cnBvc2UsCisgICAgICAg
IFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q6OlB1cnBvc2U6Ok1vbm9jaHJvbWUsCisgICAg
ICAgIFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q6OlB1cnBvc2U6Ok1hc2thYmxlLAorICAg
ICAgICBXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpQdXJwb3NlOjpBbnkKKyAgICA+Owor
fTsKKwogfSAvLyBuYW1lc3BhY2UgV1RGOwogCiAjZW5kaWYgLy8gRU5BQkxFKEFQUExJQ0FUSU9O
X01BTklGRVNUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlv
bm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3Bw
CmluZGV4IDRjYjBkZjc3MGNkOC4uOWJmYzcxMDgzNDRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0Fw
cGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwCkBAIC03OCw2ICs3OCw3IEBAIEFwcGxpY2F0aW9u
TWFuaWZlc3QgQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2VNYW5pZmVzdChjb25zdCBT
dHJpbmcmIHRleHQsCiAgICAgcGFyc2VkTWFuaWZlc3Quc2hvcnROYW1lID0gcGFyc2VTaG9ydE5h
bWUoKm1hbmlmZXN0KTsKICAgICBwYXJzZWRNYW5pZmVzdC5zY29wZSA9IHBhcnNlU2NvcGUoKm1h
bmlmZXN0LCBkb2N1bWVudFVSTCwgcGFyc2VkTWFuaWZlc3Quc3RhcnRVUkwpOwogICAgIHBhcnNl
ZE1hbmlmZXN0LnRoZW1lQ29sb3IgPSBwYXJzZUNvbG9yKCptYW5pZmVzdCwgInRoZW1lX2NvbG9y
Il9zKTsKKyAgICBwYXJzZWRNYW5pZmVzdC5pY29ucyA9IHBhcnNlSWNvbnMoKm1hbmlmZXN0LCBk
b2N1bWVudFVSTCk7CiAKICAgICBpZiAobV9kb2N1bWVudCkKICAgICAgICAgbV9kb2N1bWVudC0+
cHJvY2Vzc0FwcGxpY2F0aW9uTWFuaWZlc3QocGFyc2VkTWFuaWZlc3QpOwpAQCAtOTUsNiArOTYs
MTEgQEAgdm9pZCBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpsb2dNYW5pZmVzdFByb3BlcnR5
SW52YWxpZFVSTChjb25zdCBTdHJpbmcmIHByb3AKICAgICBsb2dEZXZlbG9wZXJXYXJuaW5nKG1h
a2VTdHJpbmcoIlRoZSB2YWx1ZSBvZiBcIiJfcywgcHJvcGVydHlOYW1lLCAiXCIgaXMgbm90IGEg
dmFsaWQgVVJMLiJfcykpOwogfQogCit2b2lkIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6Omxv
Z01hbmlmZXN0UHJvcGVydHlJbnZhbGlkSWNvbnNMaXN0KGNvbnN0IFN0cmluZyYgcHJvcGVydHlO
YW1lKQoreworICAgIGxvZ0RldmVsb3Blcldhcm5pbmcobWFrZVN0cmluZygiVGhlIHZhbHVlIG9m
IFwiIl9zLCBwcm9wZXJ0eU5hbWUsICJcIiBpcyBub3QgYSB2YWxpZCBVUkwuIl9zKSk7Cit9CisK
IHZvaWQgQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6bG9nRGV2ZWxvcGVyV2FybmluZyhjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgaWYgKG1fZG9jdW1lbnQpCkBAIC0xNzQsNiArMTgw
LDgyIEBAIFN0cmluZyBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpwYXJzZVNob3J0TmFtZShj
b25zdCBKU09OOjpPYmplY3QmIG1hbmlmZXN0KQogICAgIHJldHVybiBwYXJzZUdlbmVyaWNTdHJp
bmcobWFuaWZlc3QsICJzaG9ydF9uYW1lIl9zKTsKIH0KIAorVmVjdG9yPEFwcGxpY2F0aW9uTWFu
aWZlc3Q6OkFwcGxpY2F0aW9uTWFuaWZlc3RJY29uPiBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2Vy
OjpwYXJzZUljb25zKGNvbnN0IEpTT046Ok9iamVjdCYgbWFuaWZlc3QsIGNvbnN0IFVSTCYgZG9j
dW1lbnRVUkwpCit7CisgICAgYXV0byB2YWx1ZSA9IG1hbmlmZXN0LmdldFZhbHVlKCJpY29ucyIp
OworICAgIAorICAgIFZlY3RvcjxBcHBsaWNhdGlvbk1hbmlmZXN0OjpBcHBsaWNhdGlvbk1hbmlm
ZXN0SWNvbj4gaW1hZ2VSZXNvdXJjZXM7CisgICAgCisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAg
cmV0dXJuIGltYWdlUmVzb3VyY2VzOworICAgIGF1dG8gYXJyYXlWYWx1ZSA9IHZhbHVlLT5hc0Fy
cmF5KCk7CisgICAgCisgICAgaWYgKCFhcnJheVZhbHVlKSB7CisgICAgICAgIGxvZ0RldmVsb3Bl
cldhcm5pbmcobWFrZVN0cmluZygiVGhlIHZhbHVlIG9mIGljb25zIGlzIG5vdCBhIHZhbGlkIGxp
c3QuIl9zKSk7CisgICAgICAgIHJldHVybiBpbWFnZVJlc291cmNlczsKKyAgICB9CisgICAgICAg
IAorICAgIGZvciAoYXV0byYgaWNvblZhbHVlIDogKmFycmF5VmFsdWUpIHsKKyAgICAgICAgQXBw
bGljYXRpb25NYW5pZmVzdDo6QXBwbGljYXRpb25NYW5pZmVzdEljb24gY3VycmVudEljb247Cisg
ICAgICAgIGF1dG8gb2JqZWN0VmFsdWUgPSBpY29uVmFsdWUtPmFzT2JqZWN0KCk7CisgICAgICAg
IAorICAgICAgICBhdXRvIHNyY1ZhbHVlID0gb2JqZWN0VmFsdWUtPmdldFZhbHVlKCJzcmMiX3Mp
OworICAgICAgICBpZiAoIXNyY1ZhbHVlKQorICAgICAgICAgICAgY3VycmVudEljb24uc3JjID0g
eyB9OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8gc3JjU3RyaW5nVmFsdWUgPSBz
cmNWYWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgICAgIGlmICghc3JjU3RyaW5nVmFsdWUpIHsK
KyAgICAgICAgICAgICAgICBsb2dNYW5pZmVzdFByb3BlcnR5Tm90QVN0cmluZygic3JjIl9zKTsK
KyAgICAgICAgICAgICAgICBjdXJyZW50SWNvbi5zcmMgPSB7IH07CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIFVSTCBzcmNVUkwobV9tYW5pZmVzdFVSTCwgc3JjU3RyaW5n
VmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChzcmNVUkwuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgICAgICAgICBjdXJyZW50SWNvbi5zcmMgPSB7IH07CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoIXNyY1VSTC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudEljb24u
c3JjID0geyB9OworICAgICAgICAgICAgICAgICAgICBsb2dNYW5pZmVzdFByb3BlcnR5SW52YWxp
ZFVSTCgic2NvcGUiX3MpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXByb3RvY29sSG9z
dEFuZFBvcnRBcmVFcXVhbChzcmNVUkwsIGRvY3VtZW50VVJMKSkgeworICAgICAgICAgICAgICAg
ICAgICBhdXRvIHNyY1VSTE9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUoc3JjVVJMKTsK
KyAgICAgICAgICAgICAgICAgICAgYXV0byBkb2N1bWVudE9yaWdpbiA9IFNlY3VyaXR5T3JpZ2lu
OjpjcmVhdGUoZG9jdW1lbnRVUkwpOworICAgICAgICAgICAgICAgICAgICBsb2dEZXZlbG9wZXJX
YXJuaW5nKG1ha2VTdHJpbmcoIlRoZSBpY29uJ3Mgc3JjIHVybCBvcmlnaW4gb2YgXCIiX3MsIHNy
Y1VSTE9yaWdpbi0+dG9TdHJpbmcoKSwgIlwiIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBkb2N1bWVu
dCdzIG9yaWdpbiBvZiBcIiJfcywgZG9jdW1lbnRPcmlnaW4tPnRvU3RyaW5nKCksICJcIi4iX3Mp
KTsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudEljb24uc3JjID0geyB9OworICAgICAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50SWNvbi5zcmMgPSBzcmNV
Ukw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjdXJyZW50SWNvbi5zaXpl
cyA9IHBhcnNlR2VuZXJpY1N0cmluZ0luSWNvbihvYmplY3RWYWx1ZSwgInNpemVzIl9zKTsKKyAg
ICAgICAgCisgICAgICAgIGN1cnJlbnRJY29uLnR5cGUgPSBwYXJzZUdlbmVyaWNTdHJpbmdJbklj
b24ob2JqZWN0VmFsdWUsICJ0eXBlIl9zKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gcHVycG9z
ZVZhbHVlID0gb2JqZWN0VmFsdWUtPmdldFZhbHVlKCJwdXJwb3NlIl9zKTsKKyAgICAgICAgaWYg
KCFwdXJwb3NlVmFsdWUpCisgICAgICAgICAgICBjdXJyZW50SWNvbi5wdXJwb3NlID0gQXBwbGlj
YXRpb25NYW5pZmVzdDo6UHVycG9zZTo6QW55OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IGF1dG8gcHVycG9zZVN0cmluZ1ZhbHVlID0gcHVycG9zZVZhbHVlLT5hc1N0cmluZygpOworICAg
ICAgICAgICAgaWYgKCFwdXJwb3NlU3RyaW5nVmFsdWUpIHsKKyAgICAgICAgICAgICAgICBsb2dN
YW5pZmVzdFByb3BlcnR5Tm90QVN0cmluZygicHVycG9zZSJfcyk7CisgICAgICAgICAgICAgICAg
Y3VycmVudEljb24ucHVycG9zZSA9IEFwcGxpY2F0aW9uTWFuaWZlc3Q6OlB1cnBvc2U6OkFueTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHVycG9zZVN0cmluZ1ZhbHVl
ID0gcHVycG9zZVN0cmluZ1ZhbHVlLnN0cmlwV2hpdGVTcGFjZSgpLmNvbnZlcnRUb0FTQ0lJTG93
ZXJjYXNlKCk7CisgICAgICAgICAgICAgICAgaWYgKHB1cnBvc2VTdHJpbmdWYWx1ZSA9PSAibW9u
b2Nocm9tZSIpCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRJY29uLnB1cnBvc2UgPSBBcHBs
aWNhdGlvbk1hbmlmZXN0OjpQdXJwb3NlOjpNb25vY2hyb21lOworICAgICAgICAgICAgICAgIGVs
c2UgaWYgKHB1cnBvc2VTdHJpbmdWYWx1ZSA9PSAibWFza2FibGUiKQorICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50SWNvbi5wdXJwb3NlID0gQXBwbGljYXRpb25NYW5pZmVzdDo6UHVycG9zZTo6
TWFza2FibGU7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAocHVycG9zZVN0cmluZ1ZhbHVlID09
ICJhbnkiKQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50SWNvbi5wdXJwb3NlID0gQXBwbGlj
YXRpb25NYW5pZmVzdDo6UHVycG9zZTo6QW55OworICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBsb2dEZXZlbG9wZXJXYXJuaW5nKG1ha2VTdHJpbmcoIlwiIl9zLCBw
dXJwb3NlU3RyaW5nVmFsdWUsICJcIiBpcyBub3QgYSB2YWxpZCBwdXJwb3NlLiJfcykpOworICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50SWNvbi5wdXJwb3NlID0gQXBwbGljYXRpb25NYW5pZmVz
dDo6UHVycG9zZTo6QW55OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBpbWFnZVJlc291cmNlcy5hcHBlbmQoY3VycmVudEljb24pOworICAgIH0K
KyAgICAKKyAgICByZXR1cm4gaW1hZ2VSZXNvdXJjZXM7Cit9CisKIHN0YXRpYyBib29sIGlzSW5T
Y29wZShjb25zdCBVUkwmIHNjb3BlVVJMLCBjb25zdCBVUkwmIHRhcmdldFVSTCkKIHsKICAgICAv
LyAxLiBJZiBzY29wZVVSTCBpcyB1bmRlZmluZWQgKGkuZS4sIGl0IGlzIHVuYm91bmRlZCBiZWNh
dXNlIG9mIGFuIGVycm9yIG9yIGl0IHdhcyBub3QgZGVjbGFyZWQgaW4gdGhlIG1hbmlmZXN0KSwg
cmV0dXJuIHRydWUuCkBAIC0yNTYsNiArMzM4LDIxIEBAIFN0cmluZyBBcHBsaWNhdGlvbk1hbmlm
ZXN0UGFyc2VyOjpwYXJzZUdlbmVyaWNTdHJpbmcoY29uc3QgSlNPTjo6T2JqZWN0JiBtYW5pZmVz
CiAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlLnN0cmlwV2hpdGVTcGFjZSgpOwogfQogCitTdHJpbmcg
QXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2VHZW5lcmljU3RyaW5nSW5JY29uKFJlZlB0
cjxXVEY6OkpTT05JbXBsOjpPYmplY3Q+ICZtYW5pZmVzdCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0
eU5hbWUpCit7CisgICAgYXV0byB2YWx1ZSA9IG1hbmlmZXN0LT5nZXRWYWx1ZShwcm9wZXJ0eU5h
bWUpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIHN0
cmluZ1ZhbHVlID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgaWYgKCFzdHJpbmdWYWx1ZSkgewor
ICAgICAgICBsb2dNYW5pZmVzdFByb3BlcnR5Tm90QVN0cmluZyhwcm9wZXJ0eU5hbWUpOworICAg
ICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiBzdHJpbmdWYWx1ZS5zdHJpcFdo
aXRlU3BhY2UoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5B
QkxFKEFQUExJQ0FUSU9OX01BTklGRVNUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlm
ZXN0UGFyc2VyLmgKaW5kZXggM2Y5NjJkYmE4MjIxLi5kY2M1NjNjYTMzMzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1h
bmlmZXN0UGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1h
bmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuaApAQCAtNTAsMTIgKzUwLDE1IEBAIHBy
aXZhdGU6CiAgICAgU3RyaW5nIHBhcnNlRGVzY3JpcHRpb24oY29uc3QgSlNPTjo6T2JqZWN0Jik7
CiAgICAgU3RyaW5nIHBhcnNlU2hvcnROYW1lKGNvbnN0IEpTT046Ok9iamVjdCYpOwogICAgIFVS
TCBwYXJzZVNjb3BlKGNvbnN0IEpTT046Ok9iamVjdCYsIGNvbnN0IFVSTCYsIGNvbnN0IFVSTCYp
OworICAgIFZlY3RvcjxBcHBsaWNhdGlvbk1hbmlmZXN0OjpBcHBsaWNhdGlvbk1hbmlmZXN0SWNv
bj4gcGFyc2VJY29ucyhjb25zdCBKU09OOjpPYmplY3QmLCBjb25zdCBVUkwmKTsKIAogICAgIENv
bG9yIHBhcnNlQ29sb3IoY29uc3QgSlNPTjo6T2JqZWN0JiwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0
eU5hbWUpOwogICAgIFN0cmluZyBwYXJzZUdlbmVyaWNTdHJpbmcoY29uc3QgSlNPTjo6T2JqZWN0
JiwgY29uc3QgU3RyaW5nJik7CisgICAgU3RyaW5nIHBhcnNlR2VuZXJpY1N0cmluZ0luSWNvbihS
ZWZQdHI8V1RGOjpKU09OSW1wbDo6T2JqZWN0PiAmLCBjb25zdCBTdHJpbmcmKTsKIAogICAgIHZv
aWQgbG9nTWFuaWZlc3RQcm9wZXJ0eU5vdEFTdHJpbmcoY29uc3QgU3RyaW5nJik7CiAgICAgdm9p
ZCBsb2dNYW5pZmVzdFByb3BlcnR5SW52YWxpZFVSTChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lk
IGxvZ01hbmlmZXN0UHJvcGVydHlJbnZhbGlkSWNvbnNMaXN0KGNvbnN0IFN0cmluZyYpOwogICAg
IHZvaWQgbG9nRGV2ZWxvcGVyV2FybmluZyhjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwogCiAgICAg
UmVmUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9n
IGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDY3NWY2Y2RmMzVhNi4uMDc4OGY5Y2ZiMTkzIDEwMDY0
NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjUgQEAKKzIwMjEtMTAtMTUgIFJhY2hlbCBHaW5zYmVyZyAgPHJnaW5zYmVyZ0BhcHBsZS5jb20+
CisKKyAgICAgICAgQWRkIHN1cHBvcnQgaW4gV2ViQ29yZSBmb3Igd2ViIGFwcCBtYW5pZmVzdCBp
Y29ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMx
MzM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHA6
CisgICAgICAgIChBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyVGVzdDo6cGFyc2VJY29uRmlyc3RU
b3BMZXZlbFByb3BlcnR5KToKKyAgICAgICAgRnVuY3Rpb24gdG8gY3JlYXRlIEpTT04gZm9yIGlj
b24gYXR0cmlidXRlcy4gVGhpcyBpcyAKKyAgICAgICAgbmVjZXNzYXJ5IGJlY2F1c2UgaWNvbnMg
YXJlIGluIGEgbGlzdCwgd2hlcmFzIGFsbCBvdGhlcgorICAgICAgICBhdHRyaWJ1dGVzIGluIGFw
cCBtYW5pZmVzdCBhcmUgbm90LgorCisgICAgICAgIChBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2Vy
VGVzdDo6dGVzdEljb25zU3JjKToKKyAgICAgICAgKEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXJU
ZXN0Ojp0ZXN0SWNvbnNUeXBlKToKKyAgICAgICAgKEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXJU
ZXN0Ojp0ZXN0SWNvbnNTaXplcyk6CisgICAgICAgIChBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2Vy
VGVzdDo6dGVzdEljb25zUHVycG9zZSk6CisgICAgICAgIEZ1bmN0aW9ucyBmb3IgZWFjaCBvZiB0
aGUgaWNvbiBhdHRyaWJ1dGVzLgorCisgICAgICAgIChURVNUX0YpOgorICAgICAgICBDYWxscyB0
aGUgdmFyaW91cyBpY29uIHRlc3QgZnVuY3Rpb25zIHdpdGggZGlmZmVyZW50IGlucHV0CisKIDIw
MjEtMDktMjAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZWR1
Y2UgdXNlIG9mIG1ha2VSZWZQdHIoKSBhbmQgdXNlIFJlZlB0ciB7IH0gZGlyZWN0bHkKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9BcHBsaWNhdGlvbk1hbmlm
ZXN0UGFyc2VyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9BcHBsaWNh
dGlvbk1hbmlmZXN0UGFyc2VyLmNwcAppbmRleCBjMzk5NjU0NDY1MjAuLmViMWFkZWQ5NTFjZiAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0FwcGxpY2F0aW9u
TWFuaWZlc3RQYXJzZXIuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcApAQCAtNzMsNiArNzMsMTIgQEAgcHVibGlj
OgogICAgICAgICBTdHJpbmcgbWFuaWZlc3RDb250ZW50ID0gInsgXCIiICsga2V5ICsgIlwiIDog
IiArIHZhbHVlICsgIiB9IjsKICAgICAgICAgcmV0dXJuIHBhcnNlU3RyaW5nKG1hbmlmZXN0Q29u
dGVudCk7CiAgICAgfQorICAgIAorICAgIEFwcGxpY2F0aW9uTWFuaWZlc3QgcGFyc2VJY29uRmly
c3RUb3BMZXZlbFByb3BlcnR5KGNvbnN0IFN0cmluZyAmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIFN0cmluZyBtYW5pZmVzdENvbnRlbnQgPSAieyBcImljb25zXCI6
IFt7XCIiICsga2V5ICsgIlwiOiAiICsgdmFsdWUgKyAiIH1dfSI7CisgICAgICAgIHJldHVybiBw
YXJzZVN0cmluZyhtYW5pZmVzdENvbnRlbnQpOworICAgIH0KIAogICAgIHZvaWQgdGVzdFN0YXJ0
VVJMKGNvbnN0IFN0cmluZyYgcmF3SlNPTiwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZhbHVlKQog
ICAgIHsKQEAgLTEzNCw2ICsxNDAsMzQgQEAgcHVibGljOgogICAgICAgICBFWFBFQ1RfRVEoZXhw
ZWN0ZWRWYWx1ZSwgdmFsdWUpOwogICAgIH0KIAorICAgIHZvaWQgdGVzdEljb25zU3JjKGNvbnN0
IFN0cmluZyYgcmF3SlNPTiwgY29uc3QgVVJMJiBleHBlY3RlZFZhbHVlKQorICAgIHsKKyAgICAg
ICAgYXV0byBtYW5pZmVzdCA9IHBhcnNlSWNvbkZpcnN0VG9wTGV2ZWxQcm9wZXJ0eSgic3JjIiwg
cmF3SlNPTik7CisgICAgICAgIGF1dG8gdmFsdWUgPSBtYW5pZmVzdC5pY29uc1swXS5zcmM7Cisg
ICAgICAgIEVYUEVDVF9TVFJFUShleHBlY3RlZFZhbHVlLnN0cmluZygpLnV0ZjgoKS5kYXRhKCks
IHZhbHVlLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworICAgIHZvaWQgdGVzdElj
b25zVHlwZShjb25zdCBTdHJpbmcgJnJhd0pTT04sIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWYWx1
ZSkKKyAgICB7CisgICAgICAgIGF1dG8gbWFuaWZlc3QgPSBwYXJzZUljb25GaXJzdFRvcExldmVs
UHJvcGVydHkoInR5cGUiLCByYXdKU09OKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IG1hbmlmZXN0
Lmljb25zWzBdLnR5cGU7CisgICAgICAgIEVYUEVDVF9TVFJFUShleHBlY3RlZFZhbHVlLnV0Zjgo
KS5kYXRhKCksIHZhbHVlLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworICAgIHZvaWQgdGVzdElj
b25zU2l6ZXMoY29uc3QgU3RyaW5nICZyYXdKU09OLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmFs
dWUpCisgICAgeworICAgICAgICBhdXRvIG1hbmlmZXN0ID0gcGFyc2VJY29uRmlyc3RUb3BMZXZl
bFByb3BlcnR5KCJzaXplcyIsIHJhd0pTT04pOworICAgICAgICBhdXRvIHZhbHVlID0gbWFuaWZl
c3QuaWNvbnNbMF0uc2l6ZXM7CisgICAgICAgIEVYUEVDVF9TVFJFUShleHBlY3RlZFZhbHVlLnV0
ZjgoKS5kYXRhKCksIHZhbHVlLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworICAgIHZvaWQgdGVz
dEljb25zUHVycG9zZShjb25zdCBTdHJpbmcgJnJhd0pTT04sIEFwcGxpY2F0aW9uTWFuaWZlc3Q6
OlB1cnBvc2UgZXhwZWN0ZWRWYWx1ZSkKKyAgICB7CisgICAgICAgIGF1dG8gbWFuaWZlc3QgPSBw
YXJzZUljb25GaXJzdFRvcExldmVsUHJvcGVydHkoInB1cnBvc2UiLCByYXdKU09OKTsKKyAgICAg
ICAgYXV0byB2YWx1ZSA9IG1hbmlmZXN0Lmljb25zWzBdLnB1cnBvc2U7CisgICAgICAgIEVYUEVD
VF9FUShleHBlY3RlZFZhbHVlLCB2YWx1ZSk7CisgICAgfQorCiB9OwogCiBzdGF0aWMgdm9pZCBh
c3NlcnRNYW5pZmVzdEhhc0RlZmF1bHRWYWx1ZXMoY29uc3QgVVJMJiBtYW5pZmVzdFVSTCwgY29u
c3QgVVJMJiBkb2N1bWVudFVSTCwgY29uc3QgQXBwbGljYXRpb25NYW5pZmVzdCYgbWFuaWZlc3Qp
CkBAIC0zMjMsNCArMzU3LDI2IEBAIFRFU1RfRihBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyVGVz
dCwgV2hpdGVzcGFjZSkKICAgICBFWFBFQ1RfU1RSRVEoIlBBU1MiLCBtYW5pZmVzdC5uYW1lLnV0
ZjgoKS5kYXRhKCkpOwogfQogCitURVNUX0YoQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlclRlc3Qs
IEljb25zKQoreworICAgIFVSTCBzcmNVUkwgPSB7IHsgfSwgImh0dHBzOi8vZXhhbXBsZS5jb20v
aWNvbi5qcGciIH07CisgICAgdGVzdEljb25zU3JjKCJcImljb24uanBnXCIiLCBzcmNVUkwpOwor
ICAgIHRlc3RJY29uc1R5cGUoIlwiaW1hZ2Uvd2VicFwiIiwgImltYWdlL3dlYnAiKTsKKyAgICB0
ZXN0SWNvbnNTaXplcygiXCIyNTZ4MjU2XCIiLCAiMjU2eDI1NiIpOworCisgICAgdGVzdEljb25z
UHVycG9zZSgiXCJtb25vY2hyb21lXCIiLCBBcHBsaWNhdGlvbk1hbmlmZXN0OjpQdXJwb3NlOjpN
b25vY2hyb21lKTsKKyAgICB0ZXN0SWNvbnNQdXJwb3NlKCJcIm1hc2thYmxlXCIiLCBBcHBsaWNh
dGlvbk1hbmlmZXN0OjpQdXJwb3NlOjpNYXNrYWJsZSk7CisgICAgdGVzdEljb25zUHVycG9zZSgi
XCJhbnlcIiIsIEFwcGxpY2F0aW9uTWFuaWZlc3Q6OlB1cnBvc2U6OkFueSk7CisgICAgdGVzdElj
b25zUHVycG9zZSgiXCIxMjNcIiIsIEFwcGxpY2F0aW9uTWFuaWZlc3Q6OlB1cnBvc2U6OkFueSk7
CisgICAgdGVzdEljb25zUHVycG9zZSgiXCJcdE1PTk9DSFJPTUVcIiIsIEFwcGxpY2F0aW9uTWFu
aWZlc3Q6OlB1cnBvc2U6Ok1vbm9jaHJvbWUpOworCisgICAgdGVzdEljb25zUHVycG9zZSgiMTIz
IiwgQXBwbGljYXRpb25NYW5pZmVzdDo6UHVycG9zZTo6QW55KTsKKyAgICB0ZXN0SWNvbnNQdXJw
b3NlKCJudWxsIiwgQXBwbGljYXRpb25NYW5pZmVzdDo6UHVycG9zZTo6QW55KTsKKyAgICB0ZXN0
SWNvbnNQdXJwb3NlKCJ0cnVlIiwgQXBwbGljYXRpb25NYW5pZmVzdDo6UHVycG9zZTo6QW55KTsK
KyAgICB0ZXN0SWNvbnNQdXJwb3NlKCJ7IH0iLCBBcHBsaWNhdGlvbk1hbmlmZXN0OjpQdXJwb3Nl
OjpBbnkpOworICAgIHRlc3RJY29uc1B1cnBvc2UoIlsgXSIsIEFwcGxpY2F0aW9uTWFuaWZlc3Q6
OlB1cnBvc2U6OkFueSk7CisgICAgdGVzdEljb25zUHVycG9zZSgiXCJcIiIsIEFwcGxpY2F0aW9u
TWFuaWZlc3Q6OlB1cnBvc2U6OkFueSk7CisgICAgdGVzdEljb25zUHVycG9zZSgiXCJnYXJiYWdl
IHN0cmluZyBcIiIsIEFwcGxpY2F0aW9uTWFuaWZlc3Q6OlB1cnBvc2U6OkFueSk7Cit9CisKICNl
bmRpZgo=
</data>
<flag name="commit-queue"
          id="465682"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>441632</attachid>
            <date>2021-10-18 12:43:46 -0700</date>
            <delta_ts>2021-10-20 11:32:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>file_231339.txt</filename>
            <type>text/plain</type>
            <size>18992</size>
            <attacher>rginsberg</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZw0KaW5kZXggMzM3YWUwMDY5ZWQ3Li42NmJhMzcyMjNkNjUgMTAwNjQ0DQotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cNCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZw0K
QEAgLTEsMyArMSw0MCBAQA0KKzIwMjEtMTAtMTUgIFJhY2hlbCBHaW5zYmVyZyAgPHJnaW5zYmVy
Z0BhcHBsZS5jb20+DQorDQorICAgICAgICBBZGQgc3VwcG9ydCBpbiBXZWJDb3JlIGZvciB3ZWIg
YXBwIG1hbmlmZXN0IGljb25zDQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjMxMzM5DQorICAgICAgICByZGFyOi8vODQzMTEzMDYNCisNCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLg0KKw0KKyAgICAgICAgVGVzdHMgYXJlIGFkZGVk
IHRvIE9wZW5Tb3VyY2UvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0FwcGxpY2F0
aW9uTWFuaWZlc3RQYXJzZS5jcHANCisNCisgICAgICAgICogTW9kdWxlcy9hcHBsaWNhdGlvbm1h
bmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3QuaDoNCisgICAgICAgIEEgbmV3IGVudW0gZm9yIHRo
ZSBpY29uIHB1cnBvc2UgKEljb25QdXJwb3NlKSB3YXMgYWRkZWQgdG8gdGhlIEFwcGxpY2F0aW9u
TWFuaWZlc3Qgc3RydWN0Lg0KKyAgICAgICAgQSBuZXcgSWNvbiBzdHJ1Y3QgY29udGFpbmluZyB2
YXJpYWJsZSBmb3IgdGhlIHNyYywgc2l6ZXMsDQorICAgICAgICB0eXBlLCBhbmQgSWNvblB1cnBv
c2UgYXR0cmlidXRlcyBmb3IgYXBwIG1hbmlmZXN0IGljb25zIHdhcyBhZGRlZCB0byB0aGUgQXBw
bGljYXRpb25NYW5pZmVzdA0KKyAgICAgICAgc3RydWN0LiBBIHZlY3RvciBvZiBJY29uJ3MgaXMg
YWRkZWQgYXMgYSB2YXJpYWJsZSBmb3INCisgICAgICAgIHRoZSBBcHBsaWNhdGlvbk1hbmlmZXN0
IHN0cnVjdC4NCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjplbmNvZGUg
Y29uc3QpOg0KKyAgICAgICAgQWRkZWQgaWNvbnMgdG8gZW5jb2RlIGZ1bmN0aW9uDQorICAgICAg
ICAoV2ViY29yZTo6QXBwbGljYXRpb25NYW5pZmVzdDo6ZGVjb2RlKToNCisgICAgICAgIEFkZGVk
IGljb25zIHRvIGRlY29kZSBmdW5jdGlvbg0KKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9u
TWFuaWZlc3Q6Okljb246OmVuY29kZSBjb25zdCk6DQorICAgICAgICBDcmVhdGUgZW5jb2RlIGZ1
bmN0aW9uIGZvciBBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uDQorICAgICAgICAoV2ViY29yZTo6
QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6ZGVjb2RlKToNCisgICAgICAgIENyZWF0ZSBkZWNv
ZGUgZnVuY3Rpb24gZm9yIEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb24NCisNCisNCisgICAgICAg
ICogTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIu
Y3BwOg0KKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNl
TWFuaWZlc3QpOg0KKyAgICAgICAgQWRkZWQgY2FsbCB0byBwYXJzZUljb25zDQorICAgICAgICAo
V2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2VJY29ucyk6DQorICAgICAg
ICBwYXJzZUljb25zIGl0ZXJhdGVzIHRocm91Z2ggdGhlIGxpc3Qgb2YgaWNvbnMsIHBlcmZvcm1z
IGNoZWNrcyBmb3IgYXR0cmlidXRlLA0KKyAgICAgICAgYW5kIHRoZW4sIGlmIHZhbGlkLCBhZGRz
IHRoZSBhdHRyaWJ1dGUgdG8gYW4gQXBwbGljYXRpb25NYW5pZmVzdEljb24gc3RydWN0DQorICAg
ICAgICB0aGF0IGlzIGFwcGVuZGVkIHRvIGEgbmV3IFZlY3RvciBvZiBBcHBsaWNhdGlvbk1hbmlm
ZXN0SWNvbnMuDQorDQorICAgICAgICAqIE1vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBs
aWNhdGlvbk1hbmlmZXN0UGFyc2VyLmg6DQorICAgICAgICBEZWNsYXJlIGZ1bmN0aW9ucyBmb3Ig
QXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcg0KKw0KIDIwMjEtMDktMjAgIFJvc3MgS2lyc2xpbmcg
IDxyb3NzLmtpcnNsaW5nQHNvbnkuY29tPg0KIA0KICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBm
aXggZm9yIFdpbkNhaXJvIHdpdGggRU5BQkxFX0VYUEVSSU1FTlRBTF9GRUFUVVJFUyBvZmYuDQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0Fw
cGxpY2F0aW9uTWFuaWZlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25t
YW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0LmgNCmluZGV4IGZhNTQxYjJiMzJiYS4uYjUyMGQ0
OTg1MDkyIDEwMDY0NA0KLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1h
bmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3QuaA0KKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3QuaA0KQEAgLTMwLDYgKzMw
LDcgQEANCiAjaW5jbHVkZSAiQ29sb3IuaCINCiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4N
CiAjaW5jbHVkZSA8d3RmL1VSTC5oPg0KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+DQogDQogbmFt
ZXNwYWNlIFdlYkNvcmUgew0KIA0KQEAgLTQxLDYgKzQyLDIxIEBAIHN0cnVjdCBBcHBsaWNhdGlv
bk1hbmlmZXN0IHsNCiAgICAgICAgIEZ1bGxzY3JlZW4sDQogICAgIH07DQogDQorICAgIGVudW0g
Y2xhc3MgSWNvblB1cnBvc2Ugew0KKyAgICAgICAgTW9ub2Nocm9tZSwNCisgICAgICAgIE1hc2th
YmxlLA0KKyAgICAgICAgQW55LA0KKyAgICB9Ow0KKw0KKyAgICBzdHJ1Y3QgSWNvbiB7DQorICAg
ICAgICBVUkwgc3JjOw0KKyAgICAgICAgU3RyaW5nIHNpemVzOw0KKyAgICAgICAgU3RyaW5nIHR5
cGU7DQorICAgICAgICBJY29uUHVycG9zZSBwdXJwb3NlOw0KKyAgICAgICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0Ow0KKyAgICAgICAgdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8QXBwbGljYXRpb25NYW5pZmVz
dDo6SWNvbj4gZGVjb2RlKERlY29kZXImKTsNCisgICAgfTsNCisNCiAgICAgU3RyaW5nIG5hbWU7
DQogICAgIFN0cmluZyBzaG9ydE5hbWU7DQogICAgIFN0cmluZyBkZXNjcmlwdGlvbjsNCkBAIC00
OCw2ICs2NCw3IEBAIHN0cnVjdCBBcHBsaWNhdGlvbk1hbmlmZXN0IHsNCiAgICAgRGlzcGxheSBk
aXNwbGF5Ow0KICAgICBVUkwgc3RhcnRVUkw7DQogICAgIENvbG9yIHRoZW1lQ29sb3I7DQorICAg
IFZlY3RvcjxJY29uPiBpY29uczsNCiANCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0Ow0KICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgc3RkOjpvcHRpb25hbDxBcHBsaWNhdGlvbk1hbmlmZXN0PiBkZWNvZGUoRGVjb2RlciYp
Ow0KQEAgLTU2LDcgKzczLDcgQEAgc3RydWN0IEFwcGxpY2F0aW9uTWFuaWZlc3Qgew0KIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+DQogdm9pZCBBcHBsaWNhdGlvbk1hbmlmZXN0OjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlcikgY29uc3QNCiB7DQotICAgIGVuY29kZXIgPDwgbmFtZSA8PCBzaG9ydE5h
bWUgPDwgZGVzY3JpcHRpb24gPDwgc2NvcGUgPDwgZGlzcGxheSA8PCBzdGFydFVSTCA8PCB0aGVt
ZUNvbG9yOw0KKyAgICBlbmNvZGVyIDw8IG5hbWUgPDwgc2hvcnROYW1lIDw8IGRlc2NyaXB0aW9u
IDw8IHNjb3BlIDw8IGRpc3BsYXkgPDwgc3RhcnRVUkwgPDwgdGhlbWVDb2xvciA8PCBpY29uczsN
CiB9DQogDQogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4NCkBAIC03OCw2ICs5NSwzMCBAQCBzdGQ6
Om9wdGlvbmFsPEFwcGxpY2F0aW9uTWFuaWZlc3Q+IEFwcGxpY2F0aW9uTWFuaWZlc3Q6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQ0KICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsNCiAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudGhlbWVDb2xvcikpDQogICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0Ow0KKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pY29ucykpDQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Ow0KKw0KKyAgICByZXR1cm4gcmVzdWx0Ow0KK30N
CisNCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPg0KK3ZvaWQgQXBwbGljYXRpb25NYW5pZmVzdDo6
SWNvbjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0DQorew0KKyAgICBlbmNvZGVyIDw8
IHNyYyA8PCBzaXplcyA8PCB0eXBlIDw8IHB1cnBvc2U7DQorfQ0KKw0KK3RlbXBsYXRlPGNsYXNz
IERlY29kZXI+DQorc3RkOjpvcHRpb25hbDxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uPiBBcHBs
aWNhdGlvbk1hbmlmZXN0OjpJY29uOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikNCit7DQorICAg
IEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb24gcmVzdWx0Ow0KKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlc3VsdC5zcmMpKQ0KKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsNCisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2l6ZXMpKQ0KKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsNCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudHlwZSkpDQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0Ow0KKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5wdXJw
b3NlKSkNCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7DQogDQogICAgIHJldHVybiByZXN1
bHQ7DQogfQ0KQEAgLTk2LDYgKzEzNywxNSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRz
PFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q6OkRpc3BsYXk+IHsNCiAgICAgPjsNCiB9Ow0K
IA0KK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6QXBwbGljYXRpb25NYW5p
ZmVzdDo6SWNvblB1cnBvc2U+IHsNCisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwNCisg
ICAgICAgIFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb25QdXJwb3NlLA0KKyAgICAg
ICAgV2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvblB1cnBvc2U6Ok1vbm9jaHJvbWUs
DQorICAgICAgICBXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uUHVycG9zZTo6TWFz
a2FibGUsDQorICAgICAgICBXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uUHVycG9z
ZTo6QW55DQorICAgID47DQorfTsNCisNCiB9IC8vIG5hbWVzcGFjZSBXVEY7DQogDQogI2VuZGlm
IC8vIEVOQUJMRShBUFBMSUNBVElPTl9NQU5JRkVTVCkNCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGlj
YXRpb25NYW5pZmVzdFBhcnNlci5jcHANCmluZGV4IDRjYjBkZjc3MGNkOC4uMjUwNzRkMmRkOTM1
IDEwMDY0NA0KLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0
L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwDQorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHANCkBA
IC03OCw2ICs3OCw3IEBAIEFwcGxpY2F0aW9uTWFuaWZlc3QgQXBwbGljYXRpb25NYW5pZmVzdFBh
cnNlcjo6cGFyc2VNYW5pZmVzdChjb25zdCBTdHJpbmcmIHRleHQsDQogICAgIHBhcnNlZE1hbmlm
ZXN0LnNob3J0TmFtZSA9IHBhcnNlU2hvcnROYW1lKCptYW5pZmVzdCk7DQogICAgIHBhcnNlZE1h
bmlmZXN0LnNjb3BlID0gcGFyc2VTY29wZSgqbWFuaWZlc3QsIGRvY3VtZW50VVJMLCBwYXJzZWRN
YW5pZmVzdC5zdGFydFVSTCk7DQogICAgIHBhcnNlZE1hbmlmZXN0LnRoZW1lQ29sb3IgPSBwYXJz
ZUNvbG9yKCptYW5pZmVzdCwgInRoZW1lX2NvbG9yIl9zKTsNCisgICAgcGFyc2VkTWFuaWZlc3Qu
aWNvbnMgPSBwYXJzZUljb25zKCptYW5pZmVzdCwgZG9jdW1lbnRVUkwpOw0KIA0KICAgICBpZiAo
bV9kb2N1bWVudCkNCiAgICAgICAgIG1fZG9jdW1lbnQtPnByb2Nlc3NBcHBsaWNhdGlvbk1hbmlm
ZXN0KHBhcnNlZE1hbmlmZXN0KTsNCkBAIC05NSw2ICs5NiwxMSBAQCB2b2lkIEFwcGxpY2F0aW9u
TWFuaWZlc3RQYXJzZXI6OmxvZ01hbmlmZXN0UHJvcGVydHlJbnZhbGlkVVJMKGNvbnN0IFN0cmlu
ZyYgcHJvcA0KICAgICBsb2dEZXZlbG9wZXJXYXJuaW5nKG1ha2VTdHJpbmcoIlRoZSB2YWx1ZSBv
ZiBcIiJfcywgcHJvcGVydHlOYW1lLCAiXCIgaXMgbm90IGEgdmFsaWQgVVJMLiJfcykpOw0KIH0N
CiANCit2b2lkIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OmxvZ01hbmlmZXN0UHJvcGVydHlJ
bnZhbGlkSWNvbnNMaXN0KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQ0KK3sNCisgICAgbG9n
RGV2ZWxvcGVyV2FybmluZyhtYWtlU3RyaW5nKCJUaGUgdmFsdWUgb2YgXCIiX3MsIHByb3BlcnR5
TmFtZSwgIlwiIGlzIG5vdCBhIHZhbGlkIFVSTC4iX3MpKTsNCit9DQorDQogdm9pZCBBcHBsaWNh
dGlvbk1hbmlmZXN0UGFyc2VyOjpsb2dEZXZlbG9wZXJXYXJuaW5nKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkNCiB7DQogICAgIGlmIChtX2RvY3VtZW50KQ0KQEAgLTE3NCw2ICsxODAsODUgQEAgU3Ry
aW5nIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlU2hvcnROYW1lKGNvbnN0IEpTT046
Ok9iamVjdCYgbWFuaWZlc3QpDQogICAgIHJldHVybiBwYXJzZUdlbmVyaWNTdHJpbmcobWFuaWZl
c3QsICJzaG9ydF9uYW1lIl9zKTsNCiB9DQogDQorVmVjdG9yPEFwcGxpY2F0aW9uTWFuaWZlc3Q6
Okljb24+IEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlSWNvbnMoY29uc3QgSlNPTjo6
T2JqZWN0JiBtYW5pZmVzdCwgY29uc3QgVVJMJiBkb2N1bWVudFVSTCkNCit7DQorICAgIGF1dG8g
dmFsdWUgPSBtYW5pZmVzdC5nZXRWYWx1ZSgiaWNvbnMiKTsNCisNCisgICAgVmVjdG9yPEFwcGxp
Y2F0aW9uTWFuaWZlc3Q6Okljb24+IGltYWdlUmVzb3VyY2VzOw0KKw0KKyAgICBpZiAoIXZhbHVl
KQ0KKyAgICAgICAgcmV0dXJuIGltYWdlUmVzb3VyY2VzOw0KKyAgICBhdXRvIGFycmF5VmFsdWUg
PSB2YWx1ZS0+YXNBcnJheSgpOw0KKw0KKyAgICBpZiAoIWFycmF5VmFsdWUpIHsNCisgICAgICAg
IGxvZ0RldmVsb3Blcldhcm5pbmcoIlRoZSB2YWx1ZSBvZiBpY29ucyBpcyBub3QgYSB2YWxpZCBh
cnJheS4iX3MpOw0KKyAgICAgICAgcmV0dXJuIGltYWdlUmVzb3VyY2VzOw0KKyAgICB9DQorDQor
ICAgIGZvciAoY29uc3QgYXV0byYgaWNvblZhbHVlIDogKmFycmF5VmFsdWUpIHsNCisgICAgICAg
IEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb24gY3VycmVudEljb247DQorICAgICAgICBhdXRvIGF1
dG9PYmplY3RWYWx1ZSA9IGljb25WYWx1ZS0+YXNPYmplY3QoKTsNCisgICAgICAgIGlmICghYXV0
b09iamVjdFZhbHVlKQ0KKyAgICAgICAgICAgIGNvbnRpbnVlOw0KKyAgICAgICAgY29uc3QgSlNP
Tjo6T2JqZWN0ICpvYmplY3RWYWx1ZSA9IGF1dG9PYmplY3RWYWx1ZS5nZXQoKTsNCisNCisgICAg
ICAgIGF1dG8gc3JjVmFsdWUgPSBvYmplY3RWYWx1ZS0+Z2V0VmFsdWUoInNyYyJfcyk7DQorICAg
ICAgICBpZiAoIXNyY1ZhbHVlKQ0KKyAgICAgICAgICAgIGN1cnJlbnRJY29uLnNyYyA9IHsgfTsN
CisgICAgICAgIGVsc2Ugew0KKyAgICAgICAgICAgIGF1dG8gc3JjU3RyaW5nVmFsdWUgPSBzcmNW
YWx1ZS0+YXNTdHJpbmcoKTsNCisgICAgICAgICAgICBpZiAoIXNyY1N0cmluZ1ZhbHVlKSB7DQor
ICAgICAgICAgICAgICAgIGxvZ01hbmlmZXN0UHJvcGVydHlOb3RBU3RyaW5nKCJzcmMiX3MpOw0K
KyAgICAgICAgICAgICAgICBjdXJyZW50SWNvbi5zcmMgPSB7IH07DQorICAgICAgICAgICAgfSBl
bHNlIHsNCisgICAgICAgICAgICAgICAgVVJMIHNyY1VSTChtX21hbmlmZXN0VVJMLCBzcmNTdHJp
bmdWYWx1ZSk7DQorICAgICAgICAgICAgICAgIGlmIChzcmNVUkwuaXNFbXB0eSgpKQ0KKyAgICAg
ICAgICAgICAgICAgICAgY3VycmVudEljb24uc3JjID0geyB9Ow0KKyAgICAgICAgICAgICAgICBl
bHNlIGlmICghc3JjVVJMLmlzVmFsaWQoKSkgew0KKyAgICAgICAgICAgICAgICAgICAgY3VycmVu
dEljb24uc3JjID0geyB9Ow0KKyAgICAgICAgICAgICAgICAgICAgbG9nTWFuaWZlc3RQcm9wZXJ0
eUludmFsaWRVUkwoInNyYyJfcyk7DQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXByb3Rv
Y29sSG9zdEFuZFBvcnRBcmVFcXVhbChzcmNVUkwsIGRvY3VtZW50VVJMKSkgew0KKyAgICAgICAg
ICAgICAgICAgICAgYXV0byBzcmNVUkxPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHNy
Y1VSTCk7DQorICAgICAgICAgICAgICAgICAgICBhdXRvIGRvY3VtZW50T3JpZ2luID0gU2VjdXJp
dHlPcmlnaW46OmNyZWF0ZShkb2N1bWVudFVSTCk7DQorICAgICAgICAgICAgICAgICAgICBsb2dE
ZXZlbG9wZXJXYXJuaW5nKG1ha2VTdHJpbmcoIlRoZSBpY29uJ3Mgc3JjIHVybCBvcmlnaW4gb2Yg
XCIiX3MsIHNyY1VSTE9yaWdpbi0+dG9TdHJpbmcoKSwgIlwiIGlzIGRpZmZlcmVudCBmcm9tIHRo
ZSBkb2N1bWVudCdzIG9yaWdpbiBvZiBcIiJfcywgZG9jdW1lbnRPcmlnaW4tPnRvU3RyaW5nKCks
ICJcIi4iX3MpKTsNCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRJY29uLnNyYyA9IHsgfTsN
CisgICAgICAgICAgICAgICAgfSBlbHNlDQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50SWNv
bi5zcmMgPSBzcmNVUkw7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAg
Y3VycmVudEljb24uc2l6ZXMgPSBwYXJzZUdlbmVyaWNTdHJpbmcoKm9iamVjdFZhbHVlLCAic2l6
ZXMiX3MpOw0KKw0KKyAgICAgICAgY3VycmVudEljb24udHlwZSA9IHBhcnNlR2VuZXJpY1N0cmlu
Zygqb2JqZWN0VmFsdWUsICJ0eXBlIl9zKTsNCisNCisgICAgICAgIGF1dG8gcHVycG9zZVZhbHVl
ID0gb2JqZWN0VmFsdWUtPmdldFZhbHVlKCJwdXJwb3NlIl9zKTsNCisgICAgICAgIGlmICghcHVy
cG9zZVZhbHVlKQ0KKyAgICAgICAgICAgIGN1cnJlbnRJY29uLnB1cnBvc2UgPSBBcHBsaWNhdGlv
bk1hbmlmZXN0OjpJY29uUHVycG9zZTo6QW55Ow0KKyAgICAgICAgZWxzZSB7DQorICAgICAgICAg
ICAgYXV0byBwdXJwb3NlU3RyaW5nVmFsdWUgPSBwdXJwb3NlVmFsdWUtPmFzU3RyaW5nKCk7DQor
ICAgICAgICAgICAgaWYgKCFwdXJwb3NlU3RyaW5nVmFsdWUpIHsNCisgICAgICAgICAgICAgICAg
bG9nTWFuaWZlc3RQcm9wZXJ0eU5vdEFTdHJpbmcoInB1cnBvc2UiX3MpOw0KKyAgICAgICAgICAg
ICAgICBjdXJyZW50SWNvbi5wdXJwb3NlID0gQXBwbGljYXRpb25NYW5pZmVzdDo6SWNvblB1cnBv
c2U6OkFueTsNCisgICAgICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAgICBwdXJwb3Nl
U3RyaW5nVmFsdWUgPSBwdXJwb3NlU3RyaW5nVmFsdWUuc3RyaXBXaGl0ZVNwYWNlKCkuY29udmVy
dFRvQVNDSUlMb3dlcmNhc2UoKTsNCisgICAgICAgICAgICAgICAgaWYgKHB1cnBvc2VTdHJpbmdW
YWx1ZSA9PSAibW9ub2Nocm9tZSIpDQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50SWNvbi5w
dXJwb3NlID0gQXBwbGljYXRpb25NYW5pZmVzdDo6SWNvblB1cnBvc2U6Ok1vbm9jaHJvbWU7DQor
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKHB1cnBvc2VTdHJpbmdWYWx1ZSA9PSAibWFza2FibGUi
KQ0KKyAgICAgICAgICAgICAgICAgICAgY3VycmVudEljb24ucHVycG9zZSA9IEFwcGxpY2F0aW9u
TWFuaWZlc3Q6Okljb25QdXJwb3NlOjpNYXNrYWJsZTsNCisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAocHVycG9zZVN0cmluZ1ZhbHVlID09ICJhbnkiKQ0KKyAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudEljb24ucHVycG9zZSA9IEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb25QdXJwb3NlOjpBbnk7
DQorICAgICAgICAgICAgICAgIGVsc2Ugew0KKyAgICAgICAgICAgICAgICAgICAgbG9nRGV2ZWxv
cGVyV2FybmluZyhtYWtlU3RyaW5nKCJcIiJfcywgcHVycG9zZVN0cmluZ1ZhbHVlLCAiXCIgaXMg
bm90IGEgdmFsaWQgcHVycG9zZS4iX3MpKTsNCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRJ
Y29uLnB1cnBvc2UgPSBBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uUHVycG9zZTo6QW55Ow0KKyAg
ICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgaW1h
Z2VSZXNvdXJjZXMuYXBwZW5kKGN1cnJlbnRJY29uKTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4g
aW1hZ2VSZXNvdXJjZXM7DQorfQ0KKw0KIHN0YXRpYyBib29sIGlzSW5TY29wZShjb25zdCBVUkwm
IHNjb3BlVVJMLCBjb25zdCBVUkwmIHRhcmdldFVSTCkNCiB7DQogICAgIC8vIDEuIElmIHNjb3Bl
VVJMIGlzIHVuZGVmaW5lZCAoaS5lLiwgaXQgaXMgdW5ib3VuZGVkIGJlY2F1c2Ugb2YgYW4gZXJy
b3Igb3IgaXQgd2FzIG5vdCBkZWNsYXJlZCBpbiB0aGUgbWFuaWZlc3QpLCByZXR1cm4gdHJ1ZS4N
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3Qv
QXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBs
aWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuaA0KaW5kZXggM2Y5NjJk
YmE4MjIxLi45N2YyY2IxZmRiOGUgMTAwNjQ0DQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5oDQorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5p
ZmVzdFBhcnNlci5oDQpAQCAtNTAsMTIgKzUwLDE0IEBAIHByaXZhdGU6DQogICAgIFN0cmluZyBw
YXJzZURlc2NyaXB0aW9uKGNvbnN0IEpTT046Ok9iamVjdCYpOw0KICAgICBTdHJpbmcgcGFyc2VT
aG9ydE5hbWUoY29uc3QgSlNPTjo6T2JqZWN0Jik7DQogICAgIFVSTCBwYXJzZVNjb3BlKGNvbnN0
IEpTT046Ok9iamVjdCYsIGNvbnN0IFVSTCYsIGNvbnN0IFVSTCYpOw0KKyAgICBWZWN0b3I8QXBw
bGljYXRpb25NYW5pZmVzdDo6SWNvbj4gcGFyc2VJY29ucyhjb25zdCBKU09OOjpPYmplY3QmLCBj
b25zdCBVUkwmKTsNCiANCiAgICAgQ29sb3IgcGFyc2VDb2xvcihjb25zdCBKU09OOjpPYmplY3Qm
LCBjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7DQogICAgIFN0cmluZyBwYXJzZUdlbmVyaWNT
dHJpbmcoY29uc3QgSlNPTjo6T2JqZWN0JiwgY29uc3QgU3RyaW5nJik7DQogDQogICAgIHZvaWQg
bG9nTWFuaWZlc3RQcm9wZXJ0eU5vdEFTdHJpbmcoY29uc3QgU3RyaW5nJik7DQogICAgIHZvaWQg
bG9nTWFuaWZlc3RQcm9wZXJ0eUludmFsaWRVUkwoY29uc3QgU3RyaW5nJik7DQorICAgIHZvaWQg
bG9nTWFuaWZlc3RQcm9wZXJ0eUludmFsaWRJY29uc0xpc3QoY29uc3QgU3RyaW5nJik7DQogICAg
IHZvaWQgbG9nRGV2ZWxvcGVyV2FybmluZyhjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOw0KIA0KICAg
ICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7DQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZw0KaW5kZXggMTk3MTYzNTZhNGVi
Li4xZGU0NjZjOWMyZWQgMTAwNjQ0DQotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZw0KKysr
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cNCkBAIC0xLDMgKzEsMTYgQEANCisyMDIxLTEwLTE4
ICBSYWNoZWwgR2luc2JlcmcgIDxyZ2luc2JlcmdAYXBwbGUuY29tPg0KKw0KKyAgICAgICAgQWRk
IHN1cHBvcnQgaW4gV2ViQ29yZSBmb3Igd2ViIGFwcCBtYW5pZmVzdCBpY29ucw0KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTMzOQ0KKyAgICAgICAg
cmRhcjovLzg0MzExMzA2DQorDQorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4N
CisNCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0
Lmg6DQorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVz
dC5tbToNCisgICAgICAgICgtW19XS0FwcGxpY2F0aW9uTWFuaWZlc3QgaWNvbnNdKToNCisgICAg
ICAgIFNob3VsZCBhcHBlYXNlIGJ1aWxkIGVycm9yIGJlZm9yZSBmdWxsIHN1cHBvcnQgZm9yIGlj
b25zIGlzIGJ1aWx0IGludG8gX1dLQXBwbGljYXRpb25NYW5pZmVzdA0KKw0KIDIwMjEtMDktMjAg
IEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+DQogDQogICAgICAgICBbQ29j
b2FdIFZpZGVvcyBzb21ldGltZXMgZG9uJ3QgcmVuZGVyIHdoZW4gbG9hZGVkIGluIHRoZSBHUFUg
cHJvY2Vzcw0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tBcHBsaWNhdGlvbk1hbmlmZXN0LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5oDQppbmRleCBiMzFmYWY0OThjODIuLmEwMjA1NTE4
NmFlMyAxMDA2NDQNCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tB
cHBsaWNhdGlvbk1hbmlmZXN0LmgNCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0LmgNCkBAIC01MCw2ICs1MCw3IEBAIFdLX0NMQVNT
X0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSwgaW9zKDExLjMpKQ0KIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCByZWFkb25seSwgbnVsbGFibGUsIGNvcHkpIE5TVVJMICpzY29wZTsNCiBAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TVVJMICpzdGFydFVSTDsNCiBAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIF9XS0FwcGxpY2F0aW9uTWFuaWZlc3REaXNwbGF5TW9kZSBk
aXNwbGF5TW9kZTsNCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXJyYXkgKmlj
b25zIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7
DQogDQogI2lmIFRBUkdFVF9PU19JUEhPTkUNCiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9u
bHksIG51bGxhYmxlLCBjb3B5KSBVSUNvbG9yICp0aGVtZUNvbG9yIFdLX0FQSV9BVkFJTEFCTEUo
aW9zKDE1LjApKTsNCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0Lm1tDQppbmRleCAzNWMyMjVmM2NkNjcuLmVk
MGI4MWU3MWVkNCAxMDA2NDQNCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0Lm1tDQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5tbQ0KQEAgLTE1OCw2ICsxNTgsMTEg
QEAgc3RhdGljIE5TU3RyaW5nICpudWxsYWJsZU5TU3RyaW5nKGNvbnN0IFdURjo6U3RyaW5nJiBz
dHJpbmcpDQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOw0KIH0NCiANCistIChOU0FycmF5ICop
aWNvbnMNCit7DQorICAgIHJldHVybiBuaWw7DQorfQ0KKw0KICNlbHNlIC8vIEVOQUJMRShBUFBM
SUNBVElPTl9NQU5JRkVTVCkNCiANCiArIChfV0tBcHBsaWNhdGlvbk1hbmlmZXN0ICopYXBwbGlj
YXRpb25NYW5pZmVzdEZyb21KU09OOihOU1N0cmluZyAqKWpzb24gbWFuaWZlc3RVUkw6KE5TVVJM
ICopbWFuaWZlc3RVUkwgZG9jdW1lbnRVUkw6KE5TVVJMICopZG9jdW1lbnRVUkwNCkBAIC0yMTUs
NiArMjIwLDExIEBAIHN0YXRpYyBOU1N0cmluZyAqbnVsbGFibGVOU1N0cmluZyhjb25zdCBXVEY6
OlN0cmluZyYgc3RyaW5nKQ0KICAgICByZXR1cm4gX1dLQXBwbGljYXRpb25NYW5pZmVzdERpc3Bs
YXlNb2RlQnJvd3NlcjsNCiB9DQogDQorLSAoTlNBcnJheSAqKWljb25zDQorew0KKyAgICByZXR1
cm4gbmlsOw0KK30NCisNCiAjZW5kaWYgLy8gRU5BQkxFKEFQUExJQ0FUSU9OX01BTklGRVNUKQ0K
IA0KIEBlbmQNCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cN
CmluZGV4IDY3NWY2Y2RmMzVhNi4uMDc4OGY5Y2ZiMTkzIDEwMDY0NA0KLS0tIGEvVG9vbHMvQ2hh
bmdlTG9nDQorKysgYi9Ub29scy9DaGFuZ2VMb2cNCkBAIC0xLDMgKzEsMjUgQEANCisyMDIxLTEw
LTE1ICBSYWNoZWwgR2luc2JlcmcgIDxyZ2luc2JlcmdAYXBwbGUuY29tPg0KKw0KKyAgICAgICAg
QWRkIHN1cHBvcnQgaW4gV2ViQ29yZSBmb3Igd2ViIGFwcCBtYW5pZmVzdCBpY29ucw0KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTMzOQ0KKw0KKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuDQorDQorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcDoNCisgICAg
ICAgIChBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyVGVzdDo6cGFyc2VJY29uRmlyc3RUb3BMZXZl
bFByb3BlcnR5KToNCisgICAgICAgIEZ1bmN0aW9uIHRvIGNyZWF0ZSBKU09OIGZvciBpY29uIGF0
dHJpYnV0ZXMuIFRoaXMgaXMgDQorICAgICAgICBuZWNlc3NhcnkgYmVjYXVzZSBpY29ucyBhcmUg
aW4gYSBsaXN0LCB3aGVyYXMgYWxsIG90aGVyDQorICAgICAgICBhdHRyaWJ1dGVzIGluIGFwcCBt
YW5pZmVzdCBhcmUgbm90Lg0KKw0KKyAgICAgICAgKEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXJU
ZXN0Ojp0ZXN0SWNvbnNTcmMpOg0KKyAgICAgICAgKEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXJU
ZXN0Ojp0ZXN0SWNvbnNUeXBlKToNCisgICAgICAgIChBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2Vy
VGVzdDo6dGVzdEljb25zU2l6ZXMpOg0KKyAgICAgICAgKEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJz
ZXJUZXN0Ojp0ZXN0SWNvbnNQdXJwb3NlKToNCisgICAgICAgIEZ1bmN0aW9ucyBmb3IgZWFjaCBv
ZiB0aGUgaWNvbiBhdHRyaWJ1dGVzLg0KKw0KKyAgICAgICAgKFRFU1RfRik6DQorICAgICAgICBD
YWxscyB0aGUgdmFyaW91cyBpY29uIHRlc3QgZnVuY3Rpb25zIHdpdGggZGlmZmVyZW50IGlucHV0
DQorDQogMjAyMS0wOS0yMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPg0KIA0KICAg
ICAgICAgUmVkdWNlIHVzZSBvZiBtYWtlUmVmUHRyKCkgYW5kIHVzZSBSZWZQdHIgeyB9IGRpcmVj
dGx5DQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0FwcGxp
Y2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwDQppbmRleCBjMzk5NjU0NDY1MjAuLjUw
NmQ5ZGM2ZGQ3NSAxMDA2NDQNCi0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcA0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwDQpAQCAtNzQsNiAr
NzQsMTIgQEAgcHVibGljOg0KICAgICAgICAgcmV0dXJuIHBhcnNlU3RyaW5nKG1hbmlmZXN0Q29u
dGVudCk7DQogICAgIH0NCiANCisgICAgQXBwbGljYXRpb25NYW5pZmVzdCBwYXJzZUljb25GaXJz
dFRvcExldmVsUHJvcGVydHkoY29uc3QgU3RyaW5nICYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVl
KQ0KKyAgICB7DQorICAgICAgICBTdHJpbmcgbWFuaWZlc3RDb250ZW50ID0gInsgXCJpY29uc1wi
OiBbe1wiIiArIGtleSArICJcIjogIiArIHZhbHVlICsgIiB9XX0iOw0KKyAgICAgICAgcmV0dXJu
IHBhcnNlU3RyaW5nKG1hbmlmZXN0Q29udGVudCk7DQorICAgIH0NCisNCiAgICAgdm9pZCB0ZXN0
U3RhcnRVUkwoY29uc3QgU3RyaW5nJiByYXdKU09OLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmFs
dWUpDQogICAgIHsNCiAgICAgICAgIHRlc3RTdGFydFVSTChyYXdKU09OLCB7IHsgfSwgZXhwZWN0
ZWRWYWx1ZSB9KTsNCkBAIC0xMzQsNiArMTQwLDM0IEBAIHB1YmxpYzoNCiAgICAgICAgIEVYUEVD
VF9FUShleHBlY3RlZFZhbHVlLCB2YWx1ZSk7DQogICAgIH0NCiANCisgICAgdm9pZCB0ZXN0SWNv
bnNTcmMoY29uc3QgU3RyaW5nJiByYXdKU09OLCBjb25zdCBVUkwmIGV4cGVjdGVkVmFsdWUpDQor
ICAgIHsNCisgICAgICAgIGF1dG8gbWFuaWZlc3QgPSBwYXJzZUljb25GaXJzdFRvcExldmVsUHJv
cGVydHkoInNyYyIsIHJhd0pTT04pOw0KKyAgICAgICAgYXV0byB2YWx1ZSA9IG1hbmlmZXN0Lmlj
b25zWzBdLnNyYzsNCisgICAgICAgIEVYUEVDVF9TVFJFUShleHBlY3RlZFZhbHVlLnN0cmluZygp
LnV0ZjgoKS5kYXRhKCksIHZhbHVlLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOw0KKyAgICB9DQor
DQorICAgIHZvaWQgdGVzdEljb25zVHlwZShjb25zdCBTdHJpbmcgJnJhd0pTT04sIGNvbnN0IFN0
cmluZyYgZXhwZWN0ZWRWYWx1ZSkNCisgICAgew0KKyAgICAgICAgYXV0byBtYW5pZmVzdCA9IHBh
cnNlSWNvbkZpcnN0VG9wTGV2ZWxQcm9wZXJ0eSgidHlwZSIsIHJhd0pTT04pOw0KKyAgICAgICAg
YXV0byB2YWx1ZSA9IG1hbmlmZXN0Lmljb25zWzBdLnR5cGU7DQorICAgICAgICBFWFBFQ1RfU1RS
RVEoZXhwZWN0ZWRWYWx1ZS51dGY4KCkuZGF0YSgpLCB2YWx1ZS51dGY4KCkuZGF0YSgpKTsNCisg
ICAgfQ0KKw0KKyAgICB2b2lkIHRlc3RJY29uc1NpemVzKGNvbnN0IFN0cmluZyAmcmF3SlNPTiwg
Y29uc3QgU3RyaW5nJiBleHBlY3RlZFZhbHVlKQ0KKyAgICB7DQorICAgICAgICBhdXRvIG1hbmlm
ZXN0ID0gcGFyc2VJY29uRmlyc3RUb3BMZXZlbFByb3BlcnR5KCJzaXplcyIsIHJhd0pTT04pOw0K
KyAgICAgICAgYXV0byB2YWx1ZSA9IG1hbmlmZXN0Lmljb25zWzBdLnNpemVzOw0KKyAgICAgICAg
RVhQRUNUX1NUUkVRKGV4cGVjdGVkVmFsdWUudXRmOCgpLmRhdGEoKSwgdmFsdWUudXRmOCgpLmRh
dGEoKSk7DQorICAgIH0NCisNCisgICAgdm9pZCB0ZXN0SWNvbnNQdXJwb3NlKGNvbnN0IFN0cmlu
ZyAmcmF3SlNPTiwgQXBwbGljYXRpb25NYW5pZmVzdDo6SWNvblB1cnBvc2UgZXhwZWN0ZWRWYWx1
ZSkNCisgICAgew0KKyAgICAgICAgYXV0byBtYW5pZmVzdCA9IHBhcnNlSWNvbkZpcnN0VG9wTGV2
ZWxQcm9wZXJ0eSgicHVycG9zZSIsIHJhd0pTT04pOw0KKyAgICAgICAgYXV0byB2YWx1ZSA9IG1h
bmlmZXN0Lmljb25zWzBdLnB1cnBvc2U7DQorICAgICAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRWYWx1
ZSwgdmFsdWUpOw0KKyAgICB9DQorDQogfTsNCiANCiBzdGF0aWMgdm9pZCBhc3NlcnRNYW5pZmVz
dEhhc0RlZmF1bHRWYWx1ZXMoY29uc3QgVVJMJiBtYW5pZmVzdFVSTCwgY29uc3QgVVJMJiBkb2N1
bWVudFVSTCwgY29uc3QgQXBwbGljYXRpb25NYW5pZmVzdCYgbWFuaWZlc3QpDQpAQCAtMzIzLDQg
KzM1NywyNyBAQCBURVNUX0YoQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlclRlc3QsIFdoaXRlc3Bh
Y2UpDQogICAgIEVYUEVDVF9TVFJFUSgiUEFTUyIsIG1hbmlmZXN0Lm5hbWUudXRmOCgpLmRhdGEo
KSk7DQogfQ0KIA0KK1RFU1RfRihBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyVGVzdCwgSWNvbnMp
DQorew0KKyAgICBVUkwgc3JjVVJMID0geyB7IH0sICJodHRwczovL2V4YW1wbGUuY29tL2ljb24u
anBnIiB9Ow0KKyAgICB0ZXN0SWNvbnNTcmMoIlwiaWNvbi5qcGdcIiIsIHNyY1VSTCk7DQorICAg
IHRlc3RJY29uc1R5cGUoIlwiaW1hZ2Uvd2VicFwiIiwgImltYWdlL3dlYnAiKTsNCisgICAgdGVz
dEljb25zU2l6ZXMoIlwiMjU2eDI1NlwiIiwgIjI1NngyNTYiKTsNCisgICAgdGVzdEljb25zU2l6
ZXMoIlwiNzJ4NzIgOTZ4OTZcIiIsICI3Mng3MiA5Nng5NiIpOw0KKw0KKyAgICB0ZXN0SWNvbnNQ
dXJwb3NlKCJcIm1vbm9jaHJvbWVcIiIsIEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb25QdXJwb3Nl
OjpNb25vY2hyb21lKTsNCisgICAgdGVzdEljb25zUHVycG9zZSgiXCJtYXNrYWJsZVwiIiwgQXBw
bGljYXRpb25NYW5pZmVzdDo6SWNvblB1cnBvc2U6Ok1hc2thYmxlKTsNCisgICAgdGVzdEljb25z
UHVycG9zZSgiXCJhbnlcIiIsIEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb25QdXJwb3NlOjpBbnkp
Ow0KKyAgICB0ZXN0SWNvbnNQdXJwb3NlKCJcIjEyM1wiIiwgQXBwbGljYXRpb25NYW5pZmVzdDo6
SWNvblB1cnBvc2U6OkFueSk7DQorICAgIHRlc3RJY29uc1B1cnBvc2UoIlwiXHRNT05PQ0hST01F
XCIiLCBBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uUHVycG9zZTo6TW9ub2Nocm9tZSk7DQorDQor
ICAgIHRlc3RJY29uc1B1cnBvc2UoIjEyMyIsIEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb25QdXJw
b3NlOjpBbnkpOw0KKyAgICB0ZXN0SWNvbnNQdXJwb3NlKCJudWxsIiwgQXBwbGljYXRpb25NYW5p
ZmVzdDo6SWNvblB1cnBvc2U6OkFueSk7DQorICAgIHRlc3RJY29uc1B1cnBvc2UoInRydWUiLCBB
cHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uUHVycG9zZTo6QW55KTsNCisgICAgdGVzdEljb25zUHVy
cG9zZSgieyB9IiwgQXBwbGljYXRpb25NYW5pZmVzdDo6SWNvblB1cnBvc2U6OkFueSk7DQorICAg
IHRlc3RJY29uc1B1cnBvc2UoIlsgXSIsIEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb25QdXJwb3Nl
OjpBbnkpOw0KKyAgICB0ZXN0SWNvbnNQdXJwb3NlKCJcIlwiIiwgQXBwbGljYXRpb25NYW5pZmVz
dDo6SWNvblB1cnBvc2U6OkFueSk7DQorICAgIHRlc3RJY29uc1B1cnBvc2UoIlwiZ2FyYmFnZSBz
dHJpbmcgXCIiLCBBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uUHVycG9zZTo6QW55KTsNCit9DQor
DQogI2VuZGlmDQo=
</data>
<flag name="commit-queue"
          id="465950"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>441909</attachid>
            <date>2021-10-20 11:32:46 -0700</date>
            <delta_ts>2021-11-08 12:18:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>file_231339.txt</filename>
            <type>text/plain</type>
            <size>25923</size>
            <attacher>rginsberg</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZw0KaW5kZXggMmVjMjM2MTc2ODkwLi4zMzk5NWJiNTFmM2QgMTAwNjQ0DQotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cNCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZw0K
QEAgLTEsMyArMSwzOSBAQA0KKzIwMjEtMTAtMTUgIFJhY2hlbCBHaW5zYmVyZyAgPHJnaW5zYmVy
Z0BhcHBsZS5jb20+DQorDQorICAgICAgICBBZGQgc3VwcG9ydCBpbiBXZWJDb3JlIGZvciB3ZWIg
YXBwIG1hbmlmZXN0IGljb25zDQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjMxMzM5DQorICAgICAgICByZGFyOi8vODQzMTEzMDYNCisNCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLg0KKw0KKyAgICAgICAgVGVzdHMgYXJlIGFkZGVk
IHRvIE9wZW5Tb3VyY2UvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0FwcGxpY2F0
aW9uTWFuaWZlc3RQYXJzZS5jcHANCisNCisgICAgICAgICogTW9kdWxlcy9hcHBsaWNhdGlvbm1h
bmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3QuaDoNCisgICAgICAgIEEgbmV3IGVudW0gZm9yIHRo
ZSBpY29uIHB1cnBvc2UgKEljb246OlB1cnBvc2UpIHdhcyBhZGRlZCB0byB0aGUgQXBwbGljYXRp
b25NYW5pZmVzdDo6SWNvbiBzdHJ1Y3QuDQorICAgICAgICBBIG5ldyBJY29uIHN0cnVjdCBjb250
YWluaW5nIHZhcmlhYmxlIGZvciB0aGUgc3JjLCBzaXplcywNCisgICAgICAgIHR5cGUsIGFuZCBJ
Y29uOjpQdXJwb3NlIGF0dHJpYnV0ZXMgZm9yIGFwcCBtYW5pZmVzdCBpY29ucyB3YXMgYWRkZWQg
dG8gdGhlIEFwcGxpY2F0aW9uTWFuaWZlc3QNCisgICAgICAgIHN0cnVjdC4gQSB2ZWN0b3Igb2Yg
SWNvbidzIGlzIGFkZGVkIGFzIGEgdmFyaWFibGUgZm9yDQorICAgICAgICB0aGUgQXBwbGljYXRp
b25NYW5pZmVzdCBzdHJ1Y3QuDQorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVz
dDo6ZW5jb2RlIGNvbnN0KToNCisgICAgICAgIEFkZGVkIGljb25zIHRvIGVuY29kZSBmdW5jdGlv
bg0KKyAgICAgICAgKFdlYmNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q6OmRlY29kZSk6DQorICAg
ICAgICBBZGRlZCBpY29ucyB0byBkZWNvZGUgZnVuY3Rpb24NCisgICAgICAgIChXZWJDb3JlOjpB
cHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjplbmNvZGUgY29uc3QpOg0KKyAgICAgICAgQ3JlYXRl
IGVuY29kZSBmdW5jdGlvbiBmb3IgQXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbg0KKyAgICAgICAg
KFdlYmNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OmRlY29kZSk6DQorICAgICAgICBD
cmVhdGUgZGVjb2RlIGZ1bmN0aW9uIGZvciBBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uDQorDQor
DQorICAgICAgICAqIE1vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlm
ZXN0UGFyc2VyLmNwcDoNCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0UGFy
c2VyOjpwYXJzZU1hbmlmZXN0KToNCisgICAgICAgIEFkZGVkIGNhbGwgdG8gcGFyc2VJY29ucw0K
KyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlSWNvbnMp
Og0KKyAgICAgICAgcGFyc2VJY29ucyBpdGVyYXRlcyB0aHJvdWdoIHRoZSBsaXN0IG9mIGljb25z
LCBwZXJmb3JtcyBjaGVja3MgZm9yIGF0dHJpYnV0ZSwNCisgICAgICAgIGFuZCB0aGVuLCBpZiB2
YWxpZCwgYWRkcyB0aGUgYXR0cmlidXRlIHRvIGFuIEFwcGxpY2F0aW9uTWFuaWZlc3RJY29uIHN0
cnVjdA0KKyAgICAgICAgdGhhdCBpcyBhcHBlbmRlZCB0byBhIG5ldyBWZWN0b3Igb2YgQXBwbGlj
YXRpb25NYW5pZmVzdEljb25zLg0KKw0KKyAgICAgICAgKiBNb2R1bGVzL2FwcGxpY2F0aW9ubWFu
aWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5oOg0KKyAgICAgICAgRGVjbGFyZSBmdW5j
dGlvbnMgZm9yIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXINCiAyMDIxLTEwLTIwICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4NCiANCiAgICAgICAgIERvbid0IHJlLWV2YWx1YXRl
IHZpZXdwb3J0IGRlcGVuZGVudCBtZWRpYSBxdWVyaWVzIGlmIHRoZSB2aWV3cG9ydCBkb2Vzbid0
IGNoYW5nZQ0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25t
YW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Fw
cGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdC5oDQppbmRleCBmYTU0MWIyYjMy
YmEuLmQ1YTdkNGEzZDVlNyAxMDA2NDQNCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBw
bGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0LmgNCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0LmgNCkBA
IC0zMCw2ICszMCw3IEBADQogI2luY2x1ZGUgIkNvbG9yLmgiDQogI2luY2x1ZGUgPHd0Zi9FbnVt
VHJhaXRzLmg+DQogI2luY2x1ZGUgPHd0Zi9VUkwuaD4NCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
Pg0KIA0KIG5hbWVzcGFjZSBXZWJDb3JlIHsNCiANCkBAIC00MSw2ICs0MiwyMiBAQCBzdHJ1Y3Qg
QXBwbGljYXRpb25NYW5pZmVzdCB7DQogICAgICAgICBGdWxsc2NyZWVuLA0KICAgICB9Ow0KIA0K
KyAgICBzdHJ1Y3QgSWNvbiB7DQorICAgICAgICBlbnVtIGNsYXNzIFB1cnBvc2Ugew0KKyAgICAg
ICAgICAgIE1vbm9jaHJvbWUsDQorICAgICAgICAgICAgTWFza2FibGUsDQorICAgICAgICAgICAg
QW55LA0KKyAgICAgICAgfTsNCisNCisgICAgICAgIFVSTCBzcmM7DQorICAgICAgICBTdHJpbmcg
c2l6ZXM7DQorICAgICAgICBTdHJpbmcgdHlwZTsNCisgICAgICAgIFB1cnBvc2UgcHVycG9zZTsN
CisNCisgICAgICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsNCisgICAgICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb24+IGRlY29kZShEZWNvZGVyJik7DQorICAg
IH07DQorDQogICAgIFN0cmluZyBuYW1lOw0KICAgICBTdHJpbmcgc2hvcnROYW1lOw0KICAgICBT
dHJpbmcgZGVzY3JpcHRpb247DQpAQCAtNDgsNiArNjUsNyBAQCBzdHJ1Y3QgQXBwbGljYXRpb25N
YW5pZmVzdCB7DQogICAgIERpc3BsYXkgZGlzcGxheTsNCiAgICAgVVJMIHN0YXJ0VVJMOw0KICAg
ICBDb2xvciB0aGVtZUNvbG9yOw0KKyAgICBWZWN0b3I8SWNvbj4gaWNvbnM7DQogDQogICAgIHRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsNCiAgICAg
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8QXBwbGljYXRpb25N
YW5pZmVzdD4gZGVjb2RlKERlY29kZXImKTsNCkBAIC01Niw3ICs3NCw3IEBAIHN0cnVjdCBBcHBs
aWNhdGlvbk1hbmlmZXN0IHsNCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPg0KIHZvaWQgQXBwbGlj
YXRpb25NYW5pZmVzdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0DQogew0KLSAgICBl
bmNvZGVyIDw8IG5hbWUgPDwgc2hvcnROYW1lIDw8IGRlc2NyaXB0aW9uIDw8IHNjb3BlIDw8IGRp
c3BsYXkgPDwgc3RhcnRVUkwgPDwgdGhlbWVDb2xvcjsNCisgICAgZW5jb2RlciA8PCBuYW1lIDw8
IHNob3J0TmFtZSA8PCBkZXNjcmlwdGlvbiA8PCBzY29wZSA8PCBkaXNwbGF5IDw8IHN0YXJ0VVJM
IDw8IHRoZW1lQ29sb3IgPDwgaWNvbnM7DQogfQ0KIA0KIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
DQpAQCAtNzgsNiArOTYsMzAgQEAgc3RkOjpvcHRpb25hbDxBcHBsaWNhdGlvbk1hbmlmZXN0PiBB
cHBsaWNhdGlvbk1hbmlmZXN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikNCiAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7DQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnRoZW1l
Q29sb3IpKQ0KICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsNCisgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQuaWNvbnMpKQ0KKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsNCisN
CisgICAgcmV0dXJuIHJlc3VsdDsNCit9DQorDQordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4NCit2
b2lkIEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdA0KK3sNCisgICAgZW5jb2RlciA8PCBzcmMgPDwgc2l6ZXMgPDwgdHlwZSA8PCBwdXJwb3Nl
Ow0KK30NCisNCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPg0KK3N0ZDo6b3B0aW9uYWw8QXBwbGlj
YXRpb25NYW5pZmVzdDo6SWNvbj4gQXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpDQorew0KKyAgICBBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uIHJlc3Vs
dDsNCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc3JjKSkNCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7DQorICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNpemVzKSkN
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7DQorICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
cmVzdWx0LnR5cGUpKQ0KKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsNCisgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShyZXN1bHQucHVycG9zZSkpDQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0Ow0KIA0KICAgICByZXR1cm4gcmVzdWx0Ow0KIH0NCkBAIC05Niw2ICsxMzgsMTUgQEAgdGVt
cGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpE
aXNwbGF5PiB7DQogICAgID47DQogfTsNCiANCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRz
PFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2U+IHsNCisgICAgdXNp
bmcgdmFsdWVzID0gRW51bVZhbHVlczwNCisgICAgICAgIFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFu
aWZlc3Q6Okljb246OlB1cnBvc2UsDQorICAgICAgICBXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlm
ZXN0OjpJY29uOjpQdXJwb3NlOjpNb25vY2hyb21lLA0KKyAgICAgICAgV2ViQ29yZTo6QXBwbGlj
YXRpb25NYW5pZmVzdDo6SWNvbjo6UHVycG9zZTo6TWFza2FibGUsDQorICAgICAgICBXZWJDb3Jl
OjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlOjpBbnkNCisgICAgPjsNCit9Ow0K
Kw0KIH0gLy8gbmFtZXNwYWNlIFdURjsNCiANCiAjZW5kaWYgLy8gRU5BQkxFKEFQUExJQ0FUSU9O
X01BTklGRVNUKQ0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRp
b25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNw
cA0KaW5kZXggNGNiMGRmNzcwY2Q4Li4wM2E2OTVlZjljYzkgMTAwNjQ0DQotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdFBh
cnNlci5jcHANCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVz
dC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcA0KQEAgLTc4LDYgKzc4LDcgQEAgQXBwbGlj
YXRpb25NYW5pZmVzdCBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpwYXJzZU1hbmlmZXN0KGNv
bnN0IFN0cmluZyYgdGV4dCwNCiAgICAgcGFyc2VkTWFuaWZlc3Quc2hvcnROYW1lID0gcGFyc2VT
aG9ydE5hbWUoKm1hbmlmZXN0KTsNCiAgICAgcGFyc2VkTWFuaWZlc3Quc2NvcGUgPSBwYXJzZVNj
b3BlKCptYW5pZmVzdCwgZG9jdW1lbnRVUkwsIHBhcnNlZE1hbmlmZXN0LnN0YXJ0VVJMKTsNCiAg
ICAgcGFyc2VkTWFuaWZlc3QudGhlbWVDb2xvciA9IHBhcnNlQ29sb3IoKm1hbmlmZXN0LCAidGhl
bWVfY29sb3IiX3MpOw0KKyAgICBwYXJzZWRNYW5pZmVzdC5pY29ucyA9IHBhcnNlSWNvbnMoKm1h
bmlmZXN0LCBkb2N1bWVudFVSTCk7DQogDQogICAgIGlmIChtX2RvY3VtZW50KQ0KICAgICAgICAg
bV9kb2N1bWVudC0+cHJvY2Vzc0FwcGxpY2F0aW9uTWFuaWZlc3QocGFyc2VkTWFuaWZlc3QpOw0K
QEAgLTk1LDYgKzk2LDExIEBAIHZvaWQgQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6bG9nTWFu
aWZlc3RQcm9wZXJ0eUludmFsaWRVUkwoY29uc3QgU3RyaW5nJiBwcm9wDQogICAgIGxvZ0RldmVs
b3Blcldhcm5pbmcobWFrZVN0cmluZygiVGhlIHZhbHVlIG9mIFwiIl9zLCBwcm9wZXJ0eU5hbWUs
ICJcIiBpcyBub3QgYSB2YWxpZCBVUkwuIl9zKSk7DQogfQ0KIA0KK3ZvaWQgQXBwbGljYXRpb25N
YW5pZmVzdFBhcnNlcjo6bG9nTWFuaWZlc3RQcm9wZXJ0eUludmFsaWRJY29uc0xpc3QoY29uc3Qg
U3RyaW5nJiBwcm9wZXJ0eU5hbWUpDQorew0KKyAgICBsb2dEZXZlbG9wZXJXYXJuaW5nKG1ha2VT
dHJpbmcoIlRoZSB2YWx1ZSBvZiBcIiJfcywgcHJvcGVydHlOYW1lLCAiXCIgaXMgbm90IGEgdmFs
aWQgVVJMLiJfcykpOw0KK30NCisNCiB2b2lkIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6Omxv
Z0RldmVsb3Blcldhcm5pbmcoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQ0KIHsNCiAgICAgaWYgKG1f
ZG9jdW1lbnQpDQpAQCAtMTc0LDYgKzE4MCw4NSBAQCBTdHJpbmcgQXBwbGljYXRpb25NYW5pZmVz
dFBhcnNlcjo6cGFyc2VTaG9ydE5hbWUoY29uc3QgSlNPTjo6T2JqZWN0JiBtYW5pZmVzdCkNCiAg
ICAgcmV0dXJuIHBhcnNlR2VuZXJpY1N0cmluZyhtYW5pZmVzdCwgInNob3J0X25hbWUiX3MpOw0K
IH0NCiANCitWZWN0b3I8QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbj4gQXBwbGljYXRpb25NYW5p
ZmVzdFBhcnNlcjo6cGFyc2VJY29ucyhjb25zdCBKU09OOjpPYmplY3QmIG1hbmlmZXN0LCBjb25z
dCBVUkwmIGRvY3VtZW50VVJMKQ0KK3sNCisgICAgYXV0byB2YWx1ZSA9IG1hbmlmZXN0LmdldFZh
bHVlKCJpY29ucyIpOw0KKw0KKyAgICBWZWN0b3I8QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbj4g
aW1hZ2VSZXNvdXJjZXM7DQorDQorICAgIGlmICghdmFsdWUpDQorICAgICAgICByZXR1cm4gaW1h
Z2VSZXNvdXJjZXM7DQorICAgIGF1dG8gYXJyYXlWYWx1ZSA9IHZhbHVlLT5hc0FycmF5KCk7DQor
DQorICAgIGlmICghYXJyYXlWYWx1ZSkgew0KKyAgICAgICAgbG9nRGV2ZWxvcGVyV2FybmluZygi
VGhlIHZhbHVlIG9mIGljb25zIGlzIG5vdCBhIHZhbGlkIGFycmF5LiJfcyk7DQorICAgICAgICBy
ZXR1cm4gaW1hZ2VSZXNvdXJjZXM7DQorICAgIH0NCisNCisgICAgZm9yIChjb25zdCBhdXRvJiBp
Y29uVmFsdWUgOiAqYXJyYXlWYWx1ZSkgew0KKyAgICAgICAgQXBwbGljYXRpb25NYW5pZmVzdDo6
SWNvbiBjdXJyZW50SWNvbjsNCisgICAgICAgIGF1dG8gYXV0b09iamVjdFZhbHVlID0gaWNvblZh
bHVlLT5hc09iamVjdCgpOw0KKyAgICAgICAgaWYgKCFhdXRvT2JqZWN0VmFsdWUpDQorICAgICAg
ICAgICAgY29udGludWU7DQorICAgICAgICBjb25zdCBKU09OOjpPYmplY3QgKm9iamVjdFZhbHVl
ID0gYXV0b09iamVjdFZhbHVlLmdldCgpOw0KKw0KKyAgICAgICAgYXV0byBzcmNWYWx1ZSA9IG9i
amVjdFZhbHVlLT5nZXRWYWx1ZSgic3JjIl9zKTsNCisgICAgICAgIGlmICghc3JjVmFsdWUpDQor
ICAgICAgICAgICAgY3VycmVudEljb24uc3JjID0geyB9Ow0KKyAgICAgICAgZWxzZSB7DQorICAg
ICAgICAgICAgYXV0byBzcmNTdHJpbmdWYWx1ZSA9IHNyY1ZhbHVlLT5hc1N0cmluZygpOw0KKyAg
ICAgICAgICAgIGlmICghc3JjU3RyaW5nVmFsdWUpIHsNCisgICAgICAgICAgICAgICAgbG9nTWFu
aWZlc3RQcm9wZXJ0eU5vdEFTdHJpbmcoInNyYyJfcyk7DQorICAgICAgICAgICAgICAgIGN1cnJl
bnRJY29uLnNyYyA9IHsgfTsNCisgICAgICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAg
ICBVUkwgc3JjVVJMKG1fbWFuaWZlc3RVUkwsIHNyY1N0cmluZ1ZhbHVlKTsNCisgICAgICAgICAg
ICAgICAgaWYgKHNyY1VSTC5pc0VtcHR5KCkpDQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50
SWNvbi5zcmMgPSB7IH07DQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFzcmNVUkwuaXNWYWxp
ZCgpKSB7DQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50SWNvbi5zcmMgPSB7IH07DQorICAg
ICAgICAgICAgICAgICAgICBsb2dNYW5pZmVzdFByb3BlcnR5SW52YWxpZFVSTCgic3JjIl9zKTsN
CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFs
KHNyY1VSTCwgZG9jdW1lbnRVUkwpKSB7DQorICAgICAgICAgICAgICAgICAgICBhdXRvIHNyY1VS
TE9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUoc3JjVVJMKTsNCisgICAgICAgICAgICAg
ICAgICAgIGF1dG8gZG9jdW1lbnRPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKGRvY3Vt
ZW50VVJMKTsNCisgICAgICAgICAgICAgICAgICAgIGxvZ0RldmVsb3Blcldhcm5pbmcobWFrZVN0
cmluZygiVGhlIGljb24ncyBzcmMgdXJsIG9yaWdpbiBvZiBcIiJfcywgc3JjVVJMT3JpZ2luLT50
b1N0cmluZygpLCAiXCIgaXMgZGlmZmVyZW50IGZyb20gdGhlIGRvY3VtZW50J3Mgb3JpZ2luIG9m
IFwiIl9zLCBkb2N1bWVudE9yaWdpbi0+dG9TdHJpbmcoKSwgIlwiLiJfcykpOw0KKyAgICAgICAg
ICAgICAgICAgICAgY3VycmVudEljb24uc3JjID0geyB9Ow0KKyAgICAgICAgICAgICAgICB9IGVs
c2UNCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRJY29uLnNyYyA9IHNyY1VSTDsNCisgICAg
ICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICBjdXJyZW50SWNvbi5zaXplcyA9IHBh
cnNlR2VuZXJpY1N0cmluZygqb2JqZWN0VmFsdWUsICJzaXplcyJfcyk7DQorDQorICAgICAgICBj
dXJyZW50SWNvbi50eXBlID0gcGFyc2VHZW5lcmljU3RyaW5nKCpvYmplY3RWYWx1ZSwgInR5cGUi
X3MpOw0KKw0KKyAgICAgICAgYXV0byBwdXJwb3NlVmFsdWUgPSBvYmplY3RWYWx1ZS0+Z2V0VmFs
dWUoInB1cnBvc2UiX3MpOw0KKyAgICAgICAgaWYgKCFwdXJwb3NlVmFsdWUpDQorICAgICAgICAg
ICAgY3VycmVudEljb24ucHVycG9zZSA9IEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1cnBv
c2U6OkFueTsNCisgICAgICAgIGVsc2Ugew0KKyAgICAgICAgICAgIGF1dG8gcHVycG9zZVN0cmlu
Z1ZhbHVlID0gcHVycG9zZVZhbHVlLT5hc1N0cmluZygpOw0KKyAgICAgICAgICAgIGlmICghcHVy
cG9zZVN0cmluZ1ZhbHVlKSB7DQorICAgICAgICAgICAgICAgIGxvZ01hbmlmZXN0UHJvcGVydHlO
b3RBU3RyaW5nKCJwdXJwb3NlIl9zKTsNCisgICAgICAgICAgICAgICAgY3VycmVudEljb24ucHVy
cG9zZSA9IEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2U6OkFueTsNCisgICAgICAg
ICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAgICBwdXJwb3NlU3RyaW5nVmFsdWUgPSBwdXJw
b3NlU3RyaW5nVmFsdWUuc3RyaXBXaGl0ZVNwYWNlKCkuY29udmVydFRvQVNDSUlMb3dlcmNhc2Uo
KTsNCisgICAgICAgICAgICAgICAgaWYgKHB1cnBvc2VTdHJpbmdWYWx1ZSA9PSAibW9ub2Nocm9t
ZSIpDQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50SWNvbi5wdXJwb3NlID0gQXBwbGljYXRp
b25NYW5pZmVzdDo6SWNvbjo6UHVycG9zZTo6TW9ub2Nocm9tZTsNCisgICAgICAgICAgICAgICAg
ZWxzZSBpZiAocHVycG9zZVN0cmluZ1ZhbHVlID09ICJtYXNrYWJsZSIpDQorICAgICAgICAgICAg
ICAgICAgICBjdXJyZW50SWNvbi5wdXJwb3NlID0gQXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6
UHVycG9zZTo6TWFza2FibGU7DQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHB1cnBvc2VTdHJp
bmdWYWx1ZSA9PSAiYW55IikNCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRJY29uLnB1cnBv
c2UgPSBBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlOjpBbnk7DQorICAgICAgICAg
ICAgICAgIGVsc2Ugew0KKyAgICAgICAgICAgICAgICAgICAgbG9nRGV2ZWxvcGVyV2FybmluZyht
YWtlU3RyaW5nKCJcIiJfcywgcHVycG9zZVN0cmluZ1ZhbHVlLCAiXCIgaXMgbm90IGEgdmFsaWQg
cHVycG9zZS4iX3MpKTsNCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRJY29uLnB1cnBvc2Ug
PSBBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlOjpBbnk7DQorICAgICAgICAgICAg
ICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICBpbWFnZVJlc291cmNl
cy5hcHBlbmQoY3VycmVudEljb24pOw0KKyAgICB9DQorDQorICAgIHJldHVybiBpbWFnZVJlc291
cmNlczsNCit9DQorDQogc3RhdGljIGJvb2wgaXNJblNjb3BlKGNvbnN0IFVSTCYgc2NvcGVVUkws
IGNvbnN0IFVSTCYgdGFyZ2V0VVJMKQ0KIHsNCiAgICAgLy8gMS4gSWYgc2NvcGVVUkwgaXMgdW5k
ZWZpbmVkIChpLmUuLCBpdCBpcyB1bmJvdW5kZWQgYmVjYXVzZSBvZiBhbiBlcnJvciBvciBpdCB3
YXMgbm90IGRlY2xhcmVkIGluIHRoZSBtYW5pZmVzdCksIHJldHVybiB0cnVlLg0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlv
bk1hbmlmZXN0UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFu
aWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5oDQppbmRleCAzZjk2MmRiYTgyMjEuLjk3
ZjJjYjFmZGI4ZSAxMDA2NDQNCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRp
b25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmgNCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2Vy
LmgNCkBAIC01MCwxMiArNTAsMTQgQEAgcHJpdmF0ZToNCiAgICAgU3RyaW5nIHBhcnNlRGVzY3Jp
cHRpb24oY29uc3QgSlNPTjo6T2JqZWN0Jik7DQogICAgIFN0cmluZyBwYXJzZVNob3J0TmFtZShj
b25zdCBKU09OOjpPYmplY3QmKTsNCiAgICAgVVJMIHBhcnNlU2NvcGUoY29uc3QgSlNPTjo6T2Jq
ZWN0JiwgY29uc3QgVVJMJiwgY29uc3QgVVJMJik7DQorICAgIFZlY3RvcjxBcHBsaWNhdGlvbk1h
bmlmZXN0OjpJY29uPiBwYXJzZUljb25zKGNvbnN0IEpTT046Ok9iamVjdCYsIGNvbnN0IFVSTCYp
Ow0KIA0KICAgICBDb2xvciBwYXJzZUNvbG9yKGNvbnN0IEpTT046Ok9iamVjdCYsIGNvbnN0IFN0
cmluZyYgcHJvcGVydHlOYW1lKTsNCiAgICAgU3RyaW5nIHBhcnNlR2VuZXJpY1N0cmluZyhjb25z
dCBKU09OOjpPYmplY3QmLCBjb25zdCBTdHJpbmcmKTsNCiANCiAgICAgdm9pZCBsb2dNYW5pZmVz
dFByb3BlcnR5Tm90QVN0cmluZyhjb25zdCBTdHJpbmcmKTsNCiAgICAgdm9pZCBsb2dNYW5pZmVz
dFByb3BlcnR5SW52YWxpZFVSTChjb25zdCBTdHJpbmcmKTsNCisgICAgdm9pZCBsb2dNYW5pZmVz
dFByb3BlcnR5SW52YWxpZEljb25zTGlzdChjb25zdCBTdHJpbmcmKTsNCiAgICAgdm9pZCBsb2dE
ZXZlbG9wZXJXYXJuaW5nKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7DQogDQogICAgIFJlZlB0cjxE
b2N1bWVudD4gbV9kb2N1bWVudDsNCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nDQppbmRleCAxMTllNGZiM2FiMTIuLmFkNWYwODAw
NTVlOCAxMDA2NDQNCi0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nDQorKysgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZw0KQEAgLTEsMyArMSwzNCBAQA0KKzIwMjEtMTAtMTggIFJhY2hlbCBH
aW5zYmVyZyAgPHJnaW5zYmVyZ0BhcHBsZS5jb20+DQorDQorICAgICAgICBBZGQgc3VwcG9ydCBp
biBXZWJDb3JlIGZvciB3ZWIgYXBwIG1hbmlmZXN0IGljb25zDQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMzM5DQorICAgICAgICByZGFyOi8vODQz
MTEzMDYNCisNCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLg0KKw0KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3QuaDoNCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0Lm1tOg0KKyAg
ICAgICAgKFdLUHVycG9zZVRvV2ViQ29yZVB1cnBvc2UpOg0KKyAgICAgICAgU3RhdGljIGZ1bmN0
aW9uIHRvIGNvbnZlcnQgV0sgc3R5bGUgcHVycG9zZSB0byBXZWJDb3JlIHN0eWxlIHB1cnBvc2Uu
DQorICAgICAgICBVc2VkIGluIG1ha2VWZWN0b3JFbGVtZW50Lg0KKyAgICAgICAgKG1ha2VWZWN0
b3JFbGVtZW50KToNCisgICAgICAgIFVzZWQgYnkgbWFrZVZlY3RvciBpbiBpbml0V2l0aENvZGVy
Oi4gVGFrZXMgYSBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbiBhbmQgcmV0dXJucw0KKyAgICAg
ICAgYSBXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uLg0KKyAgICAgICAgKC1bX1dL
QXBwbGljYXRpb25NYW5pZmVzdCBpbml0V2l0aENvZGVyOl0pOg0KKyAgICAgICAgQWRkZWQgaWNv
bnMuDQorICAgICAgICAoLVtfV0tBcHBsaWNhdGlvbk1hbmlmZXN0IGVuY29kZVdpdGhDb2Rlcjpd
KToNCisgICAgICAgIEFkZGVkIGljb25zLg0KKyAgICAgICAgKC1bX1dLQXBwbGljYXRpb25NYW5p
ZmVzdCBpY29uc10pOg0KKyAgICAgICAgU2hvdWxkIGFwcGVhc2UgYnVpbGQgZXJyb3IgYmVmb3Jl
IGZ1bGwgc3VwcG9ydCBmb3IgaWNvbnMgaXMgYnVpbHQgaW50byBfV0tBcHBsaWNhdGlvbk1hbmlm
ZXN0DQorDQorICAgICAgICAoK1tfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbiBzdXBwb3J0c1Nl
Y3VyZUNvZGluZ10pOg0KKyAgICAgICAgKC1bX1dLQXBwbGljYXRpb25NYW5pZmVzdEljb24gaW5p
dFdpdGhDb2RlcjpdKToNCisgICAgICAgICgtW19XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uIGVu
Y29kZVdpdGhDb2RlcjpdKToNCisgICAgICAgICgtW19XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29u
IGRlYWxsb2NdKToNCisgICAgICAgICgtW19XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uIHNyYzpd
KToNCisgICAgICAgICgtW19XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uIHR5cGU6XSk6DQorICAg
ICAgICAoLVtfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbiBzaXplczpdKToNCisgICAgICAgICgt
W19XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uIHB1cnBvc2U6XSk6DQogMjAyMS0xMC0yMCAgQW50
dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+DQogDQogICAgICAgICBEb24ndCByZS1ldmFs
dWF0ZSB2aWV3cG9ydCBkZXBlbmRlbnQgbWVkaWEgcXVlcmllcyBpZiB0aGUgdmlld3BvcnQgZG9l
c24ndCBjaGFuZ2UNCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3QuaA0KaW5kZXggYjMxZmFmNDk4YzgyLi5mODc5
YWE0NDhkOWEgMTAwNjQ0DQotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLQXBwbGljYXRpb25NYW5pZmVzdC5oDQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5oDQpAQCAtMjUsNiArMjUsOCBAQA0KIA0K
ICNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPg0KICNpbXBvcnQgPFdlYktpdC9XS0Zv
dW5kYXRpb24uaD4NCisjaW1wb3J0IDx3dGYvVmVjdG9yLmg+DQorI2ltcG9ydCA8d3RmL2NvY29h
L1ZlY3RvckNvY29hLmg+DQogDQogI2lmIFRBUkdFVF9PU19JUEhPTkUNCiBAY2xhc3MgVUlDb2xv
cjsNCkBAIC00MSw2ICs0MywxMiBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tBcHBs
aWNhdGlvbk1hbmlmZXN0RGlzcGxheU1vZGUpIHsNCiAgICAgX1dLQXBwbGljYXRpb25NYW5pZmVz
dERpc3BsYXlNb2RlRnVsbFNjcmVlbiwNCiB9IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMu
NCksIGlvcygxMS4zKSk7DQogDQordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dLQXBwbGlj
YXRpb25NYW5pZmVzdEljb25QdXJwb3NlKSB7DQorICAgIF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJ
Y29uUHVycG9zZU1vbm9jaHJvbWUsDQorICAgIF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uUHVy
cG9zZU1hc2thYmxlLA0KKyAgICBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvblB1cnBvc2VBbnks
DQorfSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkp
Ow0KKw0KIFdLX0NMQVNTX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSwgaW9zKDExLjMpKQ0KIEBp
bnRlcmZhY2UgX1dLQXBwbGljYXRpb25NYW5pZmVzdCA6IE5TT2JqZWN0IDxOU1NlY3VyZUNvZGlu
Zz4NCiANCkBAIC01MCw2ICs1OCw3IEBAIFdLX0NMQVNTX0FWQUlMQUJMRShtYWNvcygxMC4xMy40
KSwgaW9zKDExLjMpKQ0KIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgbnVsbGFibGUs
IGNvcHkpIE5TVVJMICpzY29wZTsNCiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNv
cHkpIE5TVVJMICpzdGFydFVSTDsNCiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIF9X
S0FwcGxpY2F0aW9uTWFuaWZlc3REaXNwbGF5TW9kZSBkaXNwbGF5TW9kZTsNCitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXJyYXkgKmljb25zIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7DQogDQogI2lmIFRBUkdFVF9PU19JUEhP
TkUNCiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIG51bGxhYmxlLCBjb3B5KSBVSUNv
bG9yICp0aGVtZUNvbG9yIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDE1LjApKTsNCkBAIC01OSw2ICs2
OCwyMiBAQCBXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCksIGlvcygxMS4zKSkNCiAN
CiArIChfV0tBcHBsaWNhdGlvbk1hbmlmZXN0ICopYXBwbGljYXRpb25NYW5pZmVzdEZyb21KU09O
OihOU1N0cmluZyAqKWpzb24gbWFuaWZlc3RVUkw6KG51bGxhYmxlIE5TVVJMICopbWFuaWZlc3RV
UkwgZG9jdW1lbnRVUkw6KG51bGxhYmxlIE5TVVJMICopZG9jdW1lbnRVUkw7DQogDQorQGVuZA0K
Kw0KK0BpbnRlcmZhY2UgX1dLQXBwbGljYXRpb25NYW5pZmVzdEljb24gOiBOU09iamVjdCA8TlNT
ZWN1cmVDb2Rpbmc+DQorDQorQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU1VSTCAq
c3JjOw0KK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNTdHJpbmcgKnNpemVzOw0K
K0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNTdHJpbmcgKnR5cGU7DQorQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvblB1cnBv
c2UgcHVycG9zZTsNCisNCistICh2b2lkKSBzcmM6KE5TVVJMICopIHNyY1VybDsNCistICh2b2lk
KSBzaXplczooTlNTdHJpbmcgKikgc2l6ZXNTdHJpbmc7DQorLSAodm9pZCkgdHlwZTooTlNTdHJp
bmcgKikgdHlwZVN0cmluZzsNCistICh2b2lkKSBwdXJwb3NlOihfV0tBcHBsaWNhdGlvbk1hbmlm
ZXN0SWNvblB1cnBvc2UpIHB1cnBvc2VWYWx1ZTsNCisNCisNCisNCiBAZW5kDQogDQogTlNfQVNT
VU1FX05PTk5VTExfRU5EDQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3QubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5tbQ0KaW5kZXggNmZkZjA5MDI0ZDg2
Li4xOTdhZWM2NGM5MDkgMTAwNjQ0DQotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5tbQ0KKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3QubW0NCkBAIC00MSw2ICs0MSwz
MCBAQA0KICNpbXBvcnQgIkFwcEtpdFNQSS5oIg0KICNlbmRpZg0KIA0KK3N0YXRpYyBXZWJDb3Jl
OjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlIFdLUHVycG9zZVRvV2ViQ29yZVB1
cnBvc2UoX1dLQXBwbGljYXRpb25NYW5pZmVzdEljb25QdXJwb3NlIHB1cnBvc2UpDQorew0KKyAg
ICBzd2l0Y2gocHVycG9zZSkgew0KKyAgICAgICAgY2FzZSBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0
SWNvblB1cnBvc2VNb25vY2hyb21lOg0KKyAgICAgICAgICAgIHJldHVybiBXZWJDb3JlOjpBcHBs
aWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlOjpNb25vY2hyb21lOw0KKyAgICAgICAgY2Fz
ZSBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvblB1cnBvc2VNYXNrYWJsZToNCisgICAgICAgICAg
ICByZXR1cm4gV2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6UHVycG9zZTo6TWFz
a2FibGU7DQorICAgICAgICBjYXNlIF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uUHVycG9zZUFu
eToNCisgICAgICAgICAgICByZXR1cm4gV2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdDo6SWNv
bjo6UHVycG9zZTo6QW55Ow0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7DQorICAgIH0N
Cit9DQorDQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVz
dDo6SWNvbj4gbWFrZVZlY3RvckVsZW1lbnQoY29uc3QgV2ViQ29yZTo6QXBwbGljYXRpb25NYW5p
ZmVzdDo6SWNvbiosIGlkIGFycmF5RWxlbWVudCkNCit7DQorICAgIF9XS0FwcGxpY2F0aW9uTWFu
aWZlc3RJY29uICppdGVtID0gYXJyYXlFbGVtZW50Ow0KKyAgICByZXR1cm4gV2ViQ29yZTo6QXBw
bGljYXRpb25NYW5pZmVzdDo6SWNvbiB7DQorICAgICAgICBbaXRlbSBzcmNdLA0KKyAgICAgICAg
W2l0ZW0gc2l6ZXNdLA0KKyAgICAgICAgW2l0ZW0gdHlwZV0sDQorICAgICAgICBXS1B1cnBvc2VU
b1dlYkNvcmVQdXJwb3NlKFtpdGVtIHB1cnBvc2VdKSwNCisgICAgfTsNCit9DQorDQogQGltcGxl
bWVudGF0aW9uIF9XS0FwcGxpY2F0aW9uTWFuaWZlc3QNCiANCiAjaWYgRU5BQkxFKEFQUExJQ0FU
SU9OX01BTklGRVNUKQ0KQEAgLTU5LDYgKzgzLDcgQEANCiAgICAgTlNJbnRlZ2VyIGRpc3BsYXkg
PSBbYURlY29kZXIgZGVjb2RlSW50ZWdlckZvcktleTpAImRpc3BsYXkiXTsNCiAgICAgTlNVUkwg
KnN0YXJ0VVJMID0gW2FEZWNvZGVyIGRlY29kZU9iamVjdE9mQ2xhc3M6W05TVVJMIGNsYXNzXSBm
b3JLZXk6QCJzdGFydF91cmwiXTsNCiAgICAgQ29jb2FDb2xvciAqdGhlbWVDb2xvciA9IFthRGVj
b2RlciBkZWNvZGVPYmplY3RPZkNsYXNzOltDb2NvYUNvbG9yIGNsYXNzXSBmb3JLZXk6QCJ0aGVt
ZV9jb2xvciJdOw0KKyAgICBOU0FycmF5ICppY29ucyA9IFthRGVjb2RlciBkZWNvZGVPYmplY3RP
ZkNsYXNzOltOU0FycmF5IGNsYXNzXSBmb3JLZXk6QCJpY29ucyJdOw0KIA0KICAgICBXZWJDb3Jl
OjpBcHBsaWNhdGlvbk1hbmlmZXN0IGNvcmVBcHBsaWNhdGlvbk1hbmlmZXN0IHsNCiAgICAgICAg
IFdURjo6U3RyaW5nKG5hbWUpLA0KQEAgLTY4LDYgKzkzLDcgQEANCiAgICAgICAgIHN0YXRpY19j
YXN0PFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q6OkRpc3BsYXk+KGRpc3BsYXkpLA0KICAg
ICAgICAgVVJMKHN0YXJ0VVJMKSwNCiAgICAgICAgIFdlYkNvcmU6OnJvdW5kQW5kQ2xhbXBUb1NS
R0JBTG9zc3kodGhlbWVDb2xvci5DR0NvbG9yKSwNCisgICAgICAgIFZlY3RvcjxXZWJDb3JlOjpB
cHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uPihtYWtlVmVjdG9yPFdlYkNvcmU6OkFwcGxpY2F0aW9u
TWFuaWZlc3Q6Okljb24+KGljb25zKSksDQogICAgIH07DQogDQogICAgIEFQSTo6T2JqZWN0Ojpj
b25zdHJ1Y3RJbldyYXBwZXI8QVBJOjpBcHBsaWNhdGlvbk1hbmlmZXN0PihzZWxmLCBXVEZNb3Zl
KGNvcmVBcHBsaWNhdGlvbk1hbmlmZXN0KSk7DQpAQCAtOTQsNiArMTIwLDcgQEANCiAgICAgW2FD
b2RlciBlbmNvZGVJbnRlZ2VyOnN0YXRpY19jYXN0PE5TSW50ZWdlcj4oX2FwcGxpY2F0aW9uTWFu
aWZlc3QtPmFwcGxpY2F0aW9uTWFuaWZlc3QoKS5kaXNwbGF5KSBmb3JLZXk6QCJkaXNwbGF5Il07
DQogICAgIFthQ29kZXIgZW5jb2RlT2JqZWN0OnNlbGYuc3RhcnRVUkwgZm9yS2V5OkAic3RhcnRf
dXJsIl07DQogICAgIFthQ29kZXIgZW5jb2RlT2JqZWN0OnNlbGYudGhlbWVDb2xvciBmb3JLZXk6
QCJ0aGVtZV9jb2xvciJdOw0KKyAgICBbYUNvZGVyIGVuY29kZU9iamVjdDpzZWxmLmljb25zIGZv
cktleTpAImljb25zIl07DQogfQ0KIA0KICsgKF9XS0FwcGxpY2F0aW9uTWFuaWZlc3QgKilhcHBs
aWNhdGlvbk1hbmlmZXN0RnJvbUpTT046KE5TU3RyaW5nICopanNvbiBtYW5pZmVzdFVSTDooTlNV
UkwgKiltYW5pZmVzdFVSTCBkb2N1bWVudFVSTDooTlNVUkwgKilkb2N1bWVudFVSTA0KQEAgLTE1
OCw2ICsxODUsMTEgQEAgc3RhdGljIE5TU3RyaW5nICpudWxsYWJsZU5TU3RyaW5nKGNvbnN0IFdU
Rjo6U3RyaW5nJiBzdHJpbmcpDQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOw0KIH0NCiANCist
IChOU0FycmF5ICopaWNvbnMNCit7DQorICAgIHJldHVybiBuaWw7DQorfQ0KKw0KICNlbHNlIC8v
IEVOQUJMRShBUFBMSUNBVElPTl9NQU5JRkVTVCkNCiANCiArIChfV0tBcHBsaWNhdGlvbk1hbmlm
ZXN0ICopYXBwbGljYXRpb25NYW5pZmVzdEZyb21KU09OOihOU1N0cmluZyAqKWpzb24gbWFuaWZl
c3RVUkw6KE5TVVJMICopbWFuaWZlc3RVUkwgZG9jdW1lbnRVUkw6KE5TVVJMICopZG9jdW1lbnRV
UkwNCkBAIC0yMTUsNiArMjQ3LDEwNyBAQCBzdGF0aWMgTlNTdHJpbmcgKm51bGxhYmxlTlNTdHJp
bmcoY29uc3QgV1RGOjpTdHJpbmcmIHN0cmluZykNCiAgICAgcmV0dXJuIF9XS0FwcGxpY2F0aW9u
TWFuaWZlc3REaXNwbGF5TW9kZUJyb3dzZXI7DQogfQ0KIA0KKy0gKE5TQXJyYXkgKilpY29ucw0K
K3sNCisgICAgcmV0dXJuIG5pbDsNCit9DQorDQogI2VuZGlmIC8vIEVOQUJMRShBUFBMSUNBVElP
Tl9NQU5JRkVTVCkNCiANCiBAZW5kDQorDQorQGltcGxlbWVudGF0aW9uIF9XS0FwcGxpY2F0aW9u
TWFuaWZlc3RJY29uDQorI2lmIEVOQUJMRShBUFBMSUNBVElPTl9NQU5JRkVTVCkNCisNCisrIChC
T09MKXN1cHBvcnRzU2VjdXJlQ29kaW5nDQorew0KKyAgICByZXR1cm4gWUVTOw0KK30NCisNCist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb2RlcjooTlNDb2RlciAqKWFEZWNvZGVyDQorew0KKyAg
ICBOU1VSTCAqc3JjID0gW2FEZWNvZGVyIGRlY29kZU9iamVjdE9mQ2xhc3M6W05TVVJMIGNsYXNz
XSBmb3JLZXk6QCJzcmMiXTsNCisgICAgTlNTdHJpbmcgKnNpemVzID0gW2FEZWNvZGVyIGRlY29k
ZU9iamVjdE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXSBmb3JLZXk6QCJzaXplcyJdOw0KKyAgICBO
U1N0cmluZyAqdHlwZSA9IFthRGVjb2RlciBkZWNvZGVPYmplY3RPZkNsYXNzOltOU1N0cmluZyBj
bGFzc10gZm9yS2V5OkAidHlwZSJdOw0KKyAgICBOU0ludGVnZXIgcHVycG9zZSA9IFthRGVjb2Rl
ciBkZWNvZGVJbnRlZ2VyRm9yS2V5OkAicHVycG9zZSJdOw0KKw0KKyAgICBXZWJDb3JlOjpBcHBs
aWNhdGlvbk1hbmlmZXN0OjpJY29uIGNvcmVBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbiB7DQorICAg
ICAgICBVUkwoc3JjKSwNCisgICAgICAgIFdURjo6U3RyaW5nKHNpemVzKSwNCisgICAgICAgIFdU
Rjo6U3RyaW5nKHR5cGUpLA0KKyAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QXBwbGljYXRp
b25NYW5pZmVzdDo6SWNvbjo6UHVycG9zZT4ocHVycG9zZSksDQorICAgIH07DQorDQorICAgIHJl
dHVybiBzZWxmOw0KK30NCisNCistICh2b2lkKWVuY29kZVdpdGhDb2RlcjooTlNDb2RlciAqKWFD
b2Rlcg0KK3sNCisgICAgVU5VU0VEX1BBUkFNKGFDb2Rlcik7DQorfQ0KKw0KKy0gKHZvaWQpZGVh
bGxvYw0KK3sNCisgICAgaWYgKFdlYkNvcmVPYmpDU2NoZWR1bGVEZWFsbG9jYXRlT25NYWluUnVu
TG9vcChfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbi5jbGFzcywgc2VsZikpDQorICAgICAgICBy
ZXR1cm47DQorDQorICAgIFtzdXBlciBkZWFsbG9jXTsNCit9DQorDQorLSAodm9pZClzcmM6KE5T
VVJMICopc3JjVXJsDQorew0KKyAgICBfc3JjID0gc3JjVXJsOw0KK30NCisNCistICh2b2lkKXR5
cGU6KE5TU3RyaW5nICopdHlwZVN0cmluZw0KK3sNCisgICAgX3R5cGUgPSB0eXBlU3RyaW5nOw0K
K30NCisNCistICh2b2lkKXNpemVzOihOU1N0cmluZyAqKXNpemVzU3RyaW5nDQorew0KKyAgICBf
c2l6ZXMgPSBzaXplc1N0cmluZzsNCit9DQorDQorLSAodm9pZClwdXJwb3NlOihfV0tBcHBsaWNh
dGlvbk1hbmlmZXN0SWNvblB1cnBvc2UpcHVycG9zZVZhbHVlDQorew0KKyAgICBfcHVycG9zZSA9
IHB1cnBvc2VWYWx1ZTsNCit9DQorDQorI2Vsc2UNCisNCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhDb2RlcjooTlNDb2RlciAqKWFEZWNvZGVyDQorew0KKyAgICBVTlVTRURfUEFSQU0oYURlY29k
ZXIpOw0KKyAgICBbc2VsZiByZWxlYXNlXTsNCisgICAgcmV0dXJuIG5pbDsNCit9DQorDQorLSAo
dm9pZCllbmNvZGVXaXRoQ29kZXI6KE5TQ29kZXIgKilhQ29kZXINCit7DQorICAgIFVOVVNFRF9Q
QVJBTShhQ29kZXIpOw0KK30NCisNCistICh2b2lkKXNyYzooTlNVUkwgKilzcmNVcmwNCit7DQor
ICAgIFVOVVNFRF9QQVJBTShzcmNVcmwpOw0KK30NCisNCistICh2b2lkKXR5cGU6KE5TU3RyaW5n
ICopdHlwZVN0cmluZw0KK3sNCisgICAgVU5VU0VEX1BBUkFNKHR5cGVTdHJpbmcpOw0KK30NCisN
CistICh2b2lkKXNpemVzOihOU1N0cmluZyAqKXNpemVzU3RyaW5nDQorew0KKyAgICBVTlVTRURf
UEFSQU0oc2l6ZXNTdHJpbmcpOw0KK30NCisNCistICh2b2lkKXB1cnBvc2U6KF9XS0FwcGxpY2F0
aW9uTWFuaWZlc3RJY29uUHVycG9zZSlwdXJwb3NlVmFsdWUNCit7DQorICAgIFVOVVNFRF9QQVJB
TShwdXJwb3NlVmFsdWUpDQorfQ0KKw0KKw0KKyNlbmRpZg0KK0BlbmQNCmRpZmYgLS1naXQgYS9U
b29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cNCmluZGV4IDM2ZjYxMmU2ZDQxZS4uZmJk
ZjJmMTRjNDQ0IDEwMDY0NA0KLS0tIGEvVG9vbHMvQ2hhbmdlTG9nDQorKysgYi9Ub29scy9DaGFu
Z2VMb2cNCkBAIC0xLDMgKzEsMjUgQEANCisyMDIxLTEwLTIwIFJhY2hlbCBHaW5zYmVyZyA8cmdp
bnNiZXJnQGFwcGxlLmNvbT4NCisNCisgICAgICAgIEFkZCBzdXBwb3J0IGluIFdlYkNvcmUgZm9y
IHdlYiBhcHAgbWFuaWZlc3QgaWNvbnMNCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMzEzMzkNCisNCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLg0KKw0KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQXBwbGlj
YXRpb25NYW5pZmVzdFBhcnNlci5jcHA6DQorICAgICAgICAoQXBwbGljYXRpb25NYW5pZmVzdFBh
cnNlclRlc3Q6OnBhcnNlSWNvbkZpcnN0VG9wTGV2ZWxQcm9wZXJ0eSk6DQorICAgICAgICBGdW5j
dGlvbiB0byBjcmVhdGUgSlNPTiBmb3IgaWNvbiBhdHRyaWJ1dGVzLiBUaGlzIGlzIA0KKyAgICAg
ICAgbmVjZXNzYXJ5IGJlY2F1c2UgaWNvbnMgYXJlIGluIGEgbGlzdCwgd2hlcmFzIGFsbCBvdGhl
cg0KKyAgICAgICAgYXR0cmlidXRlcyBpbiBhcHAgbWFuaWZlc3QgYXJlIG5vdC4NCisNCisgICAg
ICAgIChBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyVGVzdDo6dGVzdEljb25zU3JjKToNCisgICAg
ICAgIChBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyVGVzdDo6dGVzdEljb25zVHlwZSk6DQorICAg
ICAgICAoQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlclRlc3Q6OnRlc3RJY29uc1NpemVzKToNCisg
ICAgICAgIChBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyVGVzdDo6dGVzdEljb25zUHVycG9zZSk6
DQorICAgICAgICBGdW5jdGlvbnMgZm9yIGVhY2ggb2YgdGhlIGljb24gYXR0cmlidXRlcy4NCisN
CisgICAgICAgIChURVNUX0YpOg0KKyAgICAgICAgQ2FsbHMgdGhlIHZhcmlvdXMgaWNvbiB0ZXN0
IGZ1bmN0aW9ucyB3aXRoIGRpZmZlcmVudCBpbnB1dA0KKw0KIDIwMjEtMTAtMjAgIE1pY2hhZWwg
Q2F0YW56YXJvICA8bWNhdGFuemFyb0Bnbm9tZS5vcmc+DQogDQogICAgICAgICBEbyBub3QgdXNl
IHN0cmVycm9yKCkNCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHANCmluZGV4IGMzOTk2NTQ0
NjUyMC4uMjQ0MTkyMmJkMjY5IDEwMDY0NA0KLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwDQorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHANCkBA
IC03NCw2ICs3NCwxMiBAQCBwdWJsaWM6DQogICAgICAgICByZXR1cm4gcGFyc2VTdHJpbmcobWFu
aWZlc3RDb250ZW50KTsNCiAgICAgfQ0KIA0KKyAgICBBcHBsaWNhdGlvbk1hbmlmZXN0IHBhcnNl
SWNvbkZpcnN0VG9wTGV2ZWxQcm9wZXJ0eShjb25zdCBTdHJpbmcgJiBrZXksIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpDQorICAgIHsNCisgICAgICAgIFN0cmluZyBtYW5pZmVzdENvbnRlbnQgPSAieyBc
Imljb25zXCI6IFt7XCIiICsga2V5ICsgIlwiOiAiICsgdmFsdWUgKyAiIH1dfSI7DQorICAgICAg
ICByZXR1cm4gcGFyc2VTdHJpbmcobWFuaWZlc3RDb250ZW50KTsNCisgICAgfQ0KKw0KICAgICB2
b2lkIHRlc3RTdGFydFVSTChjb25zdCBTdHJpbmcmIHJhd0pTT04sIGNvbnN0IFN0cmluZyYgZXhw
ZWN0ZWRWYWx1ZSkNCiAgICAgew0KICAgICAgICAgdGVzdFN0YXJ0VVJMKHJhd0pTT04sIHsgeyB9
LCBleHBlY3RlZFZhbHVlIH0pOw0KQEAgLTEzNCw2ICsxNDAsMzQgQEAgcHVibGljOg0KICAgICAg
ICAgRVhQRUNUX0VRKGV4cGVjdGVkVmFsdWUsIHZhbHVlKTsNCiAgICAgfQ0KIA0KKyAgICB2b2lk
IHRlc3RJY29uc1NyYyhjb25zdCBTdHJpbmcmIHJhd0pTT04sIGNvbnN0IFVSTCYgZXhwZWN0ZWRW
YWx1ZSkNCisgICAgew0KKyAgICAgICAgYXV0byBtYW5pZmVzdCA9IHBhcnNlSWNvbkZpcnN0VG9w
TGV2ZWxQcm9wZXJ0eSgic3JjIiwgcmF3SlNPTik7DQorICAgICAgICBhdXRvIHZhbHVlID0gbWFu
aWZlc3QuaWNvbnNbMF0uc3JjOw0KKyAgICAgICAgRVhQRUNUX1NUUkVRKGV4cGVjdGVkVmFsdWUu
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdmFsdWUuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7DQor
ICAgIH0NCisNCisgICAgdm9pZCB0ZXN0SWNvbnNUeXBlKGNvbnN0IFN0cmluZyAmcmF3SlNPTiwg
Y29uc3QgU3RyaW5nJiBleHBlY3RlZFZhbHVlKQ0KKyAgICB7DQorICAgICAgICBhdXRvIG1hbmlm
ZXN0ID0gcGFyc2VJY29uRmlyc3RUb3BMZXZlbFByb3BlcnR5KCJ0eXBlIiwgcmF3SlNPTik7DQor
ICAgICAgICBhdXRvIHZhbHVlID0gbWFuaWZlc3QuaWNvbnNbMF0udHlwZTsNCisgICAgICAgIEVY
UEVDVF9TVFJFUShleHBlY3RlZFZhbHVlLnV0ZjgoKS5kYXRhKCksIHZhbHVlLnV0ZjgoKS5kYXRh
KCkpOw0KKyAgICB9DQorDQorICAgIHZvaWQgdGVzdEljb25zU2l6ZXMoY29uc3QgU3RyaW5nICZy
YXdKU09OLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmFsdWUpDQorICAgIHsNCisgICAgICAgIGF1
dG8gbWFuaWZlc3QgPSBwYXJzZUljb25GaXJzdFRvcExldmVsUHJvcGVydHkoInNpemVzIiwgcmF3
SlNPTik7DQorICAgICAgICBhdXRvIHZhbHVlID0gbWFuaWZlc3QuaWNvbnNbMF0uc2l6ZXM7DQor
ICAgICAgICBFWFBFQ1RfU1RSRVEoZXhwZWN0ZWRWYWx1ZS51dGY4KCkuZGF0YSgpLCB2YWx1ZS51
dGY4KCkuZGF0YSgpKTsNCisgICAgfQ0KKw0KKyAgICB2b2lkIHRlc3RJY29uc1B1cnBvc2UoY29u
c3QgU3RyaW5nICZyYXdKU09OLCBBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlIGV4
cGVjdGVkVmFsdWUpDQorICAgIHsNCisgICAgICAgIGF1dG8gbWFuaWZlc3QgPSBwYXJzZUljb25G
aXJzdFRvcExldmVsUHJvcGVydHkoInB1cnBvc2UiLCByYXdKU09OKTsNCisgICAgICAgIGF1dG8g
dmFsdWUgPSBtYW5pZmVzdC5pY29uc1swXS5wdXJwb3NlOw0KKyAgICAgICAgRVhQRUNUX0VRKGV4
cGVjdGVkVmFsdWUsIHZhbHVlKTsNCisgICAgfQ0KKw0KIH07DQogDQogc3RhdGljIHZvaWQgYXNz
ZXJ0TWFuaWZlc3RIYXNEZWZhdWx0VmFsdWVzKGNvbnN0IFVSTCYgbWFuaWZlc3RVUkwsIGNvbnN0
IFVSTCYgZG9jdW1lbnRVUkwsIGNvbnN0IEFwcGxpY2F0aW9uTWFuaWZlc3QmIG1hbmlmZXN0KQ0K
QEAgLTMyMyw0ICszNTcsMjcgQEAgVEVTVF9GKEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXJUZXN0
LCBXaGl0ZXNwYWNlKQ0KICAgICBFWFBFQ1RfU1RSRVEoIlBBU1MiLCBtYW5pZmVzdC5uYW1lLnV0
ZjgoKS5kYXRhKCkpOw0KIH0NCiANCitURVNUX0YoQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlclRl
c3QsIEljb25zKQ0KK3sNCisgICAgVVJMIHNyY1VSTCA9IHsgeyB9LCAiaHR0cHM6Ly9leGFtcGxl
LmNvbS9pY29uLmpwZyIgfTsNCisgICAgdGVzdEljb25zU3JjKCJcImljb24uanBnXCIiLCBzcmNV
UkwpOw0KKyAgICB0ZXN0SWNvbnNUeXBlKCJcImltYWdlL3dlYnBcIiIsICJpbWFnZS93ZWJwIik7
DQorICAgIHRlc3RJY29uc1NpemVzKCJcIjI1NngyNTZcIiIsICIyNTZ4MjU2Iik7DQorICAgIHRl
c3RJY29uc1NpemVzKCJcIjcyeDcyIDk2eDk2XCIiLCAiNzJ4NzIgOTZ4OTYiKTsNCisNCisgICAg
dGVzdEljb25zUHVycG9zZSgiXCJtb25vY2hyb21lXCIiLCBBcHBsaWNhdGlvbk1hbmlmZXN0OjpJ
Y29uOjpQdXJwb3NlOjpNb25vY2hyb21lKTsNCisgICAgdGVzdEljb25zUHVycG9zZSgiXCJtYXNr
YWJsZVwiIiwgQXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6UHVycG9zZTo6TWFza2FibGUpOw0K
KyAgICB0ZXN0SWNvbnNQdXJwb3NlKCJcImFueVwiIiwgQXBwbGljYXRpb25NYW5pZmVzdDo6SWNv
bjo6UHVycG9zZTo6QW55KTsNCisgICAgdGVzdEljb25zUHVycG9zZSgiXCIxMjNcIiIsIEFwcGxp
Y2F0aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2U6OkFueSk7DQorICAgIHRlc3RJY29uc1B1cnBv
c2UoIlwiXHRNT05PQ0hST01FXCIiLCBBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3Nl
OjpNb25vY2hyb21lKTsNCisNCisgICAgdGVzdEljb25zUHVycG9zZSgiMTIzIiwgQXBwbGljYXRp
b25NYW5pZmVzdDo6SWNvbjo6UHVycG9zZTo6QW55KTsNCisgICAgdGVzdEljb25zUHVycG9zZSgi
bnVsbCIsIEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2U6OkFueSk7DQorICAgIHRl
c3RJY29uc1B1cnBvc2UoInRydWUiLCBBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3Nl
OjpBbnkpOw0KKyAgICB0ZXN0SWNvbnNQdXJwb3NlKCJ7IH0iLCBBcHBsaWNhdGlvbk1hbmlmZXN0
OjpJY29uOjpQdXJwb3NlOjpBbnkpOw0KKyAgICB0ZXN0SWNvbnNQdXJwb3NlKCJbIF0iLCBBcHBs
aWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlOjpBbnkpOw0KKyAgICB0ZXN0SWNvbnNQdXJw
b3NlKCJcIlwiIiwgQXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6UHVycG9zZTo6QW55KTsNCisg
ICAgdGVzdEljb25zUHVycG9zZSgiXCJnYXJiYWdlIHN0cmluZyBcIiIsIEFwcGxpY2F0aW9uTWFu
aWZlc3Q6Okljb246OlB1cnBvc2U6OkFueSk7DQorfQ0KKw0KICNlbmRpZg0K
</data>
<flag name="commit-queue"
          id="466318"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443585</attachid>
            <date>2021-11-08 12:18:54 -0800</date>
            <delta_ts>2021-11-09 12:02:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>rdar_82738657</filename>
            <type>text/plain</type>
            <size>22831</size>
            <attacher>rginsberg</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjNDdhZjI4YzFjNzAuLmU3NjMzYThmMWUwZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQwIEBACisyMDIxLTEwLTE1ICBSYWNoZWwgR2luc2JlcmcgIDxyZ2luc2JlcmdAYXBw
bGUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGluIFdlYkNvcmUgZm9yIHdlYiBhcHAgbWFu
aWZlc3QgaWNvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzMTMzOQorICAgICAgICByZGFyOi8vODQzMTEzMDYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0cyBhcmUgYWRkZWQgdG8gT3BlblNvdXJj
ZS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQXBwbGljYXRpb25NYW5pZmVzdFBh
cnNlci5jcHAKKworICAgICAgICAqIE1vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNh
dGlvbk1hbmlmZXN0Lmg6CisgICAgICAgIEEgbmV3IGVudW0gZm9yIHRoZSBpY29uIHB1cnBvc2Ug
KEljb246OlB1cnBvc2UpIHdhcyBhZGRlZCB0byB0aGUgQXBwbGljYXRpb25NYW5pZmVzdDo6SWNv
biBzdHJ1Y3QuCisgICAgICAgIEEgbmV3IEljb24gc3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGUg
Zm9yIHRoZSBzcmMsIHNpemVzLAorICAgICAgICB0eXBlLCBhbmQgSWNvbjo6UHVycG9zZSBhdHRy
aWJ1dGVzIGZvciBhcHAgbWFuaWZlc3QgaWNvbnMgd2FzIGFkZGVkIHRvIHRoZSBBcHBsaWNhdGlv
bk1hbmlmZXN0CisgICAgICAgIHN0cnVjdC4gQSB2ZWN0b3Igb2YgSWNvbidzIGlzIGFkZGVkIGFz
IGEgdmFyaWFibGUgZm9yCisgICAgICAgIHRoZSBBcHBsaWNhdGlvbk1hbmlmZXN0IHN0cnVjdC4K
KyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q6OmVuY29kZSBjb25zdCk6Cisg
ICAgICAgIEFkZGVkIGljb25zIHRvIGVuY29kZSBmdW5jdGlvbgorICAgICAgICAoV2ViY29yZTo6
QXBwbGljYXRpb25NYW5pZmVzdDo6ZGVjb2RlKToKKyAgICAgICAgQWRkZWQgaWNvbnMgdG8gZGVj
b2RlIGZ1bmN0aW9uCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29u
OjplbmNvZGUgY29uc3QpOgorICAgICAgICBDcmVhdGUgZW5jb2RlIGZ1bmN0aW9uIGZvciBBcHBs
aWNhdGlvbk1hbmlmZXN0OjpJY29uCisgICAgICAgIChXZWJjb3JlOjpBcHBsaWNhdGlvbk1hbmlm
ZXN0OjpJY29uOjpkZWNvZGUpOgorICAgICAgICBDcmVhdGUgZGVjb2RlIGZ1bmN0aW9uIGZvciBB
cHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uCisKKworICAgICAgICAqIE1vZHVsZXMvYXBwbGljYXRp
b25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlTWFuaWZlc3QpOgorICAgICAgICBB
ZGRlZCBjYWxsIHRvIHBhcnNlSWNvbnMKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFu
aWZlc3RQYXJzZXI6OnBhcnNlSWNvbnMpOgorICAgICAgICBwYXJzZUljb25zIGl0ZXJhdGVzIHRo
cm91Z2ggdGhlIGxpc3Qgb2YgaWNvbnMsIHBlcmZvcm1zIGNoZWNrcyBmb3IgYXR0cmlidXRlLAor
ICAgICAgICBhbmQgdGhlbiwgaWYgdmFsaWQsIGFkZHMgdGhlIGF0dHJpYnV0ZSB0byBhbiBBcHBs
aWNhdGlvbk1hbmlmZXN0SWNvbiBzdHJ1Y3QKKyAgICAgICAgdGhhdCBpcyBhcHBlbmRlZCB0byBh
IG5ldyBWZWN0b3Igb2YgQXBwbGljYXRpb25NYW5pZmVzdEljb25zLgorCisgICAgICAgICogTW9k
dWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuaDoKKyAg
ICAgICAgRGVjbGFyZSBmdW5jdGlvbnMgZm9yIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIKKwog
MjAyMS0xMS0wOCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAg
ICAgICBFbmFibGluZyAibWVkaWEgc291cmNlIGlubGluZSBwYWludGluZyIgYnkgZGVmYXVsdCBz
aG91bGQgd29yayB3aGVuIHVzaW5nIEdQVSBQcm9jZXNzIGZvciBtZWRpYQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFu
aWZlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBs
aWNhdGlvbk1hbmlmZXN0LmgKaW5kZXggZmE1NDFiMmIzMmJhLi44NzZjMDI3ZTk1YzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNh
dGlvbk1hbmlmZXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1h
bmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3QuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUg
IkNvbG9yLmgiCiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvVVJM
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTQxLDYgKzQyLDIyIEBAIHN0cnVjdCBBcHBsaWNhdGlvbk1hbmlmZXN0IHsKICAgICAgICAgRnVs
bHNjcmVlbiwKICAgICB9OwogCisgICAgc3RydWN0IEljb24geworICAgICAgICBlbnVtIGNsYXNz
IFB1cnBvc2UgeworICAgICAgICAgICAgTW9ub2Nocm9tZSwKKyAgICAgICAgICAgIE1hc2thYmxl
LAorICAgICAgICAgICAgQW55LAorICAgICAgICB9OworCisgICAgICAgIFVSTCBzcmM7CisgICAg
ICAgIFN0cmluZyBzaXplczsKKyAgICAgICAgU3RyaW5nIHR5cGU7CisgICAgICAgIFZlY3RvcjxQ
dXJwb3NlPiBwdXJwb3NlczsKKworICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb24+IGRlY29kZShE
ZWNvZGVyJik7CisgICAgfTsKKwogICAgIFN0cmluZyBuYW1lOwogICAgIFN0cmluZyBzaG9ydE5h
bWU7CiAgICAgU3RyaW5nIGRlc2NyaXB0aW9uOwpAQCAtNDgsNiArNjUsNyBAQCBzdHJ1Y3QgQXBw
bGljYXRpb25NYW5pZmVzdCB7CiAgICAgRGlzcGxheSBkaXNwbGF5OwogICAgIFVSTCBzdGFydFVS
TDsKICAgICBDb2xvciB0aGVtZUNvbG9yOworICAgIFZlY3RvcjxJY29uPiBpY29uczsKIAogICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxBcHBsaWNhdGlv
bk1hbmlmZXN0PiBkZWNvZGUoRGVjb2RlciYpOwpAQCAtNTYsNyArNzQsNyBAQCBzdHJ1Y3QgQXBw
bGljYXRpb25NYW5pZmVzdCB7CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBBcHBsaWNh
dGlvbk1hbmlmZXN0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBlbmNv
ZGVyIDw8IG5hbWUgPDwgc2hvcnROYW1lIDw8IGRlc2NyaXB0aW9uIDw8IHNjb3BlIDw8IGRpc3Bs
YXkgPDwgc3RhcnRVUkwgPDwgdGhlbWVDb2xvcjsKKyAgICBlbmNvZGVyIDw8IG5hbWUgPDwgc2hv
cnROYW1lIDw8IGRlc2NyaXB0aW9uIDw8IHNjb3BlIDw8IGRpc3BsYXkgPDwgc3RhcnRVUkwgPDwg
dGhlbWVDb2xvciA8PCBpY29uczsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KQEAgLTc4
LDYgKzk2LDMwIEBAIHN0ZDo6b3B0aW9uYWw8QXBwbGljYXRpb25NYW5pZmVzdD4gQXBwbGljYXRp
b25NYW5pZmVzdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudGhlbWVDb2xvcikpCiAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQuaWNvbnMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgQXBwbGljYXRpb25NYW5p
ZmVzdDo6SWNvbjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2Rl
ciA8PCBzcmMgPDwgc2l6ZXMgPDwgdHlwZSA8PCBwdXJwb3NlczsKK30KKwordGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbj4gQXBw
bGljYXRpb25NYW5pZmVzdDo6SWNvbjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAg
QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbiByZXN1bHQ7CisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQuc3JjKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3VsdC5zaXplcykpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudHlwZSkpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQucHVycG9zZXMpKQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAg
LTk2LDYgKzEzOCwxNSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkFw
cGxpY2F0aW9uTWFuaWZlc3Q6OkRpc3BsYXk+IHsKICAgICA+OwogfTsKIAordGVtcGxhdGU8PiBz
dHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJw
b3NlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6
QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6UHVycG9zZSwKKyAgICAgICAgV2ViQ29yZTo6QXBw
bGljYXRpb25NYW5pZmVzdDo6SWNvbjo6UHVycG9zZTo6TW9ub2Nocm9tZSwKKyAgICAgICAgV2Vi
Q29yZTo6QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6UHVycG9zZTo6TWFza2FibGUsCisgICAg
ICAgIFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2U6OkFueQorICAg
ID47Cit9OworCiB9IC8vIG5hbWVzcGFjZSBXVEY7CiAKICNlbmRpZiAvLyBFTkFCTEUoQVBQTElD
QVRJT05fTUFOSUZFU1QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxp
Y2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNl
ci5jcHAKaW5kZXggNGNiMGRmNzcwY2Q4Li4yZWNjNDhiYTUyZDcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0
UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZl
c3QvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHAKQEAgLTc4LDYgKzc4LDcgQEAgQXBwbGlj
YXRpb25NYW5pZmVzdCBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpwYXJzZU1hbmlmZXN0KGNv
bnN0IFN0cmluZyYgdGV4dCwKICAgICBwYXJzZWRNYW5pZmVzdC5zaG9ydE5hbWUgPSBwYXJzZVNo
b3J0TmFtZSgqbWFuaWZlc3QpOwogICAgIHBhcnNlZE1hbmlmZXN0LnNjb3BlID0gcGFyc2VTY29w
ZSgqbWFuaWZlc3QsIGRvY3VtZW50VVJMLCBwYXJzZWRNYW5pZmVzdC5zdGFydFVSTCk7CiAgICAg
cGFyc2VkTWFuaWZlc3QudGhlbWVDb2xvciA9IHBhcnNlQ29sb3IoKm1hbmlmZXN0LCAidGhlbWVf
Y29sb3IiX3MpOworICAgIHBhcnNlZE1hbmlmZXN0Lmljb25zID0gcGFyc2VJY29ucygqbWFuaWZl
c3QpOwogCiAgICAgaWYgKG1fZG9jdW1lbnQpCiAgICAgICAgIG1fZG9jdW1lbnQtPnByb2Nlc3NB
cHBsaWNhdGlvbk1hbmlmZXN0KHBhcnNlZE1hbmlmZXN0KTsKQEAgLTE3NCw2ICsxNzUsOTAgQEAg
U3RyaW5nIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlU2hvcnROYW1lKGNvbnN0IEpT
T046Ok9iamVjdCYgbWFuaWZlc3QpCiAgICAgcmV0dXJuIHBhcnNlR2VuZXJpY1N0cmluZyhtYW5p
ZmVzdCwgInNob3J0X25hbWUiX3MpOwogfQogCitWZWN0b3I8QXBwbGljYXRpb25NYW5pZmVzdDo6
SWNvbj4gQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2VJY29ucyhjb25zdCBKU09OOjpP
YmplY3QmIG1hbmlmZXN0KQoreworICAgIGF1dG8gdmFsdWUgPSBtYW5pZmVzdC5nZXRWYWx1ZSgi
aWNvbnMiKTsKKworICAgIFZlY3RvcjxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uPiBpbWFnZVJl
c291cmNlczsKKworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBpbWFnZVJlc291cmNl
czsKKyAgICBhdXRvIGFycmF5VmFsdWUgPSB2YWx1ZS0+YXNBcnJheSgpOworCisgICAgaWYgKCFh
cnJheVZhbHVlKSB7CisgICAgICAgIGxvZ0RldmVsb3Blcldhcm5pbmcoIlRoZSB2YWx1ZSBvZiBp
Y29ucyBpcyBub3QgYSB2YWxpZCBhcnJheS4iX3MpOworICAgICAgICByZXR1cm4gaW1hZ2VSZXNv
dXJjZXM7CisgICAgfQorCisgICAgZm9yIChjb25zdCBhdXRvJiBpY29uVmFsdWUgOiAqYXJyYXlW
YWx1ZSkgeworICAgICAgICBBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uIGN1cnJlbnRJY29uOwor
ICAgICAgICBhdXRvIGF1dG9PYmplY3RWYWx1ZSA9IGljb25WYWx1ZS0+YXNPYmplY3QoKTsKKyAg
ICAgICAgaWYgKCFhdXRvT2JqZWN0VmFsdWUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgY29uc3QgSlNPTjo6T2JqZWN0ICpvYmplY3RWYWx1ZSA9IGF1dG9PYmplY3RWYWx1ZS5nZXQo
KTsKKworICAgICAgICBhdXRvIHNyY1ZhbHVlID0gb2JqZWN0VmFsdWUtPmdldFZhbHVlKCJzcmMi
X3MpOworICAgICAgICBpZiAoIXNyY1ZhbHVlKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGF1dG8gc3JjU3RyaW5nVmFsdWUgPSBzcmNWYWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAg
aWYgKCFzcmNTdHJpbmdWYWx1ZSkgeworICAgICAgICAgICAgbG9nTWFuaWZlc3RQcm9wZXJ0eU5v
dEFTdHJpbmcoInNyYyJfcyk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAg
ICAgICBVUkwgc3JjVVJMKG1fbWFuaWZlc3RVUkwsIHNyY1N0cmluZ1ZhbHVlKTsKKyAgICAgICAg
aWYgKHNyY1VSTC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYg
KCFzcmNVUkwuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBsb2dNYW5pZmVzdFByb3BlcnR5SW52
YWxpZFVSTCgic3JjIl9zKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAg
ICAgIGN1cnJlbnRJY29uLnNyYyA9IHNyY1VSTDsKKworICAgICAgICBjdXJyZW50SWNvbi5zaXpl
cyA9IHBhcnNlR2VuZXJpY1N0cmluZygqb2JqZWN0VmFsdWUsICJzaXplcyJfcyk7CisKKyAgICAg
ICAgY3VycmVudEljb24udHlwZSA9IHBhcnNlR2VuZXJpY1N0cmluZygqb2JqZWN0VmFsdWUsICJ0
eXBlIl9zKTsKKworICAgICAgICBhdXRvIHB1cnBvc2VWYWx1ZSA9IG9iamVjdFZhbHVlLT5nZXRW
YWx1ZSgicHVycG9zZSJfcyk7CisgICAgICAgIFZlY3RvcjxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJ
Y29uOjpQdXJwb3NlPiBwdXJwb3NlczsKKworICAgICAgICBpZiAoIXB1cnBvc2VWYWx1ZSkgewor
ICAgICAgICAgICAgcHVycG9zZXMuYXBwZW5kKEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1
cnBvc2U6OkFueSk7CisgICAgICAgICAgICBjdXJyZW50SWNvbi5wdXJwb3NlcyA9IHB1cnBvc2Vz
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byBwdXJwb3NlU3RyaW5nVmFsdWUg
PSBwdXJwb3NlVmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAoIXB1cnBvc2VTdHJp
bmdWYWx1ZSkgeworICAgICAgICAgICAgICAgIGxvZ01hbmlmZXN0UHJvcGVydHlOb3RBU3RyaW5n
KCJwdXJwb3NlIl9zKTsKKyAgICAgICAgICAgICAgICBwdXJwb3Nlcy5hcHBlbmQoQXBwbGljYXRp
b25NYW5pZmVzdDo6SWNvbjo6UHVycG9zZTo6QW55KTsKKyAgICAgICAgICAgICAgICBjdXJyZW50
SWNvbi5wdXJwb3NlcyA9IHB1cnBvc2VzOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBwdXJwb3NlU3RyaW5nVmFsdWUgPSBwdXJwb3NlU3RyaW5nVmFsdWUuc3RyaXBXaGl0
ZVNwYWNlKCkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKKyAgICAgICAgICAgICAgICBWZWN0
b3I8U3RyaW5nPiBrZXl3b3JkcyA9IHB1cnBvc2VTdHJpbmdWYWx1ZS5zcGxpdEFsbG93aW5nRW1w
dHlFbnRyaWVzKCIgIik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yIChj
b25zdCBhdXRvJiBrZXl3b3JkIDoga2V5d29yZHMpIHsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGtleXdvcmQgPT0gIm1vbm9jaHJvbWUiKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcHVycG9zZXMuYXBwZW5kKEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1
cnBvc2U6Ok1vbm9jaHJvbWUpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChrZXl3b3Jk
ID09ICJtYXNrYWJsZSIpCisgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3Nlcy5hcHBlbmQo
QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6UHVycG9zZTo6TWFza2FibGUpOworICAgICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChrZXl3b3JkID09ICJhbnkiKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcHVycG9zZXMuYXBwZW5kKEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2U6
OkFueSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dEZXZlbG9wZXJXYXJuaW5n
KG1ha2VTdHJpbmcoIlwiIl9zLCBwdXJwb3NlU3RyaW5nVmFsdWUsICJcIiBpcyBub3QgYSB2YWxp
ZCBwdXJwb3NlLiJfcykpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmIChwdXJwb3Nlcy5pc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgY3VycmVudEljb24ucHVycG9zZXMg
PSBwdXJwb3NlczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpbWFnZVJlc291
cmNlcy5hcHBlbmQoY3VycmVudEljb24pOworICAgIH0KKworICAgIHJldHVybiBpbWFnZVJlc291
cmNlczsKK30KKwogc3RhdGljIGJvb2wgaXNJblNjb3BlKGNvbnN0IFVSTCYgc2NvcGVVUkwsIGNv
bnN0IFVSTCYgdGFyZ2V0VVJMKQogewogICAgIC8vIDEuIElmIHNjb3BlVVJMIGlzIHVuZGVmaW5l
ZCAoaS5lLiwgaXQgaXMgdW5ib3VuZGVkIGJlY2F1c2Ugb2YgYW4gZXJyb3Igb3IgaXQgd2FzIG5v
dCBkZWNsYXJlZCBpbiB0aGUgbWFuaWZlc3QpLCByZXR1cm4gdHJ1ZS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlm
ZXN0UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3Qv
QXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5oCmluZGV4IDNmOTYyZGJhODIyMS4uYjk3OWVhNmNi
NThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZl
c3QvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmgKQEAgLTUw
LDYgKzUwLDcgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgcGFyc2VEZXNjcmlwdGlvbihjb25zdCBK
U09OOjpPYmplY3QmKTsKICAgICBTdHJpbmcgcGFyc2VTaG9ydE5hbWUoY29uc3QgSlNPTjo6T2Jq
ZWN0Jik7CiAgICAgVVJMIHBhcnNlU2NvcGUoY29uc3QgSlNPTjo6T2JqZWN0JiwgY29uc3QgVVJM
JiwgY29uc3QgVVJMJik7CisgICAgVmVjdG9yPEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb24+IHBh
cnNlSWNvbnMoY29uc3QgSlNPTjo6T2JqZWN0Jik7CiAKICAgICBDb2xvciBwYXJzZUNvbG9yKGNv
bnN0IEpTT046Ok9iamVjdCYsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKICAgICBTdHJp
bmcgcGFyc2VHZW5lcmljU3RyaW5nKGNvbnN0IEpTT046Ok9iamVjdCYsIGNvbnN0IFN0cmluZyYp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwppbmRleCA5MTk5YzhiNDg4ZDQuLjU3NjdjOTZlN2RhNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOCBAQAorMjAyMS0xMC0xOCAgUmFjaGVsIEdpbnNiZXJnICA8cmdpbnNiZXJnQGFwcGxl
LmNvbT4KKworICAgICAgICBBZGQgc3VwcG9ydCBpbiBXZWJDb3JlIGZvciB3ZWIgYXBwIG1hbmlm
ZXN0IGljb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzEzMzkKKyAgICAgICAgcmRhcjovLzg0MzExMzA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS0FwcGxp
Y2F0aW9uTWFuaWZlc3QuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS0FwcGxp
Y2F0aW9uTWFuaWZlc3QubW06CisgICAgICAgIChtYWtlVmVjdG9yRWxlbWVudCk6CisgICAgICAg
IFVzZWQgYnkgbWFrZVZlY3RvciBpbiBpbml0V2l0aENvZGVyOi4gVGFrZXMgYSBfV0tBcHBsaWNh
dGlvbk1hbmlmZXN0SWNvbiBhbmQgcmV0dXJucworICAgICAgICBhIFdlYkNvcmU6OkFwcGxpY2F0
aW9uTWFuaWZlc3Q6Okljb24uCisgICAgICAgICgtW19XS0FwcGxpY2F0aW9uTWFuaWZlc3QgaW5p
dFdpdGhDb2RlcjpdKToKKyAgICAgICAgQWRkZWQgaWNvbnMuCisgICAgICAgICgtW19XS0FwcGxp
Y2F0aW9uTWFuaWZlc3QgZW5jb2RlV2l0aENvZGVyOl0pOgorICAgICAgICBBZGRlZCBpY29ucy4K
KyAgICAgICAgKC1bX1dLQXBwbGljYXRpb25NYW5pZmVzdCBpY29uc10pOgorICAgICAgICBTaG91
bGQgYXBwZWFzZSBidWlsZCBlcnJvciBiZWZvcmUgZnVsbCBzdXBwb3J0IGZvciBpY29ucyBpcyBi
dWlsdCBpbnRvIF9XS0FwcGxpY2F0aW9uTWFuaWZlc3QKKworICAgICAgICAoK1tfV0tBcHBsaWNh
dGlvbk1hbmlmZXN0SWNvbiBzdXBwb3J0c1NlY3VyZUNvZGluZ10pOgorICAgICAgICAoLVtfV0tB
cHBsaWNhdGlvbk1hbmlmZXN0SWNvbiBpbml0V2l0aENvZGVyOl0pOgorICAgICAgICAoLVtfV0tB
cHBsaWNhdGlvbk1hbmlmZXN0SWNvbiBlbmNvZGVXaXRoQ29kZXI6XSk6CisgICAgICAgICgtW19X
S0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uIGRlYWxsb2NdKToKKwogMjAyMS0xMS0wOCAgV2Vuc29u
IEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBFbmFibGluZyAibWVk
aWEgc291cmNlIGlubGluZSBwYWludGluZyIgYnkgZGVmYXVsdCBzaG91bGQgd29yayB3aGVuIHVz
aW5nIEdQVSBQcm9jZXNzIGZvciBtZWRpYQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3QuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0LmgKaW5kZXggYjMxZmFm
NDk4YzgyLi40NDYxOGY2Yzg4ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0LmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3QuaApAQCAtMzEsNiArMzEs
NyBAQAogI2Vsc2UKIEBjbGFzcyBOU0NvbG9yOwogI2VuZGlmCitAY2xhc3MgX1dLQXBwbGljYXRp
b25NYW5pZmVzdEljb247CiAKIE5TX0FTU1VNRV9OT05OVUxMX0JFR0lOCiAKQEAgLTQxLDYgKzQy
LDEyIEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RE
aXNwbGF5TW9kZSkgewogICAgIF9XS0FwcGxpY2F0aW9uTWFuaWZlc3REaXNwbGF5TW9kZUZ1bGxT
Y3JlZW4sCiB9IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCksIGlvcygxMS4zKSk7CiAK
K3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uUHVy
cG9zZSkgeworICAgIF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uUHVycG9zZU1vbm9jaHJvbWUs
CisgICAgX1dLQXBwbGljYXRpb25NYW5pZmVzdEljb25QdXJwb3NlTWFza2FibGUsCisgICAgX1dL
QXBwbGljYXRpb25NYW5pZmVzdEljb25QdXJwb3NlQW55LAorfSBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworCiBXS19DTEFTU19BVkFJTEFCTEUo
bWFjb3MoMTAuMTMuNCksIGlvcygxMS4zKSkKIEBpbnRlcmZhY2UgX1dLQXBwbGljYXRpb25NYW5p
ZmVzdCA6IE5TT2JqZWN0IDxOU1NlY3VyZUNvZGluZz4KIApAQCAtNTAsNiArNTcsNyBAQCBXS19D
TEFTU19BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCksIGlvcygxMS4zKSkKIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSwgbnVsbGFibGUsIGNvcHkpIE5TVVJMICpzY29wZTsKIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkgTlNVUkwgKnN0YXJ0VVJMOwogQHByb3BlcnR5
IChub25hdG9taWMsIHJlYWRvbmx5KSBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0RGlzcGxheU1vZGUg
ZGlzcGxheU1vZGU7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXJyYXk8X1dL
QXBwbGljYXRpb25NYW5pZmVzdEljb24gKj4gKmljb25zIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
V0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKICNpZiBUQVJHRVRfT1NfSVBIT05FCiBA
cHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIG51bGxhYmxlLCBjb3B5KSBVSUNvbG9yICp0
aGVtZUNvbG9yIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDE1LjApKTsKQEAgLTYxLDQgKzY5LDkgQEAg
V0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpLCBpb3MoMTEuMykpCiAKIEBlbmQKIAor
V0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitA
aW50ZXJmYWNlIF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uIDogTlNPYmplY3QgPE5TU2VjdXJl
Q29kaW5nPgorCitAZW5kCisKIE5TX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3QubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVz
dC5tbQppbmRleCAwMzU5ZWI1YjYwNDYuLjQ1YTY3MWM4M2ZjNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3QubW0KKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZl
c3QubW0KQEAgLTQxLDYgKzQxLDE2IEBACiAjaW1wb3J0ICJBcHBLaXRTUEkuaCIKICNlbmRpZgog
CitzdGF0aWMgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29u
PiBtYWtlVmVjdG9yRWxlbWVudChjb25zdCBXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpJ
Y29uKiwgaWQgYXJyYXlFbGVtZW50KQoreworICAgIAorICAgIGlmICghW2FycmF5RWxlbWVudCBp
c0tpbmRPZkNsYXNzOiBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbi5jbGFzc10pCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgCisgICAgcmV0dXJuIFdlYkNvcmU6OkFwcGxpY2F0
aW9uTWFuaWZlc3Q6Okljb24geworICAgIH07Cit9CisKIEBpbXBsZW1lbnRhdGlvbiBfV0tBcHBs
aWNhdGlvbk1hbmlmZXN0CiAKICNpZiBFTkFCTEUoQVBQTElDQVRJT05fTUFOSUZFU1QpCkBAIC01
OSw2ICs2OSw3IEBACiAgICAgTlNJbnRlZ2VyIGRpc3BsYXkgPSBbYURlY29kZXIgZGVjb2RlSW50
ZWdlckZvcktleTpAImRpc3BsYXkiXTsKICAgICBOU1VSTCAqc3RhcnRVUkwgPSBbYURlY29kZXIg
ZGVjb2RlT2JqZWN0T2ZDbGFzczpbTlNVUkwgY2xhc3NdIGZvcktleTpAInN0YXJ0X3VybCJdOwog
ICAgIENvY29hQ29sb3IgKnRoZW1lQ29sb3IgPSBbYURlY29kZXIgZGVjb2RlT2JqZWN0T2ZDbGFz
czpbQ29jb2FDb2xvciBjbGFzc10gZm9yS2V5OkAidGhlbWVfY29sb3IiXTsKKyAgICBOU0FycmF5
PF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uICo+ICppY29ucyA9IFthRGVjb2RlciBkZWNvZGVP
YmplY3RPZkNsYXNzZXM6W05TU2V0IHNldFdpdGhBcnJheTpAW1tOU0FycmF5IGNsYXNzXSwgW19X
S0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uIGNsYXNzXV1dIGZvcktleTpAImljb25zIl07CiAKICAg
ICBXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0IGNvcmVBcHBsaWNhdGlvbk1hbmlmZXN0IHsK
ICAgICAgICAgV1RGOjpTdHJpbmcobmFtZSksCkBAIC02OCw2ICs3OSw3IEBACiAgICAgICAgIHN0
YXRpY19jYXN0PFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q6OkRpc3BsYXk+KGRpc3BsYXkp
LAogICAgICAgICBVUkwoc3RhcnRVUkwpLAogICAgICAgICBXZWJDb3JlOjpyb3VuZEFuZENsYW1w
VG9TUkdCQUxvc3N5KHRoZW1lQ29sb3IuQ0dDb2xvciksCisgICAgICAgIFZlY3RvcjxXZWJDb3Jl
OjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uPihtYWtlVmVjdG9yPFdlYkNvcmU6OkFwcGxpY2F0
aW9uTWFuaWZlc3Q6Okljb24+KGljb25zKSksCiAgICAgfTsKIAogICAgIEFQSTo6T2JqZWN0Ojpj
b25zdHJ1Y3RJbldyYXBwZXI8QVBJOjpBcHBsaWNhdGlvbk1hbmlmZXN0PihzZWxmLCBXVEZNb3Zl
KGNvcmVBcHBsaWNhdGlvbk1hbmlmZXN0KSk7CkBAIC05NCw2ICsxMDYsNyBAQAogICAgIFthQ29k
ZXIgZW5jb2RlSW50ZWdlcjpzdGF0aWNfY2FzdDxOU0ludGVnZXI+KF9hcHBsaWNhdGlvbk1hbmlm
ZXN0LT5hcHBsaWNhdGlvbk1hbmlmZXN0KCkuZGlzcGxheSkgZm9yS2V5OkAiZGlzcGxheSJdOwog
ICAgIFthQ29kZXIgZW5jb2RlT2JqZWN0OnNlbGYuc3RhcnRVUkwgZm9yS2V5OkAic3RhcnRfdXJs
Il07CiAgICAgW2FDb2RlciBlbmNvZGVPYmplY3Q6c2VsZi50aGVtZUNvbG9yIGZvcktleTpAInRo
ZW1lX2NvbG9yIl07CisgICAgW2FDb2RlciBlbmNvZGVPYmplY3Q6c2VsZi5pY29ucyBmb3JLZXk6
QCJpY29ucyJdOwogfQogCiArIChfV0tBcHBsaWNhdGlvbk1hbmlmZXN0ICopYXBwbGljYXRpb25N
YW5pZmVzdEZyb21KU09OOihOU1N0cmluZyAqKWpzb24gbWFuaWZlc3RVUkw6KE5TVVJMICopbWFu
aWZlc3RVUkwgZG9jdW1lbnRVUkw6KE5TVVJMICopZG9jdW1lbnRVUkwKQEAgLTE1OCw2ICsxNzEs
MTEgQEAgc3RhdGljIE5TU3RyaW5nICpudWxsYWJsZU5TU3RyaW5nKGNvbnN0IFdURjo6U3RyaW5n
JiBzdHJpbmcpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKKy0gKE5TQXJyYXk8X1dL
QXBwbGljYXRpb25NYW5pZmVzdEljb24gKj4gKilpY29ucworeworICAgIHJldHVybiBuaWw7Cit9
CisKICNlbHNlIC8vIEVOQUJMRShBUFBMSUNBVElPTl9NQU5JRkVTVCkKIAogKyAoX1dLQXBwbGlj
YXRpb25NYW5pZmVzdCAqKWFwcGxpY2F0aW9uTWFuaWZlc3RGcm9tSlNPTjooTlNTdHJpbmcgKilq
c29uIG1hbmlmZXN0VVJMOihOU1VSTCAqKW1hbmlmZXN0VVJMIGRvY3VtZW50VVJMOihOU1VSTCAq
KWRvY3VtZW50VVJMCkBAIC0yMTUsNiArMjMzLDQwIEBAIHN0YXRpYyBOU1N0cmluZyAqbnVsbGFi
bGVOU1N0cmluZyhjb25zdCBXVEY6OlN0cmluZyYgc3RyaW5nKQogICAgIHJldHVybiBfV0tBcHBs
aWNhdGlvbk1hbmlmZXN0RGlzcGxheU1vZGVCcm93c2VyOwogfQogCistIChOU0FycmF5PF9XS0Fw
cGxpY2F0aW9uTWFuaWZlc3RJY29uICo+ICopaWNvbnMKK3sKKyAgICByZXR1cm4gbmlsOworfQor
CiAjZW5kaWYgLy8gRU5BQkxFKEFQUExJQ0FUSU9OX01BTklGRVNUKQogCiBAZW5kCisKK0BpbXBs
ZW1lbnRhdGlvbiBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbgorCisrIChCT09MKXN1cHBvcnRz
U2VjdXJlQ29kaW5nCit7CisgICAgcmV0dXJuIFlFUzsKK30KKworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoQ29kZXI6KE5TQ29kZXIgKilhRGVjb2RlcgoreworICAgIFVOVVNFRF9QQVJBTShhRGVj
b2Rlcik7CisgICAgW3NlbGYgcmVsZWFzZV07CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAodm9p
ZCllbmNvZGVXaXRoQ29kZXI6KE5TQ29kZXIgKilhQ29kZXIKK3sKKyAgICBVTlVTRURfUEFSQU0o
YUNvZGVyKTsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgaWYgKFdlYkNvcmVPYmpDU2No
ZWR1bGVEZWFsbG9jYXRlT25NYWluUnVuTG9vcChfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbi5j
bGFzcywgc2VsZikpCisgICAgICAgIHJldHVybjsKKworICAgIFtzdXBlciBkZWFsbG9jXTsKK30K
KworQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S0FwcGxpY2F0aW9uTWFuaWZlc3RJbnRlcm5hbC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3RJbnRlcm5hbC5oCmluZGV4IGI2MGRkZTY5
OGYwZi4uOWY1MDZjZTc0Y2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdEludGVybmFsLmgKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3RJbnRlcm5hbC5o
CkBAIC0yNyw2ICsyNyw4IEBACiAKICNpbXBvcnQgIkFQSUFwcGxpY2F0aW9uTWFuaWZlc3QuaCIK
ICNpbXBvcnQgIl9XS0FwcGxpY2F0aW9uTWFuaWZlc3QuaCIKKyNpbXBvcnQgPHd0Zi9WZWN0b3Iu
aD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiAjaWYgRU5BQkxFKEFQUExJ
Q0FUSU9OX01BTklGRVNUKQogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggNjM1NmNlNDE2M2I5Li41ZmJmMTM4NmU0MDcgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorCisy
MDIxLTEwLTIwIFJhY2hlbCBHaW5zYmVyZyA8cmdpbnNiZXJnQGFwcGxlLmNvbT4KKworICAgICAg
ICBBZGQgc3VwcG9ydCBpbiBXZWJDb3JlIGZvciB3ZWIgYXBwIG1hbmlmZXN0IGljb25zCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEzMzkKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcDoKKyAgICAgICAg
KEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXJUZXN0OjpwYXJzZUljb25GaXJzdFRvcExldmVsUHJv
cGVydHkpOgorICAgICAgICBGdW5jdGlvbiB0byBjcmVhdGUgSlNPTiBmb3IgaWNvbiBhdHRyaWJ1
dGVzLiBUaGlzIGlzIAorICAgICAgICBuZWNlc3NhcnkgYmVjYXVzZSBpY29ucyBhcmUgaW4gYSBs
aXN0LCB3aGVyZWFzIGFsbCBvdGhlcgorICAgICAgICBhdHRyaWJ1dGVzIGluIGFwcCBtYW5pZmVz
dCBhcmUgbm90LgorCisgICAgICAgIChBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyVGVzdDo6dGVz
dEljb25zU3JjKToKKyAgICAgICAgKEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXJUZXN0Ojp0ZXN0
SWNvbnNUeXBlKToKKyAgICAgICAgKEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXJUZXN0Ojp0ZXN0
SWNvbnNTaXplcyk6CisgICAgICAgIChBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyVGVzdDo6dGVz
dEljb25zUHVycG9zZSk6CisgICAgICAgIEZ1bmN0aW9ucyBmb3IgZWFjaCBvZiB0aGUgaWNvbiBh
dHRyaWJ1dGVzLgorCisgICAgICAgIChURVNUX0YpOgorICAgICAgICBDYWxscyB0aGUgdmFyaW91
cyBpY29uIHRlc3QgZnVuY3Rpb25zIHdpdGggZGlmZmVyZW50IGlucHV0CisKIDIwMjEtMTEtMDgg
IEthdGUgQ2hlbmV5ICA8a2F0aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+CiAKICAgICAgICAgWyBp
T1MxNSBFV1MgXSBUZXN0V2ViS2l0QVBJLkFwcFByaXZhY3lSZXBvcnQuTG9hZFNpbXVsYXRlZFJl
cXVlc3QgdGVzdHMgYXJlIHRpbWluZyBvdXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcCBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcApp
bmRleCBjMzk5NjU0NDY1MjAuLjI1OWRjMzkxYWI0MCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9BcHBsaWNhdGlvbk1hbmlmZXN0UGFy
c2VyLmNwcApAQCAtNzQsNiArNzQsMTkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcGFyc2VT
dHJpbmcobWFuaWZlc3RDb250ZW50KTsKICAgICB9CiAKKyAgICBBcHBsaWNhdGlvbk1hbmlmZXN0
IHBhcnNlSWNvbkZpcnN0VG9wTGV2ZWxQcm9wZXJ0eShjb25zdCBTdHJpbmcgJiBrZXksIGNvbnN0
IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICBTdHJpbmcgbWFuaWZlc3RDb250ZW50ID0g
InsgXCJpY29uc1wiOiBbe1wiIiArIGtleSArICJcIjogIiArIHZhbHVlICsgIiwgXCJzcmNcIjog
XCJpY29uL2V4YW1wbGUucG5nXCIgfV19IjsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJtYW5p
ZmVzdCBjb250ZW50OlxuJXNcbiIsIG1hbmlmZXN0Q29udGVudC51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgcmV0dXJuIHBhcnNlU3RyaW5nKG1hbmlmZXN0Q29udGVudCk7CisgICAgfQorICAgIAor
ICAgIEFwcGxpY2F0aW9uTWFuaWZlc3QgcGFyc2VJY29uRmlyc3RUb3BMZXZlbFByb3BlcnR5Rm9y
U3JjKGNvbnN0IFN0cmluZyAmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIFN0cmluZyBtYW5pZmVzdENvbnRlbnQgPSAieyBcImljb25zXCI6IFt7XCIiICsga2V5ICsg
IlwiOiAiICsgdmFsdWUgKyAiIH1dfSI7CisgICAgICAgIHJldHVybiBwYXJzZVN0cmluZyhtYW5p
ZmVzdENvbnRlbnQpOworICAgIH0KKwogICAgIHZvaWQgdGVzdFN0YXJ0VVJMKGNvbnN0IFN0cmlu
ZyYgcmF3SlNPTiwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZhbHVlKQogICAgIHsKICAgICAgICAg
dGVzdFN0YXJ0VVJMKHJhd0pTT04sIHsgeyB9LCBleHBlY3RlZFZhbHVlIH0pOwpAQCAtMTM0LDYg
KzE0NywzNCBAQCBwdWJsaWM6CiAgICAgICAgIEVYUEVDVF9FUShleHBlY3RlZFZhbHVlLCB2YWx1
ZSk7CiAgICAgfQogCisgICAgdm9pZCB0ZXN0SWNvbnNTcmMoY29uc3QgU3RyaW5nJiByYXdKU09O
LCBjb25zdCBVUkwmIGV4cGVjdGVkVmFsdWUpCisgICAgeworICAgICAgICBhdXRvIG1hbmlmZXN0
ID0gcGFyc2VJY29uRmlyc3RUb3BMZXZlbFByb3BlcnR5Rm9yU3JjKCJzcmMiLCByYXdKU09OKTsK
KyAgICAgICAgYXV0byB2YWx1ZSA9IG1hbmlmZXN0Lmljb25zWzBdLnNyYzsKKyAgICAgICAgRVhQ
RUNUX1NUUkVRKGV4cGVjdGVkVmFsdWUuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdmFsdWUuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgdm9pZCB0ZXN0SWNvbnNUeXBlKGNv
bnN0IFN0cmluZyAmcmF3SlNPTiwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZhbHVlKQorICAgIHsK
KyAgICAgICAgYXV0byBtYW5pZmVzdCA9IHBhcnNlSWNvbkZpcnN0VG9wTGV2ZWxQcm9wZXJ0eSgi
dHlwZSIsIHJhd0pTT04pOworICAgICAgICBhdXRvIHZhbHVlID0gbWFuaWZlc3QuaWNvbnNbMF0u
dHlwZTsKKyAgICAgICAgRVhQRUNUX1NUUkVRKGV4cGVjdGVkVmFsdWUudXRmOCgpLmRhdGEoKSwg
dmFsdWUudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgdm9pZCB0ZXN0SWNvbnNTaXplcyhj
b25zdCBTdHJpbmcgJnJhd0pTT04sIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWYWx1ZSkKKyAgICB7
CisgICAgICAgIGF1dG8gbWFuaWZlc3QgPSBwYXJzZUljb25GaXJzdFRvcExldmVsUHJvcGVydHko
InNpemVzIiwgcmF3SlNPTik7CisgICAgICAgIGF1dG8gdmFsdWUgPSBtYW5pZmVzdC5pY29uc1sw
XS5zaXplczsKKyAgICAgICAgRVhQRUNUX1NUUkVRKGV4cGVjdGVkVmFsdWUudXRmOCgpLmRhdGEo
KSwgdmFsdWUudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgdm9pZCB0ZXN0SWNvbnNQdXJw
b3Nlcyhjb25zdCBTdHJpbmcgJnJhd0pTT04sIFZlY3RvcjxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJ
Y29uOjpQdXJwb3NlPiBleHBlY3RlZFZhbHVlcykKKyAgICB7CisgICAgICAgIGF1dG8gbWFuaWZl
c3QgPSBwYXJzZUljb25GaXJzdFRvcExldmVsUHJvcGVydHkoInB1cnBvc2UiLCByYXdKU09OKTsK
KyAgICAgICAgYXV0byB2YWx1ZSA9IG1hbmlmZXN0Lmljb25zWzBdLnB1cnBvc2VzOworICAgICAg
ICBFWFBFQ1RfRVEoZXhwZWN0ZWRWYWx1ZXMsIHZhbHVlKTsKKyAgICB9CisKIH07CiAKIHN0YXRp
YyB2b2lkIGFzc2VydE1hbmlmZXN0SGFzRGVmYXVsdFZhbHVlcyhjb25zdCBVUkwmIG1hbmlmZXN0
VVJMLCBjb25zdCBVUkwmIGRvY3VtZW50VVJMLCBjb25zdCBBcHBsaWNhdGlvbk1hbmlmZXN0JiBt
YW5pZmVzdCkKQEAgLTMyMyw0ICszNjQsNDEgQEAgVEVTVF9GKEFwcGxpY2F0aW9uTWFuaWZlc3RQ
YXJzZXJUZXN0LCBXaGl0ZXNwYWNlKQogICAgIEVYUEVDVF9TVFJFUSgiUEFTUyIsIG1hbmlmZXN0
Lm5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKK1RFU1RfRihBcHBsaWNhdGlvbk1hbmlmZXN0UGFy
c2VyVGVzdCwgSWNvbnMpCit7CisgICAgVVJMIHNyY1VSTCA9IHsgeyB9LCAiaHR0cHM6Ly9leGFt
cGxlLmNvbS9pY29uLmpwZyIgfTsKKyAgICB0ZXN0SWNvbnNTcmMoIlwiaWNvbi5qcGdcIiIsIHNy
Y1VSTCk7CisgICAgdGVzdEljb25zVHlwZSgiXCJpbWFnZS93ZWJwXCIiLCAiaW1hZ2Uvd2VicCIp
OworICAgIHRlc3RJY29uc1NpemVzKCJcIjI1NngyNTZcIiIsICIyNTZ4MjU2Iik7CisgICAgdGVz
dEljb25zU2l6ZXMoIlwiNzJ4NzIgOTZ4OTZcIiIsICI3Mng3MiA5Nng5NiIpOworCisgICAgVmVj
dG9yPEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2U+IHB1cnBvc2VfYW55OworICAg
IHB1cnBvc2VfYW55LmFwcGVuZChBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlOjpB
bnkpOworICAgIFZlY3RvcjxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlPiBwdXJw
b3NlX21vbm9jaHJvbWU7CisgICAgcHVycG9zZV9tb25vY2hyb21lLmFwcGVuZChBcHBsaWNhdGlv
bk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlOjpNb25vY2hyb21lKTsKKyAgICBWZWN0b3I8QXBwbGlj
YXRpb25NYW5pZmVzdDo6SWNvbjo6UHVycG9zZT4gcHVycG9zZV9tYXNrYWJsZTsKKyAgICBwdXJw
b3NlX21hc2thYmxlLmFwcGVuZChBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlOjpN
YXNrYWJsZSk7CisKKyAgICB0ZXN0SWNvbnNQdXJwb3NlcygiXCJtb25vY2hyb21lXCIiLCBwdXJw
b3NlX21vbm9jaHJvbWUpOworICAgIHRlc3RJY29uc1B1cnBvc2VzKCJcIm1hc2thYmxlXCIiLCBw
dXJwb3NlX21hc2thYmxlKTsKKyAgICB0ZXN0SWNvbnNQdXJwb3NlcygiXCJhbnlcIiIsIHB1cnBv
c2VfYW55KTsKKyAgICB0ZXN0SWNvbnNQdXJwb3NlcygiXCJcdE1PTk9DSFJPTUVcIiIsIHB1cnBv
c2VfbW9ub2Nocm9tZSk7CisKKyAgICB0ZXN0SWNvbnNQdXJwb3NlcygiXCIxMjNcIiIsIHB1cnBv
c2VfYW55KTsKKyAgICB0ZXN0SWNvbnNQdXJwb3NlcygiMTIzIiwgcHVycG9zZV9hbnkpOworICAg
IHRlc3RJY29uc1B1cnBvc2VzKCJudWxsIiwgcHVycG9zZV9hbnkpOworICAgIHRlc3RJY29uc1B1
cnBvc2VzKCJ0cnVlIiwgcHVycG9zZV9hbnkpOworICAgIHRlc3RJY29uc1B1cnBvc2VzKCJ7IH0i
LCBwdXJwb3NlX2FueSk7CisgICAgdGVzdEljb25zUHVycG9zZXMoIlsgXSIsIHB1cnBvc2VfYW55
KTsKKyAgICB0ZXN0SWNvbnNQdXJwb3NlcygiXCJcIiIsIHB1cnBvc2VfYW55KTsKKyAgICB0ZXN0
SWNvbnNQdXJwb3NlcygiXCJnYXJiYWdlIHN0cmluZyBcIiIsIHB1cnBvc2VfYW55KTsKKworICAg
IFZlY3RvcjxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlPiBwdXJwb3NlX21vbm9j
aHJvbWVfYW55OworICAgIHB1cnBvc2VfbW9ub2Nocm9tZV9hbnkuYXBwZW5kKEFwcGxpY2F0aW9u
TWFuaWZlc3Q6Okljb246OlB1cnBvc2U6Ok1vbm9jaHJvbWUpOworICAgIHB1cnBvc2VfbW9ub2No
cm9tZV9hbnkuYXBwZW5kKEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2U6OkFueSk7
CisKKyAgICB0ZXN0SWNvbnNQdXJwb3NlcygiXCJtb25vY2hyb21lIGFueVwiIiwgcHVycG9zZV9t
b25vY2hyb21lX2FueSk7CisKK30KKwogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443715</attachid>
            <date>2021-11-09 12:02:01 -0800</date>
            <delta_ts>2021-11-10 10:01:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>rdar_82738657</filename>
            <type>text/plain</type>
            <size>22546</size>
            <attacher>rginsberg</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjNDdhZjI4YzFjNzAuLmU3NjMzYThmMWUwZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQwIEBACisyMDIxLTEwLTE1ICBSYWNoZWwgR2luc2JlcmcgIDxyZ2luc2JlcmdAYXBw
bGUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGluIFdlYkNvcmUgZm9yIHdlYiBhcHAgbWFu
aWZlc3QgaWNvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzMTMzOQorICAgICAgICByZGFyOi8vODQzMTEzMDYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0cyBhcmUgYWRkZWQgdG8gT3BlblNvdXJj
ZS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQXBwbGljYXRpb25NYW5pZmVzdFBh
cnNlci5jcHAKKworICAgICAgICAqIE1vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNh
dGlvbk1hbmlmZXN0Lmg6CisgICAgICAgIEEgbmV3IGVudW0gZm9yIHRoZSBpY29uIHB1cnBvc2Ug
KEljb246OlB1cnBvc2UpIHdhcyBhZGRlZCB0byB0aGUgQXBwbGljYXRpb25NYW5pZmVzdDo6SWNv
biBzdHJ1Y3QuCisgICAgICAgIEEgbmV3IEljb24gc3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGUg
Zm9yIHRoZSBzcmMsIHNpemVzLAorICAgICAgICB0eXBlLCBhbmQgSWNvbjo6UHVycG9zZSBhdHRy
aWJ1dGVzIGZvciBhcHAgbWFuaWZlc3QgaWNvbnMgd2FzIGFkZGVkIHRvIHRoZSBBcHBsaWNhdGlv
bk1hbmlmZXN0CisgICAgICAgIHN0cnVjdC4gQSB2ZWN0b3Igb2YgSWNvbidzIGlzIGFkZGVkIGFz
IGEgdmFyaWFibGUgZm9yCisgICAgICAgIHRoZSBBcHBsaWNhdGlvbk1hbmlmZXN0IHN0cnVjdC4K
KyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q6OmVuY29kZSBjb25zdCk6Cisg
ICAgICAgIEFkZGVkIGljb25zIHRvIGVuY29kZSBmdW5jdGlvbgorICAgICAgICAoV2ViY29yZTo6
QXBwbGljYXRpb25NYW5pZmVzdDo6ZGVjb2RlKToKKyAgICAgICAgQWRkZWQgaWNvbnMgdG8gZGVj
b2RlIGZ1bmN0aW9uCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29u
OjplbmNvZGUgY29uc3QpOgorICAgICAgICBDcmVhdGUgZW5jb2RlIGZ1bmN0aW9uIGZvciBBcHBs
aWNhdGlvbk1hbmlmZXN0OjpJY29uCisgICAgICAgIChXZWJjb3JlOjpBcHBsaWNhdGlvbk1hbmlm
ZXN0OjpJY29uOjpkZWNvZGUpOgorICAgICAgICBDcmVhdGUgZGVjb2RlIGZ1bmN0aW9uIGZvciBB
cHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uCisKKworICAgICAgICAqIE1vZHVsZXMvYXBwbGljYXRp
b25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlTWFuaWZlc3QpOgorICAgICAgICBB
ZGRlZCBjYWxsIHRvIHBhcnNlSWNvbnMKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFu
aWZlc3RQYXJzZXI6OnBhcnNlSWNvbnMpOgorICAgICAgICBwYXJzZUljb25zIGl0ZXJhdGVzIHRo
cm91Z2ggdGhlIGxpc3Qgb2YgaWNvbnMsIHBlcmZvcm1zIGNoZWNrcyBmb3IgYXR0cmlidXRlLAor
ICAgICAgICBhbmQgdGhlbiwgaWYgdmFsaWQsIGFkZHMgdGhlIGF0dHJpYnV0ZSB0byBhbiBBcHBs
aWNhdGlvbk1hbmlmZXN0SWNvbiBzdHJ1Y3QKKyAgICAgICAgdGhhdCBpcyBhcHBlbmRlZCB0byBh
IG5ldyBWZWN0b3Igb2YgQXBwbGljYXRpb25NYW5pZmVzdEljb25zLgorCisgICAgICAgICogTW9k
dWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuaDoKKyAg
ICAgICAgRGVjbGFyZSBmdW5jdGlvbnMgZm9yIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIKKwog
MjAyMS0xMS0wOCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAg
ICAgICBFbmFibGluZyAibWVkaWEgc291cmNlIGlubGluZSBwYWludGluZyIgYnkgZGVmYXVsdCBz
aG91bGQgd29yayB3aGVuIHVzaW5nIEdQVSBQcm9jZXNzIGZvciBtZWRpYQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFu
aWZlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBs
aWNhdGlvbk1hbmlmZXN0LmgKaW5kZXggZmE1NDFiMmIzMmJhLi42NzUxOGE5M2UwOWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNh
dGlvbk1hbmlmZXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1h
bmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3QuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUg
IkNvbG9yLmgiCiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvVVJM
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTQxLDYgKzQyLDIyIEBAIHN0cnVjdCBBcHBsaWNhdGlvbk1hbmlmZXN0IHsKICAgICAgICAgRnVs
bHNjcmVlbiwKICAgICB9OwogCisgICAgc3RydWN0IEljb24geworICAgICAgICBlbnVtIGNsYXNz
IFB1cnBvc2UgOiB1aW50OF90ICB7CisgICAgICAgICAgICBBbnkgPSAxIDw8IDAsCisgICAgICAg
ICAgICBNb25vY2hyb21lID0gMSA8PCAxLAorICAgICAgICAgICAgTWFza2FibGUgPSAxIDw8IDIs
CisgICAgICAgIH07CisKKyAgICAgICAgVVJMIHNyYzsKKyAgICAgICAgU3RyaW5nIHNpemVzOwor
ICAgICAgICBTdHJpbmcgdHlwZTsKKyAgICAgICAgT3B0aW9uU2V0PFB1cnBvc2U+IHB1cnBvc2Vz
OworCisgICAgICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKKyAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0
aW9uYWw8QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB9
OworCiAgICAgU3RyaW5nIG5hbWU7CiAgICAgU3RyaW5nIHNob3J0TmFtZTsKICAgICBTdHJpbmcg
ZGVzY3JpcHRpb247CkBAIC00OCw2ICs2NSw3IEBAIHN0cnVjdCBBcHBsaWNhdGlvbk1hbmlmZXN0
IHsKICAgICBEaXNwbGF5IGRpc3BsYXk7CiAgICAgVVJMIHN0YXJ0VVJMOwogICAgIENvbG9yIHRo
ZW1lQ29sb3I7CisgICAgVmVjdG9yPEljb24+IGljb25zOwogCiAgICAgdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEFwcGxpY2F0aW9uTWFuaWZlc3Q+IGRlY29k
ZShEZWNvZGVyJik7CkBAIC01Niw3ICs3NCw3IEBAIHN0cnVjdCBBcHBsaWNhdGlvbk1hbmlmZXN0
IHsKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIEFwcGxpY2F0aW9uTWFuaWZlc3Q6OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewotICAgIGVuY29kZXIgPDwgbmFtZSA8PCBz
aG9ydE5hbWUgPDwgZGVzY3JpcHRpb24gPDwgc2NvcGUgPDwgZGlzcGxheSA8PCBzdGFydFVSTCA8
PCB0aGVtZUNvbG9yOworICAgIGVuY29kZXIgPDwgbmFtZSA8PCBzaG9ydE5hbWUgPDwgZGVzY3Jp
cHRpb24gPDwgc2NvcGUgPDwgZGlzcGxheSA8PCBzdGFydFVSTCA8PCB0aGVtZUNvbG9yIDw8IGlj
b25zOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgpAQCAtNzgsNiArOTYsMzAgQEAgc3Rk
OjpvcHRpb25hbDxBcHBsaWNhdGlvbk1hbmlmZXN0PiBBcHBsaWNhdGlvbk1hbmlmZXN0OjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC50aGVtZUNvbG9yKSkKICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pY29ucykpCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IHNyYyA8PCBzaXpl
cyA8PCB0eXBlIDw8IHB1cnBvc2VzOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3Rk
OjpvcHRpb25hbDxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uPiBBcHBsaWNhdGlvbk1hbmlmZXN0
OjpJY29uOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBBcHBsaWNhdGlvbk1hbmlm
ZXN0OjpJY29uIHJlc3VsdDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zcmMpKQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVz
dWx0LnNpemVzKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3VsdC50eXBlKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5wdXJwb3NlcykpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtOTYsNiArMTM4LDE1IEBA
IHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVz
dDo6RGlzcGxheT4gewogICAgID47CiB9OwogCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRz
PFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2U+IHsKKyAgICB1c2lu
ZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlm
ZXN0OjpJY29uOjpQdXJwb3NlLAorICAgICAgICBXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0
OjpJY29uOjpQdXJwb3NlOjpBbnksCisgICAgICAgIFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZl
c3Q6Okljb246OlB1cnBvc2U6Ok1vbm9jaHJvbWUsCisgICAgICAgIFdlYkNvcmU6OkFwcGxpY2F0
aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2U6Ok1hc2thYmxlCisgICAgPjsKK307CisKIH0gLy8g
bmFtZXNwYWNlIFdURjsKIAogI2VuZGlmIC8vIEVOQUJMRShBUFBMSUNBVElPTl9NQU5JRkVTVCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9B
cHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBw
bGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcAppbmRleCA0Y2Iw
ZGY3NzBjZDguLmYwZWVjMjY2Y2MxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1h
bmlmZXN0UGFyc2VyLmNwcApAQCAtNzgsNiArNzgsNyBAQCBBcHBsaWNhdGlvbk1hbmlmZXN0IEFw
cGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlTWFuaWZlc3QoY29uc3QgU3RyaW5nJiB0ZXh0
LAogICAgIHBhcnNlZE1hbmlmZXN0LnNob3J0TmFtZSA9IHBhcnNlU2hvcnROYW1lKCptYW5pZmVz
dCk7CiAgICAgcGFyc2VkTWFuaWZlc3Quc2NvcGUgPSBwYXJzZVNjb3BlKCptYW5pZmVzdCwgZG9j
dW1lbnRVUkwsIHBhcnNlZE1hbmlmZXN0LnN0YXJ0VVJMKTsKICAgICBwYXJzZWRNYW5pZmVzdC50
aGVtZUNvbG9yID0gcGFyc2VDb2xvcigqbWFuaWZlc3QsICJ0aGVtZV9jb2xvciJfcyk7CisgICAg
cGFyc2VkTWFuaWZlc3QuaWNvbnMgPSBwYXJzZUljb25zKCptYW5pZmVzdCk7CiAKICAgICBpZiAo
bV9kb2N1bWVudCkKICAgICAgICAgbV9kb2N1bWVudC0+cHJvY2Vzc0FwcGxpY2F0aW9uTWFuaWZl
c3QocGFyc2VkTWFuaWZlc3QpOwpAQCAtMTc0LDYgKzE3NSw4NiBAQCBTdHJpbmcgQXBwbGljYXRp
b25NYW5pZmVzdFBhcnNlcjo6cGFyc2VTaG9ydE5hbWUoY29uc3QgSlNPTjo6T2JqZWN0JiBtYW5p
ZmVzdCkKICAgICByZXR1cm4gcGFyc2VHZW5lcmljU3RyaW5nKG1hbmlmZXN0LCAic2hvcnRfbmFt
ZSJfcyk7CiB9CiAKK1ZlY3RvcjxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uPiBBcHBsaWNhdGlv
bk1hbmlmZXN0UGFyc2VyOjpwYXJzZUljb25zKGNvbnN0IEpTT046Ok9iamVjdCYgbWFuaWZlc3Qp
Cit7CisgICAgYXV0byBtYW5pZmVzdEljb25zID0gbWFuaWZlc3QuZ2V0VmFsdWUoImljb25zIl9z
KTsKKworICAgIFZlY3RvcjxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uPiBpbWFnZVJlc291cmNl
czsKKyAgICBpZiAoIW1hbmlmZXN0SWNvbnMpCisgICAgICAgIHJldHVybiBpbWFnZVJlc291cmNl
czsKKworICAgIGF1dG8gbWFuaWZlc3RJY29uc0FycmF5ID0gbWFuaWZlc3RJY29ucy0+YXNBcnJh
eSgpOworICAgIGlmICghbWFuaWZlc3RJY29uc0FycmF5KSB7CisgICAgICAgIGxvZ0RldmVsb3Bl
cldhcm5pbmcoIlRoZSB2YWx1ZSBvZiBpY29ucyBpcyBub3QgYSB2YWxpZCBhcnJheS4iX3MpOwor
ICAgICAgICByZXR1cm4gaW1hZ2VSZXNvdXJjZXM7CisgICAgfQorCisgICAgZm9yIChjb25zdCBh
dXRvJiBpY29uVmFsdWUgOiAqbWFuaWZlc3RJY29uc0FycmF5KSB7CisgICAgICAgIEFwcGxpY2F0
aW9uTWFuaWZlc3Q6Okljb24gY3VycmVudEljb247CisgICAgICAgIGF1dG8gaWNvbk9iamVjdCA9
IGljb25WYWx1ZS0+YXNPYmplY3QoKTsKKyAgICAgICAgaWYgKCFpY29uT2JqZWN0KQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGNvbnN0IGF1dG8mIGljb25KU09OID0gKmljb25PYmpl
Y3Q7CisKKyAgICAgICAgYXV0byBzcmNWYWx1ZSA9IGljb25KU09OLmdldFZhbHVlKCJzcmMiX3Mp
OworICAgICAgICBpZiAoIXNyY1ZhbHVlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IGF1dG8gc3JjU3RyaW5nVmFsdWUgPSBzcmNWYWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgaWYg
KCFzcmNTdHJpbmdWYWx1ZSkgeworICAgICAgICAgICAgbG9nTWFuaWZlc3RQcm9wZXJ0eU5vdEFT
dHJpbmcoInNyYyJfcyk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAg
ICBVUkwgc3JjVVJMKG1fbWFuaWZlc3RVUkwsIHNyY1N0cmluZ1ZhbHVlKTsKKyAgICAgICAgaWYg
KHNyY1VSTC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFz
cmNVUkwuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBsb2dNYW5pZmVzdFByb3BlcnR5SW52YWxp
ZFVSTCgic3JjIl9zKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAg
IGN1cnJlbnRJY29uLnNyYyA9IHNyY1VSTDsKKworICAgICAgICBjdXJyZW50SWNvbi5zaXplcyA9
IHBhcnNlR2VuZXJpY1N0cmluZyhpY29uSlNPTiwgInNpemVzIl9zKTsKKworICAgICAgICBjdXJy
ZW50SWNvbi50eXBlID0gcGFyc2VHZW5lcmljU3RyaW5nKGljb25KU09OLCAidHlwZSJfcyk7CisK
KyAgICAgICAgYXV0byBwdXJwb3NlVmFsdWUgPSBpY29uSlNPTi5nZXRWYWx1ZSgicHVycG9zZSJf
cyk7CisgICAgICAgIE9wdGlvblNldDxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3Nl
PiBwdXJwb3NlczsKKworICAgICAgICBpZiAoIXB1cnBvc2VWYWx1ZSkgeworICAgICAgICAgICAg
cHVycG9zZXMuYWRkKEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2U6OkFueSk7Cisg
ICAgICAgICAgICBjdXJyZW50SWNvbi5wdXJwb3NlcyA9IHB1cnBvc2VzOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgYXV0byBwdXJwb3NlU3RyaW5nVmFsdWUgPSBwdXJwb3NlVmFsdWUt
PmFzU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAoIXB1cnBvc2VTdHJpbmdWYWx1ZSkgeworICAg
ICAgICAgICAgICAgIGxvZ01hbmlmZXN0UHJvcGVydHlOb3RBU3RyaW5nKCJwdXJwb3NlIl9zKTsK
KyAgICAgICAgICAgICAgICBwdXJwb3Nlcy5hZGQoQXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6
UHVycG9zZTo6QW55KTsKKyAgICAgICAgICAgICAgICBjdXJyZW50SWNvbi5wdXJwb3NlcyA9IHB1
cnBvc2VzOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwdXJwb3NlU3Ry
aW5nVmFsdWUgPSBwdXJwb3NlU3RyaW5nVmFsdWUuc3RyaXBXaGl0ZVNwYWNlKCkuY29udmVydFRv
QVNDSUlMb3dlcmNhc2UoKTsKKyAgICAgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBrZXl3b3Jk
cyA9IHB1cnBvc2VTdHJpbmdWYWx1ZS5zcGxpdEFsbG93aW5nRW1wdHlFbnRyaWVzKCIgIik7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXl3b3Jk
IDoga2V5d29yZHMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGtleXdvcmQgPT0gIm1vbm9j
aHJvbWUiKQorICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZXMuYWRkKEFwcGxpY2F0aW9u
TWFuaWZlc3Q6Okljb246OlB1cnBvc2U6Ok1vbm9jaHJvbWUpOworICAgICAgICAgICAgICAgICAg
ICBlbHNlIGlmIChrZXl3b3JkID09ICJtYXNrYWJsZSIpCisgICAgICAgICAgICAgICAgICAgICAg
ICBwdXJwb3Nlcy5hZGQoQXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6UHVycG9zZTo6TWFza2Fi
bGUpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChrZXl3b3JkID09ICJhbnkiKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcHVycG9zZXMuYWRkKEFwcGxpY2F0aW9uTWFuaWZlc3Q6Oklj
b246OlB1cnBvc2U6OkFueSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxvZ0RldmVsb3Blcldhcm5pbmcobWFrZVN0cmluZygiXCIiX3MsIHB1cnBv
c2VTdHJpbmdWYWx1ZSwgIlwiIGlzIG5vdCBhIHZhbGlkIHB1cnBvc2UuIl9zKSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChwdXJwb3Nlcy5pc0VtcHR5KCkpCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgY3VycmVudEljb24u
cHVycG9zZXMgPSBwdXJwb3NlczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBp
bWFnZVJlc291cmNlcy5hcHBlbmQoY3VycmVudEljb24pOworICAgIH0KKworICAgIHJldHVybiBp
bWFnZVJlc291cmNlczsKK30KKwogc3RhdGljIGJvb2wgaXNJblNjb3BlKGNvbnN0IFVSTCYgc2Nv
cGVVUkwsIGNvbnN0IFVSTCYgdGFyZ2V0VVJMKQogewogICAgIC8vIDEuIElmIHNjb3BlVVJMIGlz
IHVuZGVmaW5lZCAoaS5lLiwgaXQgaXMgdW5ib3VuZGVkIGJlY2F1c2Ugb2YgYW4gZXJyb3Igb3Ig
aXQgd2FzIG5vdCBkZWNsYXJlZCBpbiB0aGUgbWFuaWZlc3QpLCByZXR1cm4gdHJ1ZS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNh
dGlvbk1hbmlmZXN0UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9u
bWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5oCmluZGV4IDNmOTYyZGJhODIyMS4u
Yjk3OWVhNmNiNThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0
aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2Vy
LmgKQEAgLTUwLDYgKzUwLDcgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgcGFyc2VEZXNjcmlwdGlv
bihjb25zdCBKU09OOjpPYmplY3QmKTsKICAgICBTdHJpbmcgcGFyc2VTaG9ydE5hbWUoY29uc3Qg
SlNPTjo6T2JqZWN0Jik7CiAgICAgVVJMIHBhcnNlU2NvcGUoY29uc3QgSlNPTjo6T2JqZWN0Jiwg
Y29uc3QgVVJMJiwgY29uc3QgVVJMJik7CisgICAgVmVjdG9yPEFwcGxpY2F0aW9uTWFuaWZlc3Q6
Okljb24+IHBhcnNlSWNvbnMoY29uc3QgSlNPTjo6T2JqZWN0Jik7CiAKICAgICBDb2xvciBwYXJz
ZUNvbG9yKGNvbnN0IEpTT046Ok9iamVjdCYsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsK
ICAgICBTdHJpbmcgcGFyc2VHZW5lcmljU3RyaW5nKGNvbnN0IEpTT046Ok9iamVjdCYsIGNvbnN0
IFN0cmluZyYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwppbmRleCA5MTk5YzhiNDg4ZDQuLjU3NjdjOTZlN2RhNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyOCBAQAorMjAyMS0xMC0xOCAgUmFjaGVsIEdpbnNiZXJnICA8cmdpbnNi
ZXJnQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgc3VwcG9ydCBpbiBXZWJDb3JlIGZvciB3ZWIg
YXBwIG1hbmlmZXN0IGljb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzEzMzkKKyAgICAgICAgcmRhcjovLzg0MzExMzA2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29h
L19XS0FwcGxpY2F0aW9uTWFuaWZlc3QuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29h
L19XS0FwcGxpY2F0aW9uTWFuaWZlc3QubW06CisgICAgICAgIChtYWtlVmVjdG9yRWxlbWVudCk6
CisgICAgICAgIFVzZWQgYnkgbWFrZVZlY3RvciBpbiBpbml0V2l0aENvZGVyOi4gVGFrZXMgYSBf
V0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbiBhbmQgcmV0dXJucworICAgICAgICBhIFdlYkNvcmU6
OkFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb24uCisgICAgICAgICgtW19XS0FwcGxpY2F0aW9uTWFu
aWZlc3QgaW5pdFdpdGhDb2RlcjpdKToKKyAgICAgICAgQWRkZWQgaWNvbnMuCisgICAgICAgICgt
W19XS0FwcGxpY2F0aW9uTWFuaWZlc3QgZW5jb2RlV2l0aENvZGVyOl0pOgorICAgICAgICBBZGRl
ZCBpY29ucy4KKyAgICAgICAgKC1bX1dLQXBwbGljYXRpb25NYW5pZmVzdCBpY29uc10pOgorICAg
ICAgICBTaG91bGQgYXBwZWFzZSBidWlsZCBlcnJvciBiZWZvcmUgZnVsbCBzdXBwb3J0IGZvciBp
Y29ucyBpcyBidWlsdCBpbnRvIF9XS0FwcGxpY2F0aW9uTWFuaWZlc3QKKworICAgICAgICAoK1tf
V0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbiBzdXBwb3J0c1NlY3VyZUNvZGluZ10pOgorICAgICAg
ICAoLVtfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbiBpbml0V2l0aENvZGVyOl0pOgorICAgICAg
ICAoLVtfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbiBlbmNvZGVXaXRoQ29kZXI6XSk6CisgICAg
ICAgICgtW19XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uIGRlYWxsb2NdKToKKwogMjAyMS0xMS0w
OCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBFbmFi
bGluZyAibWVkaWEgc291cmNlIGlubGluZSBwYWludGluZyIgYnkgZGVmYXVsdCBzaG91bGQgd29y
ayB3aGVuIHVzaW5nIEdQVSBQcm9jZXNzIGZvciBtZWRpYQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3QuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0LmgKaW5k
ZXggYjMxZmFmNDk4YzgyLi42YTllOTI5MzQ4M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0LmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3QuaApAQCAt
MzEsNiArMzEsNyBAQAogI2Vsc2UKIEBjbGFzcyBOU0NvbG9yOwogI2VuZGlmCitAY2xhc3MgX1dL
QXBwbGljYXRpb25NYW5pZmVzdEljb247CiAKIE5TX0FTU1VNRV9OT05OVUxMX0JFR0lOCiAKQEAg
LTQxLDYgKzQyLDEyIEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9XS0FwcGxpY2F0aW9u
TWFuaWZlc3REaXNwbGF5TW9kZSkgewogICAgIF9XS0FwcGxpY2F0aW9uTWFuaWZlc3REaXNwbGF5
TW9kZUZ1bGxTY3JlZW4sCiB9IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCksIGlvcygx
MS4zKSk7CiAKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9XS0FwcGxpY2F0aW9uTWFuaWZl
c3RJY29uUHVycG9zZSkgeworICAgIF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uUHVycG9zZUFu
eSwKKyAgICBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvblB1cnBvc2VNb25vY2hyb21lLAorICAg
IF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uUHVycG9zZU1hc2thYmxlLAorfSBXS19BUElfQVZB
SUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworCiBXS19DTEFTU19B
VkFJTEFCTEUobWFjb3MoMTAuMTMuNCksIGlvcygxMS4zKSkKIEBpbnRlcmZhY2UgX1dLQXBwbGlj
YXRpb25NYW5pZmVzdCA6IE5TT2JqZWN0IDxOU1NlY3VyZUNvZGluZz4KIApAQCAtNTAsNiArNTcs
NyBAQCBXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCksIGlvcygxMS4zKSkKIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgbnVsbGFibGUsIGNvcHkpIE5TVVJMICpzY29wZTsK
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkgTlNVUkwgKnN0YXJ0VVJMOwog
QHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0RGlz
cGxheU1vZGUgZGlzcGxheU1vZGU7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5T
QXJyYXk8X1dLQXBwbGljYXRpb25NYW5pZmVzdEljb24gKj4gKmljb25zIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKICNpZiBUQVJHRVRfT1Nf
SVBIT05FCiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIG51bGxhYmxlLCBjb3B5KSBV
SUNvbG9yICp0aGVtZUNvbG9yIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDE1LjApKTsKQEAgLTYxLDQg
KzY5LDkgQEAgV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpLCBpb3MoMTEuMykpCiAK
IEBlbmQKIAorV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9T
X1RCQSkpCitAaW50ZXJmYWNlIF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uIDogTlNPYmplY3Qg
PE5TU2VjdXJlQ29kaW5nPgorCitAZW5kCisKIE5TX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFu
aWZlc3QubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRp
b25NYW5pZmVzdC5tbQppbmRleCAwMzU5ZWI1YjYwNDYuLjQ1YTY3MWM4M2ZjNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZl
c3QubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0
aW9uTWFuaWZlc3QubW0KQEAgLTQxLDYgKzQxLDE2IEBACiAjaW1wb3J0ICJBcHBLaXRTUEkuaCIK
ICNlbmRpZgogCitzdGF0aWMgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlm
ZXN0OjpJY29uPiBtYWtlVmVjdG9yRWxlbWVudChjb25zdCBXZWJDb3JlOjpBcHBsaWNhdGlvbk1h
bmlmZXN0OjpJY29uKiwgaWQgYXJyYXlFbGVtZW50KQoreworICAgIAorICAgIGlmICghW2FycmF5
RWxlbWVudCBpc0tpbmRPZkNsYXNzOiBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbi5jbGFzc10p
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgCisgICAgcmV0dXJuIFdlYkNvcmU6
OkFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb24geworICAgIH07Cit9CisKIEBpbXBsZW1lbnRhdGlv
biBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0CiAKICNpZiBFTkFCTEUoQVBQTElDQVRJT05fTUFOSUZF
U1QpCkBAIC01OSw2ICs2OSw3IEBACiAgICAgTlNJbnRlZ2VyIGRpc3BsYXkgPSBbYURlY29kZXIg
ZGVjb2RlSW50ZWdlckZvcktleTpAImRpc3BsYXkiXTsKICAgICBOU1VSTCAqc3RhcnRVUkwgPSBb
YURlY29kZXIgZGVjb2RlT2JqZWN0T2ZDbGFzczpbTlNVUkwgY2xhc3NdIGZvcktleTpAInN0YXJ0
X3VybCJdOwogICAgIENvY29hQ29sb3IgKnRoZW1lQ29sb3IgPSBbYURlY29kZXIgZGVjb2RlT2Jq
ZWN0T2ZDbGFzczpbQ29jb2FDb2xvciBjbGFzc10gZm9yS2V5OkAidGhlbWVfY29sb3IiXTsKKyAg
ICBOU0FycmF5PF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uICo+ICppY29ucyA9IFthRGVjb2Rl
ciBkZWNvZGVPYmplY3RPZkNsYXNzZXM6W05TU2V0IHNldFdpdGhBcnJheTpAW1tOU0FycmF5IGNs
YXNzXSwgW19XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uIGNsYXNzXV1dIGZvcktleTpAImljb25z
Il07CiAKICAgICBXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0IGNvcmVBcHBsaWNhdGlvbk1h
bmlmZXN0IHsKICAgICAgICAgV1RGOjpTdHJpbmcobmFtZSksCkBAIC02OCw2ICs3OSw3IEBACiAg
ICAgICAgIHN0YXRpY19jYXN0PFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q6OkRpc3BsYXk+
KGRpc3BsYXkpLAogICAgICAgICBVUkwoc3RhcnRVUkwpLAogICAgICAgICBXZWJDb3JlOjpyb3Vu
ZEFuZENsYW1wVG9TUkdCQUxvc3N5KHRoZW1lQ29sb3IuQ0dDb2xvciksCisgICAgICAgIFZlY3Rv
cjxXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uPihtYWtlVmVjdG9yPFdlYkNvcmU6
OkFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb24+KGljb25zKSksCiAgICAgfTsKIAogICAgIEFQSTo6
T2JqZWN0Ojpjb25zdHJ1Y3RJbldyYXBwZXI8QVBJOjpBcHBsaWNhdGlvbk1hbmlmZXN0PihzZWxm
LCBXVEZNb3ZlKGNvcmVBcHBsaWNhdGlvbk1hbmlmZXN0KSk7CkBAIC05NCw2ICsxMDYsNyBAQAog
ICAgIFthQ29kZXIgZW5jb2RlSW50ZWdlcjpzdGF0aWNfY2FzdDxOU0ludGVnZXI+KF9hcHBsaWNh
dGlvbk1hbmlmZXN0LT5hcHBsaWNhdGlvbk1hbmlmZXN0KCkuZGlzcGxheSkgZm9yS2V5OkAiZGlz
cGxheSJdOwogICAgIFthQ29kZXIgZW5jb2RlT2JqZWN0OnNlbGYuc3RhcnRVUkwgZm9yS2V5OkAi
c3RhcnRfdXJsIl07CiAgICAgW2FDb2RlciBlbmNvZGVPYmplY3Q6c2VsZi50aGVtZUNvbG9yIGZv
cktleTpAInRoZW1lX2NvbG9yIl07CisgICAgW2FDb2RlciBlbmNvZGVPYmplY3Q6c2VsZi5pY29u
cyBmb3JLZXk6QCJpY29ucyJdOwogfQogCiArIChfV0tBcHBsaWNhdGlvbk1hbmlmZXN0ICopYXBw
bGljYXRpb25NYW5pZmVzdEZyb21KU09OOihOU1N0cmluZyAqKWpzb24gbWFuaWZlc3RVUkw6KE5T
VVJMICopbWFuaWZlc3RVUkwgZG9jdW1lbnRVUkw6KE5TVVJMICopZG9jdW1lbnRVUkwKQEAgLTE1
OCw2ICsxNzEsMTEgQEAgc3RhdGljIE5TU3RyaW5nICpudWxsYWJsZU5TU3RyaW5nKGNvbnN0IFdU
Rjo6U3RyaW5nJiBzdHJpbmcpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKKy0gKE5T
QXJyYXk8X1dLQXBwbGljYXRpb25NYW5pZmVzdEljb24gKj4gKilpY29ucworeworICAgIHJldHVy
biBuaWw7Cit9CisKICNlbHNlIC8vIEVOQUJMRShBUFBMSUNBVElPTl9NQU5JRkVTVCkKIAogKyAo
X1dLQXBwbGljYXRpb25NYW5pZmVzdCAqKWFwcGxpY2F0aW9uTWFuaWZlc3RGcm9tSlNPTjooTlNT
dHJpbmcgKilqc29uIG1hbmlmZXN0VVJMOihOU1VSTCAqKW1hbmlmZXN0VVJMIGRvY3VtZW50VVJM
OihOU1VSTCAqKWRvY3VtZW50VVJMCkBAIC0yMTUsNiArMjMzLDQwIEBAIHN0YXRpYyBOU1N0cmlu
ZyAqbnVsbGFibGVOU1N0cmluZyhjb25zdCBXVEY6OlN0cmluZyYgc3RyaW5nKQogICAgIHJldHVy
biBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0RGlzcGxheU1vZGVCcm93c2VyOwogfQogCistIChOU0Fy
cmF5PF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uICo+ICopaWNvbnMKK3sKKyAgICByZXR1cm4g
bmlsOworfQorCiAjZW5kaWYgLy8gRU5BQkxFKEFQUExJQ0FUSU9OX01BTklGRVNUKQogCiBAZW5k
CisKK0BpbXBsZW1lbnRhdGlvbiBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbgorCisrIChCT09M
KXN1cHBvcnRzU2VjdXJlQ29kaW5nCit7CisgICAgcmV0dXJuIFlFUzsKK30KKworLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoQ29kZXI6KE5TQ29kZXIgKilhRGVjb2RlcgoreworICAgIFVOVVNFRF9Q
QVJBTShhRGVjb2Rlcik7CisgICAgW3NlbGYgcmVsZWFzZV07CisgICAgcmV0dXJuIG5pbDsKK30K
KworLSAodm9pZCllbmNvZGVXaXRoQ29kZXI6KE5TQ29kZXIgKilhQ29kZXIKK3sKKyAgICBVTlVT
RURfUEFSQU0oYUNvZGVyKTsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgaWYgKFdlYkNv
cmVPYmpDU2NoZWR1bGVEZWFsbG9jYXRlT25NYWluUnVuTG9vcChfV0tBcHBsaWNhdGlvbk1hbmlm
ZXN0SWNvbi5jbGFzcywgc2VsZikpCisgICAgICAgIHJldHVybjsKKworICAgIFtzdXBlciBkZWFs
bG9jXTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3RJbnRlcm5hbC5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3RJbnRlcm5hbC5oCmluZGV4
IGI2MGRkZTY5OGYwZi4uOWY1MDZjZTc0Y2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdEludGVybmFsLmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3RJ
bnRlcm5hbC5oCkBAIC0yNyw2ICsyNyw4IEBACiAKICNpbXBvcnQgIkFQSUFwcGxpY2F0aW9uTWFu
aWZlc3QuaCIKICNpbXBvcnQgIl9XS0FwcGxpY2F0aW9uTWFuaWZlc3QuaCIKKyNpbXBvcnQgPHd0
Zi9WZWN0b3IuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiAjaWYgRU5B
QkxFKEFQUExJQ0FUSU9OX01BTklGRVNUKQogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNjM1NmNlNDE2M2I5Li41ZmJmMTM4NmU0MDcgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
NiBAQAorCisyMDIxLTEwLTIwIFJhY2hlbCBHaW5zYmVyZyA8cmdpbnNiZXJnQGFwcGxlLmNvbT4K
KworICAgICAgICBBZGQgc3VwcG9ydCBpbiBXZWJDb3JlIGZvciB3ZWIgYXBwIG1hbmlmZXN0IGlj
b25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEz
MzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcDoK
KyAgICAgICAgKEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXJUZXN0OjpwYXJzZUljb25GaXJzdFRv
cExldmVsUHJvcGVydHkpOgorICAgICAgICBGdW5jdGlvbiB0byBjcmVhdGUgSlNPTiBmb3IgaWNv
biBhdHRyaWJ1dGVzLiBUaGlzIGlzIAorICAgICAgICBuZWNlc3NhcnkgYmVjYXVzZSBpY29ucyBh
cmUgaW4gYSBsaXN0LCB3aGVyZWFzIGFsbCBvdGhlcgorICAgICAgICBhdHRyaWJ1dGVzIGluIGFw
cCBtYW5pZmVzdCBhcmUgbm90LgorCisgICAgICAgIChBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2Vy
VGVzdDo6dGVzdEljb25zU3JjKToKKyAgICAgICAgKEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXJU
ZXN0Ojp0ZXN0SWNvbnNUeXBlKToKKyAgICAgICAgKEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXJU
ZXN0Ojp0ZXN0SWNvbnNTaXplcyk6CisgICAgICAgIChBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2Vy
VGVzdDo6dGVzdEljb25zUHVycG9zZSk6CisgICAgICAgIEZ1bmN0aW9ucyBmb3IgZWFjaCBvZiB0
aGUgaWNvbiBhdHRyaWJ1dGVzLgorCisgICAgICAgIChURVNUX0YpOgorICAgICAgICBDYWxscyB0
aGUgdmFyaW91cyBpY29uIHRlc3QgZnVuY3Rpb25zIHdpdGggZGlmZmVyZW50IGlucHV0CisKIDIw
MjEtMTEtMDggIEthdGUgQ2hlbmV5ICA8a2F0aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+CiAKICAg
ICAgICAgWyBpT1MxNSBFV1MgXSBUZXN0V2ViS2l0QVBJLkFwcFByaXZhY3lSZXBvcnQuTG9hZFNp
bXVsYXRlZFJlcXVlc3QgdGVzdHMgYXJlIHRpbWluZyBvdXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcCBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9BcHBsaWNhdGlvbk1hbmlmZXN0UGFy
c2VyLmNwcAppbmRleCBjMzk5NjU0NDY1MjAuLjI5ZGU2YmQ0NmIyYiAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIu
Y3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9BcHBsaWNhdGlvbk1h
bmlmZXN0UGFyc2VyLmNwcApAQCAtNzQsNiArNzQsMTggQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gcGFyc2VTdHJpbmcobWFuaWZlc3RDb250ZW50KTsKICAgICB9CiAKKyAgICBBcHBsaWNhdGlv
bk1hbmlmZXN0IHBhcnNlSWNvbkZpcnN0VG9wTGV2ZWxQcm9wZXJ0eShjb25zdCBTdHJpbmcgJiBr
ZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICBTdHJpbmcgbWFuaWZlc3RD
b250ZW50ID0gInsgXCJpY29uc1wiOiBbe1wiIiArIGtleSArICJcIjogIiArIHZhbHVlICsgIiwg
XCJzcmNcIjogXCJpY29uL2V4YW1wbGUucG5nXCIgfV19IjsKKyAgICAgICAgcmV0dXJuIHBhcnNl
U3RyaW5nKG1hbmlmZXN0Q29udGVudCk7CisgICAgfQorICAgIAorICAgIEFwcGxpY2F0aW9uTWFu
aWZlc3QgcGFyc2VJY29uRmlyc3RUb3BMZXZlbFByb3BlcnR5Rm9yU3JjKGNvbnN0IFN0cmluZyAm
IGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIFN0cmluZyBtYW5pZmVz
dENvbnRlbnQgPSAieyBcImljb25zXCI6IFt7XCIiICsga2V5ICsgIlwiOiAiICsgdmFsdWUgKyAi
IH1dfSI7CisgICAgICAgIHJldHVybiBwYXJzZVN0cmluZyhtYW5pZmVzdENvbnRlbnQpOworICAg
IH0KKwogICAgIHZvaWQgdGVzdFN0YXJ0VVJMKGNvbnN0IFN0cmluZyYgcmF3SlNPTiwgY29uc3Qg
U3RyaW5nJiBleHBlY3RlZFZhbHVlKQogICAgIHsKICAgICAgICAgdGVzdFN0YXJ0VVJMKHJhd0pT
T04sIHsgeyB9LCBleHBlY3RlZFZhbHVlIH0pOwpAQCAtMTM0LDYgKzE0NiwzNCBAQCBwdWJsaWM6
CiAgICAgICAgIEVYUEVDVF9FUShleHBlY3RlZFZhbHVlLCB2YWx1ZSk7CiAgICAgfQogCisgICAg
dm9pZCB0ZXN0SWNvbnNTcmMoY29uc3QgU3RyaW5nJiByYXdKU09OLCBjb25zdCBVUkwmIGV4cGVj
dGVkVmFsdWUpCisgICAgeworICAgICAgICBhdXRvIG1hbmlmZXN0ID0gcGFyc2VJY29uRmlyc3RU
b3BMZXZlbFByb3BlcnR5Rm9yU3JjKCJzcmMiLCByYXdKU09OKTsKKyAgICAgICAgYXV0byB2YWx1
ZSA9IG1hbmlmZXN0Lmljb25zWzBdLnNyYzsKKyAgICAgICAgRVhQRUNUX1NUUkVRKGV4cGVjdGVk
VmFsdWUuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdmFsdWUuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7CisgICAgfQorCisgICAgdm9pZCB0ZXN0SWNvbnNUeXBlKGNvbnN0IFN0cmluZyAmcmF3SlNP
TiwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZhbHVlKQorICAgIHsKKyAgICAgICAgYXV0byBtYW5p
ZmVzdCA9IHBhcnNlSWNvbkZpcnN0VG9wTGV2ZWxQcm9wZXJ0eSgidHlwZSIsIHJhd0pTT04pOwor
ICAgICAgICBhdXRvIHZhbHVlID0gbWFuaWZlc3QuaWNvbnNbMF0udHlwZTsKKyAgICAgICAgRVhQ
RUNUX1NUUkVRKGV4cGVjdGVkVmFsdWUudXRmOCgpLmRhdGEoKSwgdmFsdWUudXRmOCgpLmRhdGEo
KSk7CisgICAgfQorCisgICAgdm9pZCB0ZXN0SWNvbnNTaXplcyhjb25zdCBTdHJpbmcgJnJhd0pT
T04sIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWYWx1ZSkKKyAgICB7CisgICAgICAgIGF1dG8gbWFu
aWZlc3QgPSBwYXJzZUljb25GaXJzdFRvcExldmVsUHJvcGVydHkoInNpemVzIiwgcmF3SlNPTik7
CisgICAgICAgIGF1dG8gdmFsdWUgPSBtYW5pZmVzdC5pY29uc1swXS5zaXplczsKKyAgICAgICAg
RVhQRUNUX1NUUkVRKGV4cGVjdGVkVmFsdWUudXRmOCgpLmRhdGEoKSwgdmFsdWUudXRmOCgpLmRh
dGEoKSk7CisgICAgfQorCisgICAgdm9pZCB0ZXN0SWNvbnNQdXJwb3Nlcyhjb25zdCBTdHJpbmcg
JnJhd0pTT04sIE9wdGlvblNldDxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlPiBl
eHBlY3RlZFZhbHVlcykKKyAgICB7CisgICAgICAgIGF1dG8gbWFuaWZlc3QgPSBwYXJzZUljb25G
aXJzdFRvcExldmVsUHJvcGVydHkoInB1cnBvc2UiLCByYXdKU09OKTsKKyAgICAgICAgYXV0byB2
YWx1ZSA9IG1hbmlmZXN0Lmljb25zWzBdLnB1cnBvc2VzOworICAgICAgICBFWFBFQ1RfRVEoZXhw
ZWN0ZWRWYWx1ZXMsIHZhbHVlKTsKKyAgICB9CisKIH07CiAKIHN0YXRpYyB2b2lkIGFzc2VydE1h
bmlmZXN0SGFzRGVmYXVsdFZhbHVlcyhjb25zdCBVUkwmIG1hbmlmZXN0VVJMLCBjb25zdCBVUkwm
IGRvY3VtZW50VVJMLCBjb25zdCBBcHBsaWNhdGlvbk1hbmlmZXN0JiBtYW5pZmVzdCkKQEAgLTMy
Myw0ICszNjMsMzggQEAgVEVTVF9GKEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXJUZXN0LCBXaGl0
ZXNwYWNlKQogICAgIEVYUEVDVF9TVFJFUSgiUEFTUyIsIG1hbmlmZXN0Lm5hbWUudXRmOCgpLmRh
dGEoKSk7CiB9CiAKK1RFU1RfRihBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyVGVzdCwgSWNvbnMp
Cit7CisgICAgVVJMIHNyY1VSTCA9IHsgeyB9LCAiaHR0cHM6Ly9leGFtcGxlLmNvbS9pY29uLmpw
ZyIgfTsKKyAgICB0ZXN0SWNvbnNTcmMoIlwiaWNvbi5qcGdcIiIsIHNyY1VSTCk7CisgICAgdGVz
dEljb25zVHlwZSgiXCJpbWFnZS93ZWJwXCIiLCAiaW1hZ2Uvd2VicCIpOworICAgIHRlc3RJY29u
c1NpemVzKCJcIjI1NngyNTZcIiIsICIyNTZ4MjU2Iik7CisgICAgdGVzdEljb25zU2l6ZXMoIlwi
NzJ4NzIgOTZ4OTZcIiIsICI3Mng3MiA5Nng5NiIpOworCisgICAgT3B0aW9uU2V0PEFwcGxpY2F0
aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2U+IHB1cnBvc2VfYW55OworICAgIHB1cnBvc2VfYW55
LmFkZChBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlOjpBbnkpOworICAgIE9wdGlv
blNldDxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlPiBwdXJwb3NlX21vbm9jaHJv
bWU7CisgICAgcHVycG9zZV9tb25vY2hyb21lLmFkZChBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29u
OjpQdXJwb3NlOjpNb25vY2hyb21lKTsKKyAgICBPcHRpb25TZXQ8QXBwbGljYXRpb25NYW5pZmVz
dDo6SWNvbjo6UHVycG9zZT4gcHVycG9zZV9tYXNrYWJsZTsKKyAgICBwdXJwb3NlX21hc2thYmxl
LmFkZChBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlOjpNYXNrYWJsZSk7CisKKyAg
ICB0ZXN0SWNvbnNQdXJwb3NlcygiXCJtb25vY2hyb21lXCIiLCBwdXJwb3NlX21vbm9jaHJvbWUp
OworICAgIHRlc3RJY29uc1B1cnBvc2VzKCJcIm1hc2thYmxlXCIiLCBwdXJwb3NlX21hc2thYmxl
KTsKKyAgICB0ZXN0SWNvbnNQdXJwb3NlcygiXCJhbnlcIiIsIHB1cnBvc2VfYW55KTsKKyAgICB0
ZXN0SWNvbnNQdXJwb3NlcygiXCJcdE1PTk9DSFJPTUVcIiIsIHB1cnBvc2VfbW9ub2Nocm9tZSk7
CisKKyAgICB0ZXN0SWNvbnNQdXJwb3NlcygiMTIzIiwgcHVycG9zZV9hbnkpOworICAgIHRlc3RJ
Y29uc1B1cnBvc2VzKCJudWxsIiwgcHVycG9zZV9hbnkpOworICAgIHRlc3RJY29uc1B1cnBvc2Vz
KCJ0cnVlIiwgcHVycG9zZV9hbnkpOworICAgIHRlc3RJY29uc1B1cnBvc2VzKCJ7IH0iLCBwdXJw
b3NlX2FueSk7CisgICAgdGVzdEljb25zUHVycG9zZXMoIlsgXSIsIHB1cnBvc2VfYW55KTsKKwor
ICAgIE9wdGlvblNldDxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlPiBwdXJwb3Nl
X21vbm9jaHJvbWVfYW55OworICAgIHB1cnBvc2VfbW9ub2Nocm9tZV9hbnkuYWRkKEFwcGxpY2F0
aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2U6Ok1vbm9jaHJvbWUpOworICAgIHB1cnBvc2VfbW9u
b2Nocm9tZV9hbnkuYWRkKEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2U6OkFueSk7
CisKKyAgICB0ZXN0SWNvbnNQdXJwb3NlcygiXCJtb25vY2hyb21lIGFueVwiIiwgcHVycG9zZV9t
b25vY2hyb21lX2FueSk7CisKK30KKwogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443825</attachid>
            <date>2021-11-10 10:01:27 -0800</date>
            <delta_ts>2021-11-10 10:13:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>rdar_82738657</filename>
            <type>text/plain</type>
            <size>22356</size>
            <attacher>rginsberg</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjNDdhZjI4YzFjNzAuLmU3NjMzYThmMWUwZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQwIEBACisyMDIxLTEwLTE1ICBSYWNoZWwgR2luc2JlcmcgIDxyZ2luc2JlcmdAYXBw
bGUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGluIFdlYkNvcmUgZm9yIHdlYiBhcHAgbWFu
aWZlc3QgaWNvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzMTMzOQorICAgICAgICByZGFyOi8vODQzMTEzMDYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0cyBhcmUgYWRkZWQgdG8gT3BlblNvdXJj
ZS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQXBwbGljYXRpb25NYW5pZmVzdFBh
cnNlci5jcHAKKworICAgICAgICAqIE1vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNh
dGlvbk1hbmlmZXN0Lmg6CisgICAgICAgIEEgbmV3IGVudW0gZm9yIHRoZSBpY29uIHB1cnBvc2Ug
KEljb246OlB1cnBvc2UpIHdhcyBhZGRlZCB0byB0aGUgQXBwbGljYXRpb25NYW5pZmVzdDo6SWNv
biBzdHJ1Y3QuCisgICAgICAgIEEgbmV3IEljb24gc3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGUg
Zm9yIHRoZSBzcmMsIHNpemVzLAorICAgICAgICB0eXBlLCBhbmQgSWNvbjo6UHVycG9zZSBhdHRy
aWJ1dGVzIGZvciBhcHAgbWFuaWZlc3QgaWNvbnMgd2FzIGFkZGVkIHRvIHRoZSBBcHBsaWNhdGlv
bk1hbmlmZXN0CisgICAgICAgIHN0cnVjdC4gQSB2ZWN0b3Igb2YgSWNvbidzIGlzIGFkZGVkIGFz
IGEgdmFyaWFibGUgZm9yCisgICAgICAgIHRoZSBBcHBsaWNhdGlvbk1hbmlmZXN0IHN0cnVjdC4K
KyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q6OmVuY29kZSBjb25zdCk6Cisg
ICAgICAgIEFkZGVkIGljb25zIHRvIGVuY29kZSBmdW5jdGlvbgorICAgICAgICAoV2ViY29yZTo6
QXBwbGljYXRpb25NYW5pZmVzdDo6ZGVjb2RlKToKKyAgICAgICAgQWRkZWQgaWNvbnMgdG8gZGVj
b2RlIGZ1bmN0aW9uCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29u
OjplbmNvZGUgY29uc3QpOgorICAgICAgICBDcmVhdGUgZW5jb2RlIGZ1bmN0aW9uIGZvciBBcHBs
aWNhdGlvbk1hbmlmZXN0OjpJY29uCisgICAgICAgIChXZWJjb3JlOjpBcHBsaWNhdGlvbk1hbmlm
ZXN0OjpJY29uOjpkZWNvZGUpOgorICAgICAgICBDcmVhdGUgZGVjb2RlIGZ1bmN0aW9uIGZvciBB
cHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uCisKKworICAgICAgICAqIE1vZHVsZXMvYXBwbGljYXRp
b25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlTWFuaWZlc3QpOgorICAgICAgICBB
ZGRlZCBjYWxsIHRvIHBhcnNlSWNvbnMKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFu
aWZlc3RQYXJzZXI6OnBhcnNlSWNvbnMpOgorICAgICAgICBwYXJzZUljb25zIGl0ZXJhdGVzIHRo
cm91Z2ggdGhlIGxpc3Qgb2YgaWNvbnMsIHBlcmZvcm1zIGNoZWNrcyBmb3IgYXR0cmlidXRlLAor
ICAgICAgICBhbmQgdGhlbiwgaWYgdmFsaWQsIGFkZHMgdGhlIGF0dHJpYnV0ZSB0byBhbiBBcHBs
aWNhdGlvbk1hbmlmZXN0SWNvbiBzdHJ1Y3QKKyAgICAgICAgdGhhdCBpcyBhcHBlbmRlZCB0byBh
IG5ldyBWZWN0b3Igb2YgQXBwbGljYXRpb25NYW5pZmVzdEljb25zLgorCisgICAgICAgICogTW9k
dWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuaDoKKyAg
ICAgICAgRGVjbGFyZSBmdW5jdGlvbnMgZm9yIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIKKwog
MjAyMS0xMS0wOCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAg
ICAgICBFbmFibGluZyAibWVkaWEgc291cmNlIGlubGluZSBwYWludGluZyIgYnkgZGVmYXVsdCBz
aG91bGQgd29yayB3aGVuIHVzaW5nIEdQVSBQcm9jZXNzIGZvciBtZWRpYQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFu
aWZlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBs
aWNhdGlvbk1hbmlmZXN0LmgKaW5kZXggZmE1NDFiMmIzMmJhLi42NzUxOGE5M2UwOWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNh
dGlvbk1hbmlmZXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1h
bmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3QuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUg
IkNvbG9yLmgiCiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvVVJM
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTQxLDYgKzQyLDIyIEBAIHN0cnVjdCBBcHBsaWNhdGlvbk1hbmlmZXN0IHsKICAgICAgICAgRnVs
bHNjcmVlbiwKICAgICB9OwogCisgICAgc3RydWN0IEljb24geworICAgICAgICBlbnVtIGNsYXNz
IFB1cnBvc2UgOiB1aW50OF90ICB7CisgICAgICAgICAgICBBbnkgPSAxIDw8IDAsCisgICAgICAg
ICAgICBNb25vY2hyb21lID0gMSA8PCAxLAorICAgICAgICAgICAgTWFza2FibGUgPSAxIDw8IDIs
CisgICAgICAgIH07CisKKyAgICAgICAgVVJMIHNyYzsKKyAgICAgICAgU3RyaW5nIHNpemVzOwor
ICAgICAgICBTdHJpbmcgdHlwZTsKKyAgICAgICAgT3B0aW9uU2V0PFB1cnBvc2U+IHB1cnBvc2Vz
OworCisgICAgICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKKyAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0
aW9uYWw8QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB9
OworCiAgICAgU3RyaW5nIG5hbWU7CiAgICAgU3RyaW5nIHNob3J0TmFtZTsKICAgICBTdHJpbmcg
ZGVzY3JpcHRpb247CkBAIC00OCw2ICs2NSw3IEBAIHN0cnVjdCBBcHBsaWNhdGlvbk1hbmlmZXN0
IHsKICAgICBEaXNwbGF5IGRpc3BsYXk7CiAgICAgVVJMIHN0YXJ0VVJMOwogICAgIENvbG9yIHRo
ZW1lQ29sb3I7CisgICAgVmVjdG9yPEljb24+IGljb25zOwogCiAgICAgdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEFwcGxpY2F0aW9uTWFuaWZlc3Q+IGRlY29k
ZShEZWNvZGVyJik7CkBAIC01Niw3ICs3NCw3IEBAIHN0cnVjdCBBcHBsaWNhdGlvbk1hbmlmZXN0
IHsKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIEFwcGxpY2F0aW9uTWFuaWZlc3Q6OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewotICAgIGVuY29kZXIgPDwgbmFtZSA8PCBz
aG9ydE5hbWUgPDwgZGVzY3JpcHRpb24gPDwgc2NvcGUgPDwgZGlzcGxheSA8PCBzdGFydFVSTCA8
PCB0aGVtZUNvbG9yOworICAgIGVuY29kZXIgPDwgbmFtZSA8PCBzaG9ydE5hbWUgPDwgZGVzY3Jp
cHRpb24gPDwgc2NvcGUgPDwgZGlzcGxheSA8PCBzdGFydFVSTCA8PCB0aGVtZUNvbG9yIDw8IGlj
b25zOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgpAQCAtNzgsNiArOTYsMzAgQEAgc3Rk
OjpvcHRpb25hbDxBcHBsaWNhdGlvbk1hbmlmZXN0PiBBcHBsaWNhdGlvbk1hbmlmZXN0OjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC50aGVtZUNvbG9yKSkKICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pY29ucykpCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IHNyYyA8PCBzaXpl
cyA8PCB0eXBlIDw8IHB1cnBvc2VzOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3Rk
OjpvcHRpb25hbDxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uPiBBcHBsaWNhdGlvbk1hbmlmZXN0
OjpJY29uOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBBcHBsaWNhdGlvbk1hbmlm
ZXN0OjpJY29uIHJlc3VsdDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zcmMpKQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVz
dWx0LnNpemVzKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3VsdC50eXBlKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5wdXJwb3NlcykpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtOTYsNiArMTM4LDE1IEBA
IHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVz
dDo6RGlzcGxheT4gewogICAgID47CiB9OwogCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRz
PFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2U+IHsKKyAgICB1c2lu
ZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlm
ZXN0OjpJY29uOjpQdXJwb3NlLAorICAgICAgICBXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0
OjpJY29uOjpQdXJwb3NlOjpBbnksCisgICAgICAgIFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZl
c3Q6Okljb246OlB1cnBvc2U6Ok1vbm9jaHJvbWUsCisgICAgICAgIFdlYkNvcmU6OkFwcGxpY2F0
aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2U6Ok1hc2thYmxlCisgICAgPjsKK307CisKIH0gLy8g
bmFtZXNwYWNlIFdURjsKIAogI2VuZGlmIC8vIEVOQUJMRShBUFBMSUNBVElPTl9NQU5JRkVTVCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9B
cHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBw
bGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcAppbmRleCA0Y2Iw
ZGY3NzBjZDguLjA0MzI4ZTUzZTkyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1h
bmlmZXN0UGFyc2VyLmNwcApAQCAtNzgsNiArNzgsNyBAQCBBcHBsaWNhdGlvbk1hbmlmZXN0IEFw
cGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlTWFuaWZlc3QoY29uc3QgU3RyaW5nJiB0ZXh0
LAogICAgIHBhcnNlZE1hbmlmZXN0LnNob3J0TmFtZSA9IHBhcnNlU2hvcnROYW1lKCptYW5pZmVz
dCk7CiAgICAgcGFyc2VkTWFuaWZlc3Quc2NvcGUgPSBwYXJzZVNjb3BlKCptYW5pZmVzdCwgZG9j
dW1lbnRVUkwsIHBhcnNlZE1hbmlmZXN0LnN0YXJ0VVJMKTsKICAgICBwYXJzZWRNYW5pZmVzdC50
aGVtZUNvbG9yID0gcGFyc2VDb2xvcigqbWFuaWZlc3QsICJ0aGVtZV9jb2xvciJfcyk7CisgICAg
cGFyc2VkTWFuaWZlc3QuaWNvbnMgPSBwYXJzZUljb25zKCptYW5pZmVzdCk7CiAKICAgICBpZiAo
bV9kb2N1bWVudCkKICAgICAgICAgbV9kb2N1bWVudC0+cHJvY2Vzc0FwcGxpY2F0aW9uTWFuaWZl
c3QocGFyc2VkTWFuaWZlc3QpOwpAQCAtMTc0LDYgKzE3NSw4NyBAQCBTdHJpbmcgQXBwbGljYXRp
b25NYW5pZmVzdFBhcnNlcjo6cGFyc2VTaG9ydE5hbWUoY29uc3QgSlNPTjo6T2JqZWN0JiBtYW5p
ZmVzdCkKICAgICByZXR1cm4gcGFyc2VHZW5lcmljU3RyaW5nKG1hbmlmZXN0LCAic2hvcnRfbmFt
ZSJfcyk7CiB9CiAKK1ZlY3RvcjxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uPiBBcHBsaWNhdGlv
bk1hbmlmZXN0UGFyc2VyOjpwYXJzZUljb25zKGNvbnN0IEpTT046Ok9iamVjdCYgbWFuaWZlc3Qp
Cit7CisgICAgYXV0byBtYW5pZmVzdEljb25zID0gbWFuaWZlc3QuZ2V0VmFsdWUoImljb25zIl9z
KTsKKworICAgIFZlY3RvcjxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uPiBpbWFnZVJlc291cmNl
czsKKyAgICBpZiAoIW1hbmlmZXN0SWNvbnMpCisgICAgICAgIHJldHVybiBpbWFnZVJlc291cmNl
czsKKworICAgIGF1dG8gbWFuaWZlc3RJY29uc0FycmF5ID0gbWFuaWZlc3RJY29ucy0+YXNBcnJh
eSgpOworICAgIGlmICghbWFuaWZlc3RJY29uc0FycmF5KSB7CisgICAgICAgIGxvZ0RldmVsb3Bl
cldhcm5pbmcoIlRoZSB2YWx1ZSBvZiBpY29ucyBpcyBub3QgYSB2YWxpZCBhcnJheS4iX3MpOwor
ICAgICAgICByZXR1cm4gaW1hZ2VSZXNvdXJjZXM7CisgICAgfQorCisgICAgZm9yIChjb25zdCBh
dXRvJiBpY29uVmFsdWUgOiAqbWFuaWZlc3RJY29uc0FycmF5KSB7CisgICAgICAgIEFwcGxpY2F0
aW9uTWFuaWZlc3Q6Okljb24gY3VycmVudEljb247CisgICAgICAgIGF1dG8gaWNvbk9iamVjdCA9
IGljb25WYWx1ZS0+YXNPYmplY3QoKTsKKyAgICAgICAgaWYgKCFpY29uT2JqZWN0KQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGNvbnN0IGF1dG8mIGljb25KU09OID0gKmljb25PYmpl
Y3Q7CisKKyAgICAgICAgYXV0byBzcmNWYWx1ZSA9IGljb25KU09OLmdldFZhbHVlKCJzcmMiX3Mp
OworICAgICAgICBpZiAoIXNyY1ZhbHVlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IGF1dG8gc3JjU3RyaW5nVmFsdWUgPSBzcmNWYWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgaWYg
KCFzcmNTdHJpbmdWYWx1ZSkgeworICAgICAgICAgICAgbG9nTWFuaWZlc3RQcm9wZXJ0eU5vdEFT
dHJpbmcoInNyYyJfcyk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAg
ICBVUkwgc3JjVVJMKG1fbWFuaWZlc3RVUkwsIHNyY1N0cmluZ1ZhbHVlKTsKKyAgICAgICAgaWYg
KHNyY1VSTC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFz
cmNVUkwuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBsb2dNYW5pZmVzdFByb3BlcnR5SW52YWxp
ZFVSTCgic3JjIl9zKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAg
IGN1cnJlbnRJY29uLnNyYyA9IHNyY1VSTDsKKworICAgICAgICBjdXJyZW50SWNvbi5zaXplcyA9
IHBhcnNlR2VuZXJpY1N0cmluZyhpY29uSlNPTiwgInNpemVzIl9zKTsKKworICAgICAgICBjdXJy
ZW50SWNvbi50eXBlID0gcGFyc2VHZW5lcmljU3RyaW5nKGljb25KU09OLCAidHlwZSJfcyk7CisK
KyAgICAgICAgYXV0byBwdXJwb3NlVmFsdWUgPSBpY29uSlNPTi5nZXRWYWx1ZSgicHVycG9zZSJf
cyk7CisgICAgICAgIE9wdGlvblNldDxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3Nl
PiBwdXJwb3NlczsKKworICAgICAgICBpZiAoIXB1cnBvc2VWYWx1ZSkgeworICAgICAgICAgICAg
cHVycG9zZXMuYWRkKEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2U6OkFueSk7Cisg
ICAgICAgICAgICBjdXJyZW50SWNvbi5wdXJwb3NlcyA9IHB1cnBvc2VzOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgYXV0byBwdXJwb3NlU3RyaW5nVmFsdWUgPSBwdXJwb3NlVmFsdWUt
PmFzU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAoIXB1cnBvc2VTdHJpbmdWYWx1ZSkgeworICAg
ICAgICAgICAgICAgIGxvZ01hbmlmZXN0UHJvcGVydHlOb3RBU3RyaW5nKCJwdXJwb3NlIl9zKTsK
KyAgICAgICAgICAgICAgICBwdXJwb3Nlcy5hZGQoQXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6
UHVycG9zZTo6QW55KTsKKyAgICAgICAgICAgICAgICBjdXJyZW50SWNvbi5wdXJwb3NlcyA9IHB1
cnBvc2VzOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwdXJwb3NlU3Ry
aW5nVmFsdWUgPSBwdXJwb3NlU3RyaW5nVmFsdWUuc3RyaXBXaGl0ZVNwYWNlKCkuY29udmVydFRv
QVNDSUlMb3dlcmNhc2UoKTsKKyAgICAgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBrZXl3b3Jk
cyA9IHB1cnBvc2VTdHJpbmdWYWx1ZS5zcGxpdEFsbG93aW5nRW1wdHlFbnRyaWVzKCIgIik7CisK
KyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleXdvcmQgOiBrZXl3b3Jkcykgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoa2V5d29yZCA9PSAibW9ub2Nocm9tZSIpCisgICAgICAg
ICAgICAgICAgICAgICAgICBwdXJwb3Nlcy5hZGQoQXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6
UHVycG9zZTo6TW9ub2Nocm9tZSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGtleXdv
cmQgPT0gIm1hc2thYmxlIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2VzLmFkZChB
cHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlOjpNYXNrYWJsZSk7CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGtleXdvcmQgPT0gImFueSIpCisgICAgICAgICAgICAgICAgICAg
ICAgICBwdXJwb3Nlcy5hZGQoQXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6UHVycG9zZTo6QW55
KTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgbG9n
RGV2ZWxvcGVyV2FybmluZyhtYWtlU3RyaW5nKCJcIiJfcywgcHVycG9zZVN0cmluZ1ZhbHVlLCAi
XCIgaXMgbm90IGEgdmFsaWQgcHVycG9zZS4iX3MpKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaWYgKHB1cnBvc2VzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgICAgICAgICBjdXJyZW50SWNvbi5wdXJwb3NlcyA9IHB1cnBv
c2VzOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaW1hZ2VSZXNvdXJjZXMu
YXBwZW5kKFdURk1vdmUoY3VycmVudEljb24pKTsKKyAgICB9CisKKyAgICByZXR1cm4gaW1hZ2VS
ZXNvdXJjZXM7Cit9CisKIHN0YXRpYyBib29sIGlzSW5TY29wZShjb25zdCBVUkwmIHNjb3BlVVJM
LCBjb25zdCBVUkwmIHRhcmdldFVSTCkKIHsKICAgICAvLyAxLiBJZiBzY29wZVVSTCBpcyB1bmRl
ZmluZWQgKGkuZS4sIGl0IGlzIHVuYm91bmRlZCBiZWNhdXNlIG9mIGFuIGVycm9yIG9yIGl0IHdh
cyBub3QgZGVjbGFyZWQgaW4gdGhlIG1hbmlmZXN0KSwgcmV0dXJuIHRydWUuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25N
YW5pZmVzdFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlm
ZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuaAppbmRleCAzZjk2MmRiYTgyMjEuLmI5Nzll
YTZjYjU4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1h
bmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5oCkBA
IC01MCw2ICs1MCw3IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIHBhcnNlRGVzY3JpcHRpb24oY29u
c3QgSlNPTjo6T2JqZWN0Jik7CiAgICAgU3RyaW5nIHBhcnNlU2hvcnROYW1lKGNvbnN0IEpTT046
Ok9iamVjdCYpOwogICAgIFVSTCBwYXJzZVNjb3BlKGNvbnN0IEpTT046Ok9iamVjdCYsIGNvbnN0
IFVSTCYsIGNvbnN0IFVSTCYpOworICAgIFZlY3RvcjxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29u
PiBwYXJzZUljb25zKGNvbnN0IEpTT046Ok9iamVjdCYpOwogCiAgICAgQ29sb3IgcGFyc2VDb2xv
cihjb25zdCBKU09OOjpPYmplY3QmLCBjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7CiAgICAg
U3RyaW5nIHBhcnNlR2VuZXJpY1N0cmluZyhjb25zdCBKU09OOjpPYmplY3QmLCBjb25zdCBTdHJp
bmcmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKaW5kZXggOTE5OWM4YjQ4OGQ0Li41NzY3Yzk2ZTdkYTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjggQEAKKzIwMjEtMTAtMTggIFJhY2hlbCBHaW5zYmVyZyAgPHJnaW5zYmVyZ0Bh
cHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgaW4gV2ViQ29yZSBmb3Igd2ViIGFwcCBt
YW5pZmVzdCBpY29ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjMxMzM5CisgICAgICAgIHJkYXI6Ly84NDMxMTMwNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tB
cHBsaWNhdGlvbk1hbmlmZXN0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tB
cHBsaWNhdGlvbk1hbmlmZXN0Lm1tOgorICAgICAgICAobWFrZVZlY3RvckVsZW1lbnQpOgorICAg
ICAgICBVc2VkIGJ5IG1ha2VWZWN0b3IgaW4gaW5pdFdpdGhDb2RlcjouIFRha2VzIGEgX1dLQXBw
bGljYXRpb25NYW5pZmVzdEljb24gYW5kIHJldHVybnMKKyAgICAgICAgYSBXZWJDb3JlOjpBcHBs
aWNhdGlvbk1hbmlmZXN0OjpJY29uLgorICAgICAgICAoLVtfV0tBcHBsaWNhdGlvbk1hbmlmZXN0
IGluaXRXaXRoQ29kZXI6XSk6CisgICAgICAgIEFkZGVkIGljb25zLgorICAgICAgICAoLVtfV0tB
cHBsaWNhdGlvbk1hbmlmZXN0IGVuY29kZVdpdGhDb2RlcjpdKToKKyAgICAgICAgQWRkZWQgaWNv
bnMuCisgICAgICAgICgtW19XS0FwcGxpY2F0aW9uTWFuaWZlc3QgaWNvbnNdKToKKyAgICAgICAg
U2hvdWxkIGFwcGVhc2UgYnVpbGQgZXJyb3IgYmVmb3JlIGZ1bGwgc3VwcG9ydCBmb3IgaWNvbnMg
aXMgYnVpbHQgaW50byBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0CisKKyAgICAgICAgKCtbX1dLQXBw
bGljYXRpb25NYW5pZmVzdEljb24gc3VwcG9ydHNTZWN1cmVDb2RpbmddKToKKyAgICAgICAgKC1b
X1dLQXBwbGljYXRpb25NYW5pZmVzdEljb24gaW5pdFdpdGhDb2RlcjpdKToKKyAgICAgICAgKC1b
X1dLQXBwbGljYXRpb25NYW5pZmVzdEljb24gZW5jb2RlV2l0aENvZGVyOl0pOgorICAgICAgICAo
LVtfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbiBkZWFsbG9jXSk6CisKIDIwMjEtMTEtMDggIFdl
bnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxpbmcg
Im1lZGlhIHNvdXJjZSBpbmxpbmUgcGFpbnRpbmciIGJ5IGRlZmF1bHQgc2hvdWxkIHdvcmsgd2hl
biB1c2luZyBHUFUgUHJvY2VzcyBmb3IgbWVkaWEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0LmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5oCmluZGV4IGIz
MWZhZjQ5OGM4Mi4uNmE5ZTkyOTM0ODNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0LmgKQEAgLTMxLDYg
KzMxLDcgQEAKICNlbHNlCiBAY2xhc3MgTlNDb2xvcjsKICNlbmRpZgorQGNsYXNzIF9XS0FwcGxp
Y2F0aW9uTWFuaWZlc3RJY29uOwogCiBOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgogCkBAIC00MSw2
ICs0MiwxMiBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tBcHBsaWNhdGlvbk1hbmlm
ZXN0RGlzcGxheU1vZGUpIHsKICAgICBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0RGlzcGxheU1vZGVG
dWxsU2NyZWVuLAogfSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpLCBpb3MoMTEuMykp
OwogCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNv
blB1cnBvc2UpIHsKKyAgICBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvblB1cnBvc2VBbnksCisg
ICAgX1dLQXBwbGljYXRpb25NYW5pZmVzdEljb25QdXJwb3NlTW9ub2Nocm9tZSwKKyAgICBfV0tB
cHBsaWNhdGlvbk1hbmlmZXN0SWNvblB1cnBvc2VNYXNrYWJsZSwKK30gV0tfQVBJX0FWQUlMQUJM
RShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKwogV0tfQ0xBU1NfQVZBSUxB
QkxFKG1hY29zKDEwLjEzLjQpLCBpb3MoMTEuMykpCiBAaW50ZXJmYWNlIF9XS0FwcGxpY2F0aW9u
TWFuaWZlc3QgOiBOU09iamVjdCA8TlNTZWN1cmVDb2Rpbmc+CiAKQEAgLTUwLDYgKzU3LDcgQEAg
V0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpLCBpb3MoMTEuMykpCiBAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHksIG51bGxhYmxlLCBjb3B5KSBOU1VSTCAqc2NvcGU7CiBAcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TVVJMICpzdGFydFVSTDsKIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgX1dLQXBwbGljYXRpb25NYW5pZmVzdERpc3BsYXlN
b2RlIGRpc3BsYXlNb2RlOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0FycmF5
PF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uICo+ICppY29ucyBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogCiAjaWYgVEFSR0VUX09TX0lQSE9O
RQogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBudWxsYWJsZSwgY29weSkgVUlDb2xv
ciAqdGhlbWVDb2xvciBXS19BUElfQVZBSUxBQkxFKGlvcygxNS4wKSk7CkBAIC02MSw0ICs2OSw5
IEBAIFdLX0NMQVNTX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSwgaW9zKDExLjMpKQogCiBAZW5k
CiAKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEp
KQorQGludGVyZmFjZSBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbiA6IE5TT2JqZWN0IDxOU1Nl
Y3VyZUNvZGluZz4KKworQGVuZAorCiBOU19BU1NVTUVfTk9OTlVMTF9FTkQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0
Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFu
aWZlc3QubW0KaW5kZXggMDM1OWViNWI2MDQ2Li4wNGVhNmY1ZmI3NjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0Lm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1h
bmlmZXN0Lm1tCkBAIC00MSw2ICs0MSwxNiBAQAogI2ltcG9ydCAiQXBwS2l0U1BJLmgiCiAjZW5k
aWYKIAorc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdDo6
SWNvbj4gbWFrZVZlY3RvckVsZW1lbnQoY29uc3QgV2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVz
dDo6SWNvbiosIGlkIGFycmF5RWxlbWVudCkKK3sKKworICAgIGlmICghW2FycmF5RWxlbWVudCBp
c0tpbmRPZkNsYXNzOiBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbi5jbGFzc10pCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gV2ViQ29yZTo6QXBwbGljYXRpb25N
YW5pZmVzdDo6SWNvbiB7CisgICAgfTsKK30KKwogQGltcGxlbWVudGF0aW9uIF9XS0FwcGxpY2F0
aW9uTWFuaWZlc3QKIAogI2lmIEVOQUJMRShBUFBMSUNBVElPTl9NQU5JRkVTVCkKQEAgLTU5LDYg
KzY5LDcgQEAKICAgICBOU0ludGVnZXIgZGlzcGxheSA9IFthRGVjb2RlciBkZWNvZGVJbnRlZ2Vy
Rm9yS2V5OkAiZGlzcGxheSJdOwogICAgIE5TVVJMICpzdGFydFVSTCA9IFthRGVjb2RlciBkZWNv
ZGVPYmplY3RPZkNsYXNzOltOU1VSTCBjbGFzc10gZm9yS2V5OkAic3RhcnRfdXJsIl07CiAgICAg
Q29jb2FDb2xvciAqdGhlbWVDb2xvciA9IFthRGVjb2RlciBkZWNvZGVPYmplY3RPZkNsYXNzOltD
b2NvYUNvbG9yIGNsYXNzXSBmb3JLZXk6QCJ0aGVtZV9jb2xvciJdOworICAgIE5TQXJyYXk8X1dL
QXBwbGljYXRpb25NYW5pZmVzdEljb24gKj4gKmljb25zID0gW2FEZWNvZGVyIGRlY29kZU9iamVj
dE9mQ2xhc3NlczpbTlNTZXQgc2V0V2l0aEFycmF5OkBbW05TQXJyYXkgY2xhc3NdLCBbX1dLQXBw
bGljYXRpb25NYW5pZmVzdEljb24gY2xhc3NdXV0gZm9yS2V5OkAiaWNvbnMiXTsKIAogICAgIFdl
YkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3QgY29yZUFwcGxpY2F0aW9uTWFuaWZlc3QgewogICAg
ICAgICBXVEY6OlN0cmluZyhuYW1lKSwKQEAgLTY4LDYgKzc5LDcgQEAKICAgICAgICAgc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdDo6RGlzcGxheT4oZGlzcGxheSksCiAg
ICAgICAgIFVSTChzdGFydFVSTCksCiAgICAgICAgIFdlYkNvcmU6OnJvdW5kQW5kQ2xhbXBUb1NS
R0JBTG9zc3kodGhlbWVDb2xvci5DR0NvbG9yKSwKKyAgICAgICAgVmVjdG9yPFdlYkNvcmU6OkFw
cGxpY2F0aW9uTWFuaWZlc3Q6Okljb24+KG1ha2VWZWN0b3I8V2ViQ29yZTo6QXBwbGljYXRpb25N
YW5pZmVzdDo6SWNvbj4oaWNvbnMpKSwKICAgICB9OwogCiAgICAgQVBJOjpPYmplY3Q6OmNvbnN0
cnVjdEluV3JhcHBlcjxBUEk6OkFwcGxpY2F0aW9uTWFuaWZlc3Q+KHNlbGYsIFdURk1vdmUoY29y
ZUFwcGxpY2F0aW9uTWFuaWZlc3QpKTsKQEAgLTk0LDYgKzEwNiw3IEBACiAgICAgW2FDb2RlciBl
bmNvZGVJbnRlZ2VyOnN0YXRpY19jYXN0PE5TSW50ZWdlcj4oX2FwcGxpY2F0aW9uTWFuaWZlc3Qt
PmFwcGxpY2F0aW9uTWFuaWZlc3QoKS5kaXNwbGF5KSBmb3JLZXk6QCJkaXNwbGF5Il07CiAgICAg
W2FDb2RlciBlbmNvZGVPYmplY3Q6c2VsZi5zdGFydFVSTCBmb3JLZXk6QCJzdGFydF91cmwiXTsK
ICAgICBbYUNvZGVyIGVuY29kZU9iamVjdDpzZWxmLnRoZW1lQ29sb3IgZm9yS2V5OkAidGhlbWVf
Y29sb3IiXTsKKyAgICBbYUNvZGVyIGVuY29kZU9iamVjdDpzZWxmLmljb25zIGZvcktleTpAImlj
b25zIl07CiB9CiAKICsgKF9XS0FwcGxpY2F0aW9uTWFuaWZlc3QgKilhcHBsaWNhdGlvbk1hbmlm
ZXN0RnJvbUpTT046KE5TU3RyaW5nICopanNvbiBtYW5pZmVzdFVSTDooTlNVUkwgKiltYW5pZmVz
dFVSTCBkb2N1bWVudFVSTDooTlNVUkwgKilkb2N1bWVudFVSTApAQCAtMTU4LDYgKzE3MSwxMSBA
QCBzdGF0aWMgTlNTdHJpbmcgKm51bGxhYmxlTlNTdHJpbmcoY29uc3QgV1RGOjpTdHJpbmcmIHN0
cmluZykKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAorLSAoTlNBcnJheTxfV0tBcHBs
aWNhdGlvbk1hbmlmZXN0SWNvbiAqPiAqKWljb25zCit7CisgICAgcmV0dXJuIG5pbDsKK30KKwog
I2Vsc2UgLy8gRU5BQkxFKEFQUExJQ0FUSU9OX01BTklGRVNUKQogCiArIChfV0tBcHBsaWNhdGlv
bk1hbmlmZXN0ICopYXBwbGljYXRpb25NYW5pZmVzdEZyb21KU09OOihOU1N0cmluZyAqKWpzb24g
bWFuaWZlc3RVUkw6KE5TVVJMICopbWFuaWZlc3RVUkwgZG9jdW1lbnRVUkw6KE5TVVJMICopZG9j
dW1lbnRVUkwKQEAgLTIxNSw2ICsyMzMsNDAgQEAgc3RhdGljIE5TU3RyaW5nICpudWxsYWJsZU5T
U3RyaW5nKGNvbnN0IFdURjo6U3RyaW5nJiBzdHJpbmcpCiAgICAgcmV0dXJuIF9XS0FwcGxpY2F0
aW9uTWFuaWZlc3REaXNwbGF5TW9kZUJyb3dzZXI7CiB9CiAKKy0gKE5TQXJyYXk8X1dLQXBwbGlj
YXRpb25NYW5pZmVzdEljb24gKj4gKilpY29ucworeworICAgIHJldHVybiBuaWw7Cit9CisKICNl
bmRpZiAvLyBFTkFCTEUoQVBQTElDQVRJT05fTUFOSUZFU1QpCiAKIEBlbmQKKworQGltcGxlbWVu
dGF0aW9uIF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uCisKKysgKEJPT0wpc3VwcG9ydHNTZWN1
cmVDb2RpbmcKK3sKKyAgICByZXR1cm4gWUVTOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhDb2RlcjooTlNDb2RlciAqKWFEZWNvZGVyCit7CisgICAgVU5VU0VEX1BBUkFNKGFEZWNvZGVy
KTsKKyAgICBbc2VsZiByZWxlYXNlXTsKKyAgICByZXR1cm4gbmlsOworfQorCistICh2b2lkKWVu
Y29kZVdpdGhDb2RlcjooTlNDb2RlciAqKWFDb2RlcgoreworICAgIFVOVVNFRF9QQVJBTShhQ29k
ZXIpOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBpZiAoV2ViQ29yZU9iakNTY2hlZHVs
ZURlYWxsb2NhdGVPbk1haW5SdW5Mb29wKF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uLmNsYXNz
LCBzZWxmKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitA
ZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBw
bGljYXRpb25NYW5pZmVzdEludGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdEludGVybmFsLmgKaW5kZXggYjYwZGRlNjk4ZjBm
Li4zZDYzNzM2YTNhMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0SW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdEludGVybmFsLmgKQEAg
LTI3LDYgKzI3LDcgQEAKIAogI2ltcG9ydCAiQVBJQXBwbGljYXRpb25NYW5pZmVzdC5oIgogI2lt
cG9ydCAiX1dLQXBwbGljYXRpb25NYW5pZmVzdC5oIgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3Rv
ckNvY29hLmg+CiAKICNpZiBFTkFCTEUoQVBQTElDQVRJT05fTUFOSUZFU1QpCiAKZGlmZiAtLWdp
dCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2MzU2Y2U0MTYzYjku
LmNlOTEzN2QwOWQ1MiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisKKzIwMjEtMTAtMjAgUmFjaGVsIEdpbnNiZXJnIDxy
Z2luc2JlcmdAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGluIFdlYkNvcmUgZm9y
IHdlYiBhcHAgbWFuaWZlc3QgaWNvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzMTMzOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0FwcGxpY2F0aW9u
TWFuaWZlc3RQYXJzZXIuY3BwOgorICAgICAgICAoQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlclRl
c3Q6OnBhcnNlSWNvbkZpcnN0VG9wTGV2ZWxQcm9wZXJ0eSk6CisgICAgICAgIEZ1bmN0aW9uIHRv
IGNyZWF0ZSBKU09OIGZvciBpY29uIGF0dHJpYnV0ZXMuIFRoaXMgaXMKKyAgICAgICAgbmVjZXNz
YXJ5IGJlY2F1c2UgaWNvbnMgYXJlIGluIGEgbGlzdCwgd2hlcmVhcyBhbGwgb3RoZXIKKyAgICAg
ICAgYXR0cmlidXRlcyBpbiBhcHAgbWFuaWZlc3QgYXJlIG5vdC4KKworICAgICAgICAoQXBwbGlj
YXRpb25NYW5pZmVzdFBhcnNlclRlc3Q6OnRlc3RJY29uc1NyYyk6CisgICAgICAgIChBcHBsaWNh
dGlvbk1hbmlmZXN0UGFyc2VyVGVzdDo6dGVzdEljb25zVHlwZSk6CisgICAgICAgIChBcHBsaWNh
dGlvbk1hbmlmZXN0UGFyc2VyVGVzdDo6dGVzdEljb25zU2l6ZXMpOgorICAgICAgICAoQXBwbGlj
YXRpb25NYW5pZmVzdFBhcnNlclRlc3Q6OnRlc3RJY29uc1B1cnBvc2UpOgorICAgICAgICBGdW5j
dGlvbnMgZm9yIGVhY2ggb2YgdGhlIGljb24gYXR0cmlidXRlcy4KKworICAgICAgICAoVEVTVF9G
KToKKyAgICAgICAgQ2FsbHMgdGhlIHZhcmlvdXMgaWNvbiB0ZXN0IGZ1bmN0aW9ucyB3aXRoIGRp
ZmZlcmVudCBpbnB1dAorCiAyMDIxLTExLTA4ICBLYXRlIENoZW5leSAgPGthdGhlcmluZV9jaGVu
ZXlAYXBwbGUuY29tPgogCiAgICAgICAgIFsgaU9TMTUgRVdTIF0gVGVzdFdlYktpdEFQSS5BcHBQ
cml2YWN5UmVwb3J0LkxvYWRTaW11bGF0ZWRSZXF1ZXN0IHRlc3RzIGFyZSB0aW1pbmcgb3V0CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQXBwbGljYXRpb25N
YW5pZmVzdFBhcnNlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQXBw
bGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHAKaW5kZXggYzM5OTY1NDQ2NTIwLi44ZTdmYmNlNjAz
OTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9BcHBsaWNh
dGlvbk1hbmlmZXN0UGFyc2VyLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHAKQEAgLTc0LDYgKzc0LDE4IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHBhcnNlU3RyaW5nKG1hbmlmZXN0Q29udGVudCk7CiAgICAg
fQogCisgICAgQXBwbGljYXRpb25NYW5pZmVzdCBwYXJzZUljb25GaXJzdFRvcExldmVsUHJvcGVy
dHkoY29uc3QgU3RyaW5nICYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgU3RyaW5nIG1hbmlmZXN0Q29udGVudCA9ICJ7IFwiaWNvbnNcIjogW3tcIiIgKyBrZXkgKyAi
XCI6ICIgKyB2YWx1ZSArICIsIFwic3JjXCI6IFwiaWNvbi9leGFtcGxlLnBuZ1wiIH1dfSI7Cisg
ICAgICAgIHJldHVybiBwYXJzZVN0cmluZyhtYW5pZmVzdENvbnRlbnQpOworICAgIH0KKworICAg
IEFwcGxpY2F0aW9uTWFuaWZlc3QgcGFyc2VJY29uRmlyc3RUb3BMZXZlbFByb3BlcnR5Rm9yU3Jj
KGNvbnN0IFN0cmluZyAmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IFN0cmluZyBtYW5pZmVzdENvbnRlbnQgPSAieyBcImljb25zXCI6IFt7XCIiICsga2V5ICsgIlwi
OiAiICsgdmFsdWUgKyAiIH1dfSI7CisgICAgICAgIHJldHVybiBwYXJzZVN0cmluZyhtYW5pZmVz
dENvbnRlbnQpOworICAgIH0KKwogICAgIHZvaWQgdGVzdFN0YXJ0VVJMKGNvbnN0IFN0cmluZyYg
cmF3SlNPTiwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZhbHVlKQogICAgIHsKICAgICAgICAgdGVz
dFN0YXJ0VVJMKHJhd0pTT04sIHsgeyB9LCBleHBlY3RlZFZhbHVlIH0pOwpAQCAtMTM0LDYgKzE0
NiwzNCBAQCBwdWJsaWM6CiAgICAgICAgIEVYUEVDVF9FUShleHBlY3RlZFZhbHVlLCB2YWx1ZSk7
CiAgICAgfQogCisgICAgdm9pZCB0ZXN0SWNvbnNTcmMoY29uc3QgU3RyaW5nJiByYXdKU09OLCBj
b25zdCBVUkwmIGV4cGVjdGVkVmFsdWUpCisgICAgeworICAgICAgICBhdXRvIG1hbmlmZXN0ID0g
cGFyc2VJY29uRmlyc3RUb3BMZXZlbFByb3BlcnR5Rm9yU3JjKCJzcmMiLCByYXdKU09OKTsKKyAg
ICAgICAgYXV0byB2YWx1ZSA9IG1hbmlmZXN0Lmljb25zWzBdLnNyYzsKKyAgICAgICAgRVhQRUNU
X1NUUkVRKGV4cGVjdGVkVmFsdWUuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdmFsdWUuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgdm9pZCB0ZXN0SWNvbnNUeXBlKGNvbnN0
IFN0cmluZyAmcmF3SlNPTiwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZhbHVlKQorICAgIHsKKyAg
ICAgICAgYXV0byBtYW5pZmVzdCA9IHBhcnNlSWNvbkZpcnN0VG9wTGV2ZWxQcm9wZXJ0eSgidHlw
ZSIsIHJhd0pTT04pOworICAgICAgICBhdXRvIHZhbHVlID0gbWFuaWZlc3QuaWNvbnNbMF0udHlw
ZTsKKyAgICAgICAgRVhQRUNUX1NUUkVRKGV4cGVjdGVkVmFsdWUudXRmOCgpLmRhdGEoKSwgdmFs
dWUudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgdm9pZCB0ZXN0SWNvbnNTaXplcyhjb25z
dCBTdHJpbmcgJnJhd0pTT04sIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWYWx1ZSkKKyAgICB7Cisg
ICAgICAgIGF1dG8gbWFuaWZlc3QgPSBwYXJzZUljb25GaXJzdFRvcExldmVsUHJvcGVydHkoInNp
emVzIiwgcmF3SlNPTik7CisgICAgICAgIGF1dG8gdmFsdWUgPSBtYW5pZmVzdC5pY29uc1swXS5z
aXplczsKKyAgICAgICAgRVhQRUNUX1NUUkVRKGV4cGVjdGVkVmFsdWUudXRmOCgpLmRhdGEoKSwg
dmFsdWUudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgdm9pZCB0ZXN0SWNvbnNQdXJwb3Nl
cyhjb25zdCBTdHJpbmcgJnJhd0pTT04sIE9wdGlvblNldDxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJ
Y29uOjpQdXJwb3NlPiBleHBlY3RlZFZhbHVlcykKKyAgICB7CisgICAgICAgIGF1dG8gbWFuaWZl
c3QgPSBwYXJzZUljb25GaXJzdFRvcExldmVsUHJvcGVydHkoInB1cnBvc2UiLCByYXdKU09OKTsK
KyAgICAgICAgYXV0byB2YWx1ZSA9IG1hbmlmZXN0Lmljb25zWzBdLnB1cnBvc2VzOworICAgICAg
ICBFWFBFQ1RfRVEoZXhwZWN0ZWRWYWx1ZXMsIHZhbHVlKTsKKyAgICB9CisKIH07CiAKIHN0YXRp
YyB2b2lkIGFzc2VydE1hbmlmZXN0SGFzRGVmYXVsdFZhbHVlcyhjb25zdCBVUkwmIG1hbmlmZXN0
VVJMLCBjb25zdCBVUkwmIGRvY3VtZW50VVJMLCBjb25zdCBBcHBsaWNhdGlvbk1hbmlmZXN0JiBt
YW5pZmVzdCkKQEAgLTMyMyw0ICszNjMsMzMgQEAgVEVTVF9GKEFwcGxpY2F0aW9uTWFuaWZlc3RQ
YXJzZXJUZXN0LCBXaGl0ZXNwYWNlKQogICAgIEVYUEVDVF9TVFJFUSgiUEFTUyIsIG1hbmlmZXN0
Lm5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKK1RFU1RfRihBcHBsaWNhdGlvbk1hbmlmZXN0UGFy
c2VyVGVzdCwgSWNvbnMpCit7CisgICAgVVJMIHNyY1VSTCA9IHsgeyB9LCAiaHR0cHM6Ly9leGFt
cGxlLmNvbS9pY29uLmpwZyIgfTsKKyAgICB0ZXN0SWNvbnNTcmMoIlwiaWNvbi5qcGdcIiIsIHNy
Y1VSTCk7CisgICAgdGVzdEljb25zVHlwZSgiXCJpbWFnZS93ZWJwXCIiLCAiaW1hZ2Uvd2VicCIp
OworICAgIHRlc3RJY29uc1NpemVzKCJcIjI1NngyNTZcIiIsICIyNTZ4MjU2Iik7CisgICAgdGVz
dEljb25zU2l6ZXMoIlwiNzJ4NzIgOTZ4OTZcIiIsICI3Mng3MiA5Nng5NiIpOworCisgICAgT3B0
aW9uU2V0PEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2U+IHB1cnBvc2VBbnkgeyBB
cHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlOjpBbnkgfTsKKyAgICBPcHRpb25TZXQ8
QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6UHVycG9zZT4gcHVycG9zZU1vbm9jaHJvbWUgeyBB
cHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlOjpNb25vY2hyb21lIH07CisgICAgT3B0
aW9uU2V0PEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2U+IHB1cnBvc2VNYXNrYWJs
ZSB7IEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2U6Ok1hc2thYmxlIH07CisKKyAg
ICB0ZXN0SWNvbnNQdXJwb3NlcygiXCJtb25vY2hyb21lXCIiLCBwdXJwb3NlTW9ub2Nocm9tZSk7
CisgICAgdGVzdEljb25zUHVycG9zZXMoIlwibWFza2FibGVcIiIsIHB1cnBvc2VNYXNrYWJsZSk7
CisgICAgdGVzdEljb25zUHVycG9zZXMoIlwiYW55XCIiLCBwdXJwb3NlQW55KTsKKyAgICB0ZXN0
SWNvbnNQdXJwb3NlcygiXCJcdE1PTk9DSFJPTUVcIiIsIHB1cnBvc2VNb25vY2hyb21lKTsKKwor
ICAgIHRlc3RJY29uc1B1cnBvc2VzKCIxMjMiLCBwdXJwb3NlQW55KTsKKyAgICB0ZXN0SWNvbnNQ
dXJwb3NlcygibnVsbCIsIHB1cnBvc2VBbnkpOworICAgIHRlc3RJY29uc1B1cnBvc2VzKCJ0cnVl
IiwgcHVycG9zZUFueSk7CisgICAgdGVzdEljb25zUHVycG9zZXMoInsgfSIsIHB1cnBvc2VBbnkp
OworICAgIHRlc3RJY29uc1B1cnBvc2VzKCJbIF0iLCBwdXJwb3NlQW55KTsKKworICAgIE9wdGlv
blNldDxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlPiBwdXJwb3NlTW9ub2Nocm9t
ZUFueSB7IEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2U6Ok1vbm9jaHJvbWUsIEFw
cGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2U6OkFueSB9OworCisgICAgdGVzdEljb25z
UHVycG9zZXMoIlwibW9ub2Nocm9tZSBhbnlcIiIsIHB1cnBvc2VNb25vY2hyb21lQW55KTsKKwor
fQorCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443829</attachid>
            <date>2021-11-10 10:13:06 -0800</date>
            <delta_ts>2021-11-10 11:47:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>file_231339.txt</filename>
            <type>text/plain</type>
            <size>22919</size>
            <attacher>rginsberg</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZw0KaW5kZXggYzQ3YWYyOGMxYzcwLi5lNzYzM2E4ZjFlMGYgMTAwNjQ0DQotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cNCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZw0K
QEAgLTEsMyArMSw0MCBAQA0KKzIwMjEtMTAtMTUgIFJhY2hlbCBHaW5zYmVyZyAgPHJnaW5zYmVy
Z0BhcHBsZS5jb20+DQorDQorICAgICAgICBBZGQgc3VwcG9ydCBpbiBXZWJDb3JlIGZvciB3ZWIg
YXBwIG1hbmlmZXN0IGljb25zDQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjMxMzM5DQorICAgICAgICByZGFyOi8vODQzMTEzMDYNCisNCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLg0KKw0KKyAgICAgICAgVGVzdHMgYXJlIGFkZGVk
IHRvIE9wZW5Tb3VyY2UvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0FwcGxpY2F0
aW9uTWFuaWZlc3RQYXJzZXIuY3BwDQorDQorICAgICAgICAqIE1vZHVsZXMvYXBwbGljYXRpb25t
YW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0Lmg6DQorICAgICAgICBBIG5ldyBlbnVtIGZvciB0
aGUgaWNvbiBwdXJwb3NlIChJY29uOjpQdXJwb3NlKSB3YXMgYWRkZWQgdG8gdGhlIEFwcGxpY2F0
aW9uTWFuaWZlc3Q6Okljb24gc3RydWN0Lg0KKyAgICAgICAgQSBuZXcgSWNvbiBzdHJ1Y3QgY29u
dGFpbmluZyB2YXJpYWJsZSBmb3IgdGhlIHNyYywgc2l6ZXMsDQorICAgICAgICB0eXBlLCBhbmQg
SWNvbjo6UHVycG9zZSBhdHRyaWJ1dGVzIGZvciBhcHAgbWFuaWZlc3QgaWNvbnMgd2FzIGFkZGVk
IHRvIHRoZSBBcHBsaWNhdGlvbk1hbmlmZXN0DQorICAgICAgICBzdHJ1Y3QuIEEgdmVjdG9yIG9m
IEljb24ncyBpcyBhZGRlZCBhcyBhIHZhcmlhYmxlIGZvcg0KKyAgICAgICAgdGhlIEFwcGxpY2F0
aW9uTWFuaWZlc3Qgc3RydWN0Lg0KKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZl
c3Q6OmVuY29kZSBjb25zdCk6DQorICAgICAgICBBZGRlZCBpY29ucyB0byBlbmNvZGUgZnVuY3Rp
b24NCisgICAgICAgIChXZWJjb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpkZWNvZGUpOg0KKyAg
ICAgICAgQWRkZWQgaWNvbnMgdG8gZGVjb2RlIGZ1bmN0aW9uDQorICAgICAgICAoV2ViQ29yZTo6
QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6ZW5jb2RlIGNvbnN0KToNCisgICAgICAgIENyZWF0
ZSBlbmNvZGUgZnVuY3Rpb24gZm9yIEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb24NCisgICAgICAg
IChXZWJjb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpkZWNvZGUpOg0KKyAgICAgICAg
Q3JlYXRlIGRlY29kZSBmdW5jdGlvbiBmb3IgQXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbg0KKw0K
Kw0KKyAgICAgICAgKiBNb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5p
ZmVzdFBhcnNlci5jcHA6DQorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdFBh
cnNlcjo6cGFyc2VNYW5pZmVzdCk6DQorICAgICAgICBBZGRlZCBjYWxsIHRvIHBhcnNlSWNvbnMN
CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpwYXJzZUljb25z
KToNCisgICAgICAgIHBhcnNlSWNvbnMgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgbGlzdCBvZiBpY29u
cywgcGVyZm9ybXMgY2hlY2tzIGZvciBhdHRyaWJ1dGUsDQorICAgICAgICBhbmQgdGhlbiwgaWYg
dmFsaWQsIGFkZHMgdGhlIGF0dHJpYnV0ZSB0byBhbiBBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbiBz
dHJ1Y3QNCisgICAgICAgIHRoYXQgaXMgYXBwZW5kZWQgdG8gYSBuZXcgVmVjdG9yIG9mIEFwcGxp
Y2F0aW9uTWFuaWZlc3RJY29ucy4NCisNCisgICAgICAgICogTW9kdWxlcy9hcHBsaWNhdGlvbm1h
bmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuaDoNCisgICAgICAgIERlY2xhcmUgZnVu
Y3Rpb25zIGZvciBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyDQorDQogMjAyMS0xMS0wOCAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4NCiANCiAgICAgICAgIEVuYWJsaW5n
ICJtZWRpYSBzb3VyY2UgaW5saW5lIHBhaW50aW5nIiBieSBkZWZhdWx0IHNob3VsZCB3b3JrIHdo
ZW4gdXNpbmcgR1BVIFByb2Nlc3MgZm9yIG1lZGlhDQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlm
ZXN0LmgNCmluZGV4IGZhNTQxYjJiMzJiYS4uNjc1MThhOTNlMDlhIDEwMDY0NA0KLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZl
c3QuaA0KKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0Fw
cGxpY2F0aW9uTWFuaWZlc3QuaA0KQEAgLTMwLDYgKzMwLDcgQEANCiAjaW5jbHVkZSAiQ29sb3Iu
aCINCiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4NCiAjaW5jbHVkZSA8d3RmL1VSTC5oPg0K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+DQogDQogbmFtZXNwYWNlIFdlYkNvcmUgew0KIA0KQEAg
LTQxLDYgKzQyLDIyIEBAIHN0cnVjdCBBcHBsaWNhdGlvbk1hbmlmZXN0IHsNCiAgICAgICAgIEZ1
bGxzY3JlZW4sDQogICAgIH07DQogDQorICAgIHN0cnVjdCBJY29uIHsNCisgICAgICAgIGVudW0g
Y2xhc3MgUHVycG9zZSA6IHVpbnQ4X3QgIHsNCisgICAgICAgICAgICBBbnkgPSAxIDw8IDAsDQor
ICAgICAgICAgICAgTW9ub2Nocm9tZSA9IDEgPDwgMSwNCisgICAgICAgICAgICBNYXNrYWJsZSA9
IDEgPDwgMiwNCisgICAgICAgIH07DQorDQorICAgICAgICBVUkwgc3JjOw0KKyAgICAgICAgU3Ry
aW5nIHNpemVzOw0KKyAgICAgICAgU3RyaW5nIHR5cGU7DQorICAgICAgICBPcHRpb25TZXQ8UHVy
cG9zZT4gcHVycG9zZXM7DQorDQorICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7DQorICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBzdGF0aWMgc3RkOjpvcHRpb25hbDxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uPiBkZWNvZGUo
RGVjb2RlciYpOw0KKyAgICB9Ow0KKw0KICAgICBTdHJpbmcgbmFtZTsNCiAgICAgU3RyaW5nIHNo
b3J0TmFtZTsNCiAgICAgU3RyaW5nIGRlc2NyaXB0aW9uOw0KQEAgLTQ4LDYgKzY1LDcgQEAgc3Ry
dWN0IEFwcGxpY2F0aW9uTWFuaWZlc3Qgew0KICAgICBEaXNwbGF5IGRpc3BsYXk7DQogICAgIFVS
TCBzdGFydFVSTDsNCiAgICAgQ29sb3IgdGhlbWVDb2xvcjsNCisgICAgVmVjdG9yPEljb24+IGlj
b25zOw0KIA0KICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVy
JikgY29uc3Q7DQogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPEFwcGxpY2F0aW9uTWFuaWZlc3Q+IGRlY29kZShEZWNvZGVyJik7DQpAQCAtNTYsNyArNzQs
NyBAQCBzdHJ1Y3QgQXBwbGljYXRpb25NYW5pZmVzdCB7DQogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4NCiB2b2lkIEFwcGxpY2F0aW9uTWFuaWZlc3Q6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdA0KIHsNCi0gICAgZW5jb2RlciA8PCBuYW1lIDw8IHNob3J0TmFtZSA8PCBkZXNjcmlwdGlv
biA8PCBzY29wZSA8PCBkaXNwbGF5IDw8IHN0YXJ0VVJMIDw8IHRoZW1lQ29sb3I7DQorICAgIGVu
Y29kZXIgPDwgbmFtZSA8PCBzaG9ydE5hbWUgPDwgZGVzY3JpcHRpb24gPDwgc2NvcGUgPDwgZGlz
cGxheSA8PCBzdGFydFVSTCA8PCB0aGVtZUNvbG9yIDw8IGljb25zOw0KIH0NCiANCiB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPg0KQEAgLTc4LDYgKzk2LDMwIEBAIHN0ZDo6b3B0aW9uYWw8QXBwbGlj
YXRpb25NYW5pZmVzdD4gQXBwbGljYXRpb25NYW5pZmVzdDo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpDQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Ow0KICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlc3VsdC50aGVtZUNvbG9yKSkNCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7DQor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lmljb25zKSkNCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7DQorDQorICAgIHJldHVybiByZXN1bHQ7DQorfQ0KKw0KK3RlbXBsYXRlPGNs
YXNzIEVuY29kZXI+DQordm9pZCBBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlcikgY29uc3QNCit7DQorICAgIGVuY29kZXIgPDwgc3JjIDw8IHNpemVzIDw8
IHR5cGUgPDwgcHVycG9zZXM7DQorfQ0KKw0KK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+DQorc3Rk
OjpvcHRpb25hbDxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uPiBBcHBsaWNhdGlvbk1hbmlmZXN0
OjpJY29uOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikNCit7DQorICAgIEFwcGxpY2F0aW9uTWFu
aWZlc3Q6Okljb24gcmVzdWx0Ow0KKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zcmMp
KQ0KKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsNCisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQuc2l6ZXMpKQ0KKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsNCisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShyZXN1bHQudHlwZSkpDQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0Ow0KKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5wdXJwb3NlcykpDQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0Ow0KIA0KICAgICByZXR1cm4gcmVzdWx0Ow0KIH0NCkBAIC05
Niw2ICsxMzgsMTUgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpBcHBs
aWNhdGlvbk1hbmlmZXN0OjpEaXNwbGF5PiB7DQogICAgID47DQogfTsNCiANCit0ZW1wbGF0ZTw+
IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1
cnBvc2U+IHsNCisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwNCisgICAgICAgIFdlYkNv
cmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2UsDQorICAgICAgICBXZWJDb3Jl
OjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlOjpBbnksDQorICAgICAgICBXZWJD
b3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlOjpNb25vY2hyb21lLA0KKyAg
ICAgICAgV2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6UHVycG9zZTo6TWFza2Fi
bGUNCisgICAgPjsNCit9Ow0KKw0KIH0gLy8gbmFtZXNwYWNlIFdURjsNCiANCiAjZW5kaWYgLy8g
RU5BQkxFKEFQUExJQ0FUSU9OX01BTklGRVNUKQ0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlv
bk1hbmlmZXN0UGFyc2VyLmNwcA0KaW5kZXggNGNiMGRmNzcwY2Q4Li4wNDMyOGU1M2U5MmYgMTAw
NjQ0DQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBw
bGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHANCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
YXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcA0KQEAgLTc4
LDYgKzc4LDcgQEAgQXBwbGljYXRpb25NYW5pZmVzdCBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2Vy
OjpwYXJzZU1hbmlmZXN0KGNvbnN0IFN0cmluZyYgdGV4dCwNCiAgICAgcGFyc2VkTWFuaWZlc3Qu
c2hvcnROYW1lID0gcGFyc2VTaG9ydE5hbWUoKm1hbmlmZXN0KTsNCiAgICAgcGFyc2VkTWFuaWZl
c3Quc2NvcGUgPSBwYXJzZVNjb3BlKCptYW5pZmVzdCwgZG9jdW1lbnRVUkwsIHBhcnNlZE1hbmlm
ZXN0LnN0YXJ0VVJMKTsNCiAgICAgcGFyc2VkTWFuaWZlc3QudGhlbWVDb2xvciA9IHBhcnNlQ29s
b3IoKm1hbmlmZXN0LCAidGhlbWVfY29sb3IiX3MpOw0KKyAgICBwYXJzZWRNYW5pZmVzdC5pY29u
cyA9IHBhcnNlSWNvbnMoKm1hbmlmZXN0KTsNCiANCiAgICAgaWYgKG1fZG9jdW1lbnQpDQogICAg
ICAgICBtX2RvY3VtZW50LT5wcm9jZXNzQXBwbGljYXRpb25NYW5pZmVzdChwYXJzZWRNYW5pZmVz
dCk7DQpAQCAtMTc0LDYgKzE3NSw4NyBAQCBTdHJpbmcgQXBwbGljYXRpb25NYW5pZmVzdFBhcnNl
cjo6cGFyc2VTaG9ydE5hbWUoY29uc3QgSlNPTjo6T2JqZWN0JiBtYW5pZmVzdCkNCiAgICAgcmV0
dXJuIHBhcnNlR2VuZXJpY1N0cmluZyhtYW5pZmVzdCwgInNob3J0X25hbWUiX3MpOw0KIH0NCiAN
CitWZWN0b3I8QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbj4gQXBwbGljYXRpb25NYW5pZmVzdFBh
cnNlcjo6cGFyc2VJY29ucyhjb25zdCBKU09OOjpPYmplY3QmIG1hbmlmZXN0KQ0KK3sNCisgICAg
YXV0byBtYW5pZmVzdEljb25zID0gbWFuaWZlc3QuZ2V0VmFsdWUoImljb25zIl9zKTsNCisNCisg
ICAgVmVjdG9yPEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb24+IGltYWdlUmVzb3VyY2VzOw0KKyAg
ICBpZiAoIW1hbmlmZXN0SWNvbnMpDQorICAgICAgICByZXR1cm4gaW1hZ2VSZXNvdXJjZXM7DQor
DQorICAgIGF1dG8gbWFuaWZlc3RJY29uc0FycmF5ID0gbWFuaWZlc3RJY29ucy0+YXNBcnJheSgp
Ow0KKyAgICBpZiAoIW1hbmlmZXN0SWNvbnNBcnJheSkgew0KKyAgICAgICAgbG9nRGV2ZWxvcGVy
V2FybmluZygiVGhlIHZhbHVlIG9mIGljb25zIGlzIG5vdCBhIHZhbGlkIGFycmF5LiJfcyk7DQor
ICAgICAgICByZXR1cm4gaW1hZ2VSZXNvdXJjZXM7DQorICAgIH0NCisNCisgICAgZm9yIChjb25z
dCBhdXRvJiBpY29uVmFsdWUgOiAqbWFuaWZlc3RJY29uc0FycmF5KSB7DQorICAgICAgICBBcHBs
aWNhdGlvbk1hbmlmZXN0OjpJY29uIGN1cnJlbnRJY29uOw0KKyAgICAgICAgYXV0byBpY29uT2Jq
ZWN0ID0gaWNvblZhbHVlLT5hc09iamVjdCgpOw0KKyAgICAgICAgaWYgKCFpY29uT2JqZWN0KQ0K
KyAgICAgICAgICAgIGNvbnRpbnVlOw0KKyAgICAgICAgY29uc3QgYXV0byYgaWNvbkpTT04gPSAq
aWNvbk9iamVjdDsNCisNCisgICAgICAgIGF1dG8gc3JjVmFsdWUgPSBpY29uSlNPTi5nZXRWYWx1
ZSgic3JjIl9zKTsNCisgICAgICAgIGlmICghc3JjVmFsdWUpDQorICAgICAgICAgICAgY29udGlu
dWU7DQorICAgICAgICBhdXRvIHNyY1N0cmluZ1ZhbHVlID0gc3JjVmFsdWUtPmFzU3RyaW5nKCk7
DQorICAgICAgICBpZiAoIXNyY1N0cmluZ1ZhbHVlKSB7DQorICAgICAgICAgICAgbG9nTWFuaWZl
c3RQcm9wZXJ0eU5vdEFTdHJpbmcoInNyYyJfcyk7DQorICAgICAgICAgICAgY29udGludWU7DQor
ICAgICAgICB9DQorICAgICAgICBVUkwgc3JjVVJMKG1fbWFuaWZlc3RVUkwsIHNyY1N0cmluZ1Zh
bHVlKTsNCisgICAgICAgIGlmIChzcmNVUkwuaXNFbXB0eSgpKQ0KKyAgICAgICAgICAgIGNvbnRp
bnVlOw0KKyAgICAgICAgaWYgKCFzcmNVUkwuaXNWYWxpZCgpKSB7DQorICAgICAgICAgICAgbG9n
TWFuaWZlc3RQcm9wZXJ0eUludmFsaWRVUkwoInNyYyJfcyk7DQorICAgICAgICAgICAgY29udGlu
dWU7DQorICAgICAgICB9DQorICAgICAgICBjdXJyZW50SWNvbi5zcmMgPSBzcmNVUkw7DQorDQor
ICAgICAgICBjdXJyZW50SWNvbi5zaXplcyA9IHBhcnNlR2VuZXJpY1N0cmluZyhpY29uSlNPTiwg
InNpemVzIl9zKTsNCisNCisgICAgICAgIGN1cnJlbnRJY29uLnR5cGUgPSBwYXJzZUdlbmVyaWNT
dHJpbmcoaWNvbkpTT04sICJ0eXBlIl9zKTsNCisNCisgICAgICAgIGF1dG8gcHVycG9zZVZhbHVl
ID0gaWNvbkpTT04uZ2V0VmFsdWUoInB1cnBvc2UiX3MpOw0KKyAgICAgICAgT3B0aW9uU2V0PEFw
cGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2U+IHB1cnBvc2VzOw0KKw0KKyAgICAgICAg
aWYgKCFwdXJwb3NlVmFsdWUpIHsNCisgICAgICAgICAgICBwdXJwb3Nlcy5hZGQoQXBwbGljYXRp
b25NYW5pZmVzdDo6SWNvbjo6UHVycG9zZTo6QW55KTsNCisgICAgICAgICAgICBjdXJyZW50SWNv
bi5wdXJwb3NlcyA9IHB1cnBvc2VzOw0KKyAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICBh
dXRvIHB1cnBvc2VTdHJpbmdWYWx1ZSA9IHB1cnBvc2VWYWx1ZS0+YXNTdHJpbmcoKTsNCisgICAg
ICAgICAgICBpZiAoIXB1cnBvc2VTdHJpbmdWYWx1ZSkgew0KKyAgICAgICAgICAgICAgICBsb2dN
YW5pZmVzdFByb3BlcnR5Tm90QVN0cmluZygicHVycG9zZSJfcyk7DQorICAgICAgICAgICAgICAg
IHB1cnBvc2VzLmFkZChBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlOjpBbnkpOw0K
KyAgICAgICAgICAgICAgICBjdXJyZW50SWNvbi5wdXJwb3NlcyA9IHB1cnBvc2VzOw0KKyAgICAg
ICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICAgIHB1cnBvc2VTdHJpbmdWYWx1ZSA9IHB1
cnBvc2VTdHJpbmdWYWx1ZS5zdHJpcFdoaXRlU3BhY2UoKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2Fz
ZSgpOw0KKyAgICAgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBrZXl3b3JkcyA9IHB1cnBvc2VT
dHJpbmdWYWx1ZS5zcGxpdEFsbG93aW5nRW1wdHlFbnRyaWVzKCIgIik7DQorDQorICAgICAgICAg
ICAgICAgIGZvciAoY29uc3QgYXV0byYga2V5d29yZCA6IGtleXdvcmRzKSB7DQorICAgICAgICAg
ICAgICAgICAgICBpZiAoa2V5d29yZCA9PSAibW9ub2Nocm9tZSIpDQorICAgICAgICAgICAgICAg
ICAgICAgICAgcHVycG9zZXMuYWRkKEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2U6
Ok1vbm9jaHJvbWUpOw0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoa2V5d29yZCA9PSAi
bWFza2FibGUiKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2VzLmFkZChBcHBsaWNh
dGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlOjpNYXNrYWJsZSk7DQorICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChrZXl3b3JkID09ICJhbnkiKQ0KKyAgICAgICAgICAgICAgICAgICAgICAg
IHB1cnBvc2VzLmFkZChBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlOjpBbnkpOw0K
KyAgICAgICAgICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0Rl
dmVsb3Blcldhcm5pbmcobWFrZVN0cmluZygiXCIiX3MsIHB1cnBvc2VTdHJpbmdWYWx1ZSwgIlwi
IGlzIG5vdCBhIHZhbGlkIHB1cnBvc2UuIl9zKSk7DQorICAgICAgICAgICAgICAgIH0NCisgICAg
ICAgICAgICAgICAgaWYgKHB1cnBvc2VzLmlzRW1wdHkoKSkNCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOw0KKw0KKyAgICAgICAgICAgICAgICBjdXJyZW50SWNvbi5wdXJwb3NlcyA9IHB1
cnBvc2VzOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIGltYWdlUmVz
b3VyY2VzLmFwcGVuZChXVEZNb3ZlKGN1cnJlbnRJY29uKSk7DQorICAgIH0NCisNCisgICAgcmV0
dXJuIGltYWdlUmVzb3VyY2VzOw0KK30NCisNCiBzdGF0aWMgYm9vbCBpc0luU2NvcGUoY29uc3Qg
VVJMJiBzY29wZVVSTCwgY29uc3QgVVJMJiB0YXJnZXRVUkwpDQogew0KICAgICAvLyAxLiBJZiBz
Y29wZVVSTCBpcyB1bmRlZmluZWQgKGkuZS4sIGl0IGlzIHVuYm91bmRlZCBiZWNhdXNlIG9mIGFu
IGVycm9yIG9yIGl0IHdhcyBub3QgZGVjbGFyZWQgaW4gdGhlIG1hbmlmZXN0KSwgcmV0dXJuIHRy
dWUuDQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlm
ZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
YXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmgNCmluZGV4IDNm
OTYyZGJhODIyMS4uYjk3OWVhNmNiNThjIDEwMDY0NA0KLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuaA0KKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9u
TWFuaWZlc3RQYXJzZXIuaA0KQEAgLTUwLDYgKzUwLDcgQEAgcHJpdmF0ZToNCiAgICAgU3RyaW5n
IHBhcnNlRGVzY3JpcHRpb24oY29uc3QgSlNPTjo6T2JqZWN0Jik7DQogICAgIFN0cmluZyBwYXJz
ZVNob3J0TmFtZShjb25zdCBKU09OOjpPYmplY3QmKTsNCiAgICAgVVJMIHBhcnNlU2NvcGUoY29u
c3QgSlNPTjo6T2JqZWN0JiwgY29uc3QgVVJMJiwgY29uc3QgVVJMJik7DQorICAgIFZlY3RvcjxB
cHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uPiBwYXJzZUljb25zKGNvbnN0IEpTT046Ok9iamVjdCYp
Ow0KIA0KICAgICBDb2xvciBwYXJzZUNvbG9yKGNvbnN0IEpTT046Ok9iamVjdCYsIGNvbnN0IFN0
cmluZyYgcHJvcGVydHlOYW1lKTsNCiAgICAgU3RyaW5nIHBhcnNlR2VuZXJpY1N0cmluZyhjb25z
dCBKU09OOjpPYmplY3QmLCBjb25zdCBTdHJpbmcmKTsNCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nDQppbmRleCA5MTk5YzhiNDg4
ZDQuLjU3NjdjOTZlN2RhNCAxMDA2NDQNCi0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nDQor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZw0KQEAgLTEsMyArMSwyOCBAQA0KKzIwMjEtMTAt
MTggIFJhY2hlbCBHaW5zYmVyZyAgPHJnaW5zYmVyZ0BhcHBsZS5jb20+DQorDQorICAgICAgICBB
ZGQgc3VwcG9ydCBpbiBXZWJDb3JlIGZvciB3ZWIgYXBwIG1hbmlmZXN0IGljb25zDQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMzM5DQorICAgICAg
ICByZGFyOi8vODQzMTEzMDYNCisNCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
Lg0KKw0KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZl
c3QuaDoNCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlm
ZXN0Lm1tOg0KKyAgICAgICAgKG1ha2VWZWN0b3JFbGVtZW50KToNCisgICAgICAgIFVzZWQgYnkg
bWFrZVZlY3RvciBpbiBpbml0V2l0aENvZGVyOi4gVGFrZXMgYSBfV0tBcHBsaWNhdGlvbk1hbmlm
ZXN0SWNvbiBhbmQgcmV0dXJucw0KKyAgICAgICAgYSBXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlm
ZXN0OjpJY29uLg0KKyAgICAgICAgKC1bX1dLQXBwbGljYXRpb25NYW5pZmVzdCBpbml0V2l0aENv
ZGVyOl0pOg0KKyAgICAgICAgQWRkZWQgaWNvbnMuDQorICAgICAgICAoLVtfV0tBcHBsaWNhdGlv
bk1hbmlmZXN0IGVuY29kZVdpdGhDb2RlcjpdKToNCisgICAgICAgIEFkZGVkIGljb25zLg0KKyAg
ICAgICAgKC1bX1dLQXBwbGljYXRpb25NYW5pZmVzdCBpY29uc10pOg0KKyAgICAgICAgU2hvdWxk
IGFwcGVhc2UgYnVpbGQgZXJyb3IgYmVmb3JlIGZ1bGwgc3VwcG9ydCBmb3IgaWNvbnMgaXMgYnVp
bHQgaW50byBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0DQorDQorICAgICAgICAoK1tfV0tBcHBsaWNh
dGlvbk1hbmlmZXN0SWNvbiBzdXBwb3J0c1NlY3VyZUNvZGluZ10pOg0KKyAgICAgICAgKC1bX1dL
QXBwbGljYXRpb25NYW5pZmVzdEljb24gaW5pdFdpdGhDb2RlcjpdKToNCisgICAgICAgICgtW19X
S0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uIGVuY29kZVdpdGhDb2RlcjpdKToNCisgICAgICAgICgt
W19XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uIGRlYWxsb2NdKToNCisNCiAyMDIxLTExLTA4ICBX
ZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPg0KIA0KICAgICAgICAgRW5hYmxp
bmcgIm1lZGlhIHNvdXJjZSBpbmxpbmUgcGFpbnRpbmciIGJ5IGRlZmF1bHQgc2hvdWxkIHdvcmsg
d2hlbiB1c2luZyBHUFUgUHJvY2VzcyBmb3IgbWVkaWENCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5oIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3QuaA0KaW5k
ZXggYjMxZmFmNDk4YzgyLi42YTllOTI5MzQ4M2MgMTAwNjQ0DQotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5oDQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5oDQpA
QCAtMzEsNiArMzEsNyBAQA0KICNlbHNlDQogQGNsYXNzIE5TQ29sb3I7DQogI2VuZGlmDQorQGNs
YXNzIF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uOw0KIA0KIE5TX0FTU1VNRV9OT05OVUxMX0JF
R0lODQogDQpAQCAtNDEsNiArNDIsMTIgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dL
QXBwbGljYXRpb25NYW5pZmVzdERpc3BsYXlNb2RlKSB7DQogICAgIF9XS0FwcGxpY2F0aW9uTWFu
aWZlc3REaXNwbGF5TW9kZUZ1bGxTY3JlZW4sDQogfSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEw
LjEzLjQpLCBpb3MoMTEuMykpOw0KIA0KK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9XS0Fw
cGxpY2F0aW9uTWFuaWZlc3RJY29uUHVycG9zZSkgew0KKyAgICBfV0tBcHBsaWNhdGlvbk1hbmlm
ZXN0SWNvblB1cnBvc2VBbnksDQorICAgIF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uUHVycG9z
ZU1vbm9jaHJvbWUsDQorICAgIF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uUHVycG9zZU1hc2th
YmxlLA0KK30gV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19U
QkEpKTsNCisNCiBXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCksIGlvcygxMS4zKSkN
CiBAaW50ZXJmYWNlIF9XS0FwcGxpY2F0aW9uTWFuaWZlc3QgOiBOU09iamVjdCA8TlNTZWN1cmVD
b2Rpbmc+DQogDQpAQCAtNTAsNiArNTcsNyBAQCBXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoMTAu
MTMuNCksIGlvcygxMS4zKSkNCiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIG51bGxh
YmxlLCBjb3B5KSBOU1VSTCAqc2NvcGU7DQogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
LCBjb3B5KSBOU1VSTCAqc3RhcnRVUkw7DQogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
KSBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0RGlzcGxheU1vZGUgZGlzcGxheU1vZGU7DQorQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0FycmF5PF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJ
Y29uICo+ICppY29ucyBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tf
SU9TX1RCQSkpOw0KIA0KICNpZiBUQVJHRVRfT1NfSVBIT05FDQogQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5LCBudWxsYWJsZSwgY29weSkgVUlDb2xvciAqdGhlbWVDb2xvciBXS19BUElf
QVZBSUxBQkxFKGlvcygxNS4wKSk7DQpAQCAtNjEsNCArNjksOSBAQCBXS19DTEFTU19BVkFJTEFC
TEUobWFjb3MoMTAuMTMuNCksIGlvcygxMS4zKSkNCiANCiBAZW5kDQogDQorV0tfQ0xBU1NfQVZB
SUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpDQorQGludGVyZmFjZSBf
V0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbiA6IE5TT2JqZWN0IDxOU1NlY3VyZUNvZGluZz4NCisN
CitAZW5kDQorDQogTlNfQVNTVU1FX05PTk5VTExfRU5EDQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3QubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5tbQ0K
aW5kZXggMDM1OWViNWI2MDQ2Li4wNGVhNmY1ZmI3NjggMTAwNjQ0DQotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5tbQ0KKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3Qu
bW0NCkBAIC00MSw2ICs0MSwxNiBAQA0KICNpbXBvcnQgIkFwcEtpdFNQSS5oIg0KICNlbmRpZg0K
IA0KK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q6Oklj
b24+IG1ha2VWZWN0b3JFbGVtZW50KGNvbnN0IFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q6
Okljb24qLCBpZCBhcnJheUVsZW1lbnQpDQorew0KKw0KKyAgICBpZiAoIVthcnJheUVsZW1lbnQg
aXNLaW5kT2ZDbGFzczogX1dLQXBwbGljYXRpb25NYW5pZmVzdEljb24uY2xhc3NdKQ0KKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsNCisNCisgICAgcmV0dXJuIFdlYkNvcmU6OkFwcGxpY2F0
aW9uTWFuaWZlc3Q6Okljb24gew0KKyAgICB9Ow0KK30NCisNCiBAaW1wbGVtZW50YXRpb24gX1dL
QXBwbGljYXRpb25NYW5pZmVzdA0KIA0KICNpZiBFTkFCTEUoQVBQTElDQVRJT05fTUFOSUZFU1Qp
DQpAQCAtNTksNiArNjksNyBAQA0KICAgICBOU0ludGVnZXIgZGlzcGxheSA9IFthRGVjb2RlciBk
ZWNvZGVJbnRlZ2VyRm9yS2V5OkAiZGlzcGxheSJdOw0KICAgICBOU1VSTCAqc3RhcnRVUkwgPSBb
YURlY29kZXIgZGVjb2RlT2JqZWN0T2ZDbGFzczpbTlNVUkwgY2xhc3NdIGZvcktleTpAInN0YXJ0
X3VybCJdOw0KICAgICBDb2NvYUNvbG9yICp0aGVtZUNvbG9yID0gW2FEZWNvZGVyIGRlY29kZU9i
amVjdE9mQ2xhc3M6W0NvY29hQ29sb3IgY2xhc3NdIGZvcktleTpAInRoZW1lX2NvbG9yIl07DQor
ICAgIE5TQXJyYXk8X1dLQXBwbGljYXRpb25NYW5pZmVzdEljb24gKj4gKmljb25zID0gW2FEZWNv
ZGVyIGRlY29kZU9iamVjdE9mQ2xhc3NlczpbTlNTZXQgc2V0V2l0aEFycmF5OkBbW05TQXJyYXkg
Y2xhc3NdLCBbX1dLQXBwbGljYXRpb25NYW5pZmVzdEljb24gY2xhc3NdXV0gZm9yS2V5OkAiaWNv
bnMiXTsNCiANCiAgICAgV2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdCBjb3JlQXBwbGljYXRp
b25NYW5pZmVzdCB7DQogICAgICAgICBXVEY6OlN0cmluZyhuYW1lKSwNCkBAIC02OCw2ICs3OSw3
IEBADQogICAgICAgICBzdGF0aWNfY2FzdDxXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpE
aXNwbGF5PihkaXNwbGF5KSwNCiAgICAgICAgIFVSTChzdGFydFVSTCksDQogICAgICAgICBXZWJD
b3JlOjpyb3VuZEFuZENsYW1wVG9TUkdCQUxvc3N5KHRoZW1lQ29sb3IuQ0dDb2xvciksDQorICAg
ICAgICBWZWN0b3I8V2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbj4obWFrZVZlY3Rv
cjxXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uPihpY29ucykpLA0KICAgICB9Ow0K
IA0KICAgICBBUEk6Ok9iamVjdDo6Y29uc3RydWN0SW5XcmFwcGVyPEFQSTo6QXBwbGljYXRpb25N
YW5pZmVzdD4oc2VsZiwgV1RGTW92ZShjb3JlQXBwbGljYXRpb25NYW5pZmVzdCkpOw0KQEAgLTk0
LDYgKzEwNiw3IEBADQogICAgIFthQ29kZXIgZW5jb2RlSW50ZWdlcjpzdGF0aWNfY2FzdDxOU0lu
dGVnZXI+KF9hcHBsaWNhdGlvbk1hbmlmZXN0LT5hcHBsaWNhdGlvbk1hbmlmZXN0KCkuZGlzcGxh
eSkgZm9yS2V5OkAiZGlzcGxheSJdOw0KICAgICBbYUNvZGVyIGVuY29kZU9iamVjdDpzZWxmLnN0
YXJ0VVJMIGZvcktleTpAInN0YXJ0X3VybCJdOw0KICAgICBbYUNvZGVyIGVuY29kZU9iamVjdDpz
ZWxmLnRoZW1lQ29sb3IgZm9yS2V5OkAidGhlbWVfY29sb3IiXTsNCisgICAgW2FDb2RlciBlbmNv
ZGVPYmplY3Q6c2VsZi5pY29ucyBmb3JLZXk6QCJpY29ucyJdOw0KIH0NCiANCiArIChfV0tBcHBs
aWNhdGlvbk1hbmlmZXN0ICopYXBwbGljYXRpb25NYW5pZmVzdEZyb21KU09OOihOU1N0cmluZyAq
KWpzb24gbWFuaWZlc3RVUkw6KE5TVVJMICopbWFuaWZlc3RVUkwgZG9jdW1lbnRVUkw6KE5TVVJM
ICopZG9jdW1lbnRVUkwNCkBAIC0xNTgsNiArMTcxLDExIEBAIHN0YXRpYyBOU1N0cmluZyAqbnVs
bGFibGVOU1N0cmluZyhjb25zdCBXVEY6OlN0cmluZyYgc3RyaW5nKQ0KICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsNCiB9DQogDQorLSAoTlNBcnJheTxfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNv
biAqPiAqKWljb25zDQorew0KKyAgICByZXR1cm4gbmlsOw0KK30NCisNCiAjZWxzZSAvLyBFTkFC
TEUoQVBQTElDQVRJT05fTUFOSUZFU1QpDQogDQogKyAoX1dLQXBwbGljYXRpb25NYW5pZmVzdCAq
KWFwcGxpY2F0aW9uTWFuaWZlc3RGcm9tSlNPTjooTlNTdHJpbmcgKilqc29uIG1hbmlmZXN0VVJM
OihOU1VSTCAqKW1hbmlmZXN0VVJMIGRvY3VtZW50VVJMOihOU1VSTCAqKWRvY3VtZW50VVJMDQpA
QCAtMjE1LDYgKzIzMyw0MCBAQCBzdGF0aWMgTlNTdHJpbmcgKm51bGxhYmxlTlNTdHJpbmcoY29u
c3QgV1RGOjpTdHJpbmcmIHN0cmluZykNCiAgICAgcmV0dXJuIF9XS0FwcGxpY2F0aW9uTWFuaWZl
c3REaXNwbGF5TW9kZUJyb3dzZXI7DQogfQ0KIA0KKy0gKE5TQXJyYXk8X1dLQXBwbGljYXRpb25N
YW5pZmVzdEljb24gKj4gKilpY29ucw0KK3sNCisgICAgcmV0dXJuIG5pbDsNCit9DQorDQogI2Vu
ZGlmIC8vIEVOQUJMRShBUFBMSUNBVElPTl9NQU5JRkVTVCkNCiANCiBAZW5kDQorDQorQGltcGxl
bWVudGF0aW9uIF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uDQorDQorKyAoQk9PTClzdXBwb3J0
c1NlY3VyZUNvZGluZw0KK3sNCisgICAgcmV0dXJuIFlFUzsNCit9DQorDQorLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQ29kZXI6KE5TQ29kZXIgKilhRGVjb2Rlcg0KK3sNCisgICAgVU5VU0VEX1BB
UkFNKGFEZWNvZGVyKTsNCisgICAgW3NlbGYgcmVsZWFzZV07DQorICAgIHJldHVybiBuaWw7DQor
fQ0KKw0KKy0gKHZvaWQpZW5jb2RlV2l0aENvZGVyOihOU0NvZGVyICopYUNvZGVyDQorew0KKyAg
ICBVTlVTRURfUEFSQU0oYUNvZGVyKTsNCit9DQorDQorLSAodm9pZClkZWFsbG9jDQorew0KKyAg
ICBpZiAoV2ViQ29yZU9iakNTY2hlZHVsZURlYWxsb2NhdGVPbk1haW5SdW5Mb29wKF9XS0FwcGxp
Y2F0aW9uTWFuaWZlc3RJY29uLmNsYXNzLCBzZWxmKSkNCisgICAgICAgIHJldHVybjsNCisNCisg
ICAgW3N1cGVyIGRlYWxsb2NdOw0KK30NCisNCitAZW5kDQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3RJbnRlcm5hbC5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZl
c3RJbnRlcm5hbC5oDQppbmRleCBiNjBkZGU2OThmMGYuLjNkNjM3MzZhM2EyNSAxMDA2NDQNCi0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlm
ZXN0SW50ZXJuYWwuaA0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S0FwcGxpY2F0aW9uTWFuaWZlc3RJbnRlcm5hbC5oDQpAQCAtMjcsNiArMjcsNyBAQA0KIA0KICNp
bXBvcnQgIkFQSUFwcGxpY2F0aW9uTWFuaWZlc3QuaCINCiAjaW1wb3J0ICJfV0tBcHBsaWNhdGlv
bk1hbmlmZXN0LmgiDQorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+DQogDQogI2lm
IEVOQUJMRShBUFBMSUNBVElPTl9NQU5JRkVTVCkNCiANCmRpZmYgLS1naXQgYS9Ub29scy9DaGFu
Z2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cNCmluZGV4IDYzNTZjZTQxNjNiOS4uY2U5MTM3ZDA5ZDUy
IDEwMDY0NA0KLS0tIGEvVG9vbHMvQ2hhbmdlTG9nDQorKysgYi9Ub29scy9DaGFuZ2VMb2cNCkBA
IC0xLDMgKzEsMjYgQEANCisNCisyMDIxLTEwLTIwIFJhY2hlbCBHaW5zYmVyZyA8cmdpbnNiZXJn
QGFwcGxlLmNvbT4NCisNCisgICAgICAgIEFkZCBzdXBwb3J0IGluIFdlYkNvcmUgZm9yIHdlYiBh
cHAgbWFuaWZlc3QgaWNvbnMNCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzEzMzkNCisNCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
Lg0KKw0KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQXBwbGljYXRpb25N
YW5pZmVzdFBhcnNlci5jcHA6DQorICAgICAgICAoQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlclRl
c3Q6OnBhcnNlSWNvbkZpcnN0VG9wTGV2ZWxQcm9wZXJ0eSk6DQorICAgICAgICBGdW5jdGlvbiB0
byBjcmVhdGUgSlNPTiBmb3IgaWNvbiBhdHRyaWJ1dGVzLiBUaGlzIGlzDQorICAgICAgICBuZWNl
c3NhcnkgYmVjYXVzZSBpY29ucyBhcmUgaW4gYSBsaXN0LCB3aGVyZWFzIGFsbCBvdGhlcg0KKyAg
ICAgICAgYXR0cmlidXRlcyBpbiBhcHAgbWFuaWZlc3QgYXJlIG5vdC4NCisNCisgICAgICAgIChB
cHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyVGVzdDo6dGVzdEljb25zU3JjKToNCisgICAgICAgIChB
cHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyVGVzdDo6dGVzdEljb25zVHlwZSk6DQorICAgICAgICAo
QXBwbGljYXRpb25NYW5pZmVzdFBhcnNlclRlc3Q6OnRlc3RJY29uc1NpemVzKToNCisgICAgICAg
IChBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyVGVzdDo6dGVzdEljb25zUHVycG9zZSk6DQorICAg
ICAgICBGdW5jdGlvbnMgZm9yIGVhY2ggb2YgdGhlIGljb24gYXR0cmlidXRlcy4NCisNCisgICAg
ICAgIChURVNUX0YpOg0KKyAgICAgICAgQ2FsbHMgdGhlIHZhcmlvdXMgaWNvbiB0ZXN0IGZ1bmN0
aW9ucyB3aXRoIGRpZmZlcmVudCBpbnB1dA0KKw0KIDIwMjEtMTEtMDggIEthdGUgQ2hlbmV5ICA8
a2F0aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+DQogDQogICAgICAgICBbIGlPUzE1IEVXUyBdIFRl
c3RXZWJLaXRBUEkuQXBwUHJpdmFjeVJlcG9ydC5Mb2FkU2ltdWxhdGVkUmVxdWVzdCB0ZXN0cyBh
cmUgdGltaW5nIG91dA0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcA0KaW5kZXggYzM5OTY1
NDQ2NTIwLi43MmNlNzU1OTA0M2UgMTAwNjQ0DQotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHANCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcA0K
QEAgLTc0LDYgKzc0LDE4IEBAIHB1YmxpYzoNCiAgICAgICAgIHJldHVybiBwYXJzZVN0cmluZyht
YW5pZmVzdENvbnRlbnQpOw0KICAgICB9DQogDQorICAgIEFwcGxpY2F0aW9uTWFuaWZlc3QgcGFy
c2VJY29uRmlyc3RUb3BMZXZlbFByb3BlcnR5KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJp
bmcmIHZhbHVlKQ0KKyAgICB7DQorICAgICAgICBTdHJpbmcgbWFuaWZlc3RDb250ZW50ID0gInsg
XCJpY29uc1wiOiBbe1wiIiArIGtleSArICJcIjogIiArIHZhbHVlICsgIiwgXCJzcmNcIjogXCJp
Y29uL2V4YW1wbGUucG5nXCIgfV19IjsNCisgICAgICAgIHJldHVybiBwYXJzZVN0cmluZyhtYW5p
ZmVzdENvbnRlbnQpOw0KKyAgICB9DQorDQorICAgIEFwcGxpY2F0aW9uTWFuaWZlc3QgcGFyc2VJ
Y29uRmlyc3RUb3BMZXZlbFByb3BlcnR5Rm9yU3JjKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBT
dHJpbmcmIHZhbHVlKQ0KKyAgICB7DQorICAgICAgICBTdHJpbmcgbWFuaWZlc3RDb250ZW50ID0g
InsgXCJpY29uc1wiOiBbe1wiIiArIGtleSArICJcIjogIiArIHZhbHVlICsgIiB9XX0iOw0KKyAg
ICAgICAgcmV0dXJuIHBhcnNlU3RyaW5nKG1hbmlmZXN0Q29udGVudCk7DQorICAgIH0NCisNCiAg
ICAgdm9pZCB0ZXN0U3RhcnRVUkwoY29uc3QgU3RyaW5nJiByYXdKU09OLCBjb25zdCBTdHJpbmcm
IGV4cGVjdGVkVmFsdWUpDQogICAgIHsNCiAgICAgICAgIHRlc3RTdGFydFVSTChyYXdKU09OLCB7
IHsgfSwgZXhwZWN0ZWRWYWx1ZSB9KTsNCkBAIC0xMzQsNiArMTQ2LDM0IEBAIHB1YmxpYzoNCiAg
ICAgICAgIEVYUEVDVF9FUShleHBlY3RlZFZhbHVlLCB2YWx1ZSk7DQogICAgIH0NCiANCisgICAg
dm9pZCB0ZXN0SWNvbnNTcmMoY29uc3QgU3RyaW5nJiByYXdKU09OLCBjb25zdCBVUkwmIGV4cGVj
dGVkVmFsdWUpDQorICAgIHsNCisgICAgICAgIGF1dG8gbWFuaWZlc3QgPSBwYXJzZUljb25GaXJz
dFRvcExldmVsUHJvcGVydHlGb3JTcmMoInNyYyIsIHJhd0pTT04pOw0KKyAgICAgICAgYXV0byB2
YWx1ZSA9IG1hbmlmZXN0Lmljb25zWzBdLnNyYzsNCisgICAgICAgIEVYUEVDVF9TVFJFUShleHBl
Y3RlZFZhbHVlLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHZhbHVlLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCkpOw0KKyAgICB9DQorDQorICAgIHZvaWQgdGVzdEljb25zVHlwZShjb25zdCBTdHJpbmcg
JnJhd0pTT04sIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWYWx1ZSkNCisgICAgew0KKyAgICAgICAg
YXV0byBtYW5pZmVzdCA9IHBhcnNlSWNvbkZpcnN0VG9wTGV2ZWxQcm9wZXJ0eSgidHlwZSIsIHJh
d0pTT04pOw0KKyAgICAgICAgYXV0byB2YWx1ZSA9IG1hbmlmZXN0Lmljb25zWzBdLnR5cGU7DQor
ICAgICAgICBFWFBFQ1RfU1RSRVEoZXhwZWN0ZWRWYWx1ZS51dGY4KCkuZGF0YSgpLCB2YWx1ZS51
dGY4KCkuZGF0YSgpKTsNCisgICAgfQ0KKw0KKyAgICB2b2lkIHRlc3RJY29uc1NpemVzKGNvbnN0
IFN0cmluZyAmcmF3SlNPTiwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZhbHVlKQ0KKyAgICB7DQor
ICAgICAgICBhdXRvIG1hbmlmZXN0ID0gcGFyc2VJY29uRmlyc3RUb3BMZXZlbFByb3BlcnR5KCJz
aXplcyIsIHJhd0pTT04pOw0KKyAgICAgICAgYXV0byB2YWx1ZSA9IG1hbmlmZXN0Lmljb25zWzBd
LnNpemVzOw0KKyAgICAgICAgRVhQRUNUX1NUUkVRKGV4cGVjdGVkVmFsdWUudXRmOCgpLmRhdGEo
KSwgdmFsdWUudXRmOCgpLmRhdGEoKSk7DQorICAgIH0NCisNCisgICAgdm9pZCB0ZXN0SWNvbnNQ
dXJwb3Nlcyhjb25zdCBTdHJpbmcgJnJhd0pTT04sIE9wdGlvblNldDxBcHBsaWNhdGlvbk1hbmlm
ZXN0OjpJY29uOjpQdXJwb3NlPiBleHBlY3RlZFZhbHVlcykNCisgICAgew0KKyAgICAgICAgYXV0
byBtYW5pZmVzdCA9IHBhcnNlSWNvbkZpcnN0VG9wTGV2ZWxQcm9wZXJ0eSgicHVycG9zZSIsIHJh
d0pTT04pOw0KKyAgICAgICAgYXV0byB2YWx1ZSA9IG1hbmlmZXN0Lmljb25zWzBdLnB1cnBvc2Vz
Ow0KKyAgICAgICAgRVhQRUNUX0VRKGV4cGVjdGVkVmFsdWVzLCB2YWx1ZSk7DQorICAgIH0NCisN
CiB9Ow0KIA0KIHN0YXRpYyB2b2lkIGFzc2VydE1hbmlmZXN0SGFzRGVmYXVsdFZhbHVlcyhjb25z
dCBVUkwmIG1hbmlmZXN0VVJMLCBjb25zdCBVUkwmIGRvY3VtZW50VVJMLCBjb25zdCBBcHBsaWNh
dGlvbk1hbmlmZXN0JiBtYW5pZmVzdCkNCkBAIC0zMjMsNCArMzYzLDMzIEBAIFRFU1RfRihBcHBs
aWNhdGlvbk1hbmlmZXN0UGFyc2VyVGVzdCwgV2hpdGVzcGFjZSkNCiAgICAgRVhQRUNUX1NUUkVR
KCJQQVNTIiwgbWFuaWZlc3QubmFtZS51dGY4KCkuZGF0YSgpKTsNCiB9DQogDQorVEVTVF9GKEFw
cGxpY2F0aW9uTWFuaWZlc3RQYXJzZXJUZXN0LCBJY29ucykNCit7DQorICAgIFVSTCBzcmNVUkwg
PSB7IHsgfSwgImh0dHBzOi8vZXhhbXBsZS5jb20vaWNvbi5qcGciIH07DQorICAgIHRlc3RJY29u
c1NyYygiXCJpY29uLmpwZ1wiIiwgc3JjVVJMKTsNCisgICAgdGVzdEljb25zVHlwZSgiXCJpbWFn
ZS93ZWJwXCIiLCAiaW1hZ2Uvd2VicCIpOw0KKyAgICB0ZXN0SWNvbnNTaXplcygiXCIyNTZ4MjU2
XCIiLCAiMjU2eDI1NiIpOw0KKyAgICB0ZXN0SWNvbnNTaXplcygiXCI3Mng3MiA5Nng5NlwiIiwg
IjcyeDcyIDk2eDk2Iik7DQorDQorICAgIE9wdGlvblNldDxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJ
Y29uOjpQdXJwb3NlPiBwdXJwb3NlQW55IHsgQXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6UHVy
cG9zZTo6QW55IH07DQorICAgIE9wdGlvblNldDxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQ
dXJwb3NlPiBwdXJwb3NlTW9ub2Nocm9tZSB7IEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1
cnBvc2U6Ok1vbm9jaHJvbWUgfTsNCisgICAgT3B0aW9uU2V0PEFwcGxpY2F0aW9uTWFuaWZlc3Q6
Okljb246OlB1cnBvc2U+IHB1cnBvc2VNYXNrYWJsZSB7IEFwcGxpY2F0aW9uTWFuaWZlc3Q6Oklj
b246OlB1cnBvc2U6Ok1hc2thYmxlIH07DQorDQorICAgIHRlc3RJY29uc1B1cnBvc2VzKCJcIm1v
bm9jaHJvbWVcIiIsIHB1cnBvc2VNb25vY2hyb21lKTsNCisgICAgdGVzdEljb25zUHVycG9zZXMo
IlwibWFza2FibGVcIiIsIHB1cnBvc2VNYXNrYWJsZSk7DQorICAgIHRlc3RJY29uc1B1cnBvc2Vz
KCJcImFueVwiIiwgcHVycG9zZUFueSk7DQorICAgIHRlc3RJY29uc1B1cnBvc2VzKCJcIlx0TU9O
T0NIUk9NRVwiIiwgcHVycG9zZU1vbm9jaHJvbWUpOw0KKw0KKyAgICB0ZXN0SWNvbnNQdXJwb3Nl
cygiMTIzIiwgcHVycG9zZUFueSk7DQorICAgIHRlc3RJY29uc1B1cnBvc2VzKCJudWxsIiwgcHVy
cG9zZUFueSk7DQorICAgIHRlc3RJY29uc1B1cnBvc2VzKCJ0cnVlIiwgcHVycG9zZUFueSk7DQor
ICAgIHRlc3RJY29uc1B1cnBvc2VzKCJ7IH0iLCBwdXJwb3NlQW55KTsNCisgICAgdGVzdEljb25z
UHVycG9zZXMoIlsgXSIsIHB1cnBvc2VBbnkpOw0KKw0KKyAgICBPcHRpb25TZXQ8QXBwbGljYXRp
b25NYW5pZmVzdDo6SWNvbjo6UHVycG9zZT4gcHVycG9zZU1vbm9jaHJvbWVBbnkgeyBBcHBsaWNh
dGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlOjpNb25vY2hyb21lLCBBcHBsaWNhdGlvbk1hbmlm
ZXN0OjpJY29uOjpQdXJwb3NlOjpBbnkgfTsNCisNCisgICAgdGVzdEljb25zUHVycG9zZXMoIlwi
bW9ub2Nocm9tZSBhbnlcIiIsIHB1cnBvc2VNb25vY2hyb21lQW55KTsNCisNCit9DQorDQogI2Vu
ZGlmDQo=
</data>
<flag name="review"
          id="468642"
          type_id="1"
          status="+"
          setter="bfulgham"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443842</attachid>
            <date>2021-11-10 11:47:47 -0800</date>
            <delta_ts>2021-11-11 10:49:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>rdar_82738657</filename>
            <type>text/plain</type>
            <size>22722</size>
            <attacher>rginsberg</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjNDdhZjI4YzFjNzAuLmU3NjMzYThmMWUwZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQwIEBACisyMDIxLTEwLTE1ICBSYWNoZWwgR2luc2JlcmcgIDxyZ2luc2JlcmdAYXBw
bGUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGluIFdlYkNvcmUgZm9yIHdlYiBhcHAgbWFu
aWZlc3QgaWNvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzMTMzOQorICAgICAgICByZGFyOi8vODQzMTEzMDYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0cyBhcmUgYWRkZWQgdG8gT3BlblNvdXJj
ZS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQXBwbGljYXRpb25NYW5pZmVzdFBh
cnNlci5jcHAKKworICAgICAgICAqIE1vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNh
dGlvbk1hbmlmZXN0Lmg6CisgICAgICAgIEEgbmV3IGVudW0gZm9yIHRoZSBpY29uIHB1cnBvc2Ug
KEljb246OlB1cnBvc2UpIHdhcyBhZGRlZCB0byB0aGUgQXBwbGljYXRpb25NYW5pZmVzdDo6SWNv
biBzdHJ1Y3QuCisgICAgICAgIEEgbmV3IEljb24gc3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGUg
Zm9yIHRoZSBzcmMsIHNpemVzLAorICAgICAgICB0eXBlLCBhbmQgSWNvbjo6UHVycG9zZSBhdHRy
aWJ1dGVzIGZvciBhcHAgbWFuaWZlc3QgaWNvbnMgd2FzIGFkZGVkIHRvIHRoZSBBcHBsaWNhdGlv
bk1hbmlmZXN0CisgICAgICAgIHN0cnVjdC4gQSB2ZWN0b3Igb2YgSWNvbidzIGlzIGFkZGVkIGFz
IGEgdmFyaWFibGUgZm9yCisgICAgICAgIHRoZSBBcHBsaWNhdGlvbk1hbmlmZXN0IHN0cnVjdC4K
KyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q6OmVuY29kZSBjb25zdCk6Cisg
ICAgICAgIEFkZGVkIGljb25zIHRvIGVuY29kZSBmdW5jdGlvbgorICAgICAgICAoV2ViY29yZTo6
QXBwbGljYXRpb25NYW5pZmVzdDo6ZGVjb2RlKToKKyAgICAgICAgQWRkZWQgaWNvbnMgdG8gZGVj
b2RlIGZ1bmN0aW9uCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29u
OjplbmNvZGUgY29uc3QpOgorICAgICAgICBDcmVhdGUgZW5jb2RlIGZ1bmN0aW9uIGZvciBBcHBs
aWNhdGlvbk1hbmlmZXN0OjpJY29uCisgICAgICAgIChXZWJjb3JlOjpBcHBsaWNhdGlvbk1hbmlm
ZXN0OjpJY29uOjpkZWNvZGUpOgorICAgICAgICBDcmVhdGUgZGVjb2RlIGZ1bmN0aW9uIGZvciBB
cHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uCisKKworICAgICAgICAqIE1vZHVsZXMvYXBwbGljYXRp
b25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlTWFuaWZlc3QpOgorICAgICAgICBB
ZGRlZCBjYWxsIHRvIHBhcnNlSWNvbnMKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFu
aWZlc3RQYXJzZXI6OnBhcnNlSWNvbnMpOgorICAgICAgICBwYXJzZUljb25zIGl0ZXJhdGVzIHRo
cm91Z2ggdGhlIGxpc3Qgb2YgaWNvbnMsIHBlcmZvcm1zIGNoZWNrcyBmb3IgYXR0cmlidXRlLAor
ICAgICAgICBhbmQgdGhlbiwgaWYgdmFsaWQsIGFkZHMgdGhlIGF0dHJpYnV0ZSB0byBhbiBBcHBs
aWNhdGlvbk1hbmlmZXN0SWNvbiBzdHJ1Y3QKKyAgICAgICAgdGhhdCBpcyBhcHBlbmRlZCB0byBh
IG5ldyBWZWN0b3Igb2YgQXBwbGljYXRpb25NYW5pZmVzdEljb25zLgorCisgICAgICAgICogTW9k
dWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuaDoKKyAg
ICAgICAgRGVjbGFyZSBmdW5jdGlvbnMgZm9yIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIKKwog
MjAyMS0xMS0wOCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAg
ICAgICBFbmFibGluZyAibWVkaWEgc291cmNlIGlubGluZSBwYWludGluZyIgYnkgZGVmYXVsdCBz
aG91bGQgd29yayB3aGVuIHVzaW5nIEdQVSBQcm9jZXNzIGZvciBtZWRpYQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFu
aWZlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBs
aWNhdGlvbk1hbmlmZXN0LmgKaW5kZXggZmE1NDFiMmIzMmJhLi42NzUxOGE5M2UwOWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNh
dGlvbk1hbmlmZXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1h
bmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3QuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUg
IkNvbG9yLmgiCiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvVVJM
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTQxLDYgKzQyLDIyIEBAIHN0cnVjdCBBcHBsaWNhdGlvbk1hbmlmZXN0IHsKICAgICAgICAgRnVs
bHNjcmVlbiwKICAgICB9OwogCisgICAgc3RydWN0IEljb24geworICAgICAgICBlbnVtIGNsYXNz
IFB1cnBvc2UgOiB1aW50OF90ICB7CisgICAgICAgICAgICBBbnkgPSAxIDw8IDAsCisgICAgICAg
ICAgICBNb25vY2hyb21lID0gMSA8PCAxLAorICAgICAgICAgICAgTWFza2FibGUgPSAxIDw8IDIs
CisgICAgICAgIH07CisKKyAgICAgICAgVVJMIHNyYzsKKyAgICAgICAgU3RyaW5nIHNpemVzOwor
ICAgICAgICBTdHJpbmcgdHlwZTsKKyAgICAgICAgT3B0aW9uU2V0PFB1cnBvc2U+IHB1cnBvc2Vz
OworCisgICAgICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKKyAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0
aW9uYWw8QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB9
OworCiAgICAgU3RyaW5nIG5hbWU7CiAgICAgU3RyaW5nIHNob3J0TmFtZTsKICAgICBTdHJpbmcg
ZGVzY3JpcHRpb247CkBAIC00OCw2ICs2NSw3IEBAIHN0cnVjdCBBcHBsaWNhdGlvbk1hbmlmZXN0
IHsKICAgICBEaXNwbGF5IGRpc3BsYXk7CiAgICAgVVJMIHN0YXJ0VVJMOwogICAgIENvbG9yIHRo
ZW1lQ29sb3I7CisgICAgVmVjdG9yPEljb24+IGljb25zOwogCiAgICAgdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEFwcGxpY2F0aW9uTWFuaWZlc3Q+IGRlY29k
ZShEZWNvZGVyJik7CkBAIC01Niw3ICs3NCw3IEBAIHN0cnVjdCBBcHBsaWNhdGlvbk1hbmlmZXN0
IHsKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIEFwcGxpY2F0aW9uTWFuaWZlc3Q6OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewotICAgIGVuY29kZXIgPDwgbmFtZSA8PCBz
aG9ydE5hbWUgPDwgZGVzY3JpcHRpb24gPDwgc2NvcGUgPDwgZGlzcGxheSA8PCBzdGFydFVSTCA8
PCB0aGVtZUNvbG9yOworICAgIGVuY29kZXIgPDwgbmFtZSA8PCBzaG9ydE5hbWUgPDwgZGVzY3Jp
cHRpb24gPDwgc2NvcGUgPDwgZGlzcGxheSA8PCBzdGFydFVSTCA8PCB0aGVtZUNvbG9yIDw8IGlj
b25zOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgpAQCAtNzgsNiArOTYsMzAgQEAgc3Rk
OjpvcHRpb25hbDxBcHBsaWNhdGlvbk1hbmlmZXN0PiBBcHBsaWNhdGlvbk1hbmlmZXN0OjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC50aGVtZUNvbG9yKSkKICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pY29ucykpCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IHNyYyA8PCBzaXpl
cyA8PCB0eXBlIDw8IHB1cnBvc2VzOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3Rk
OjpvcHRpb25hbDxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uPiBBcHBsaWNhdGlvbk1hbmlmZXN0
OjpJY29uOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBBcHBsaWNhdGlvbk1hbmlm
ZXN0OjpJY29uIHJlc3VsdDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zcmMpKQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVz
dWx0LnNpemVzKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3VsdC50eXBlKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5wdXJwb3NlcykpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtOTYsNiArMTM4LDE1IEBA
IHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVz
dDo6RGlzcGxheT4gewogICAgID47CiB9OwogCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRz
PFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2U+IHsKKyAgICB1c2lu
ZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlm
ZXN0OjpJY29uOjpQdXJwb3NlLAorICAgICAgICBXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0
OjpJY29uOjpQdXJwb3NlOjpBbnksCisgICAgICAgIFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZl
c3Q6Okljb246OlB1cnBvc2U6Ok1vbm9jaHJvbWUsCisgICAgICAgIFdlYkNvcmU6OkFwcGxpY2F0
aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2U6Ok1hc2thYmxlCisgICAgPjsKK307CisKIH0gLy8g
bmFtZXNwYWNlIFdURjsKIAogI2VuZGlmIC8vIEVOQUJMRShBUFBMSUNBVElPTl9NQU5JRkVTVCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9B
cHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBw
bGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcAppbmRleCA0Y2Iw
ZGY3NzBjZDguLjA0MzI4ZTUzZTkyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1h
bmlmZXN0UGFyc2VyLmNwcApAQCAtNzgsNiArNzgsNyBAQCBBcHBsaWNhdGlvbk1hbmlmZXN0IEFw
cGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlTWFuaWZlc3QoY29uc3QgU3RyaW5nJiB0ZXh0
LAogICAgIHBhcnNlZE1hbmlmZXN0LnNob3J0TmFtZSA9IHBhcnNlU2hvcnROYW1lKCptYW5pZmVz
dCk7CiAgICAgcGFyc2VkTWFuaWZlc3Quc2NvcGUgPSBwYXJzZVNjb3BlKCptYW5pZmVzdCwgZG9j
dW1lbnRVUkwsIHBhcnNlZE1hbmlmZXN0LnN0YXJ0VVJMKTsKICAgICBwYXJzZWRNYW5pZmVzdC50
aGVtZUNvbG9yID0gcGFyc2VDb2xvcigqbWFuaWZlc3QsICJ0aGVtZV9jb2xvciJfcyk7CisgICAg
cGFyc2VkTWFuaWZlc3QuaWNvbnMgPSBwYXJzZUljb25zKCptYW5pZmVzdCk7CiAKICAgICBpZiAo
bV9kb2N1bWVudCkKICAgICAgICAgbV9kb2N1bWVudC0+cHJvY2Vzc0FwcGxpY2F0aW9uTWFuaWZl
c3QocGFyc2VkTWFuaWZlc3QpOwpAQCAtMTc0LDYgKzE3NSw4NyBAQCBTdHJpbmcgQXBwbGljYXRp
b25NYW5pZmVzdFBhcnNlcjo6cGFyc2VTaG9ydE5hbWUoY29uc3QgSlNPTjo6T2JqZWN0JiBtYW5p
ZmVzdCkKICAgICByZXR1cm4gcGFyc2VHZW5lcmljU3RyaW5nKG1hbmlmZXN0LCAic2hvcnRfbmFt
ZSJfcyk7CiB9CiAKK1ZlY3RvcjxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uPiBBcHBsaWNhdGlv
bk1hbmlmZXN0UGFyc2VyOjpwYXJzZUljb25zKGNvbnN0IEpTT046Ok9iamVjdCYgbWFuaWZlc3Qp
Cit7CisgICAgYXV0byBtYW5pZmVzdEljb25zID0gbWFuaWZlc3QuZ2V0VmFsdWUoImljb25zIl9z
KTsKKworICAgIFZlY3RvcjxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uPiBpbWFnZVJlc291cmNl
czsKKyAgICBpZiAoIW1hbmlmZXN0SWNvbnMpCisgICAgICAgIHJldHVybiBpbWFnZVJlc291cmNl
czsKKworICAgIGF1dG8gbWFuaWZlc3RJY29uc0FycmF5ID0gbWFuaWZlc3RJY29ucy0+YXNBcnJh
eSgpOworICAgIGlmICghbWFuaWZlc3RJY29uc0FycmF5KSB7CisgICAgICAgIGxvZ0RldmVsb3Bl
cldhcm5pbmcoIlRoZSB2YWx1ZSBvZiBpY29ucyBpcyBub3QgYSB2YWxpZCBhcnJheS4iX3MpOwor
ICAgICAgICByZXR1cm4gaW1hZ2VSZXNvdXJjZXM7CisgICAgfQorCisgICAgZm9yIChjb25zdCBh
dXRvJiBpY29uVmFsdWUgOiAqbWFuaWZlc3RJY29uc0FycmF5KSB7CisgICAgICAgIEFwcGxpY2F0
aW9uTWFuaWZlc3Q6Okljb24gY3VycmVudEljb247CisgICAgICAgIGF1dG8gaWNvbk9iamVjdCA9
IGljb25WYWx1ZS0+YXNPYmplY3QoKTsKKyAgICAgICAgaWYgKCFpY29uT2JqZWN0KQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGNvbnN0IGF1dG8mIGljb25KU09OID0gKmljb25PYmpl
Y3Q7CisKKyAgICAgICAgYXV0byBzcmNWYWx1ZSA9IGljb25KU09OLmdldFZhbHVlKCJzcmMiX3Mp
OworICAgICAgICBpZiAoIXNyY1ZhbHVlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IGF1dG8gc3JjU3RyaW5nVmFsdWUgPSBzcmNWYWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgaWYg
KCFzcmNTdHJpbmdWYWx1ZSkgeworICAgICAgICAgICAgbG9nTWFuaWZlc3RQcm9wZXJ0eU5vdEFT
dHJpbmcoInNyYyJfcyk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAg
ICBVUkwgc3JjVVJMKG1fbWFuaWZlc3RVUkwsIHNyY1N0cmluZ1ZhbHVlKTsKKyAgICAgICAgaWYg
KHNyY1VSTC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFz
cmNVUkwuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBsb2dNYW5pZmVzdFByb3BlcnR5SW52YWxp
ZFVSTCgic3JjIl9zKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAg
IGN1cnJlbnRJY29uLnNyYyA9IHNyY1VSTDsKKworICAgICAgICBjdXJyZW50SWNvbi5zaXplcyA9
IHBhcnNlR2VuZXJpY1N0cmluZyhpY29uSlNPTiwgInNpemVzIl9zKTsKKworICAgICAgICBjdXJy
ZW50SWNvbi50eXBlID0gcGFyc2VHZW5lcmljU3RyaW5nKGljb25KU09OLCAidHlwZSJfcyk7CisK
KyAgICAgICAgYXV0byBwdXJwb3NlVmFsdWUgPSBpY29uSlNPTi5nZXRWYWx1ZSgicHVycG9zZSJf
cyk7CisgICAgICAgIE9wdGlvblNldDxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3Nl
PiBwdXJwb3NlczsKKworICAgICAgICBpZiAoIXB1cnBvc2VWYWx1ZSkgeworICAgICAgICAgICAg
cHVycG9zZXMuYWRkKEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2U6OkFueSk7Cisg
ICAgICAgICAgICBjdXJyZW50SWNvbi5wdXJwb3NlcyA9IHB1cnBvc2VzOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgYXV0byBwdXJwb3NlU3RyaW5nVmFsdWUgPSBwdXJwb3NlVmFsdWUt
PmFzU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAoIXB1cnBvc2VTdHJpbmdWYWx1ZSkgeworICAg
ICAgICAgICAgICAgIGxvZ01hbmlmZXN0UHJvcGVydHlOb3RBU3RyaW5nKCJwdXJwb3NlIl9zKTsK
KyAgICAgICAgICAgICAgICBwdXJwb3Nlcy5hZGQoQXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6
UHVycG9zZTo6QW55KTsKKyAgICAgICAgICAgICAgICBjdXJyZW50SWNvbi5wdXJwb3NlcyA9IHB1
cnBvc2VzOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwdXJwb3NlU3Ry
aW5nVmFsdWUgPSBwdXJwb3NlU3RyaW5nVmFsdWUuc3RyaXBXaGl0ZVNwYWNlKCkuY29udmVydFRv
QVNDSUlMb3dlcmNhc2UoKTsKKyAgICAgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBrZXl3b3Jk
cyA9IHB1cnBvc2VTdHJpbmdWYWx1ZS5zcGxpdEFsbG93aW5nRW1wdHlFbnRyaWVzKCIgIik7CisK
KyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleXdvcmQgOiBrZXl3b3Jkcykgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoa2V5d29yZCA9PSAibW9ub2Nocm9tZSIpCisgICAgICAg
ICAgICAgICAgICAgICAgICBwdXJwb3Nlcy5hZGQoQXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6
UHVycG9zZTo6TW9ub2Nocm9tZSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGtleXdv
cmQgPT0gIm1hc2thYmxlIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2VzLmFkZChB
cHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlOjpNYXNrYWJsZSk7CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGtleXdvcmQgPT0gImFueSIpCisgICAgICAgICAgICAgICAgICAg
ICAgICBwdXJwb3Nlcy5hZGQoQXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6UHVycG9zZTo6QW55
KTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgbG9n
RGV2ZWxvcGVyV2FybmluZyhtYWtlU3RyaW5nKCJcIiJfcywgcHVycG9zZVN0cmluZ1ZhbHVlLCAi
XCIgaXMgbm90IGEgdmFsaWQgcHVycG9zZS4iX3MpKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaWYgKHB1cnBvc2VzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgICAgICAgICBjdXJyZW50SWNvbi5wdXJwb3NlcyA9IHB1cnBv
c2VzOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaW1hZ2VSZXNvdXJjZXMu
YXBwZW5kKFdURk1vdmUoY3VycmVudEljb24pKTsKKyAgICB9CisKKyAgICByZXR1cm4gaW1hZ2VS
ZXNvdXJjZXM7Cit9CisKIHN0YXRpYyBib29sIGlzSW5TY29wZShjb25zdCBVUkwmIHNjb3BlVVJM
LCBjb25zdCBVUkwmIHRhcmdldFVSTCkKIHsKICAgICAvLyAxLiBJZiBzY29wZVVSTCBpcyB1bmRl
ZmluZWQgKGkuZS4sIGl0IGlzIHVuYm91bmRlZCBiZWNhdXNlIG9mIGFuIGVycm9yIG9yIGl0IHdh
cyBub3QgZGVjbGFyZWQgaW4gdGhlIG1hbmlmZXN0KSwgcmV0dXJuIHRydWUuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25N
YW5pZmVzdFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlm
ZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuaAppbmRleCAzZjk2MmRiYTgyMjEuLmI5Nzll
YTZjYjU4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1h
bmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5oCkBA
IC01MCw2ICs1MCw3IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIHBhcnNlRGVzY3JpcHRpb24oY29u
c3QgSlNPTjo6T2JqZWN0Jik7CiAgICAgU3RyaW5nIHBhcnNlU2hvcnROYW1lKGNvbnN0IEpTT046
Ok9iamVjdCYpOwogICAgIFVSTCBwYXJzZVNjb3BlKGNvbnN0IEpTT046Ok9iamVjdCYsIGNvbnN0
IFVSTCYsIGNvbnN0IFVSTCYpOworICAgIFZlY3RvcjxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29u
PiBwYXJzZUljb25zKGNvbnN0IEpTT046Ok9iamVjdCYpOwogCiAgICAgQ29sb3IgcGFyc2VDb2xv
cihjb25zdCBKU09OOjpPYmplY3QmLCBjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7CiAgICAg
U3RyaW5nIHBhcnNlR2VuZXJpY1N0cmluZyhjb25zdCBKU09OOjpPYmplY3QmLCBjb25zdCBTdHJp
bmcmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKaW5kZXggOTE5OWM4YjQ4OGQ0Li41NzY3Yzk2ZTdkYTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjggQEAKKzIwMjEtMTAtMTggIFJhY2hlbCBHaW5zYmVyZyAgPHJnaW5zYmVyZ0Bh
cHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgaW4gV2ViQ29yZSBmb3Igd2ViIGFwcCBt
YW5pZmVzdCBpY29ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjMxMzM5CisgICAgICAgIHJkYXI6Ly84NDMxMTMwNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tB
cHBsaWNhdGlvbk1hbmlmZXN0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tB
cHBsaWNhdGlvbk1hbmlmZXN0Lm1tOgorICAgICAgICAobWFrZVZlY3RvckVsZW1lbnQpOgorICAg
ICAgICBVc2VkIGJ5IG1ha2VWZWN0b3IgaW4gaW5pdFdpdGhDb2RlcjouIFRha2VzIGEgX1dLQXBw
bGljYXRpb25NYW5pZmVzdEljb24gYW5kIHJldHVybnMKKyAgICAgICAgYSBXZWJDb3JlOjpBcHBs
aWNhdGlvbk1hbmlmZXN0OjpJY29uLgorICAgICAgICAoLVtfV0tBcHBsaWNhdGlvbk1hbmlmZXN0
IGluaXRXaXRoQ29kZXI6XSk6CisgICAgICAgIEFkZGVkIGljb25zLgorICAgICAgICAoLVtfV0tB
cHBsaWNhdGlvbk1hbmlmZXN0IGVuY29kZVdpdGhDb2RlcjpdKToKKyAgICAgICAgQWRkZWQgaWNv
bnMuCisgICAgICAgICgtW19XS0FwcGxpY2F0aW9uTWFuaWZlc3QgaWNvbnNdKToKKyAgICAgICAg
U2hvdWxkIGFwcGVhc2UgYnVpbGQgZXJyb3IgYmVmb3JlIGZ1bGwgc3VwcG9ydCBmb3IgaWNvbnMg
aXMgYnVpbHQgaW50byBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0CisKKyAgICAgICAgKCtbX1dLQXBw
bGljYXRpb25NYW5pZmVzdEljb24gc3VwcG9ydHNTZWN1cmVDb2RpbmddKToKKyAgICAgICAgKC1b
X1dLQXBwbGljYXRpb25NYW5pZmVzdEljb24gaW5pdFdpdGhDb2RlcjpdKToKKyAgICAgICAgKC1b
X1dLQXBwbGljYXRpb25NYW5pZmVzdEljb24gZW5jb2RlV2l0aENvZGVyOl0pOgorICAgICAgICAo
LVtfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbiBkZWFsbG9jXSk6CisKIDIwMjEtMTEtMDggIFdl
bnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxpbmcg
Im1lZGlhIHNvdXJjZSBpbmxpbmUgcGFpbnRpbmciIGJ5IGRlZmF1bHQgc2hvdWxkIHdvcmsgd2hl
biB1c2luZyBHUFUgUHJvY2VzcyBmb3IgbWVkaWEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0LmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5oCmluZGV4IGIz
MWZhZjQ5OGM4Mi4uMmVkZjBlZGNhZjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0LmgKQEAgLTMxLDYg
KzMxLDcgQEAKICNlbHNlCiBAY2xhc3MgTlNDb2xvcjsKICNlbmRpZgorQGNsYXNzIF9XS0FwcGxp
Y2F0aW9uTWFuaWZlc3RJY29uOwogCiBOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgogCkBAIC00MSw2
ICs0MiwxMiBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tBcHBsaWNhdGlvbk1hbmlm
ZXN0RGlzcGxheU1vZGUpIHsKICAgICBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0RGlzcGxheU1vZGVG
dWxsU2NyZWVuLAogfSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpLCBpb3MoMTEuMykp
OwogCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNv
blB1cnBvc2UpIHsKKyAgICBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvblB1cnBvc2VBbnksCisg
ICAgX1dLQXBwbGljYXRpb25NYW5pZmVzdEljb25QdXJwb3NlTW9ub2Nocm9tZSwKKyAgICBfV0tB
cHBsaWNhdGlvbk1hbmlmZXN0SWNvblB1cnBvc2VNYXNrYWJsZSwKK30gV0tfQVBJX0FWQUlMQUJM
RShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKwogV0tfQ0xBU1NfQVZBSUxB
QkxFKG1hY29zKDEwLjEzLjQpLCBpb3MoMTEuMykpCiBAaW50ZXJmYWNlIF9XS0FwcGxpY2F0aW9u
TWFuaWZlc3QgOiBOU09iamVjdCA8TlNTZWN1cmVDb2Rpbmc+CiAKQEAgLTUwLDYgKzU3LDcgQEAg
V0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpLCBpb3MoMTEuMykpCiBAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHksIG51bGxhYmxlLCBjb3B5KSBOU1VSTCAqc2NvcGU7CiBAcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TVVJMICpzdGFydFVSTDsKIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgX1dLQXBwbGljYXRpb25NYW5pZmVzdERpc3BsYXlN
b2RlIGRpc3BsYXlNb2RlOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0FycmF5
PF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uICo+ICppY29ucyBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogCiAjaWYgVEFSR0VUX09TX0lQSE9O
RQogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBudWxsYWJsZSwgY29weSkgVUlDb2xv
ciAqdGhlbWVDb2xvciBXS19BUElfQVZBSUxBQkxFKGlvcygxNS4wKSk7CkBAIC02MSw0ICs2OSw5
IEBAIFdLX0NMQVNTX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSwgaW9zKDExLjMpKQogCiBAZW5k
CiAKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEp
KQorQGludGVyZmFjZSBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbiA6IE5TT2JqZWN0IDxOU1Nl
Y3VyZUNvZGluZz4KKy8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjMyOTU5CitAZW5kCisKIE5TX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3Qu
bW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5p
ZmVzdC5tbQppbmRleCAwMzU5ZWI1YjYwNDYuLjAwY2ZiNDgwMjUxNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3QubW0K
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFu
aWZlc3QubW0KQEAgLTQxLDYgKzQxLDE3IEBACiAjaW1wb3J0ICJBcHBLaXRTUEkuaCIKICNlbmRp
ZgogCitzdGF0aWMgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpJ
Y29uPiBtYWtlVmVjdG9yRWxlbWVudChjb25zdCBXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0
OjpJY29uKiwgaWQgYXJyYXlFbGVtZW50KQoreworCisgICAgaWYgKCFbYXJyYXlFbGVtZW50IGlz
S2luZE9mQ2xhc3M6IF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uLmNsYXNzXSkKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiBXZWJDb3JlOjpBcHBsaWNhdGlvbk1h
bmlmZXN0OjpJY29uIHsKKyAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMzI5NTkKKyAgICB9OworfQorCiBAaW1wbGVtZW50YXRpb24gX1dL
QXBwbGljYXRpb25NYW5pZmVzdAogCiAjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX01BTklGRVNUKQpA
QCAtNTksNiArNzAsNyBAQAogICAgIE5TSW50ZWdlciBkaXNwbGF5ID0gW2FEZWNvZGVyIGRlY29k
ZUludGVnZXJGb3JLZXk6QCJkaXNwbGF5Il07CiAgICAgTlNVUkwgKnN0YXJ0VVJMID0gW2FEZWNv
ZGVyIGRlY29kZU9iamVjdE9mQ2xhc3M6W05TVVJMIGNsYXNzXSBmb3JLZXk6QCJzdGFydF91cmwi
XTsKICAgICBDb2NvYUNvbG9yICp0aGVtZUNvbG9yID0gW2FEZWNvZGVyIGRlY29kZU9iamVjdE9m
Q2xhc3M6W0NvY29hQ29sb3IgY2xhc3NdIGZvcktleTpAInRoZW1lX2NvbG9yIl07CisgICAgTlNB
cnJheTxfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbiAqPiAqaWNvbnMgPSBbYURlY29kZXIgZGVj
b2RlT2JqZWN0T2ZDbGFzc2VzOltOU1NldCBzZXRXaXRoQXJyYXk6QFtbTlNBcnJheSBjbGFzc10s
IFtfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbiBjbGFzc11dXSBmb3JLZXk6QCJpY29ucyJdOwog
CiAgICAgV2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdCBjb3JlQXBwbGljYXRpb25NYW5pZmVz
dCB7CiAgICAgICAgIFdURjo6U3RyaW5nKG5hbWUpLApAQCAtNjgsNiArODAsNyBAQAogICAgICAg
ICBzdGF0aWNfY2FzdDxXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpEaXNwbGF5PihkaXNw
bGF5KSwKICAgICAgICAgVVJMKHN0YXJ0VVJMKSwKICAgICAgICAgV2ViQ29yZTo6cm91bmRBbmRD
bGFtcFRvU1JHQkFMb3NzeSh0aGVtZUNvbG9yLkNHQ29sb3IpLAorICAgICAgICBWZWN0b3I8V2Vi
Q29yZTo6QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbj4obWFrZVZlY3RvcjxXZWJDb3JlOjpBcHBs
aWNhdGlvbk1hbmlmZXN0OjpJY29uPihpY29ucykpLAogICAgIH07CiAKICAgICBBUEk6Ok9iamVj
dDo6Y29uc3RydWN0SW5XcmFwcGVyPEFQSTo6QXBwbGljYXRpb25NYW5pZmVzdD4oc2VsZiwgV1RG
TW92ZShjb3JlQXBwbGljYXRpb25NYW5pZmVzdCkpOwpAQCAtOTQsNiArMTA3LDcgQEAKICAgICBb
YUNvZGVyIGVuY29kZUludGVnZXI6c3RhdGljX2Nhc3Q8TlNJbnRlZ2VyPihfYXBwbGljYXRpb25N
YW5pZmVzdC0+YXBwbGljYXRpb25NYW5pZmVzdCgpLmRpc3BsYXkpIGZvcktleTpAImRpc3BsYXki
XTsKICAgICBbYUNvZGVyIGVuY29kZU9iamVjdDpzZWxmLnN0YXJ0VVJMIGZvcktleTpAInN0YXJ0
X3VybCJdOwogICAgIFthQ29kZXIgZW5jb2RlT2JqZWN0OnNlbGYudGhlbWVDb2xvciBmb3JLZXk6
QCJ0aGVtZV9jb2xvciJdOworICAgIFthQ29kZXIgZW5jb2RlT2JqZWN0OnNlbGYuaWNvbnMgZm9y
S2V5OkAiaWNvbnMiXTsKIH0KIAogKyAoX1dLQXBwbGljYXRpb25NYW5pZmVzdCAqKWFwcGxpY2F0
aW9uTWFuaWZlc3RGcm9tSlNPTjooTlNTdHJpbmcgKilqc29uIG1hbmlmZXN0VVJMOihOU1VSTCAq
KW1hbmlmZXN0VVJMIGRvY3VtZW50VVJMOihOU1VSTCAqKWRvY3VtZW50VVJMCkBAIC0xNTgsNiAr
MTcyLDEyIEBAIHN0YXRpYyBOU1N0cmluZyAqbnVsbGFibGVOU1N0cmluZyhjb25zdCBXVEY6OlN0
cmluZyYgc3RyaW5nKQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCistIChOU0FycmF5
PF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uICo+ICopaWNvbnMKK3sKKyAgICAvLyBGSVhNRTog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjk1OQorICAgIHJldHVy
biBuaWw7Cit9CisKICNlbHNlIC8vIEVOQUJMRShBUFBMSUNBVElPTl9NQU5JRkVTVCkKIAogKyAo
X1dLQXBwbGljYXRpb25NYW5pZmVzdCAqKWFwcGxpY2F0aW9uTWFuaWZlc3RGcm9tSlNPTjooTlNT
dHJpbmcgKilqc29uIG1hbmlmZXN0VVJMOihOU1VSTCAqKW1hbmlmZXN0VVJMIGRvY3VtZW50VVJM
OihOU1VSTCAqKWRvY3VtZW50VVJMCkBAIC0yMTUsNiArMjM1LDQyIEBAIHN0YXRpYyBOU1N0cmlu
ZyAqbnVsbGFibGVOU1N0cmluZyhjb25zdCBXVEY6OlN0cmluZyYgc3RyaW5nKQogICAgIHJldHVy
biBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0RGlzcGxheU1vZGVCcm93c2VyOwogfQogCistIChOU0Fy
cmF5PF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uICo+ICopaWNvbnMKK3sKKyAgICByZXR1cm4g
bmlsOworfQorCiAjZW5kaWYgLy8gRU5BQkxFKEFQUExJQ0FUSU9OX01BTklGRVNUKQogCiBAZW5k
CisKK0BpbXBsZW1lbnRhdGlvbiBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbgorCisrIChCT09M
KXN1cHBvcnRzU2VjdXJlQ29kaW5nCit7CisgICAgcmV0dXJuIFlFUzsKK30KKworLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoQ29kZXI6KE5TQ29kZXIgKilhRGVjb2RlcgoreworICAgIC8vIEZJWE1F
OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyOTU5CisgICAgVU5V
U0VEX1BBUkFNKGFEZWNvZGVyKTsKKyAgICBbc2VsZiByZWxlYXNlXTsKKyAgICByZXR1cm4gbmls
OworfQorCistICh2b2lkKWVuY29kZVdpdGhDb2RlcjooTlNDb2RlciAqKWFDb2RlcgoreworICAg
IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyOTU5
CisgICAgVU5VU0VEX1BBUkFNKGFDb2Rlcik7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAg
IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyOTU5
CisgICAgaWYgKFdlYkNvcmVPYmpDU2NoZWR1bGVEZWFsbG9jYXRlT25NYWluUnVuTG9vcChfV0tB
cHBsaWNhdGlvbk1hbmlmZXN0SWNvbi5jbGFzcywgc2VsZikpCisgICAgICAgIHJldHVybjsKKyAg
ICBbc3VwZXIgZGVhbGxvY107Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0SW50ZXJuYWwuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0SW50
ZXJuYWwuaAppbmRleCBiNjBkZGU2OThmMGYuLjNkNjM3MzZhM2EyNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3RJbnRl
cm5hbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBcHBsaWNh
dGlvbk1hbmlmZXN0SW50ZXJuYWwuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaW1wb3J0ICJBUElB
cHBsaWNhdGlvbk1hbmlmZXN0LmgiCiAjaW1wb3J0ICJfV0tBcHBsaWNhdGlvbk1hbmlmZXN0Lmgi
CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAogI2lmIEVOQUJMRShBUFBMSUNB
VElPTl9NQU5JRkVTVCkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hh
bmdlTG9nCmluZGV4IDYzNTZjZTQxNjNiOS4uY2U5MTM3ZDA5ZDUyIDEwMDY0NAotLS0gYS9Ub29s
cy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKworMjAy
MS0xMC0yMCBSYWNoZWwgR2luc2JlcmcgPHJnaW5zYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkIHN1cHBvcnQgaW4gV2ViQ29yZSBmb3Igd2ViIGFwcCBtYW5pZmVzdCBpY29ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMzM5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHA6CisgICAgICAgIChB
cHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyVGVzdDo6cGFyc2VJY29uRmlyc3RUb3BMZXZlbFByb3Bl
cnR5KToKKyAgICAgICAgRnVuY3Rpb24gdG8gY3JlYXRlIEpTT04gZm9yIGljb24gYXR0cmlidXRl
cy4gVGhpcyBpcworICAgICAgICBuZWNlc3NhcnkgYmVjYXVzZSBpY29ucyBhcmUgaW4gYSBsaXN0
LCB3aGVyZWFzIGFsbCBvdGhlcgorICAgICAgICBhdHRyaWJ1dGVzIGluIGFwcCBtYW5pZmVzdCBh
cmUgbm90LgorCisgICAgICAgIChBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyVGVzdDo6dGVzdElj
b25zU3JjKToKKyAgICAgICAgKEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXJUZXN0Ojp0ZXN0SWNv
bnNUeXBlKToKKyAgICAgICAgKEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXJUZXN0Ojp0ZXN0SWNv
bnNTaXplcyk6CisgICAgICAgIChBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyVGVzdDo6dGVzdElj
b25zUHVycG9zZSk6CisgICAgICAgIEZ1bmN0aW9ucyBmb3IgZWFjaCBvZiB0aGUgaWNvbiBhdHRy
aWJ1dGVzLgorCisgICAgICAgIChURVNUX0YpOgorICAgICAgICBDYWxscyB0aGUgdmFyaW91cyBp
Y29uIHRlc3QgZnVuY3Rpb25zIHdpdGggZGlmZmVyZW50IGlucHV0CisKIDIwMjEtMTEtMDggIEth
dGUgQ2hlbmV5ICA8a2F0aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+CiAKICAgICAgICAgWyBpT1Mx
NSBFV1MgXSBUZXN0V2ViS2l0QVBJLkFwcFByaXZhY3lSZXBvcnQuTG9hZFNpbXVsYXRlZFJlcXVl
c3QgdGVzdHMgYXJlIHRpbWluZyBvdXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcCBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcAppbmRl
eCBjMzk5NjU0NDY1MjAuLjcyY2U3NTU5MDQzZSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2Vy
LmNwcApAQCAtNzQsNiArNzQsMTggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcGFyc2VTdHJp
bmcobWFuaWZlc3RDb250ZW50KTsKICAgICB9CiAKKyAgICBBcHBsaWNhdGlvbk1hbmlmZXN0IHBh
cnNlSWNvbkZpcnN0VG9wTGV2ZWxQcm9wZXJ0eShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIFN0cmluZyBtYW5pZmVzdENvbnRlbnQgPSAieyBc
Imljb25zXCI6IFt7XCIiICsga2V5ICsgIlwiOiAiICsgdmFsdWUgKyAiLCBcInNyY1wiOiBcImlj
b24vZXhhbXBsZS5wbmdcIiB9XX0iOworICAgICAgICByZXR1cm4gcGFyc2VTdHJpbmcobWFuaWZl
c3RDb250ZW50KTsKKyAgICB9CisKKyAgICBBcHBsaWNhdGlvbk1hbmlmZXN0IHBhcnNlSWNvbkZp
cnN0VG9wTGV2ZWxQcm9wZXJ0eUZvclNyYyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIFN0cmluZyBtYW5pZmVzdENvbnRlbnQgPSAieyBcImlj
b25zXCI6IFt7XCIiICsga2V5ICsgIlwiOiAiICsgdmFsdWUgKyAiIH1dfSI7CisgICAgICAgIHJl
dHVybiBwYXJzZVN0cmluZyhtYW5pZmVzdENvbnRlbnQpOworICAgIH0KKwogICAgIHZvaWQgdGVz
dFN0YXJ0VVJMKGNvbnN0IFN0cmluZyYgcmF3SlNPTiwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZh
bHVlKQogICAgIHsKICAgICAgICAgdGVzdFN0YXJ0VVJMKHJhd0pTT04sIHsgeyB9LCBleHBlY3Rl
ZFZhbHVlIH0pOwpAQCAtMTM0LDYgKzE0NiwzNCBAQCBwdWJsaWM6CiAgICAgICAgIEVYUEVDVF9F
UShleHBlY3RlZFZhbHVlLCB2YWx1ZSk7CiAgICAgfQogCisgICAgdm9pZCB0ZXN0SWNvbnNTcmMo
Y29uc3QgU3RyaW5nJiByYXdKU09OLCBjb25zdCBVUkwmIGV4cGVjdGVkVmFsdWUpCisgICAgewor
ICAgICAgICBhdXRvIG1hbmlmZXN0ID0gcGFyc2VJY29uRmlyc3RUb3BMZXZlbFByb3BlcnR5Rm9y
U3JjKCJzcmMiLCByYXdKU09OKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IG1hbmlmZXN0Lmljb25z
WzBdLnNyYzsKKyAgICAgICAgRVhQRUNUX1NUUkVRKGV4cGVjdGVkVmFsdWUuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwgdmFsdWUuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAg
dm9pZCB0ZXN0SWNvbnNUeXBlKGNvbnN0IFN0cmluZyAmcmF3SlNPTiwgY29uc3QgU3RyaW5nJiBl
eHBlY3RlZFZhbHVlKQorICAgIHsKKyAgICAgICAgYXV0byBtYW5pZmVzdCA9IHBhcnNlSWNvbkZp
cnN0VG9wTGV2ZWxQcm9wZXJ0eSgidHlwZSIsIHJhd0pTT04pOworICAgICAgICBhdXRvIHZhbHVl
ID0gbWFuaWZlc3QuaWNvbnNbMF0udHlwZTsKKyAgICAgICAgRVhQRUNUX1NUUkVRKGV4cGVjdGVk
VmFsdWUudXRmOCgpLmRhdGEoKSwgdmFsdWUudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAg
dm9pZCB0ZXN0SWNvbnNTaXplcyhjb25zdCBTdHJpbmcgJnJhd0pTT04sIGNvbnN0IFN0cmluZyYg
ZXhwZWN0ZWRWYWx1ZSkKKyAgICB7CisgICAgICAgIGF1dG8gbWFuaWZlc3QgPSBwYXJzZUljb25G
aXJzdFRvcExldmVsUHJvcGVydHkoInNpemVzIiwgcmF3SlNPTik7CisgICAgICAgIGF1dG8gdmFs
dWUgPSBtYW5pZmVzdC5pY29uc1swXS5zaXplczsKKyAgICAgICAgRVhQRUNUX1NUUkVRKGV4cGVj
dGVkVmFsdWUudXRmOCgpLmRhdGEoKSwgdmFsdWUudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisg
ICAgdm9pZCB0ZXN0SWNvbnNQdXJwb3Nlcyhjb25zdCBTdHJpbmcgJnJhd0pTT04sIE9wdGlvblNl
dDxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlPiBleHBlY3RlZFZhbHVlcykKKyAg
ICB7CisgICAgICAgIGF1dG8gbWFuaWZlc3QgPSBwYXJzZUljb25GaXJzdFRvcExldmVsUHJvcGVy
dHkoInB1cnBvc2UiLCByYXdKU09OKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IG1hbmlmZXN0Lmlj
b25zWzBdLnB1cnBvc2VzOworICAgICAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRWYWx1ZXMsIHZhbHVl
KTsKKyAgICB9CisKIH07CiAKIHN0YXRpYyB2b2lkIGFzc2VydE1hbmlmZXN0SGFzRGVmYXVsdFZh
bHVlcyhjb25zdCBVUkwmIG1hbmlmZXN0VVJMLCBjb25zdCBVUkwmIGRvY3VtZW50VVJMLCBjb25z
dCBBcHBsaWNhdGlvbk1hbmlmZXN0JiBtYW5pZmVzdCkKQEAgLTMyMyw0ICszNjMsMzMgQEAgVEVT
VF9GKEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXJUZXN0LCBXaGl0ZXNwYWNlKQogICAgIEVYUEVD
VF9TVFJFUSgiUEFTUyIsIG1hbmlmZXN0Lm5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKK1RFU1Rf
RihBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyVGVzdCwgSWNvbnMpCit7CisgICAgVVJMIHNyY1VS
TCA9IHsgeyB9LCAiaHR0cHM6Ly9leGFtcGxlLmNvbS9pY29uLmpwZyIgfTsKKyAgICB0ZXN0SWNv
bnNTcmMoIlwiaWNvbi5qcGdcIiIsIHNyY1VSTCk7CisgICAgdGVzdEljb25zVHlwZSgiXCJpbWFn
ZS93ZWJwXCIiLCAiaW1hZ2Uvd2VicCIpOworICAgIHRlc3RJY29uc1NpemVzKCJcIjI1NngyNTZc
IiIsICIyNTZ4MjU2Iik7CisgICAgdGVzdEljb25zU2l6ZXMoIlwiNzJ4NzIgOTZ4OTZcIiIsICI3
Mng3MiA5Nng5NiIpOworCisgICAgT3B0aW9uU2V0PEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246
OlB1cnBvc2U+IHB1cnBvc2VBbnkgeyBBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3Nl
OjpBbnkgfTsKKyAgICBPcHRpb25TZXQ8QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6UHVycG9z
ZT4gcHVycG9zZU1vbm9jaHJvbWUgeyBBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3Nl
OjpNb25vY2hyb21lIH07CisgICAgT3B0aW9uU2V0PEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246
OlB1cnBvc2U+IHB1cnBvc2VNYXNrYWJsZSB7IEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1
cnBvc2U6Ok1hc2thYmxlIH07CisKKyAgICB0ZXN0SWNvbnNQdXJwb3NlcygiXCJtb25vY2hyb21l
XCIiLCBwdXJwb3NlTW9ub2Nocm9tZSk7CisgICAgdGVzdEljb25zUHVycG9zZXMoIlwibWFza2Fi
bGVcIiIsIHB1cnBvc2VNYXNrYWJsZSk7CisgICAgdGVzdEljb25zUHVycG9zZXMoIlwiYW55XCIi
LCBwdXJwb3NlQW55KTsKKyAgICB0ZXN0SWNvbnNQdXJwb3NlcygiXCJcdE1PTk9DSFJPTUVcIiIs
IHB1cnBvc2VNb25vY2hyb21lKTsKKworICAgIHRlc3RJY29uc1B1cnBvc2VzKCIxMjMiLCBwdXJw
b3NlQW55KTsKKyAgICB0ZXN0SWNvbnNQdXJwb3NlcygibnVsbCIsIHB1cnBvc2VBbnkpOworICAg
IHRlc3RJY29uc1B1cnBvc2VzKCJ0cnVlIiwgcHVycG9zZUFueSk7CisgICAgdGVzdEljb25zUHVy
cG9zZXMoInsgfSIsIHB1cnBvc2VBbnkpOworICAgIHRlc3RJY29uc1B1cnBvc2VzKCJbIF0iLCBw
dXJwb3NlQW55KTsKKworICAgIE9wdGlvblNldDxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQ
dXJwb3NlPiBwdXJwb3NlTW9ub2Nocm9tZUFueSB7IEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246
OlB1cnBvc2U6Ok1vbm9jaHJvbWUsIEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2U6
OkFueSB9OworCisgICAgdGVzdEljb25zUHVycG9zZXMoIlwibW9ub2Nocm9tZSBhbnlcIiIsIHB1
cnBvc2VNb25vY2hyb21lQW55KTsKKworfQorCiAjZW5kaWYK
</data>
<flag name="review"
          id="468664"
          type_id="1"
          status="+"
          setter="bfulgham"
    />
    <flag name="commit-queue"
          id="468818"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443974</attachid>
            <date>2021-11-11 10:49:05 -0800</date>
            <delta_ts>2021-11-11 12:14:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>file_231339.txt</filename>
            <type>text/plain</type>
            <size>23580</size>
            <attacher>rginsberg</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZw0KaW5kZXggYzQ3YWYyOGMxYzcwLi5jZTVkNzdjYmQ5OTUgMTAwNjQ0DQotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cNCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZw0K
QEAgLTEsMyArMSwzOSBAQA0KKzIwMjEtMTEtMTEgIFJhY2hlbCBHaW5zYmVyZyAgPHJnaW5zYmVy
Z0BhcHBsZS5jb20+DQorDQorICAgICAgICBBZGQgc3VwcG9ydCBpbiBXZWJDb3JlIGZvciB3ZWIg
YXBwIG1hbmlmZXN0IGljb25zDQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjMxMzM5DQorICAgICAgICByZGFyOi8vODQzMTEzMDYNCisNCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLg0KKw0KKyAgICAgICAgVGVzdHMgYXJlIGFkZGVk
IHRvIE9wZW5Tb3VyY2UvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0FwcGxpY2F0
aW9uTWFuaWZlc3RQYXJzZXIuY3BwDQorDQorICAgICAgICAqIE1vZHVsZXMvYXBwbGljYXRpb25t
YW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0Lmg6DQorICAgICAgICBBIG5ldyBlbnVtIGZvciB0
aGUgaWNvbiBwdXJwb3NlIChJY29uOjpQdXJwb3NlKSB3YXMgYWRkZWQgdG8gdGhlIEFwcGxpY2F0
aW9uTWFuaWZlc3Q6Okljb24gc3RydWN0Lg0KKyAgICAgICAgQSBuZXcgSWNvbiBzdHJ1Y3QgY29u
dGFpbmluZyB2YXJpYWJsZSBmb3IgdGhlIHNyYywgc2l6ZXMsDQorICAgICAgICB0eXBlLCBhbmQg
SWNvbjo6UHVycG9zZSBhdHRyaWJ1dGVzIGZvciBhcHAgbWFuaWZlc3QgaWNvbnMgd2FzIGFkZGVk
IHRvIHRoZSBBcHBsaWNhdGlvbk1hbmlmZXN0DQorICAgICAgICBzdHJ1Y3QuIEEgdmVjdG9yIG9m
IEljb24ncyBpcyBhZGRlZCBhcyBhIHZhcmlhYmxlIGZvcg0KKyAgICAgICAgdGhlIEFwcGxpY2F0
aW9uTWFuaWZlc3Qgc3RydWN0Lg0KKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZl
c3Q6OmVuY29kZSBjb25zdCk6DQorICAgICAgICBBZGRlZCBpY29ucyB0byBlbmNvZGUgZnVuY3Rp
b24NCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpkZWNvZGUpOg0KKyAg
ICAgICAgQWRkZWQgaWNvbnMgdG8gZGVjb2RlIGZ1bmN0aW9uDQorICAgICAgICAoV2ViQ29yZTo6
QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6ZW5jb2RlIGNvbnN0KToNCisgICAgICAgIENyZWF0
ZSBlbmNvZGUgZnVuY3Rpb24gZm9yIEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb24NCisgICAgICAg
IChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpkZWNvZGUpOg0KKyAgICAgICAg
Q3JlYXRlIGRlY29kZSBmdW5jdGlvbiBmb3IgQXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbg0KKw0K
KyAgICAgICAgKiBNb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVz
dFBhcnNlci5jcHA6DQorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdFBhcnNl
cjo6cGFyc2VNYW5pZmVzdCk6DQorICAgICAgICBBZGRlZCBjYWxsIHRvIHBhcnNlSWNvbnMNCisg
ICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpwYXJzZUljb25zKToN
CisgICAgICAgIHBhcnNlSWNvbnMgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgbGlzdCBvZiBpY29ucywg
cGVyZm9ybXMgY2hlY2tzIGZvciBhdHRyaWJ1dGUsDQorICAgICAgICBhbmQgdGhlbiwgaWYgdmFs
aWQsIGFkZHMgdGhlIGF0dHJpYnV0ZSB0byBhbiBBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbiBzdHJ1
Y3QNCisgICAgICAgIHRoYXQgaXMgYXBwZW5kZWQgdG8gYSBuZXcgVmVjdG9yIG9mIEFwcGxpY2F0
aW9uTWFuaWZlc3RJY29ucy4NCisNCisgICAgICAgICogTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlm
ZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuaDoNCisgICAgICAgIERlY2xhcmUgZnVuY3Rp
b25zIGZvciBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyDQorDQogMjAyMS0xMS0wOCAgV2Vuc29u
IEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4NCiANCiAgICAgICAgIEVuYWJsaW5nICJt
ZWRpYSBzb3VyY2UgaW5saW5lIHBhaW50aW5nIiBieSBkZWZhdWx0IHNob3VsZCB3b3JrIHdoZW4g
dXNpbmcgR1BVIFByb2Nlc3MgZm9yIG1lZGlhDQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3QuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0
LmgNCmluZGV4IGZhNTQxYjJiMzJiYS4uNjc1MThhOTNlMDlhIDEwMDY0NA0KLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3Qu
aA0KKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxp
Y2F0aW9uTWFuaWZlc3QuaA0KQEAgLTMwLDYgKzMwLDcgQEANCiAjaW5jbHVkZSAiQ29sb3IuaCIN
CiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4NCiAjaW5jbHVkZSA8d3RmL1VSTC5oPg0KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+DQogDQogbmFtZXNwYWNlIFdlYkNvcmUgew0KIA0KQEAgLTQx
LDYgKzQyLDIyIEBAIHN0cnVjdCBBcHBsaWNhdGlvbk1hbmlmZXN0IHsNCiAgICAgICAgIEZ1bGxz
Y3JlZW4sDQogICAgIH07DQogDQorICAgIHN0cnVjdCBJY29uIHsNCisgICAgICAgIGVudW0gY2xh
c3MgUHVycG9zZSA6IHVpbnQ4X3QgIHsNCisgICAgICAgICAgICBBbnkgPSAxIDw8IDAsDQorICAg
ICAgICAgICAgTW9ub2Nocm9tZSA9IDEgPDwgMSwNCisgICAgICAgICAgICBNYXNrYWJsZSA9IDEg
PDwgMiwNCisgICAgICAgIH07DQorDQorICAgICAgICBVUkwgc3JjOw0KKyAgICAgICAgU3RyaW5n
IHNpemVzOw0KKyAgICAgICAgU3RyaW5nIHR5cGU7DQorICAgICAgICBPcHRpb25TZXQ8UHVycG9z
ZT4gcHVycG9zZXM7DQorDQorICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7DQorICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgc3RkOjpvcHRpb25hbDxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uPiBkZWNvZGUoRGVj
b2RlciYpOw0KKyAgICB9Ow0KKw0KICAgICBTdHJpbmcgbmFtZTsNCiAgICAgU3RyaW5nIHNob3J0
TmFtZTsNCiAgICAgU3RyaW5nIGRlc2NyaXB0aW9uOw0KQEAgLTQ4LDYgKzY1LDcgQEAgc3RydWN0
IEFwcGxpY2F0aW9uTWFuaWZlc3Qgew0KICAgICBEaXNwbGF5IGRpc3BsYXk7DQogICAgIFVSTCBz
dGFydFVSTDsNCiAgICAgQ29sb3IgdGhlbWVDb2xvcjsNCisgICAgVmVjdG9yPEljb24+IGljb25z
Ow0KIA0KICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7DQogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PEFwcGxpY2F0aW9uTWFuaWZlc3Q+IGRlY29kZShEZWNvZGVyJik7DQpAQCAtNTYsNyArNzQsNyBA
QCBzdHJ1Y3QgQXBwbGljYXRpb25NYW5pZmVzdCB7DQogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4N
CiB2b2lkIEFwcGxpY2F0aW9uTWFuaWZlc3Q6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dA0KIHsNCi0gICAgZW5jb2RlciA8PCBuYW1lIDw8IHNob3J0TmFtZSA8PCBkZXNjcmlwdGlvbiA8
PCBzY29wZSA8PCBkaXNwbGF5IDw8IHN0YXJ0VVJMIDw8IHRoZW1lQ29sb3I7DQorICAgIGVuY29k
ZXIgPDwgbmFtZSA8PCBzaG9ydE5hbWUgPDwgZGVzY3JpcHRpb24gPDwgc2NvcGUgPDwgZGlzcGxh
eSA8PCBzdGFydFVSTCA8PCB0aGVtZUNvbG9yIDw8IGljb25zOw0KIH0NCiANCiB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPg0KQEAgLTc4LDYgKzk2LDMwIEBAIHN0ZDo6b3B0aW9uYWw8QXBwbGljYXRp
b25NYW5pZmVzdD4gQXBwbGljYXRpb25NYW5pZmVzdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
DQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Ow0KICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlc3VsdC50aGVtZUNvbG9yKSkNCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7DQorICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lmljb25zKSkNCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7DQorDQorICAgIHJldHVybiByZXN1bHQ7DQorfQ0KKw0KK3RlbXBsYXRlPGNsYXNz
IEVuY29kZXI+DQordm9pZCBBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlcikgY29uc3QNCit7DQorICAgIGVuY29kZXIgPDwgc3JjIDw8IHNpemVzIDw8IHR5
cGUgPDwgcHVycG9zZXM7DQorfQ0KKw0KK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+DQorc3RkOjpv
cHRpb25hbDxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uPiBBcHBsaWNhdGlvbk1hbmlmZXN0OjpJ
Y29uOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikNCit7DQorICAgIEFwcGxpY2F0aW9uTWFuaWZl
c3Q6Okljb24gcmVzdWx0Ow0KKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zcmMpKQ0K
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsNCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQuc2l6ZXMpKQ0KKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsNCisgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShyZXN1bHQudHlwZSkpDQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
Ow0KKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5wdXJwb3NlcykpDQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0Ow0KIA0KICAgICByZXR1cm4gcmVzdWx0Ow0KIH0NCkBAIC05Niw2
ICsxMzgsMTUgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpBcHBsaWNh
dGlvbk1hbmlmZXN0OjpEaXNwbGF5PiB7DQogICAgID47DQogfTsNCiANCit0ZW1wbGF0ZTw+IHN0
cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1cnBv
c2U+IHsNCisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwNCisgICAgICAgIFdlYkNvcmU6
OkFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2UsDQorICAgICAgICBXZWJDb3JlOjpB
cHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlOjpBbnksDQorICAgICAgICBXZWJDb3Jl
OjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlOjpNb25vY2hyb21lLA0KKyAgICAg
ICAgV2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6UHVycG9zZTo6TWFza2FibGUN
CisgICAgPjsNCit9Ow0KKw0KIH0gLy8gbmFtZXNwYWNlIFdURjsNCiANCiAjZW5kaWYgLy8gRU5B
QkxFKEFQUExJQ0FUSU9OX01BTklGRVNUKQ0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1h
bmlmZXN0UGFyc2VyLmNwcA0KaW5kZXggNGNiMGRmNzcwY2Q4Li4wNDMyOGU1M2U5MmYgMTAwNjQ0
DQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGlj
YXRpb25NYW5pZmVzdFBhcnNlci5jcHANCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBw
bGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcA0KQEAgLTc4LDYg
Kzc4LDcgQEAgQXBwbGljYXRpb25NYW5pZmVzdCBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpw
YXJzZU1hbmlmZXN0KGNvbnN0IFN0cmluZyYgdGV4dCwNCiAgICAgcGFyc2VkTWFuaWZlc3Quc2hv
cnROYW1lID0gcGFyc2VTaG9ydE5hbWUoKm1hbmlmZXN0KTsNCiAgICAgcGFyc2VkTWFuaWZlc3Qu
c2NvcGUgPSBwYXJzZVNjb3BlKCptYW5pZmVzdCwgZG9jdW1lbnRVUkwsIHBhcnNlZE1hbmlmZXN0
LnN0YXJ0VVJMKTsNCiAgICAgcGFyc2VkTWFuaWZlc3QudGhlbWVDb2xvciA9IHBhcnNlQ29sb3Io
Km1hbmlmZXN0LCAidGhlbWVfY29sb3IiX3MpOw0KKyAgICBwYXJzZWRNYW5pZmVzdC5pY29ucyA9
IHBhcnNlSWNvbnMoKm1hbmlmZXN0KTsNCiANCiAgICAgaWYgKG1fZG9jdW1lbnQpDQogICAgICAg
ICBtX2RvY3VtZW50LT5wcm9jZXNzQXBwbGljYXRpb25NYW5pZmVzdChwYXJzZWRNYW5pZmVzdCk7
DQpAQCAtMTc0LDYgKzE3NSw4NyBAQCBTdHJpbmcgQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6
cGFyc2VTaG9ydE5hbWUoY29uc3QgSlNPTjo6T2JqZWN0JiBtYW5pZmVzdCkNCiAgICAgcmV0dXJu
IHBhcnNlR2VuZXJpY1N0cmluZyhtYW5pZmVzdCwgInNob3J0X25hbWUiX3MpOw0KIH0NCiANCitW
ZWN0b3I8QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbj4gQXBwbGljYXRpb25NYW5pZmVzdFBhcnNl
cjo6cGFyc2VJY29ucyhjb25zdCBKU09OOjpPYmplY3QmIG1hbmlmZXN0KQ0KK3sNCisgICAgYXV0
byBtYW5pZmVzdEljb25zID0gbWFuaWZlc3QuZ2V0VmFsdWUoImljb25zIl9zKTsNCisNCisgICAg
VmVjdG9yPEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb24+IGltYWdlUmVzb3VyY2VzOw0KKyAgICBp
ZiAoIW1hbmlmZXN0SWNvbnMpDQorICAgICAgICByZXR1cm4gaW1hZ2VSZXNvdXJjZXM7DQorDQor
ICAgIGF1dG8gbWFuaWZlc3RJY29uc0FycmF5ID0gbWFuaWZlc3RJY29ucy0+YXNBcnJheSgpOw0K
KyAgICBpZiAoIW1hbmlmZXN0SWNvbnNBcnJheSkgew0KKyAgICAgICAgbG9nRGV2ZWxvcGVyV2Fy
bmluZygiVGhlIHZhbHVlIG9mIGljb25zIGlzIG5vdCBhIHZhbGlkIGFycmF5LiJfcyk7DQorICAg
ICAgICByZXR1cm4gaW1hZ2VSZXNvdXJjZXM7DQorICAgIH0NCisNCisgICAgZm9yIChjb25zdCBh
dXRvJiBpY29uVmFsdWUgOiAqbWFuaWZlc3RJY29uc0FycmF5KSB7DQorICAgICAgICBBcHBsaWNh
dGlvbk1hbmlmZXN0OjpJY29uIGN1cnJlbnRJY29uOw0KKyAgICAgICAgYXV0byBpY29uT2JqZWN0
ID0gaWNvblZhbHVlLT5hc09iamVjdCgpOw0KKyAgICAgICAgaWYgKCFpY29uT2JqZWN0KQ0KKyAg
ICAgICAgICAgIGNvbnRpbnVlOw0KKyAgICAgICAgY29uc3QgYXV0byYgaWNvbkpTT04gPSAqaWNv
bk9iamVjdDsNCisNCisgICAgICAgIGF1dG8gc3JjVmFsdWUgPSBpY29uSlNPTi5nZXRWYWx1ZSgi
c3JjIl9zKTsNCisgICAgICAgIGlmICghc3JjVmFsdWUpDQorICAgICAgICAgICAgY29udGludWU7
DQorICAgICAgICBhdXRvIHNyY1N0cmluZ1ZhbHVlID0gc3JjVmFsdWUtPmFzU3RyaW5nKCk7DQor
ICAgICAgICBpZiAoIXNyY1N0cmluZ1ZhbHVlKSB7DQorICAgICAgICAgICAgbG9nTWFuaWZlc3RQ
cm9wZXJ0eU5vdEFTdHJpbmcoInNyYyJfcyk7DQorICAgICAgICAgICAgY29udGludWU7DQorICAg
ICAgICB9DQorICAgICAgICBVUkwgc3JjVVJMKG1fbWFuaWZlc3RVUkwsIHNyY1N0cmluZ1ZhbHVl
KTsNCisgICAgICAgIGlmIChzcmNVUkwuaXNFbXB0eSgpKQ0KKyAgICAgICAgICAgIGNvbnRpbnVl
Ow0KKyAgICAgICAgaWYgKCFzcmNVUkwuaXNWYWxpZCgpKSB7DQorICAgICAgICAgICAgbG9nTWFu
aWZlc3RQcm9wZXJ0eUludmFsaWRVUkwoInNyYyJfcyk7DQorICAgICAgICAgICAgY29udGludWU7
DQorICAgICAgICB9DQorICAgICAgICBjdXJyZW50SWNvbi5zcmMgPSBzcmNVUkw7DQorDQorICAg
ICAgICBjdXJyZW50SWNvbi5zaXplcyA9IHBhcnNlR2VuZXJpY1N0cmluZyhpY29uSlNPTiwgInNp
emVzIl9zKTsNCisNCisgICAgICAgIGN1cnJlbnRJY29uLnR5cGUgPSBwYXJzZUdlbmVyaWNTdHJp
bmcoaWNvbkpTT04sICJ0eXBlIl9zKTsNCisNCisgICAgICAgIGF1dG8gcHVycG9zZVZhbHVlID0g
aWNvbkpTT04uZ2V0VmFsdWUoInB1cnBvc2UiX3MpOw0KKyAgICAgICAgT3B0aW9uU2V0PEFwcGxp
Y2F0aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2U+IHB1cnBvc2VzOw0KKw0KKyAgICAgICAgaWYg
KCFwdXJwb3NlVmFsdWUpIHsNCisgICAgICAgICAgICBwdXJwb3Nlcy5hZGQoQXBwbGljYXRpb25N
YW5pZmVzdDo6SWNvbjo6UHVycG9zZTo6QW55KTsNCisgICAgICAgICAgICBjdXJyZW50SWNvbi5w
dXJwb3NlcyA9IHB1cnBvc2VzOw0KKyAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICBhdXRv
IHB1cnBvc2VTdHJpbmdWYWx1ZSA9IHB1cnBvc2VWYWx1ZS0+YXNTdHJpbmcoKTsNCisgICAgICAg
ICAgICBpZiAoIXB1cnBvc2VTdHJpbmdWYWx1ZSkgew0KKyAgICAgICAgICAgICAgICBsb2dNYW5p
ZmVzdFByb3BlcnR5Tm90QVN0cmluZygicHVycG9zZSJfcyk7DQorICAgICAgICAgICAgICAgIHB1
cnBvc2VzLmFkZChBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlOjpBbnkpOw0KKyAg
ICAgICAgICAgICAgICBjdXJyZW50SWNvbi5wdXJwb3NlcyA9IHB1cnBvc2VzOw0KKyAgICAgICAg
ICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICAgIHB1cnBvc2VTdHJpbmdWYWx1ZSA9IHB1cnBv
c2VTdHJpbmdWYWx1ZS5zdHJpcFdoaXRlU3BhY2UoKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgp
Ow0KKyAgICAgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBrZXl3b3JkcyA9IHB1cnBvc2VTdHJp
bmdWYWx1ZS5zcGxpdEFsbG93aW5nRW1wdHlFbnRyaWVzKCIgIik7DQorDQorICAgICAgICAgICAg
ICAgIGZvciAoY29uc3QgYXV0byYga2V5d29yZCA6IGtleXdvcmRzKSB7DQorICAgICAgICAgICAg
ICAgICAgICBpZiAoa2V5d29yZCA9PSAibW9ub2Nocm9tZSIpDQorICAgICAgICAgICAgICAgICAg
ICAgICAgcHVycG9zZXMuYWRkKEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2U6Ok1v
bm9jaHJvbWUpOw0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoa2V5d29yZCA9PSAibWFz
a2FibGUiKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2VzLmFkZChBcHBsaWNhdGlv
bk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlOjpNYXNrYWJsZSk7DQorICAgICAgICAgICAgICAgICAg
ICBlbHNlIGlmIChrZXl3b3JkID09ICJhbnkiKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIHB1
cnBvc2VzLmFkZChBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlOjpBbnkpOw0KKyAg
ICAgICAgICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0RldmVs
b3Blcldhcm5pbmcobWFrZVN0cmluZygiXCIiX3MsIHB1cnBvc2VTdHJpbmdWYWx1ZSwgIlwiIGlz
IG5vdCBhIHZhbGlkIHB1cnBvc2UuIl9zKSk7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAg
ICAgICAgICAgaWYgKHB1cnBvc2VzLmlzRW1wdHkoKSkNCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOw0KKw0KKyAgICAgICAgICAgICAgICBjdXJyZW50SWNvbi5wdXJwb3NlcyA9IHB1cnBv
c2VzOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIGltYWdlUmVzb3Vy
Y2VzLmFwcGVuZChXVEZNb3ZlKGN1cnJlbnRJY29uKSk7DQorICAgIH0NCisNCisgICAgcmV0dXJu
IGltYWdlUmVzb3VyY2VzOw0KK30NCisNCiBzdGF0aWMgYm9vbCBpc0luU2NvcGUoY29uc3QgVVJM
JiBzY29wZVVSTCwgY29uc3QgVVJMJiB0YXJnZXRVUkwpDQogew0KICAgICAvLyAxLiBJZiBzY29w
ZVVSTCBpcyB1bmRlZmluZWQgKGkuZS4sIGl0IGlzIHVuYm91bmRlZCBiZWNhdXNlIG9mIGFuIGVy
cm9yIG9yIGl0IHdhcyBub3QgZGVjbGFyZWQgaW4gdGhlIG1hbmlmZXN0KSwgcmV0dXJuIHRydWUu
DQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0
L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBw
bGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmgNCmluZGV4IDNmOTYy
ZGJhODIyMS4uYjk3OWVhNmNiNThjIDEwMDY0NA0KLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuaA0KKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFu
aWZlc3RQYXJzZXIuaA0KQEAgLTUwLDYgKzUwLDcgQEAgcHJpdmF0ZToNCiAgICAgU3RyaW5nIHBh
cnNlRGVzY3JpcHRpb24oY29uc3QgSlNPTjo6T2JqZWN0Jik7DQogICAgIFN0cmluZyBwYXJzZVNo
b3J0TmFtZShjb25zdCBKU09OOjpPYmplY3QmKTsNCiAgICAgVVJMIHBhcnNlU2NvcGUoY29uc3Qg
SlNPTjo6T2JqZWN0JiwgY29uc3QgVVJMJiwgY29uc3QgVVJMJik7DQorICAgIFZlY3RvcjxBcHBs
aWNhdGlvbk1hbmlmZXN0OjpJY29uPiBwYXJzZUljb25zKGNvbnN0IEpTT046Ok9iamVjdCYpOw0K
IA0KICAgICBDb2xvciBwYXJzZUNvbG9yKGNvbnN0IEpTT046Ok9iamVjdCYsIGNvbnN0IFN0cmlu
ZyYgcHJvcGVydHlOYW1lKTsNCiAgICAgU3RyaW5nIHBhcnNlR2VuZXJpY1N0cmluZyhjb25zdCBK
U09OOjpPYmplY3QmLCBjb25zdCBTdHJpbmcmKTsNCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nDQppbmRleCA5MTk5YzhiNDg4ZDQu
LjUwMzc4YTQ3MjI2MyAxMDA2NDQNCi0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nDQorKysg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZw0KQEAgLTEsMyArMSwyOSBAQA0KKzIwMjEtMTEtMTEg
IFJhY2hlbCBHaW5zYmVyZyAgPHJnaW5zYmVyZ0BhcHBsZS5jb20+DQorDQorICAgICAgICBBZGQg
c3VwcG9ydCBpbiBXZWJDb3JlIGZvciB3ZWIgYXBwIG1hbmlmZXN0IGljb25zDQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMzM5DQorICAgICAgICBy
ZGFyOi8vODQzMTEzMDYNCisNCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLg0K
Kw0KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3Qu
aDoNCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0
Lm1tOg0KKyAgICAgICAgKG1ha2VWZWN0b3JFbGVtZW50KToNCisgICAgICAgIFVzZWQgYnkgbWFr
ZVZlY3RvciBpbiBpbml0V2l0aENvZGVyOi4gVGFrZXMgYSBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0
SWNvbiBhbmQgcmV0dXJucw0KKyAgICAgICAgYSBXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0
OjpJY29uLg0KKyAgICAgICAgKC1bX1dLQXBwbGljYXRpb25NYW5pZmVzdCBpbml0V2l0aENvZGVy
Ol0pOg0KKyAgICAgICAgQWRkZWQgaWNvbnMuDQorICAgICAgICAoLVtfV0tBcHBsaWNhdGlvbk1h
bmlmZXN0IGVuY29kZVdpdGhDb2RlcjpdKToNCisgICAgICAgIEFkZGVkIGljb25zLg0KKyAgICAg
ICAgKC1bX1dLQXBwbGljYXRpb25NYW5pZmVzdCBpY29uc10pOg0KKyAgICAgICAgU2hvdWxkIGFw
cGVhc2UgYnVpbGQgZXJyb3IgYmVmb3JlIGZ1bGwgc3VwcG9ydCBmb3IgaWNvbnMgaXMgYnVpbHQg
aW50byBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0DQorDQorICAgICAgICAoK1tfV0tBcHBsaWNhdGlv
bk1hbmlmZXN0SWNvbiBzdXBwb3J0c1NlY3VyZUNvZGluZ10pOg0KKyAgICAgICAgKC1bX1dLQXBw
bGljYXRpb25NYW5pZmVzdEljb24gaW5pdFdpdGhDb2RlcjpdKToNCisgICAgICAgICgtW19XS0Fw
cGxpY2F0aW9uTWFuaWZlc3RJY29uIGVuY29kZVdpdGhDb2RlcjpdKToNCisgICAgICAgICgtW19X
S0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uIGRlYWxsb2NdKToNCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0SW50ZXJuYWwuaDoNCisNCiAyMDIxLTEx
LTA4ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPg0KIA0KICAgICAgICAg
RW5hYmxpbmcgIm1lZGlhIHNvdXJjZSBpbmxpbmUgcGFpbnRpbmciIGJ5IGRlZmF1bHQgc2hvdWxk
IHdvcmsgd2hlbiB1c2luZyBHUFUgUHJvY2VzcyBmb3IgbWVkaWENCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3Qu
aA0KaW5kZXggYjMxZmFmNDk4YzgyLi4yZWRmMGVkY2FmNWYgMTAwNjQ0DQotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5oDQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVz
dC5oDQpAQCAtMzEsNiArMzEsNyBAQA0KICNlbHNlDQogQGNsYXNzIE5TQ29sb3I7DQogI2VuZGlm
DQorQGNsYXNzIF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uOw0KIA0KIE5TX0FTU1VNRV9OT05O
VUxMX0JFR0lODQogDQpAQCAtNDEsNiArNDIsMTIgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdl
ciwgX1dLQXBwbGljYXRpb25NYW5pZmVzdERpc3BsYXlNb2RlKSB7DQogICAgIF9XS0FwcGxpY2F0
aW9uTWFuaWZlc3REaXNwbGF5TW9kZUZ1bGxTY3JlZW4sDQogfSBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjEzLjQpLCBpb3MoMTEuMykpOw0KIA0KK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIs
IF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uUHVycG9zZSkgew0KKyAgICBfV0tBcHBsaWNhdGlv
bk1hbmlmZXN0SWNvblB1cnBvc2VBbnksDQorICAgIF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29u
UHVycG9zZU1vbm9jaHJvbWUsDQorICAgIF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uUHVycG9z
ZU1hc2thYmxlLA0KK30gV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdL
X0lPU19UQkEpKTsNCisNCiBXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCksIGlvcygx
MS4zKSkNCiBAaW50ZXJmYWNlIF9XS0FwcGxpY2F0aW9uTWFuaWZlc3QgOiBOU09iamVjdCA8TlNT
ZWN1cmVDb2Rpbmc+DQogDQpAQCAtNTAsNiArNTcsNyBAQCBXS19DTEFTU19BVkFJTEFCTEUobWFj
b3MoMTAuMTMuNCksIGlvcygxMS4zKSkNCiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHks
IG51bGxhYmxlLCBjb3B5KSBOU1VSTCAqc2NvcGU7DQogQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5LCBjb3B5KSBOU1VSTCAqc3RhcnRVUkw7DQogQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5KSBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0RGlzcGxheU1vZGUgZGlzcGxheU1vZGU7DQor
QHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0FycmF5PF9XS0FwcGxpY2F0aW9uTWFu
aWZlc3RJY29uICo+ICppY29ucyBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBp
b3MoV0tfSU9TX1RCQSkpOw0KIA0KICNpZiBUQVJHRVRfT1NfSVBIT05FDQogQHByb3BlcnR5IChu
b25hdG9taWMsIHJlYWRvbmx5LCBudWxsYWJsZSwgY29weSkgVUlDb2xvciAqdGhlbWVDb2xvciBX
S19BUElfQVZBSUxBQkxFKGlvcygxNS4wKSk7DQpAQCAtNjEsNCArNjksOSBAQCBXS19DTEFTU19B
VkFJTEFCTEUobWFjb3MoMTAuMTMuNCksIGlvcygxMS4zKSkNCiANCiBAZW5kDQogDQorV0tfQ0xB
U1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpDQorQGludGVy
ZmFjZSBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbiA6IE5TT2JqZWN0IDxOU1NlY3VyZUNvZGlu
Zz4NCisvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
Mjk1OQ0KK0BlbmQNCisNCiBOU19BU1NVTUVfTk9OTlVMTF9FTkQNCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0
Lm1tDQppbmRleCAwMzU5ZWI1YjYwNDYuLjAwY2ZiNDgwMjUxNCAxMDA2NDQNCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0Lm1tDQor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5p
ZmVzdC5tbQ0KQEAgLTQxLDYgKzQxLDE3IEBADQogI2ltcG9ydCAiQXBwS2l0U1BJLmgiDQogI2Vu
ZGlmDQogDQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVz
dDo6SWNvbj4gbWFrZVZlY3RvckVsZW1lbnQoY29uc3QgV2ViQ29yZTo6QXBwbGljYXRpb25NYW5p
ZmVzdDo6SWNvbiosIGlkIGFycmF5RWxlbWVudCkNCit7DQorDQorICAgIGlmICghW2FycmF5RWxl
bWVudCBpc0tpbmRPZkNsYXNzOiBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbi5jbGFzc10pDQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Ow0KKw0KKyAgICByZXR1cm4gV2ViQ29yZTo6QXBw
bGljYXRpb25NYW5pZmVzdDo6SWNvbiB7DQorICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjk1OQ0KKyAgICB9Ow0KK30NCisNCiBAaW1w
bGVtZW50YXRpb24gX1dLQXBwbGljYXRpb25NYW5pZmVzdA0KIA0KICNpZiBFTkFCTEUoQVBQTElD
QVRJT05fTUFOSUZFU1QpDQpAQCAtNTksNiArNzAsNyBAQA0KICAgICBOU0ludGVnZXIgZGlzcGxh
eSA9IFthRGVjb2RlciBkZWNvZGVJbnRlZ2VyRm9yS2V5OkAiZGlzcGxheSJdOw0KICAgICBOU1VS
TCAqc3RhcnRVUkwgPSBbYURlY29kZXIgZGVjb2RlT2JqZWN0T2ZDbGFzczpbTlNVUkwgY2xhc3Nd
IGZvcktleTpAInN0YXJ0X3VybCJdOw0KICAgICBDb2NvYUNvbG9yICp0aGVtZUNvbG9yID0gW2FE
ZWNvZGVyIGRlY29kZU9iamVjdE9mQ2xhc3M6W0NvY29hQ29sb3IgY2xhc3NdIGZvcktleTpAInRo
ZW1lX2NvbG9yIl07DQorICAgIE5TQXJyYXk8X1dLQXBwbGljYXRpb25NYW5pZmVzdEljb24gKj4g
Kmljb25zID0gW2FEZWNvZGVyIGRlY29kZU9iamVjdE9mQ2xhc3NlczpbTlNTZXQgc2V0V2l0aEFy
cmF5OkBbW05TQXJyYXkgY2xhc3NdLCBbX1dLQXBwbGljYXRpb25NYW5pZmVzdEljb24gY2xhc3Nd
XV0gZm9yS2V5OkAiaWNvbnMiXTsNCiANCiAgICAgV2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVz
dCBjb3JlQXBwbGljYXRpb25NYW5pZmVzdCB7DQogICAgICAgICBXVEY6OlN0cmluZyhuYW1lKSwN
CkBAIC02OCw2ICs4MCw3IEBADQogICAgICAgICBzdGF0aWNfY2FzdDxXZWJDb3JlOjpBcHBsaWNh
dGlvbk1hbmlmZXN0OjpEaXNwbGF5PihkaXNwbGF5KSwNCiAgICAgICAgIFVSTChzdGFydFVSTCks
DQogICAgICAgICBXZWJDb3JlOjpyb3VuZEFuZENsYW1wVG9TUkdCQUxvc3N5KHRoZW1lQ29sb3Iu
Q0dDb2xvciksDQorICAgICAgICBWZWN0b3I8V2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdDo6
SWNvbj4obWFrZVZlY3RvcjxXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uPihpY29u
cykpLA0KICAgICB9Ow0KIA0KICAgICBBUEk6Ok9iamVjdDo6Y29uc3RydWN0SW5XcmFwcGVyPEFQ
STo6QXBwbGljYXRpb25NYW5pZmVzdD4oc2VsZiwgV1RGTW92ZShjb3JlQXBwbGljYXRpb25NYW5p
ZmVzdCkpOw0KQEAgLTk0LDYgKzEwNyw3IEBADQogICAgIFthQ29kZXIgZW5jb2RlSW50ZWdlcjpz
dGF0aWNfY2FzdDxOU0ludGVnZXI+KF9hcHBsaWNhdGlvbk1hbmlmZXN0LT5hcHBsaWNhdGlvbk1h
bmlmZXN0KCkuZGlzcGxheSkgZm9yS2V5OkAiZGlzcGxheSJdOw0KICAgICBbYUNvZGVyIGVuY29k
ZU9iamVjdDpzZWxmLnN0YXJ0VVJMIGZvcktleTpAInN0YXJ0X3VybCJdOw0KICAgICBbYUNvZGVy
IGVuY29kZU9iamVjdDpzZWxmLnRoZW1lQ29sb3IgZm9yS2V5OkAidGhlbWVfY29sb3IiXTsNCisg
ICAgW2FDb2RlciBlbmNvZGVPYmplY3Q6c2VsZi5pY29ucyBmb3JLZXk6QCJpY29ucyJdOw0KIH0N
CiANCiArIChfV0tBcHBsaWNhdGlvbk1hbmlmZXN0ICopYXBwbGljYXRpb25NYW5pZmVzdEZyb21K
U09OOihOU1N0cmluZyAqKWpzb24gbWFuaWZlc3RVUkw6KE5TVVJMICopbWFuaWZlc3RVUkwgZG9j
dW1lbnRVUkw6KE5TVVJMICopZG9jdW1lbnRVUkwNCkBAIC0xNTgsNiArMTcyLDEyIEBAIHN0YXRp
YyBOU1N0cmluZyAqbnVsbGFibGVOU1N0cmluZyhjb25zdCBXVEY6OlN0cmluZyYgc3RyaW5nKQ0K
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsNCiB9DQogDQorLSAoTlNBcnJheTxfV0tBcHBsaWNh
dGlvbk1hbmlmZXN0SWNvbiAqPiAqKWljb25zDQorew0KKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjk1OQ0KKyAgICByZXR1cm4gbmlsOw0K
K30NCisNCiAjZWxzZSAvLyBFTkFCTEUoQVBQTElDQVRJT05fTUFOSUZFU1QpDQogDQogKyAoX1dL
QXBwbGljYXRpb25NYW5pZmVzdCAqKWFwcGxpY2F0aW9uTWFuaWZlc3RGcm9tSlNPTjooTlNTdHJp
bmcgKilqc29uIG1hbmlmZXN0VVJMOihOU1VSTCAqKW1hbmlmZXN0VVJMIGRvY3VtZW50VVJMOihO
U1VSTCAqKWRvY3VtZW50VVJMDQpAQCAtMjE1LDYgKzIzNSw0MiBAQCBzdGF0aWMgTlNTdHJpbmcg
Km51bGxhYmxlTlNTdHJpbmcoY29uc3QgV1RGOjpTdHJpbmcmIHN0cmluZykNCiAgICAgcmV0dXJu
IF9XS0FwcGxpY2F0aW9uTWFuaWZlc3REaXNwbGF5TW9kZUJyb3dzZXI7DQogfQ0KIA0KKy0gKE5T
QXJyYXk8X1dLQXBwbGljYXRpb25NYW5pZmVzdEljb24gKj4gKilpY29ucw0KK3sNCisgICAgcmV0
dXJuIG5pbDsNCit9DQorDQogI2VuZGlmIC8vIEVOQUJMRShBUFBMSUNBVElPTl9NQU5JRkVTVCkN
CiANCiBAZW5kDQorDQorQGltcGxlbWVudGF0aW9uIF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29u
DQorDQorKyAoQk9PTClzdXBwb3J0c1NlY3VyZUNvZGluZw0KK3sNCisgICAgcmV0dXJuIFlFUzsN
Cit9DQorDQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29kZXI6KE5TQ29kZXIgKilhRGVjb2Rl
cg0KK3sNCisgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzI5NTkNCisgICAgVU5VU0VEX1BBUkFNKGFEZWNvZGVyKTsNCisgICAgW3NlbGYgcmVs
ZWFzZV07DQorICAgIHJldHVybiBuaWw7DQorfQ0KKw0KKy0gKHZvaWQpZW5jb2RlV2l0aENvZGVy
OihOU0NvZGVyICopYUNvZGVyDQorew0KKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjk1OQ0KKyAgICBVTlVTRURfUEFSQU0oYUNvZGVyKTsN
Cit9DQorDQorLSAodm9pZClkZWFsbG9jDQorew0KKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjk1OQ0KKyAgICBpZiAoV2ViQ29yZU9iakNT
Y2hlZHVsZURlYWxsb2NhdGVPbk1haW5SdW5Mb29wKF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29u
LmNsYXNzLCBzZWxmKSkNCisgICAgICAgIHJldHVybjsNCisgICAgW3N1cGVyIGRlYWxsb2NdOw0K
K30NCisNCitAZW5kDQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3RJbnRlcm5hbC5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3RJbnRlcm5hbC5oDQppbmRleCBi
NjBkZGU2OThmMGYuLjNkNjM3MzZhM2EyNSAxMDA2NDQNCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0SW50ZXJuYWwuaA0KKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3RJ
bnRlcm5hbC5oDQpAQCAtMjcsNiArMjcsNyBAQA0KIA0KICNpbXBvcnQgIkFQSUFwcGxpY2F0aW9u
TWFuaWZlc3QuaCINCiAjaW1wb3J0ICJfV0tBcHBsaWNhdGlvbk1hbmlmZXN0LmgiDQorI2ltcG9y
dCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+DQogDQogI2lmIEVOQUJMRShBUFBMSUNBVElPTl9N
QU5JRkVTVCkNCiANCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VM
b2cNCmluZGV4IDYzNTZjZTQxNjNiOS4uNDJhMzg5NGViYzU5IDEwMDY0NA0KLS0tIGEvVG9vbHMv
Q2hhbmdlTG9nDQorKysgYi9Ub29scy9DaGFuZ2VMb2cNCkBAIC0xLDMgKzEsMjggQEANCisyMDIx
LTExLTExIFJhY2hlbCBHaW5zYmVyZyA8cmdpbnNiZXJnQGFwcGxlLmNvbT4NCisNCisgICAgICAg
IEFkZCBzdXBwb3J0IGluIFdlYkNvcmUgZm9yIHdlYiBhcHAgbWFuaWZlc3QgaWNvbnMNCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEzMzkNCisNCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLg0KKw0KKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHA6DQorICAg
ICAgICAoQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlclRlc3Q6OnBhcnNlSWNvbkZpcnN0VG9wTGV2
ZWxQcm9wZXJ0eSk6DQorICAgICAgICBGdW5jdGlvbiB0byBjcmVhdGUgSlNPTiBmb3IgaWNvbiBh
dHRyaWJ1dGVzLiBUaGlzIGlzDQorICAgICAgICBuZWNlc3NhcnkgYmVjYXVzZSBpY29ucyBhcmUg
aW4gYSBsaXN0LCB3aGVyZWFzIGFsbCBvdGhlcg0KKyAgICAgICAgYXR0cmlidXRlcyBpbiBhcHAg
bWFuaWZlc3QgYXJlIG5vdC4NCisgICAgICAgIChBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyVGVz
dDo6cGFyc2VJY29uRmlyc3RUb3BMZXZlbFByb3BlcnR5Rm9yU3JjKToNCisgICAgICAgIE5lZWRl
ZCB0byBtYWtlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHZlcnNpb24gdG8gYWRkIGEgc3JjIFVSTCwg
c2luY2UNCisgICAgICAgIGl0IGlzIHJlcXVpcmVkIGZvciBhIGdpdmVuIGljb24gdG8gYmUgYWRk
ZWQgdG8gdGhlIHZlY3Rvci4NCisNCisgICAgICAgIChBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2Vy
VGVzdDo6dGVzdEljb25zU3JjKToNCisgICAgICAgIChBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2Vy
VGVzdDo6dGVzdEljb25zVHlwZSk6DQorICAgICAgICAoQXBwbGljYXRpb25NYW5pZmVzdFBhcnNl
clRlc3Q6OnRlc3RJY29uc1NpemVzKToNCisgICAgICAgIChBcHBsaWNhdGlvbk1hbmlmZXN0UGFy
c2VyVGVzdDo6dGVzdEljb25zUHVycG9zZXMpOg0KKyAgICAgICAgRnVuY3Rpb25zIGZvciBlYWNo
IG9mIHRoZSBpY29uIGF0dHJpYnV0ZXMuDQorDQorICAgICAgICAoVEVTVF9GKToNCisgICAgICAg
IENhbGxzIHRoZSB2YXJpb3VzIGljb24gdGVzdCBmdW5jdGlvbnMgd2l0aCBkaWZmZXJlbnQgaW5w
dXQNCisNCiAyMDIxLTExLTA4ICBLYXRlIENoZW5leSAgPGthdGhlcmluZV9jaGVuZXlAYXBwbGUu
Y29tPg0KIA0KICAgICAgICAgWyBpT1MxNSBFV1MgXSBUZXN0V2ViS2l0QVBJLkFwcFByaXZhY3lS
ZXBvcnQuTG9hZFNpbXVsYXRlZFJlcXVlc3QgdGVzdHMgYXJlIHRpbWluZyBvdXQNCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQXBwbGljYXRpb25NYW5pZmVz
dFBhcnNlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQXBwbGljYXRp
b25NYW5pZmVzdFBhcnNlci5jcHANCmluZGV4IGMzOTk2NTQ0NjUyMC4uNzJjZTc1NTkwNDNlIDEw
MDY0NA0KLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0FwcGxpY2F0aW9u
TWFuaWZlc3RQYXJzZXIuY3BwDQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHANCkBAIC03NCw2ICs3NCwxOCBAQCBwdWJs
aWM6DQogICAgICAgICByZXR1cm4gcGFyc2VTdHJpbmcobWFuaWZlc3RDb250ZW50KTsNCiAgICAg
fQ0KIA0KKyAgICBBcHBsaWNhdGlvbk1hbmlmZXN0IHBhcnNlSWNvbkZpcnN0VG9wTGV2ZWxQcm9w
ZXJ0eShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkNCisgICAgew0KKyAg
ICAgICAgU3RyaW5nIG1hbmlmZXN0Q29udGVudCA9ICJ7IFwiaWNvbnNcIjogW3tcIiIgKyBrZXkg
KyAiXCI6ICIgKyB2YWx1ZSArICIsIFwic3JjXCI6IFwiaWNvbi9leGFtcGxlLnBuZ1wiIH1dfSI7
DQorICAgICAgICByZXR1cm4gcGFyc2VTdHJpbmcobWFuaWZlc3RDb250ZW50KTsNCisgICAgfQ0K
Kw0KKyAgICBBcHBsaWNhdGlvbk1hbmlmZXN0IHBhcnNlSWNvbkZpcnN0VG9wTGV2ZWxQcm9wZXJ0
eUZvclNyYyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkNCisgICAgew0K
KyAgICAgICAgU3RyaW5nIG1hbmlmZXN0Q29udGVudCA9ICJ7IFwiaWNvbnNcIjogW3tcIiIgKyBr
ZXkgKyAiXCI6ICIgKyB2YWx1ZSArICIgfV19IjsNCisgICAgICAgIHJldHVybiBwYXJzZVN0cmlu
ZyhtYW5pZmVzdENvbnRlbnQpOw0KKyAgICB9DQorDQogICAgIHZvaWQgdGVzdFN0YXJ0VVJMKGNv
bnN0IFN0cmluZyYgcmF3SlNPTiwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZhbHVlKQ0KICAgICB7
DQogICAgICAgICB0ZXN0U3RhcnRVUkwocmF3SlNPTiwgeyB7IH0sIGV4cGVjdGVkVmFsdWUgfSk7
DQpAQCAtMTM0LDYgKzE0NiwzNCBAQCBwdWJsaWM6DQogICAgICAgICBFWFBFQ1RfRVEoZXhwZWN0
ZWRWYWx1ZSwgdmFsdWUpOw0KICAgICB9DQogDQorICAgIHZvaWQgdGVzdEljb25zU3JjKGNvbnN0
IFN0cmluZyYgcmF3SlNPTiwgY29uc3QgVVJMJiBleHBlY3RlZFZhbHVlKQ0KKyAgICB7DQorICAg
ICAgICBhdXRvIG1hbmlmZXN0ID0gcGFyc2VJY29uRmlyc3RUb3BMZXZlbFByb3BlcnR5Rm9yU3Jj
KCJzcmMiLCByYXdKU09OKTsNCisgICAgICAgIGF1dG8gdmFsdWUgPSBtYW5pZmVzdC5pY29uc1sw
XS5zcmM7DQorICAgICAgICBFWFBFQ1RfU1RSRVEoZXhwZWN0ZWRWYWx1ZS5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpLCB2YWx1ZS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsNCisgICAgfQ0KKw0KKyAg
ICB2b2lkIHRlc3RJY29uc1R5cGUoY29uc3QgU3RyaW5nICZyYXdKU09OLCBjb25zdCBTdHJpbmcm
IGV4cGVjdGVkVmFsdWUpDQorICAgIHsNCisgICAgICAgIGF1dG8gbWFuaWZlc3QgPSBwYXJzZUlj
b25GaXJzdFRvcExldmVsUHJvcGVydHkoInR5cGUiLCByYXdKU09OKTsNCisgICAgICAgIGF1dG8g
dmFsdWUgPSBtYW5pZmVzdC5pY29uc1swXS50eXBlOw0KKyAgICAgICAgRVhQRUNUX1NUUkVRKGV4
cGVjdGVkVmFsdWUudXRmOCgpLmRhdGEoKSwgdmFsdWUudXRmOCgpLmRhdGEoKSk7DQorICAgIH0N
CisNCisgICAgdm9pZCB0ZXN0SWNvbnNTaXplcyhjb25zdCBTdHJpbmcgJnJhd0pTT04sIGNvbnN0
IFN0cmluZyYgZXhwZWN0ZWRWYWx1ZSkNCisgICAgew0KKyAgICAgICAgYXV0byBtYW5pZmVzdCA9
IHBhcnNlSWNvbkZpcnN0VG9wTGV2ZWxQcm9wZXJ0eSgic2l6ZXMiLCByYXdKU09OKTsNCisgICAg
ICAgIGF1dG8gdmFsdWUgPSBtYW5pZmVzdC5pY29uc1swXS5zaXplczsNCisgICAgICAgIEVYUEVD
VF9TVFJFUShleHBlY3RlZFZhbHVlLnV0ZjgoKS5kYXRhKCksIHZhbHVlLnV0ZjgoKS5kYXRhKCkp
Ow0KKyAgICB9DQorDQorICAgIHZvaWQgdGVzdEljb25zUHVycG9zZXMoY29uc3QgU3RyaW5nICZy
YXdKU09OLCBPcHRpb25TZXQ8QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6UHVycG9zZT4gZXhw
ZWN0ZWRWYWx1ZXMpDQorICAgIHsNCisgICAgICAgIGF1dG8gbWFuaWZlc3QgPSBwYXJzZUljb25G
aXJzdFRvcExldmVsUHJvcGVydHkoInB1cnBvc2UiLCByYXdKU09OKTsNCisgICAgICAgIGF1dG8g
dmFsdWUgPSBtYW5pZmVzdC5pY29uc1swXS5wdXJwb3NlczsNCisgICAgICAgIEVYUEVDVF9FUShl
eHBlY3RlZFZhbHVlcywgdmFsdWUpOw0KKyAgICB9DQorDQogfTsNCiANCiBzdGF0aWMgdm9pZCBh
c3NlcnRNYW5pZmVzdEhhc0RlZmF1bHRWYWx1ZXMoY29uc3QgVVJMJiBtYW5pZmVzdFVSTCwgY29u
c3QgVVJMJiBkb2N1bWVudFVSTCwgY29uc3QgQXBwbGljYXRpb25NYW5pZmVzdCYgbWFuaWZlc3Qp
DQpAQCAtMzIzLDQgKzM2MywzMyBAQCBURVNUX0YoQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlclRl
c3QsIFdoaXRlc3BhY2UpDQogICAgIEVYUEVDVF9TVFJFUSgiUEFTUyIsIG1hbmlmZXN0Lm5hbWUu
dXRmOCgpLmRhdGEoKSk7DQogfQ0KIA0KK1RFU1RfRihBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2Vy
VGVzdCwgSWNvbnMpDQorew0KKyAgICBVUkwgc3JjVVJMID0geyB7IH0sICJodHRwczovL2V4YW1w
bGUuY29tL2ljb24uanBnIiB9Ow0KKyAgICB0ZXN0SWNvbnNTcmMoIlwiaWNvbi5qcGdcIiIsIHNy
Y1VSTCk7DQorICAgIHRlc3RJY29uc1R5cGUoIlwiaW1hZ2Uvd2VicFwiIiwgImltYWdlL3dlYnAi
KTsNCisgICAgdGVzdEljb25zU2l6ZXMoIlwiMjU2eDI1NlwiIiwgIjI1NngyNTYiKTsNCisgICAg
dGVzdEljb25zU2l6ZXMoIlwiNzJ4NzIgOTZ4OTZcIiIsICI3Mng3MiA5Nng5NiIpOw0KKw0KKyAg
ICBPcHRpb25TZXQ8QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6UHVycG9zZT4gcHVycG9zZUFu
eSB7IEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2U6OkFueSB9Ow0KKyAgICBPcHRp
b25TZXQ8QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6UHVycG9zZT4gcHVycG9zZU1vbm9jaHJv
bWUgeyBBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlOjpNb25vY2hyb21lIH07DQor
ICAgIE9wdGlvblNldDxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlPiBwdXJwb3Nl
TWFza2FibGUgeyBBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlOjpNYXNrYWJsZSB9
Ow0KKw0KKyAgICB0ZXN0SWNvbnNQdXJwb3NlcygiXCJtb25vY2hyb21lXCIiLCBwdXJwb3NlTW9u
b2Nocm9tZSk7DQorICAgIHRlc3RJY29uc1B1cnBvc2VzKCJcIm1hc2thYmxlXCIiLCBwdXJwb3Nl
TWFza2FibGUpOw0KKyAgICB0ZXN0SWNvbnNQdXJwb3NlcygiXCJhbnlcIiIsIHB1cnBvc2VBbnkp
Ow0KKyAgICB0ZXN0SWNvbnNQdXJwb3NlcygiXCJcdE1PTk9DSFJPTUVcIiIsIHB1cnBvc2VNb25v
Y2hyb21lKTsNCisNCisgICAgdGVzdEljb25zUHVycG9zZXMoIjEyMyIsIHB1cnBvc2VBbnkpOw0K
KyAgICB0ZXN0SWNvbnNQdXJwb3NlcygibnVsbCIsIHB1cnBvc2VBbnkpOw0KKyAgICB0ZXN0SWNv
bnNQdXJwb3NlcygidHJ1ZSIsIHB1cnBvc2VBbnkpOw0KKyAgICB0ZXN0SWNvbnNQdXJwb3Nlcygi
eyB9IiwgcHVycG9zZUFueSk7DQorICAgIHRlc3RJY29uc1B1cnBvc2VzKCJbIF0iLCBwdXJwb3Nl
QW55KTsNCisNCisgICAgT3B0aW9uU2V0PEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1cnBv
c2U+IHB1cnBvc2VNb25vY2hyb21lQW55IHsgQXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6UHVy
cG9zZTo6TW9ub2Nocm9tZSwgQXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6UHVycG9zZTo6QW55
IH07DQorDQorICAgIHRlc3RJY29uc1B1cnBvc2VzKCJcIm1vbm9jaHJvbWUgYW55XCIiLCBwdXJw
b3NlTW9ub2Nocm9tZUFueSk7DQorDQorfQ0KKw0KICNlbmRpZg0K
</data>

          </attachment>
      

    </bug>

</bugzilla>