<?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>164437</bug_id>
          
          <creation_ts>2016-11-04 16:49:14 -0700</creation_ts>
          <short_desc>Support TouchBar in WebKit</short_desc>
          <delta_ts>2016-11-21 08:58:34 -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>WebKit Misc.</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>achristensen</cc>
    
    <cc>andersca</cc>
    
    <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jer.noble</cc>
    
    <cc>mitz</cc>
    
    <cc>sam</cc>
    
    <cc>thorton</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1248365</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-11-04 16:49:14 -0700</bug_when>
    <thetext>This bug tracks adding TouchBar support to WebKit.

rdar://problem/28876524</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248366</commentid>
    <comment_count>1</comment_count>
      <attachid>293959</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-11-04 16:52:43 -0700</bug_when>
    <thetext>Created attachment 293959
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248368</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-04 16:54:57 -0700</bug_when>
    <thetext>Attachment 293959 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:480:  Extra space in capture list.  [whitespace/brackets] [4]
ERROR: Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:531:  Missing space before ( in switch(  [whitespace/parens] [5]
ERROR: Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:1067:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/spi/cocoa/NSTouchBarSPI.h:41:  Should have space between @property and attributes.  [whitespace/property] [4]
ERROR: Source/WebCore/platform/spi/cocoa/NSTouchBarSPI.h:42:  Should have space between @property and attributes.  [whitespace/property] [4]
ERROR: Source/WebCore/platform/spi/cocoa/NSTouchBarSPI.h:43:  Should have space between @property and attributes.  [whitespace/property] [4]
ERROR: Source/WebCore/platform/spi/cocoa/NSTouchBarSPI.h:44:  Should have space between @property and attributes.  [whitespace/property] [4]
ERROR: Source/WebKit/mac/WebView/WebView.mm:717:  Extra space in capture list.  [whitespace/brackets] [4]
ERROR: Source/WebKit/mac/WebView/WebView.mm:765:  Missing space before ( in switch(  [whitespace/parens] [5]
ERROR: Source/WebCore/platform/spi/cocoa/AVKitSPI.h:150:  Should not have spaces around = in property attributes.  [whitespace/property] [4]
Total errors found: 10 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248376</commentid>
    <comment_count>3</comment_count>
      <attachid>293959</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2016-11-04 17:01:58 -0700</bug_when>
    <thetext>Comment on attachment 293959
Patch

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

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:176
&gt; +#if HAVE(TOUCH_BAR)

I think this would look less ugly as its own class extension (you can have as many as you want!) but either way is fine.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:4573
&gt; +    return NO;

If HAVE(TOUCH_BAR) is true, you return twice?

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:1505
&gt; +    return NO;

And here.

&gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:971
&gt; +            NSTextAlignment textAlignment;
&gt; +            switch (editorState.postLayoutData().textAlignment) {
&gt; +            case NoAlignment:
&gt; +                textAlignment = NSTextAlignmentNatural;
&gt; +                break;

Should factor this out. Maybe we already have one?

&gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:1111
&gt; +    CFNotificationCenterRemoveObserver(CFNotificationCenterGetLocalCenter(), this, (__bridge CFStringRef)NSTouchBarDidExitCustomization, 0);

__bridge? In non-ARC code?

&gt; Source/WebKit/mac/WebView/WebView.mm:5136
&gt; +#if HAVE(TOUCH_BAR)

Why not around the whole thing?

&gt; Source/WebKit/mac/WebView/WebView.mm:6865
&gt; +    NSRange resultRange = [nsResult range];

Dots.

&gt; Source/WebKit/mac/WebView/WebView.mm:6868
&gt; +    result.replacement = [nsResult replacementString];

Dots.

&gt; Source/WebKit/mac/WebView/WebView.mm:9465
&gt; +                NSTextAlignment textAlignment;
&gt; +                switch (style-&gt;textAlign()) {
&gt; +                case RIGHT:
&gt; +                case WEBKIT_RIGHT:
&gt; +                    textAlignment = NSTextAlignmentRight;

And again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248441</commentid>
    <comment_count>4</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-11-04 21:57:59 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 293959 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=293959&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:176
&gt; &gt; +#if HAVE(TOUCH_BAR)
&gt; 
&gt; I think this would look less ugly as its own class extension (you can have
&gt; as many as you want!) but either way is fine.
&gt; 

Good point. Fixed!

&gt; &gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:4573
&gt; &gt; +    return NO;
&gt; 
&gt; If HAVE(TOUCH_BAR) is true, you return twice?
&gt; 

Yeah, the compiler didn&apos;t complain, but I fixed it.

&gt; &gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:1505
&gt; &gt; +    return NO;
&gt; 
&gt; And here.
&gt; 

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:971
&gt; &gt; +            NSTextAlignment textAlignment;
&gt; &gt; +            switch (editorState.postLayoutData().textAlignment) {
&gt; &gt; +            case NoAlignment:
&gt; &gt; +                textAlignment = NSTextAlignmentNatural;
&gt; &gt; +                break;
&gt; 
&gt; Should factor this out. Maybe we already have one?
&gt; 

I don&apos;t believe it exists anywhere already. This will be a good follow-up.

&gt; &gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:1111
&gt; &gt; +    CFNotificationCenterRemoveObserver(CFNotificationCenterGetLocalCenter(), this, (__bridge CFStringRef)NSTouchBarDidExitCustomization, 0);
&gt; 
&gt; __bridge? In non-ARC code?
&gt; 

Good point. It&apos;s been bothering me that this uses CFNotificationCenter instead of NSNotificationCenter, so I have changed it to use NSNotificationCenter.

&gt; &gt; Source/WebKit/mac/WebView/WebView.mm:5136
&gt; &gt; +#if HAVE(TOUCH_BAR)
&gt; 
&gt; Why not around the whole thing?
&gt; 

Fixed.

&gt; &gt; Source/WebKit/mac/WebView/WebView.mm:6865
&gt; &gt; +    NSRange resultRange = [nsResult range];
&gt; 
&gt; Dots.
&gt; 

Fixed.

&gt; &gt; Source/WebKit/mac/WebView/WebView.mm:6868
&gt; &gt; +    result.replacement = [nsResult replacementString];
&gt; 
&gt; Dots.
&gt; 

Fixed.

&gt; &gt; Source/WebKit/mac/WebView/WebView.mm:9465
&gt; &gt; +                NSTextAlignment textAlignment;
&gt; &gt; +                switch (style-&gt;textAlign()) {
&gt; &gt; +                case RIGHT:
&gt; &gt; +                case WEBKIT_RIGHT:
&gt; &gt; +                    textAlignment = NSTextAlignmentRight;
&gt; 
&gt; And again.

Will do in follow-up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248442</commentid>
    <comment_count>5</comment_count>
      <attachid>293983</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-11-04 21:58:20 -0700</bug_when>
    <thetext>Created attachment 293983
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248443</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-04 22:00:27 -0700</bug_when>
    <thetext>Attachment 293983 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:480:  Extra space in capture list.  [whitespace/brackets] [4]
ERROR: Source/WebKit/mac/WebView/WebView.mm:717:  Extra space in capture list.  [whitespace/brackets] [4]
Total errors found: 2 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248446</commentid>
    <comment_count>7</comment_count>
      <attachid>293985</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-11-04 22:29:58 -0700</bug_when>
    <thetext>Created attachment 293985
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248447</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-04 22:32:31 -0700</bug_when>
    <thetext>Attachment 293985 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:480:  Extra space in capture list.  [whitespace/brackets] [4]
ERROR: Source/WebKit/mac/WebView/WebView.mm:717:  Extra space in capture list.  [whitespace/brackets] [4]
Total errors found: 2 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248448</commentid>
    <comment_count>9</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-11-04 22:41:53 -0700</bug_when>
    <thetext>iOS errors are pasted below. Why do we always get these nullability errors on lines of code that were not modified? All of the code I added to this header is even compiled out on iOS except for the gullibility specifiers that I added to get Mac to build.

/Volumes/Data/EWS/WebKit/Source/WebCore/platform/spi/cocoa/AVKitSPI.h:71:47: error: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Werror,-Wnullability-completeness]
@property (nonatomic, readonly) AVPlayerLayer *playerLayer;
                                              ^
/Volumes/Data/EWS/WebKit/Source/WebCore/platform/spi/cocoa/AVKitSPI.h:72:67: error: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Werror,-Wnullability-completeness]
@property (nonatomic, readonly) AVPictureInPicturePlayerLayerView *pictureInPicturePlayerLayerView;
                                                                  ^
/Volumes/Data/EWS/WebKit/Source/WebCore/platform/spi/cocoa/AVKitSPI.h:86:54: error: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Werror,-Wnullability-completeness]
- (BOOL)playerViewController:(AVPlayerViewController *)playerViewController shouldExitFullScreenWithReason:(AVPlayerViewControllerExitFullScreenReason)reason;
                                                     ^
/Volumes/Data/EWS/WebKit/Source/WebCore/platform/spi/cocoa/AVKitSPI.h:90:4: error: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Werror,-Wnullability-completeness]
- (instancetype)initWithPlayerLayerView:(__AVPlayerLayerView *)playerLayerView;
   ^
/Volumes/Data/EWS/WebKit/Source/WebCore/platform/spi/cocoa/AVKitSPI.h:90:62: error: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Werror,-Wnullability-completeness]
- (instancetype)initWithPlayerLayerView:(__AVPlayerLayerView *)playerLayerView;
                                                             ^
/Volumes/Data/EWS/WebKit/Source/WebCore/platform/spi/cocoa/AVKitSPI.h:91:98: error: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Werror,-Wnullability-completeness]
- (void)enterFullScreenAnimated:(BOOL)animated completionHandler:(void (^)(BOOL success, NSError *))completionHandler;
                                                                                                 ^
/Volumes/Data/EWS/WebKit/Source/WebCore/platform/spi/cocoa/AVKitSPI.h:91:73: error: block pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Werror,-Wnullability-completeness]
- (void)enterFullScreenAnimated:(BOOL)animated completionHandler:(void (^)(BOOL success, NSError *))completionHandler;
                                                                        ^
/Volumes/Data/EWS/WebKit/Source/WebCore/platform/spi/cocoa/AVKitSPI.h:92:97: error: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Werror,-Wnullability-completeness]
- (void)exitFullScreenAnimated:(BOOL)animated completionHandler:(void (^)(BOOL success, NSError *))completionHandler;
                                                                                                ^
/Volumes/Data/EWS/WebKit/Source/WebCore/platform/spi/cocoa/AVKitSPI.h:92:72: error: block pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Werror,-Wnullability-completeness]
- (void)exitFullScreenAnimated:(BOOL)animated completionHandler:(void (^)(BOOL success, NSError *))completionHandler;
                                                                       ^
/Volumes/Data/EWS/WebKit/Source/WebCore/platform/spi/cocoa/AVKitSPI.h:98:50: error: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Werror,-Wnullability-completeness]
@property (nonatomic, strong) AVPlayerController *playerController;
                                                 ^
10 errors generated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248449</commentid>
    <comment_count>10</comment_count>
    <who name="">mitz</who>
    <bug_when>2016-11-04 22:51:28 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; iOS errors are pasted below. Why do we always get these nullability errors
&gt; on lines of code that were not modified? All of the code I added to this
&gt; header is even compiled out on iOS except for the gullibility specifiers
&gt; that I added to get Mac to build.

If the compiler sees even one nullability specifier in a file, it enforces the use of nullability specifiers everywhere in the file.

The solution is normally to wrap the *SPI.h header in NS_ASSUME_NONNULL_BEGIN/END, assuming the headers it’s replicating have those wrappers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248450</commentid>
    <comment_count>11</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-11-04 23:06:44 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; iOS errors are pasted below. Why do we always get these nullability errors
&gt; &gt; on lines of code that were not modified? All of the code I added to this
&gt; &gt; header is even compiled out on iOS except for the gullibility specifiers
&gt; &gt; that I added to get Mac to build.
&gt; 
&gt; If the compiler sees even one nullability specifier in a file, it enforces
&gt; the use of nullability specifiers everywhere in the file.
&gt; 
&gt; The solution is normally to wrap the *SPI.h header in
&gt; NS_ASSUME_NONNULL_BEGIN/END, assuming the headers it’s replicating have
&gt; those wrappers.

OOooOooOooooO</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248451</commentid>
    <comment_count>12</comment_count>
      <attachid>293986</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-11-04 23:08:14 -0700</bug_when>
    <thetext>Created attachment 293986
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248452</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-04 23:09:52 -0700</bug_when>
    <thetext>Attachment 293986 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:480:  Extra space in capture list.  [whitespace/brackets] [4]
ERROR: Source/WebKit/mac/WebView/WebView.mm:717:  Extra space in capture list.  [whitespace/brackets] [4]
Total errors found: 2 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248453</commentid>
    <comment_count>14</comment_count>
      <attachid>293987</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-11-04 23:33:35 -0700</bug_when>
    <thetext>Created attachment 293987
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248454</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-04 23:34:58 -0700</bug_when>
    <thetext>Attachment 293987 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:480:  Extra space in capture list.  [whitespace/brackets] [4]
ERROR: Source/WebKit/mac/WebView/WebView.mm:717:  Extra space in capture list.  [whitespace/brackets] [4]
Total errors found: 2 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248455</commentid>
    <comment_count>16</comment_count>
      <attachid>293988</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-11-04 23:39:21 -0700</bug_when>
    <thetext>Created attachment 293988
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248456</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-04 23:42:01 -0700</bug_when>
    <thetext>Attachment 293988 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:480:  Extra space in capture list.  [whitespace/brackets] [4]
ERROR: Source/WebKit/mac/WebView/WebView.mm:717:  Extra space in capture list.  [whitespace/brackets] [4]
Total errors found: 2 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248457</commentid>
    <comment_count>18</comment_count>
      <attachid>293989</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-11-04 23:47:39 -0700</bug_when>
    <thetext>Created attachment 293989
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248458</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-04 23:48:54 -0700</bug_when>
    <thetext>Attachment 293989 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:480:  Extra space in capture list.  [whitespace/brackets] [4]
ERROR: Source/WebKit/mac/WebView/WebView.mm:717:  Extra space in capture list.  [whitespace/brackets] [4]
Total errors found: 2 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248459</commentid>
    <comment_count>20</comment_count>
      <attachid>293990</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-11-04 23:58:45 -0700</bug_when>
    <thetext>Created attachment 293990
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248460</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-05 00:00:01 -0700</bug_when>
    <thetext>Attachment 293990 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:480:  Extra space in capture list.  [whitespace/brackets] [4]
ERROR: Source/WebKit/mac/WebView/WebView.mm:717:  Extra space in capture list.  [whitespace/brackets] [4]
Total errors found: 2 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248555</commentid>
    <comment_count>22</comment_count>
      <attachid>293990</attachid>
    <who name="">mitz</who>
    <bug_when>2016-11-05 15:37:29 -0700</bug_when>
    <thetext>Comment on attachment 293990
Patch

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

&gt; Source/WebCore/platform/spi/cocoa/NSTouchBarSPI.h:27
&gt; +#if USE(APPLE_INTERNAL_SDK) &amp;&amp; HAVE(TOUCH_BAR)

Should this entire header be guarded with HAVE(TOUCH_BAR) regardless of whether you’re using the Apple-internal SDK? Seems unnecessary to have these Touch Bar things declared when the feature is not available.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:4590
&gt; +    if (!_impl-&gt;clientWantsMediaPlaybackControlsView())
&gt; +        return nil;
&gt; +    return _impl-&gt;mediaPlaybackControlsView();

Maybe write this as a single return statement using the ternary operator?

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:4602
&gt; +- (void)_addMediaPlaybackControlsView:(AVFunctionBarScrubber *)mediaPlaybackControlsView
&gt; +{
&gt; +}
&gt; +
&gt; +- (void)_removeMediaPlaybackControlsView
&gt; +{
&gt; +}

Maybe comment in these that they are for subclasses to override.

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:1522
&gt; +    if (!_data-&gt;_impl-&gt;clientWantsMediaPlaybackControlsView())
&gt; +        return nil;
&gt; +    return _data-&gt;_impl-&gt;mediaPlaybackControlsView();

Maybe write this as a single return statement using the ternary operator?

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:1534
&gt; +- (void)_addMediaPlaybackControlsView:(AVFunctionBarScrubber *)mediaPlaybackControlsView
&gt; +{
&gt; +}
&gt; +
&gt; +- (void)_removeMediaPlaybackControlsView
&gt; +{
&gt; +}

Maybe comment in these that they are for subclasses to override.

&gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.h:491
&gt; +    void updateTouchBar();

Can this be in the HAVE(TOUCH_BAR) section so that you don’t have to add an empty implementation below?

&gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:107
&gt; +NSString * const WKMediaExitFullScreenItem = @&quot;WKMediaExitFullScreenItem&quot;;

Should this be static? Doesn’t seem to need external linkage.

&gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:451
&gt; +    ListType _currentListType;
&gt; +

Can this be @private too? Do you even need to declare it if you @synthesize it?

&gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:467
&gt; +static const double listControlSegmentWidth = 67;
&gt; +static const double exitFullScreenButtonWidth = 64;

These should be CGFloat.

&gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:471
&gt; +static const unsigned noListSegment = 0;
&gt; +static const unsigned unorderedListSegment = 1;
&gt; +static const unsigned orderedListSegment = 2;

And these should be NSUInteger.

&gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:493
&gt; +    [[segments objectAtIndex:noListSegment] accessibilitySetOverrideValue:WebCore::insertListTypeNone() forAttribute:NSAccessibilityDescriptionAttribute];
&gt; +    [[segments objectAtIndex:unorderedListSegment] accessibilitySetOverrideValue:WebCore::insertListTypeBulletedAccessibilityTitle() forAttribute:NSAccessibilityDescriptionAttribute];
&gt; +    [[segments objectAtIndex:orderedListSegment] accessibilitySetOverrideValue:WebCore::insertListTypeNumberedAccessibilityTitle() forAttribute:NSAccessibilityDescriptionAttribute];

You can use array subscripting instead of -objectAtIndex: here:

&gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:512
&gt; +    if (insertListControl.selectedSegment == noListSegment) {

Maybe use a switch statement here (and thus also avoid calling -selectedSegment up to three times).

&gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:554
&gt; +    BOOL _textIsBold;
&gt; +    BOOL _textIsItalic;
&gt; +    BOOL _textIsUnderlined;
&gt; +    NSTextAlignment _currentTextAlignment;
&gt; +    RetainPtr&lt;NSColor&gt; _textColor;
&gt; +    RetainPtr&lt;WKTextListTouchBarViewController&gt; _wkTextListTouchBarViewController;

Can these all be @private too? Can you omit the ones that you @synthesize?
Probably don’t need wk in the name of the last one.

&gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:642
&gt; +    _webViewImpl-&gt;handleAcceptedCandidate((NSTextCheckingResult *)candidate);

I’d just declare candidate as NSTextCheckingResult * and avoid the cast here.

&gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:688
&gt; +    return (WKTextListTouchBarViewController *)[self textListViewController];

.textListViewController

&gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:744
&gt; +    NSTextAlignment alignment = (NSTextAlignment)[self.textAlignments.cell tagForSegment:[self.textAlignments selectedSegment]];

.selectedSegment

&gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:802
&gt; +namespace WebKit {

Newline after?

&gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:844
&gt; +        if ([[item identifier] isEqualToString:NSTouchBarItemIdentifierTextFormat]) {

.identifier

&gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:845
&gt; +            for (NSTouchBarItem *childItem in [(NSGroupTouchBarItem *)item groupTouchBar].items) {

.groupTouchBar

&gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:889
&gt; +    [touchBar setDefaultItems:[NSMutableSet setWithObjects:isRichTextTouchBar ? m_richTextCandidateListTouchBarItem.get() : m_plainTextCandidateListTouchBarItem.get(), nil]];

Can use setWithObject: and drop the trailing nil.

&gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:959
&gt; +        if (!m_emptyCandidatesArray)
&gt; +            m_emptyCandidatesArray = adoptNS([[NSArray alloc] init]);
&gt; +        [candidateListTouchBarItem() setCandidates:m_emptyCandidatesArray.get() forSelectedRange:NSMakeRange(0, 0) inString:nil];

Why do we need a member variable for the empty NSArray? Pretty sure @[ ] works just as well, and is always the same object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248684</commentid>
    <comment_count>23</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-11-06 21:29:02 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; Comment on attachment 293990 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=293990&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/spi/cocoa/NSTouchBarSPI.h:27
&gt; &gt; +#if USE(APPLE_INTERNAL_SDK) &amp;&amp; HAVE(TOUCH_BAR)
&gt; 
&gt; Should this entire header be guarded with HAVE(TOUCH_BAR) regardless of
&gt; whether you’re using the Apple-internal SDK? Seems unnecessary to have these
&gt; Touch Bar things declared when the feature is not available.
&gt; 

Yes, I think so. Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:4590
&gt; &gt; +    if (!_impl-&gt;clientWantsMediaPlaybackControlsView())
&gt; &gt; +        return nil;
&gt; &gt; +    return _impl-&gt;mediaPlaybackControlsView();
&gt; 
&gt; Maybe write this as a single return statement using the ternary operator?
&gt; 

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:4602
&gt; &gt; +- (void)_addMediaPlaybackControlsView:(AVFunctionBarScrubber *)mediaPlaybackControlsView
&gt; &gt; +{
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +- (void)_removeMediaPlaybackControlsView
&gt; &gt; +{
&gt; &gt; +}
&gt; 
&gt; Maybe comment in these that they are for subclasses to override.
&gt; 

Added comments.

&gt; &gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:1522
&gt; &gt; +    if (!_data-&gt;_impl-&gt;clientWantsMediaPlaybackControlsView())
&gt; &gt; +        return nil;
&gt; &gt; +    return _data-&gt;_impl-&gt;mediaPlaybackControlsView();
&gt; 
&gt; Maybe write this as a single return statement using the ternary operator?
&gt; 

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:1534
&gt; &gt; +- (void)_addMediaPlaybackControlsView:(AVFunctionBarScrubber *)mediaPlaybackControlsView
&gt; &gt; +{
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +- (void)_removeMediaPlaybackControlsView
&gt; &gt; +{
&gt; &gt; +}
&gt; 
&gt; Maybe comment in these that they are for subclasses to override.
&gt; 

Added comments.

&gt; &gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.h:491
&gt; &gt; +    void updateTouchBar();
&gt; 
&gt; Can this be in the HAVE(TOUCH_BAR) section so that you don’t have to add an
&gt; empty implementation below?
&gt; 

Yes, fixed. 

&gt; &gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:107
&gt; &gt; +NSString * const WKMediaExitFullScreenItem = @&quot;WKMediaExitFullScreenItem&quot;;
&gt; 
&gt; Should this be static? Doesn’t seem to need external linkage.
&gt; 

Sure.

&gt; &gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:451
&gt; &gt; +    ListType _currentListType;
&gt; &gt; +
&gt; 
&gt; Can this be @private too? Do you even need to declare it if you @synthesize
&gt; it?
&gt; 

Looks like @synthesize takes care of it!

&gt; &gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:467
&gt; &gt; +static const double listControlSegmentWidth = 67;
&gt; &gt; +static const double exitFullScreenButtonWidth = 64;
&gt; 
&gt; These should be CGFloat.

Fixed.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:471
&gt; &gt; +static const unsigned noListSegment = 0;
&gt; &gt; +static const unsigned unorderedListSegment = 1;
&gt; &gt; +static const unsigned orderedListSegment = 2;
&gt; 
&gt; And these should be NSUInteger.
&gt; 

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:493
&gt; &gt; +    [[segments objectAtIndex:noListSegment] accessibilitySetOverrideValue:WebCore::insertListTypeNone() forAttribute:NSAccessibilityDescriptionAttribute];
&gt; &gt; +    [[segments objectAtIndex:unorderedListSegment] accessibilitySetOverrideValue:WebCore::insertListTypeBulletedAccessibilityTitle() forAttribute:NSAccessibilityDescriptionAttribute];
&gt; &gt; +    [[segments objectAtIndex:orderedListSegment] accessibilitySetOverrideValue:WebCore::insertListTypeNumberedAccessibilityTitle() forAttribute:NSAccessibilityDescriptionAttribute];
&gt; 
&gt; You can use array subscripting instead of -objectAtIndex: here:
&gt; 

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:512
&gt; &gt; +    if (insertListControl.selectedSegment == noListSegment) {
&gt; 
&gt; Maybe use a switch statement here (and thus also avoid calling
&gt; -selectedSegment up to three times).
&gt; 

Went with a switch.

&gt; &gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:554
&gt; &gt; +    BOOL _textIsBold;
&gt; &gt; +    BOOL _textIsItalic;
&gt; &gt; +    BOOL _textIsUnderlined;
&gt; &gt; +    NSTextAlignment _currentTextAlignment;
&gt; &gt; +    RetainPtr&lt;NSColor&gt; _textColor;
&gt; &gt; +    RetainPtr&lt;WKTextListTouchBarViewController&gt; _wkTextListTouchBarViewController;
&gt; 
&gt; Can these all be @private too? Can you omit the ones that you @synthesize?
&gt; Probably don’t need wk in the name of the last one.
&gt; 

I made them @private. The compiler wasn&apos;t happy with just @synthesize.

&gt; &gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:642
&gt; &gt; +    _webViewImpl-&gt;handleAcceptedCandidate((NSTextCheckingResult *)candidate);
&gt; 
&gt; I’d just declare candidate as NSTextCheckingResult * and avoid the cast here.
&gt; 

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:688
&gt; &gt; +    return (WKTextListTouchBarViewController *)[self textListViewController];
&gt; 
&gt; .textListViewController
&gt; 

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:744
&gt; &gt; +    NSTextAlignment alignment = (NSTextAlignment)[self.textAlignments.cell tagForSegment:[self.textAlignments selectedSegment]];
&gt; 
&gt; .selectedSegment
&gt; 

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:802
&gt; &gt; +namespace WebKit {
&gt; 
&gt; Newline after?
&gt; 

Added.

&gt; &gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:844
&gt; &gt; +        if ([[item identifier] isEqualToString:NSTouchBarItemIdentifierTextFormat]) {
&gt; 
&gt; .identifier
&gt; 

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:845
&gt; &gt; +            for (NSTouchBarItem *childItem in [(NSGroupTouchBarItem *)item groupTouchBar].items) {
&gt; 
&gt; .groupTouchBar
&gt; 

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:889
&gt; &gt; +    [touchBar setDefaultItems:[NSMutableSet setWithObjects:isRichTextTouchBar ? m_richTextCandidateListTouchBarItem.get() : m_plainTextCandidateListTouchBarItem.get(), nil]];
&gt; 
&gt; Can use setWithObject: and drop the trailing nil.
&gt; 

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:959
&gt; &gt; +        if (!m_emptyCandidatesArray)
&gt; &gt; +            m_emptyCandidatesArray = adoptNS([[NSArray alloc] init]);
&gt; &gt; +        [candidateListTouchBarItem() setCandidates:m_emptyCandidatesArray.get() forSelectedRange:NSMakeRange(0, 0) inString:nil];
&gt; 
&gt; Why do we need a member variable for the empty NSArray? Pretty sure @[ ]
&gt; works just as well, and is always the same object.

So, it turns out this is broken! But @[ ] is equally broken. I think I will leave it as-if for now, and fix it with a follow-up, at which time, maybe @[ ] will work.

Patch coming soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248685</commentid>
    <comment_count>24</comment_count>
      <attachid>294046</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-11-06 21:37:34 -0800</bug_when>
    <thetext>Created attachment 294046
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248686</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-06 21:38:59 -0800</bug_when>
    <thetext>Attachment 294046 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:478:  Extra space in capture list.  [whitespace/brackets] [4]
ERROR: Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:510:  Missing space before ( in switch(  [whitespace/parens] [5]
ERROR: Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:894:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/mac/WebView/WebView.mm:715:  Extra space in capture list.  [whitespace/brackets] [4]
ERROR: Source/WebKit/mac/WebView/WebView.mm:9286:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 5 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248786</commentid>
    <comment_count>26</comment_count>
      <attachid>294046</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2016-11-07 10:42:38 -0800</bug_when>
    <thetext>Comment on attachment 294046
Patch

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

&gt; Source/WebKit/mac/WebView/WebView.mm:9577
&gt; +- (void)webViewAdditionsWillDestroyView

Could we rename this to -webViewWillDestroyView? (It looks like the &quot;Additions&quot; terminology is being dropped from other places).
Alternately, maybe we don&apos;t need a separate function on the WebView for performing cleanup in -[WebView dealloc] -- I think it makes sense just to move the cleanup logic directly to -dealloc and remove the -webViewWillDestroyView helper.

This also applies to the WebKit2 case (webViewImplAdditionsWillDestroyView)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248912</commentid>
    <comment_count>27</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-11-07 17:36:47 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; Comment on attachment 294046 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=294046&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/mac/WebView/WebView.mm:9577
&gt; &gt; +- (void)webViewAdditionsWillDestroyView
&gt; 
&gt; Could we rename this to -webViewWillDestroyView? (It looks like the
&gt; &quot;Additions&quot; terminology is being dropped from other places).
&gt; Alternately, maybe we don&apos;t need a separate function on the WebView for
&gt; performing cleanup in -[WebView dealloc] -- I think it makes sense just to
&gt; move the cleanup logic directly to -dealloc and remove the
&gt; -webViewWillDestroyView helper.
&gt; 
&gt; This also applies to the WebKit2 case (webViewImplAdditionsWillDestroyView)

Good find. I removed the functions entirely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248913</commentid>
    <comment_count>28</comment_count>
      <attachid>294107</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-11-07 17:37:13 -0800</bug_when>
    <thetext>Created attachment 294107
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248914</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-07 17:39:38 -0800</bug_when>
    <thetext>Attachment 294107 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:478:  Extra space in capture list.  [whitespace/brackets] [4]
ERROR: Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:510:  Missing space before ( in switch(  [whitespace/parens] [5]
ERROR: Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:894:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/mac/WebView/WebView.mm:715:  Extra space in capture list.  [whitespace/brackets] [4]
ERROR: Source/WebKit/mac/WebView/WebView.mm:9286:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 5 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248980</commentid>
    <comment_count>30</comment_count>
      <attachid>294107</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-11-07 22:54:04 -0800</bug_when>
    <thetext>Comment on attachment 294107
Patch

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

&gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:750
&gt; +    case NSTextAlignmentLeft: {

No need for these braces.

&gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:755
&gt; +    case NSTextAlignmentRight: {

Ditto.

&gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:760
&gt; +    case NSTextAlignmentCenter: {

Ditto.

&gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:765
&gt; +    case NSTextAlignmentJustified: {

Ditto.

&gt; Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm:1043
&gt; +            NSTextAlignment textAlignment;
&gt; +            switch (editorState.postLayoutData().textAlignment) {
&gt; +            case NoAlignment:
&gt; +                textAlignment = NSTextAlignmentNatural;
&gt; +                break;
&gt; +            case LeftAlignment:
&gt; +                textAlignment = NSTextAlignmentLeft;
&gt; +                break;
&gt; +            case RightAlignment:
&gt; +                textAlignment = NSTextAlignmentRight;
&gt; +                break;
&gt; +            case CenterAlignment:
&gt; +                textAlignment = NSTextAlignmentCenter;
&gt; +                break;
&gt; +            case JustifiedAlignment:
&gt; +                textAlignment = NSTextAlignmentJustified;
&gt; +                break;
&gt; +            }

I’d like to see a helper function, inlined probably, for this conversion, so we can do things like ASSERT_NOT_REACHED if it’s an unknown value rather than leaving the textAlignment uninitialized, and also so the large switch statement isn’t so distracting in the middle of the code.

&gt; Source/WebKit/mac/WebView/WebView.mm:901
&gt; +    case NSTextAlignmentLeft: {

No braces needed here.

&gt; Source/WebKit/mac/WebView/WebView.mm:906
&gt; +    case NSTextAlignmentRight: {

Ditto.

&gt; Source/WebKit/mac/WebView/WebView.mm:911
&gt; +    case NSTextAlignmentCenter: {

Ditto.

&gt; Source/WebKit/mac/WebView/WebView.mm:916
&gt; +    case NSTextAlignmentJustified: {

Ditto.

&gt; Source/WebKit/mac/WebView/WebView.mm:6863
&gt; +    switch ([nsResult resultType]) {
&gt; +    case NSTextCheckingTypeSpelling:
&gt; +        result.type = WebCore::TextCheckingTypeSpelling;
&gt; +        break;
&gt; +    case NSTextCheckingTypeReplacement:
&gt; +        result.type = WebCore::TextCheckingTypeReplacement;
&gt; +        break;
&gt; +    case NSTextCheckingTypeCorrection:
&gt; +        result.type = WebCore::TextCheckingTypeCorrection;
&gt; +        break;
&gt; +    default:
&gt; +        result.type = WebCore::TextCheckingTypeNone;
&gt; +    }

Helper function for this conversion?

&gt; Source/WebKit/mac/WebView/WebView.mm:9484
&gt; +                NSTextAlignment textAlignment;
&gt; +                switch (style-&gt;textAlign()) {
&gt; +                case RIGHT:
&gt; +                case WEBKIT_RIGHT:
&gt; +                    textAlignment = NSTextAlignmentRight;
&gt; +                    break;
&gt; +                case LEFT:
&gt; +                case WEBKIT_LEFT:
&gt; +                    textAlignment = NSTextAlignmentLeft;
&gt; +                    break;
&gt; +                case CENTER:
&gt; +                case WEBKIT_CENTER:
&gt; +                    textAlignment = NSTextAlignmentCenter;
&gt; +                    break;
&gt; +                case JUSTIFY:
&gt; +                    textAlignment = NSTextAlignmentJustified;
&gt; +                    break;
&gt; +                case TASTART:
&gt; +                    textAlignment = style-&gt;isLeftToRightDirection() ? NSTextAlignmentLeft : NSTextAlignmentRight;
&gt; +                    break;
&gt; +                case TAEND:
&gt; +                    textAlignment = style-&gt;isLeftToRightDirection() ? NSTextAlignmentRight : NSTextAlignmentLeft;
&gt; +                    break;
&gt; +                }

Helper function for this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249118</commentid>
    <comment_count>31</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-11-08 13:28:11 -0800</bug_when>
    <thetext>Thanks Darin! I have incorporated your feedback, and I&apos;m ready to land the patch when possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249375</commentid>
    <comment_count>32</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-11-09 11:19:49 -0800</bug_when>
    <thetext>https://trac.webkit.org/changeset/208452</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253242</commentid>
    <comment_count>33</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-11-21 08:58:34 -0800</bug_when>
    <thetext>Fixed CMake build in http://trac.webkit.org/changeset/208949</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293959</attachid>
            <date>2016-11-04 16:52:43 -0700</date>
            <delta_ts>2016-11-04 21:58:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>117748</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE2LTExLTA0ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBTdXBwb3J0IFRvdWNoQmFyIGluIFdl
YktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0
NDM3CisgICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0v
Mjg4NzY1MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9y
bS9zcGkvY29jb2EvQVZLaXRTUEkuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcGkvY29jb2EvTlNU
b3VjaEJhclNQSS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxD
aGVja2VyU1BJLmg6CisKIDIwMTYtMTEtMDQgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgogCiAgICAgICAgIEluZGV4ZWREQiAyLjA6IENsZWFuIHVwIG1vcmUgdHJhbnNhY3Rpb24g
YWJvcnQgYW5kIGV4Y2VwdGlvbiB0aHJvd2luZyBiZWhhdmlvciBmcm9tIElEQk9iamVjdFN0b3Jl
LgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMjA4NDA1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNTY0LDEwICsxNTY0LDEw
IEBACiAJCTQxNjJBNDU3MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQxNjJBNDU1MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
LmNwcCAqLzsgfTsKIAkJNDE2MkE0NTgxMDExNDY0NzAwREZGM0VEIC8qIEpTRGVkaWNhdGVkV29y
a2VyR2xvYmFsU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQxNjJBNDU2MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlLmggKi87IH07CiAJCTQxNkUyOUE2MTAyRkE5NjIwMDdGQzE0RSAvKiBXb3JrZXJSZXBv
cnRpbmdQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDE2RTI5QTUxMDJGQTk2MjAwN0ZDMTRFIC8qIFdvcmtlclJlcG9ydGluZ1Byb3h5LmggKi87
IH07CisJCTQxNkU2RkU4MUJCRDEyREYwMDBBM0Y2NCAvKiBSZWFkYWJsZVN0cmVhbUludGVybmFs
c0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTQxNkU2RkU4MUJCRDEyREYwMDBBNjAyMyAvKiBGZXRjaEludGVybmFsc0J1aWx0aW5zLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMx
MTBEMDBCNzY0QjkgLyogRmV0Y2hJbnRlcm5hbHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjAz
MyAvKiBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEM5IC8qIFN0cmVhbUlu
dGVybmFsc0J1aWx0aW5zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJNDE2RTZGRTgxQkJEMTJERjAwMEEzRjY0IC8qIFJlYWRhYmxlQnl0ZVN0cmVh
bUludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVCeXRlU3RyZWFt
SW50ZXJuYWxzQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQk0MTZFNkZFODFCQkQxMkRGMDAwQTYwNDMgLyogUmVhZGFibGVTdHJlYW1J
bnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOUIwM0Q4MDYxQkIzMTEwRDAwQjczRjY0IC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJu
YWxzQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk0MTZFNkZFODFCQkQxMkRGMDAwQTYwNDMgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50
ZXJuYWxzQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRl
cm5hbHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjA1MyAvKiBXcml0YWJsZVN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RTkgLyogV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNC
dWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTQxNkU2RkU5MUJCRDEyRTUwMDBBNjA0MyAvKiBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFC
QjMxMTBEMDBCNzY0RDggLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxNkU2RkU5MUJCRDEyRTUwMDBB
NjA1MyAvKiBXcml0YWJsZVN0cmVhbUJ1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RTggLyogV3JpdGFi
bGVTdHJlYW1CdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0yNTkwLDggKzI1OTAsOCBAQAogCQk2QjY5M0EyRTFDNTFBODJFMDBCMDNC
RUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZCNjkzQTJEMUM1MUE4MkUwMEIwM0JFRiAvKiBSZXNvdXJjZUxv
YWRPYnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTZCNjkzQTM0MUM1MUE5NUQwMEIwM0JFRiAvKiBSZXNvdXJjZUxvYWRPYnNlcnZlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QjY5M0Ez
MzFDNTFBOTVEMDBCMDNCRUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwICovOyB9OwogCQk2
QzRDOTZERTFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNEM5
NkRBMUFENDQ4MzUwMDM2M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuY3Bw
ICovOyB9OwotCQk2QzRDOTZERjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJl
YW1Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2QzRDOTZEQjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250
cm9sbGVyLmggKi87IH07CiAJCTZDNEM5NkRFMUFENDQ4MzUwMDM2NUE1MCAvKiBKU1JlYWRhYmxl
U3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkM0Qzk2REExQUQ0NDgzNTAwMzY1QTUwIC8qIEpTUmVhZGFibGVT
dHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHAgKi87IH07CisJCTZDNEM5NkRGMUFENDQ4MzUwMDM2
M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNEM5NkRCMUFENDQ4MzUwMDM2M0Y2NCAv
KiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaCAqLzsgfTsKIAkJNkM0Qzk2REYxQUQ0
NDgzNTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0Qzk2REIxQUQ0NDgz
NTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5oICovOyB9Owog
CQk2QzYzODg5NUE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlh
dG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM2
Mzg4OTNBOTZDQ0VFNTBDOEM5NDZDIC8qIENhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2QzYz
ODg5NkE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzYzODg5
NEE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5jcHAg
Ki87IH07CkBAIC0zMjc0LDYgKzMyNzQsNyBAQAogCQk5MzMwOUVBMzA5OUVCNzhDMDA1NkU1ODEg
LyogU2hhcmVkVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzMzA5RUEwMDk5RUI3OEMwMDU2RTU4MSAvKiBTaGFyZWRUaW1lci5oICovOyB9Owog
CQk5MzMwOUVBNDA5OUVCNzhDMDA1NkU1ODEgLyogVGltZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlFQTEwOTlFQjc4QzAwNTZFNTgxIC8q
IFRpbWVyLmNwcCAqLzsgfTsKIAkJOTMzNTRBM0MwQjI0RjhDOTAwM0Y2REVBIC8qIFVJRXZlbnRX
aXRoS2V5U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTMzNTRBM0IwQjI0RjhDOTAwM0Y2REVBIC8qIFVJRXZlbnRXaXRoS2V5U3RhdGUuY3Bw
ICovOyB9OworCQk5MzM1QjQ5RDFEQ0JFRjdDMDBFRDQ2OEUgLyogTlNUb3VjaEJhclNQSS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzNUI0OUIxRENC
RUY3MTAwRUQ0NjhFIC8qIE5TVG91Y2hCYXJTUEkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5MzNBMTQyRTBCN0QxODg2MDBBNTNGRkQgLyogVGV4
dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzM0ExNDJCMEI3RDE4ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuY3BwICovOyB9OwogCQk5MzNB
MTQzMDBCN0QxODg2MDBBNTNGRkQgLyogVGV4dEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzNBMTQyRDBCN0QxODg2MDBBNTNGRkQgLyogVGV4
dEV2ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJOTMzQTE0QjgwQjdEMUQ1MjAwQTUzRkZEIC8qIEpTVGV4dEV2ZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzM0ExNEI2MEI3RDFENTIwMEE1
M0ZGRCAvKiBKU1RleHRFdmVudC5jcHAgKi87IH07CkBAIC05NzgyLDggKzk3ODMsOCBAQAogCQk2
QjY5M0EyRDFDNTFBODJFMDBCMDNCRUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkI2OTNBMzMxQzUxQTk1RDAwQjAzQkVGIC8qIFJlc291
cmNlTG9hZE9ic2VydmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlc291cmNlTG9hZE9ic2VydmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NkM0Qzk2REExQUQ0NDgzNTAwMzYzRjY0IC8qIEpTUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1JlYWRhYmxlQnl0
ZVN0cmVhbUNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzRD
OTZEQjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUmVhZGFibGVCeXRlU3RyZWFtQ29u
dHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QzRDOTZEQTFBRDQ0ODM1
MDAzNjVBNTAgLyogSlNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29u
dHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZDNEM5NkRCMUFENDQ4
MzUwMDM2M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZDNEM5NkRCMUFENDQ4MzUwMDM2NUE1MCAv
KiBKU1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZDNjM4ODkzQTk2Q0NFRTUwQzhDOTQ2QyAvKiBDYWNo
ZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTZDNjM4ODk0QTk2Q0NFRTUwQzhDOTQ2QyAvKiBDYWNoZWRSZXNvdXJj
ZVJlcXVlc3RJbml0aWF0b3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTEwNzIyLDYgKzEwNzIzLDcgQEAKIAkJOTMzMkFCOEIxNjUzQTk3OTAw
RDgyN0VDIC8qIEZFTGlnaHRpbmdORU9OLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZFTGlnaHRpbmdORU9OLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMzJB
QjhDMTY1M0E5NzkwMEQ4MjdFQyAvKiBORU9OSGVscGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBORU9OSGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5MzM1NEEzQjBCMjRGOEM5MDAzRjZERUEgLyogVUlFdmVudFdpdGhLZXlTdGF0ZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVSUV2ZW50V2l0aEtleVN0YXRlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTMzNUI0OUIxRENCRUY3MTAwRUQ0NjhF
IC8qIE5TVG91Y2hCYXJTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTlNU
b3VjaEJhclNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzNBMTQyQjBCN0Qx
ODg2MDBBNTNGRkQgLyogVGV4dEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFRleHRFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkz
M0ExNDJDMEI3RDE4ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFRleHRFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzM0Ex
NDJEMEI3RDE4ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGV4dEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MTE3NSw4ICsxMTE3Nyw4IEBACiAJCTk5MDhCMEYwMUJDQUNGOTEwMEVEM0Y2NCAvKiBSZWFkYWJs
ZUJ5dGVTdHJlYW1Db250cm9sbGVyLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0
OyBwYXRoID0gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlci5qczsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTkwOEIwRjExQkNBQ0Y5MTAwRUQwRjU1IC8qIFN0cmVhbUludGVybmFs
cy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFN0cmVhbUludGVy
bmFscy5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkwOEIwRjExQkNBQ0Y5MTAw
RUQwRjY1IC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzLmpzICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVhZGFibGVTdHJlYW1JbnRlcm5hbHMuanM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk5MDhCMEYxMUJDQUNGOTEwMEVEM0Y2NCAvKiBSZWFkYWJs
ZUJ5dGVTdHJlYW1JbnRlcm5hbHMuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7
IHBhdGggPSBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHMuanM7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTk5MDhCMEYxMUJDQUNGOTEwMEVEMEY3NSAvKiBXcml0YWJsZVN0cmVhbUlu
dGVybmFscy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFdyaXRh
YmxlU3RyZWFtSW50ZXJuYWxzLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OTA4
QjBGMTFCQ0FDRjkxMDBFRDNGNjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzLmpzICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVhZGFibGVCeXRlU3RyZWFt
SW50ZXJuYWxzLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGMjFCQ0FD
RjkxMDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyLmpzICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVy
LmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGMzFCQ0FDRkZFMDBFRDBG
NjUgLyogQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJ5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3lCdWlsdGlu
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5MDhCMEY1MUJDQUQwN0QwMEVE
MEY2NSAvKiBCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5QnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTE4NCwxNSArMTExODYsMTMgQEAKIAkJ
OTkwOEIwRjcxQkNBRDA3RDAwRUQwRjY1IC8qIENvdW50UXVldWluZ1N0cmF0ZWd5QnVpbHRpbnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ291bnRRdWV1aW5nU3RyYXRlZ3lC
dWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGOTFCQ0FEMDdE
MDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkwOEIwRjkxQkNBRDA3RDAwRUQwRjc1IC8qIFdyaXRhYmxl
U3RyZWFtQnVpbHRpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V3JpdGFibGVTdHJlYW1CdWlsdGlucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTk5MDhCMEZBMUJDQUQwN0QwMEVEM0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVy
QnVpbHRpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFi
bGVCeXRlU3RyZWFtQ29udHJvbGxlckJ1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJOTkwOEIwRkIxQkNBRDA3RDAwRUQzRjY0IC8qIFJlYWRhYmxlQnl0ZVN0cmVhbUNv
bnRyb2xsZXJCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFk
YWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQnVpbHRpbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTkwOEIwRkExQkNBRDA3RDAwRUQwRjY1IC8qIFJlYWRhYmxlU3RyZWFtRGVmYXVs
dENvbnRyb2xsZXJCdWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQnVpbHRpbnMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGQjFCQ0FEMDdEMDBFRDBGNjUgLyogUmVhZGFi
bGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckJ1aWx0aW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJCdWlsdGlucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGRDFCQ0FEMDdEMDBFRDBGNDUgLyog
RmV0Y2hJbnRlcm5hbHNCdWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGZXRjaEludGVybmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTkwOEIwRkQxQkNBRDA3RDAwRUQwRjU1IC8qIFN0cmVhbUludGVybmFsc0J1aWx0
aW5zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTkwOEIwRkQx
QkNBRDA3RDAwRUQzRjY0IC8qIFJlYWRhYmxlQnl0ZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlYWRhYmxlQnl0ZVN0cmVh
bUludGVybmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkw
OEIwRkQxQkNBRDA3RDAwRUQwRjY1IC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFibGVTdHJlYW1J
bnRlcm5hbHNCdWlsdGlucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5MDhC
MEZEMUJDQUQwN0QwMEVEMEY3NSAvKiBXcml0YWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdyaXRhYmxlU3RyZWFtSW50
ZXJuYWxzQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OTA4QjBG
RDFCQ0FEMDdEMDBFRDNGNjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFibGVCeXRlU3Ry
ZWFtSW50ZXJuYWxzQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
OTA4QjBGRTFCQ0FEMDdEMDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyQnVp
bHRpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFibGVT
dHJlYW1EZWZhdWx0UmVhZGVyQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5OTA4QjBGRjFCQ0FEMDdEMDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVh
ZGVyQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVhZGFibGVT
dHJlYW1EZWZhdWx0UmVhZGVyQnVpbHRpbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTkyMDM5ODAxOEI5NUJDNjAwQjM5QUY5IC8qIFVzZXJJbnB1dEJyaWRnZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVc2VySW5wdXRCcmlkZ2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEyMzAsMTAgKzExMjMwLDEwIEBACiAJCTlBNTI4
RTgyMTdEN0Y1MkYwMEFBOTUxOCAvKiBGbG9hdGluZ09iamVjdHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRmxvYXRpbmdPYmplY3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTlBQjFGMzdFMThFMjQ4OUEwMDUzNDc0MyAvKiBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUFCMUYzN0YxOEUy
NDg5QTAwNTM0NzQzIC8qIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAv
KiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0QjkgLyog
RmV0Y2hJbnRlcm5hbHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGZXRjaEludGVybmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTlCMDNEODA2MUJCMzExMEQwMEI3NjRDOSAvKiBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDgg
LyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5h
bHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZUJ5
dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZVN0cmVhbUlu
dGVybmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMDNEODA2
MUJCMzExMEQwMEI3NjRFOCAvKiBXcml0YWJsZVN0cmVhbUJ1aWx0aW5zLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyaXRhYmxlU3RyZWFtQnVpbHRpbnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEU5IC8qIFdyaXRhYmxl
U3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTcyNTcsNiArMTcyNTcsNyBAQAogCQkJCTJEREI5N0YzMTlGOUFFQ0EwMDIw
MjVEOCAvKiBOU0V4dGVuc2lvblNQSS5oICovLAogCQkJCUNFMTI1MjNBMUExNjcxMTAwMDg2NDQ4
MCAvKiBOU0ZpbGVNYW5hZ2VyU1BJLmggKi8sCiAJCQkJQ0UxMjUyNTIxQTFCRUMwNjAwODY0NDgw
IC8qIE5TU3RyaW5nU1BJLmggKi8sCisJCQkJOTMzNUI0OUIxRENCRUY3MTAwRUQ0NjhFIC8qIE5T
VG91Y2hCYXJTUEkuaCAqLywKIAkJCQkzMUIzMTNEQTFCNjk4NzE2MDBGMkFBQkMgLyogTlNVUkxD
b25uZWN0aW9uU1BJLmggKi8sCiAJCQkJQ0UxMjUyNTQxQTFCRUMwRTAwODY0NDgwIC8qIE5TVVJM
RG93bmxvYWRTUEkuaCAqLywKIAkJCQk2NTNFRjgzODE5QTA0M0FFMDA1MjIwMkMgLyogTlNVUkxG
aWxlVHlwZU1hcHBpbmdzU1BJLmggKi8sCkBAIC0xNzMzMyw4ICsxNzMzNCw2IEBACiAJCQkJNDRB
MjhBQUUxMkRGQjhCRjAwQUU5MjNCIC8qIE1hdGhNTE5hbWVzLmggKi8sCiAJCQkJNzFFMjE4Mzgx
NzM1OUZCODAwNkU2RTREIC8qIFBsdWdJbnNSZXNvdXJjZXMuaCAqLywKIAkJCQk3MUUyMTgzOTE3
MzU5RkI4MDA2RTZFNEQgLyogUGx1Z0luc1Jlc291cmNlc0RhdGEuY3BwICovLAotCQkJCTk5MDhC
MEZBMUJDQUQwN0QwMDc2M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQnVpbHRp
bnMuY3BwICovLAotCQkJCTk5MDhCMEZCMUJDQUQwN0QwMDc2M0Y2NCAvKiBSZWFkYWJsZUJ5dGVT
dHJlYW1Db250cm9sbGVyQnVpbHRpbnMuaCAqLywKIAkJCQk5OTA4QjBGRDFCQ0FEMDdEMDBFRDNG
NjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuY3BwICovLAogCQkJCTlC
MDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oICovLAogCQkJCTk5MDhCMEY5MUJDQUQwN0QwMEVEMEY2NSAvKiBSZWFkYWJsZVN0cmVh
bUJ1aWx0aW5zLmNwcCAqLywKQEAgLTI1MDc3LDcgKzI1MDc2LDYgQEAKIAkJCQlCQzFCREYyNTE1
NkMxOEM3MDAxQzEyNDMgLyogRE9NRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTJFRDYwOUJE
MTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgx
ODVGM0IwOTc2NTc2NjAwNTgyNkQ5IC8qIERPTUltcGxlbWVudGF0aW9uLmggaW4gSGVhZGVycyAq
LywKLQkJCQlFMzVDQTE0RTFEQkMzQTQyMDBGODM1MTYgLyogRE9NSklUQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMxNTBFQTcxREE3MjE5MzAwMTk0MDEyIC8q
IERPTUpJVEhlbHBlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE5QzZFNEU0MEQ3NDVFMDUwMDY0
NDJFOSAvKiBET01NaW1lVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTlDNkU0RTgwRDc0NUUx
ODAwNjQ0MkU5IC8qIERPTU1pbWVUeXBlQXJyYXkuaCBpbiBIZWFkZXJzICovLApAQCAtMjY3OTEs
OSArMjY3ODksOSBAQAogCQkJCUY1NUIzRENFMTI1MUYxMkQwMDNFRjI2OSAvKiBSYW5nZUlucHV0
VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU4NEU5RTExNzY2OEJGMTAwODE1QjY4IC8qIFJh
c3RlclNoYXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODREODI3QzExRDMzM0VEMDA5NzI5OTAg
LyogUmF3RGF0YURvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQk0MTZFNkZFODFC
QkQxMkRGMDAwQTNGNjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCBp
biBIZWFkZXJzICovLAorCQkJCTQxNkU2RkU4MUJCRDEyREYwMDBBM0Y2NCAvKiBSZWFkYWJsZVN0
cmVhbUludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTZFNkZFOTFCQkQx
MkU1MDAwQTYwNDMgLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJNDE2RTZGRTgxQkJEMTJERjAwMEE2MDQzIC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVp
bHRpbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjA0MyAvKiBS
ZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkQzMTYwM0MxMkIwMjY3NjAwQzFBMzU5IC8qIFJlYWx0aW1lQW5hbHlzZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTRBNEY2NTcxMUFBOTk3RjEwMEUzOENERCAvKiBSZWFsdGltZU1lZGlhU291cmNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0QTRGNjU3MjFBQTk5N0YxMDBFMzhDREQgLyogUmVhbHRp
bWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzg3NSw2ICsy
Nzg3Myw3IEBACiAJCQkJMUNBRjM0ODEwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVj
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUNBRjM0ODMwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNj
cmlwdE9iamVjdFByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNTY5RDFCMEQ3RTJCODIw
MDdDMzk4MyAvKiBXZWJTY3JpcHRPYmplY3RQcm90b2NvbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
OTMzNUI0OUQxRENCRUY3QzAwRUQ0NjhFIC8qIE5TVG91Y2hCYXJTUEkuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk3QUFCRDFCMTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk3QUFCRDFFMTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXRDaGFubmVsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5N0FBQkQxRjE0RkEwOUQ1MDA3NDU3QUUgLyogV2ViU29ja2V0
Q2hhbm5lbENsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODgzNCw3ICsyODgzMyw2IEBACiAJ
CQkJQkMxQkRGMjQxNTZDMTg4MzAwMUMxMjQzIC8qIERPTUVycm9yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTJFRDYwOUJDMTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBODE4NUYzRTA5NzY1NzY2MDA1ODI2RDkgLyogRE9NSW1wbGVtZW50YXRp
b24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRTM1Q0ExNEQxREJDM0EzRjAwRjgzNTE2IC8qIERP
TUpJVEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTlDNkU0
RTMwRDc0NUUwNTAwNjQ0MkU5IC8qIERPTU1pbWVUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE5QzZFNEU3MEQ3NDVFMTgwMDY0NDJFOSAvKiBET01NaW1lVHlwZUFycmF5LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTUyQjZDOUMyMTVFM0Y0REYwMDY5MEIwNSAvKiBET01OYW1lZEZsb3dDb2xs
ZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
c3BpL2NvY29hL0FWS2l0U1BJLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vc3BpL2NvY29hL0FWS2l0U1BJLmgJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3NwaS9jb2NvYS9BVktpdFNQSS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYs
NiArMTM2LDI1IEBAIE5TX0NMQVNTX0FWQUlMQUJMRV9NQUMoMTBfMTEpCiBAZW5kCiAKIEBpbnRl
cmZhY2UgQVZWYWx1ZVRpbWluZyAoKQotKyAoQVZWYWx1ZVRpbWluZyAqKXZhbHVlVGltaW5nV2l0
aEFuY2hvclZhbHVlOihkb3VibGUpYW5jaG9yVmFsdWUgYW5jaG9yVGltZVN0YW1wOihOU1RpbWVJ
bnRlcnZhbCl0aW1lU3RhbXAgcmF0ZTooZG91YmxlKXJhdGU7CisrIChudWxsYWJsZSBBVlZhbHVl
VGltaW5nICopdmFsdWVUaW1pbmdXaXRoQW5jaG9yVmFsdWU6KGRvdWJsZSlhbmNob3JWYWx1ZSBh
bmNob3JUaW1lU3RhbXA6KE5TVGltZUludGVydmFsKXRpbWVTdGFtcCByYXRlOihkb3VibGUpcmF0
ZTsKIEBwcm9wZXJ0eSAoTlNfTk9OQVRPTUlDX0lPU09OTFksIHJlYWRvbmx5KSBkb3VibGUgY3Vy
cmVudFZhbHVlOwogQGVuZAorCisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5B
R0VSKQorI2ltcG9ydCA8QVZLaXQvQVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNQcm92aWRl
ci5oPgorI2ltcG9ydCA8QVZLaXQvQVZGdW5jdGlvbkJhclNjcnViYmVyLmg+CisjZWxzZQorQHBy
b3RvY29sIEFWRnVuY3Rpb25CYXJQbGF5YmFja0NvbnRyb2xzQ29udHJvbGxpbmcgPE5TT2JqZWN0
PgorQHByb3BlcnR5IChyZWFkb25seSkgTlNUaW1lSW50ZXJ2YWwgY29udGVudER1cmF0aW9uOwor
QHByb3BlcnR5IChyZWFkb25seSwgbnVsbGFibGUpIEFWVmFsdWVUaW1pbmcgKnRpbWluZzsKK0Bw
cm9wZXJ0eSAocmVhZG9ubHksIGdldHRlciA9IGlzU2Vla2luZykgQk9PTCBzZWVraW5nOworQHBy
b3BlcnR5IChyZWFkb25seSkgTlNUaW1lSW50ZXJ2YWwgc2Vla1RvVGltZTsKKy0gKHZvaWQpc2Vl
a1RvVGltZTooTlNUaW1lSW50ZXJ2YWwpdGltZSB0b2xlcmFuY2VCZWZvcmU6KE5TVGltZUludGVy
dmFsKXRvbGVyYW5jZUJlZm9yZSB0b2xlcmFuY2VBZnRlcjooTlNUaW1lSW50ZXJ2YWwpdG9sZXJh
bmNlQWZ0ZXI7CitAcHJvcGVydHkgKHJlYWRvbmx5KSBCT09MIGhhc0VuYWJsZWRBdWRpbzsKK0Bw
cm9wZXJ0eSAocmVhZG9ubHkpIEJPT0wgaGFzRW5hYmxlZFZpZGVvOworQGVuZAorCitAaW50ZXJm
YWNlIEFWRnVuY3Rpb25CYXJTY3J1YmJlciA6IE5TVmlldworQHByb3BlcnR5IChhc3NpZ24sIG51
bGxhYmxlKSBpZDxBVkZ1bmN0aW9uQmFyUGxheWJhY2tDb250cm9sc0NvbnRyb2xsaW5nPiBwbGF5
YmFja0NvbnRyb2xzQ29udHJvbGxlcjsKK0BlbmQKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1BMQVlC
QUNLX0NPTlRST0xTX01BTkFHRVIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkv
Y29jb2EvTlNUb3VjaEJhclNQSS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NwaS9jb2NvYS9OU1RvdWNoQmFyU1BJLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vc3BpL2NvY29hL05TVG91Y2hCYXJTUEkuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREsp
ICYmIEhBVkUoVE9VQ0hfQkFSKQorCisjaW1wb3J0IDxBcHBLaXQvTlNGdW5jdGlvbkJhcl9Qcml2
YXRlLmg+CisjaW1wb3J0IDxBcHBLaXQvTlNUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlcl9XZWJL
aXRTUEkuaD4KKyNpbXBvcnQgPEFwcEtpdC9OU1RvdWNoQmFyX1ByaXZhdGUuaD4KKworI2Vsc2UK
KworQGludGVyZmFjZSBOU1RvdWNoQmFyICgpCitAcHJvcGVydHkgKHJlYWRvbmx5LCBjb3B5LCBu
dWxsYWJsZSkgTlNBcnJheTxOU1RvdWNoQmFySXRlbSAqPiAqaXRlbXM7CitAcHJvcGVydHkgKHN0
cm9uZywgbnVsbGFibGUpIE5TVG91Y2hCYXJJdGVtICplc2NhcGVLZXlSZXBsYWNlbWVudEl0ZW07
CitAZW5kCisKK0BpbnRlcmZhY2UgTlNUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciA6IE5TT2Jq
ZWN0CisKK0Bwcm9wZXJ0eShyZWFkb25seSwgc3Ryb25nLCBudWxsYWJsZSkgTlNDb2xvclBpY2tl
clRvdWNoQmFySXRlbSAqY29sb3JQaWNrZXJJdGVtOworQHByb3BlcnR5KHJlYWRvbmx5LCBzdHJv
bmcsIG51bGxhYmxlKSBOU1NlZ21lbnRlZENvbnRyb2wgKnRleHRTdHlsZTsKK0Bwcm9wZXJ0eShy
ZWFkb25seSwgc3Ryb25nLCBudWxsYWJsZSkgTlNTZWdtZW50ZWRDb250cm9sICp0ZXh0QWxpZ25t
ZW50czsKK0Bwcm9wZXJ0eShudWxsYWJsZSwgc3Ryb25nKSBOU1ZpZXdDb250cm9sbGVyICp0ZXh0
TGlzdFZpZXdDb250cm9sbGVyOworQHByb3BlcnR5IEJPT0wgdXNlc05hcnJvd1RleHRTdHlsZUl0
ZW07CisKKy0gKG51bGxhYmxlIE5TVG91Y2hCYXJJdGVtICopaXRlbUZvcklkZW50aWZpZXI6KG51
bGxhYmxlIE5TU3RyaW5nICopaWRlbnRpZmllcjsKKworQGVuZAorCisjZGVmaW5lIE5TVG91Y2hC
YXJXaWxsRW50ZXJDdXN0b21pemF0aW9uIEAiTlNUb3VjaEJhcldpbGxFbnRlckN1c3RvbWl6YXRp
b24iCisjZGVmaW5lIE5TVG91Y2hCYXJEaWRFeGl0Q3VzdG9taXphdGlvbiBAIk5TVG91Y2hCYXJE
aWRFeGl0Q3VzdG9taXphdGlvbiIKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9zcGkvbWFjL05TU3BlbGxDaGVja2VyU1BJLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vc3BpL21hYy9OU1NwZWxsQ2hlY2tlclNQSS5oCShyZXZpc2lvbiAyMDg0
MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxDaGVja2VyU1BJ
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIC8vIEZJWE1FOiBUaGlzIGhlYWRl
ciBzaG91bGQgaW5jbHVkZSBzeXN0ZW0gaGVhZGVycyB3aGVuIHBvc3NpYmxlLgogCiBleHRlcm4g
TlNTdHJpbmcgKk5TVGV4dENoZWNraW5nSW5zZXJ0aW9uUG9pbnRLZXk7CitleHRlcm4gTlNOb3Rp
ZmljYXRpb25OYW1lIGNvbnN0IE5TU3BlbGxDaGVja2VyRGlkQ2hhbmdlQXV0b21hdGljVGV4dENv
bXBsZXRpb25Ob3RpZmljYXRpb247CiAKIEBpbnRlcmZhY2UgTlNTcGVsbENoZWNrZXIgKCkKIC0g
KE5TSW50ZWdlcilyZXF1ZXN0Q2FuZGlkYXRlc0ZvclNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2Upc2Vs
ZWN0ZWRSYW5nZSBpblN0cmluZzooTlNTdHJpbmcgKilzdHJpbmdUb0NoZWNrIHR5cGVzOihOU1Rl
eHRDaGVja2luZ1R5cGVzKWNoZWNraW5nVHlwZXMgb3B0aW9uczooTlNEaWN0aW9uYXJ5PE5TU3Ry
aW5nICosIGlkPiAqKW9wdGlvbnMgaW5TcGVsbERvY3VtZW50V2l0aFRhZzooTlNJbnRlZ2VyKXRh
ZyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNJbnRlZ2VyIHNlcXVlbmNlTnVtYmVyLCBO
U0FycmF5PE5TVGV4dENoZWNraW5nUmVzdWx0ICo+ICpjYW5kaWRhdGVzKSljb21wbGV0aW9uSGFu
ZGxlcjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkwIEBACisyMDE2LTExLTA0ICBC
ZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBTdXBwb3J0IFRvdWNoQmFy
IGluIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY0NDM3CisgICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgcmRhcjovL3By
b2JsZW0vMjg4NzY1MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tWaWV3UHJpdmF0ZS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tOgorICAgICAgICAoLVtXS1dlYlZpZXcg
bWFrZVRvdWNoQmFyXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBjYW5kaWRhdGVMaXN0VG91Y2hC
YXJJdGVtXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfd2ViX2RpZEFkZE1lZGlhQ29udHJvbHNN
YW5hZ2VyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dlYl9kaWRSZW1vdmVNZWRpYUNvbnRy
b2xzTWFuYWdlcl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2ludGVyYWN0V2l0aE1lZGlhQ29u
dHJvbHNGb3JUZXN0aW5nXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfd2FudHNNZWRpYVBsYXli
YWNrQ29udHJvbHNWaWV3XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0V2FudHNNZWRpYVBs
YXliYWNrQ29udHJvbHNWaWV3Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX21lZGlhUGxheWJh
Y2tDb250cm9sc1ZpZXddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9hZGRNZWRpYVBsYXliYWNr
Q29udHJvbHNWaWV3Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3JlbW92ZU1lZGlhUGxheWJh
Y2tDb250cm9sc1ZpZXddKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmll
d1ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAg
ICAgICgtW1dLVmlldyBtYWtlVG91Y2hCYXJdKToKKyAgICAgICAgKC1bV0tWaWV3IGNhbmRpZGF0
ZUxpc3RUb3VjaEJhckl0ZW1dKToKKyAgICAgICAgKC1bV0tWaWV3IF93ZWJfZGlkQWRkTWVkaWFD
b250cm9sc01hbmFnZXI6XSk6CisgICAgICAgICgtW1dLVmlldyBfd2ViX2RpZFJlbW92ZU1lZGlh
Q29udHJvbHNNYW5hZ2VyXSk6CisgICAgICAgICgtW1dLVmlldyBfd2FudHNNZWRpYVBsYXliYWNr
Q29udHJvbHNWaWV3XSk6CisgICAgICAgICgtW1dLVmlldyBfc2V0V2FudHNNZWRpYVBsYXliYWNr
Q29udHJvbHNWaWV3Ol0pOgorICAgICAgICAoLVtXS1ZpZXcgX21lZGlhUGxheWJhY2tDb250cm9s
c1ZpZXddKToKKyAgICAgICAgKC1bV0tWaWV3IF9hZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3
Ol0pOgorICAgICAgICAoLVtXS1ZpZXcgX3JlbW92ZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXdd
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaDoKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OmN1cnJlbnRUb3VjaEJhcik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjpjbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Q2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJv
bHNWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldElzQ3VzdG9taXppbmdU
b3VjaEJhcik6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tOgorICAg
ICAgICAoLVtXS1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciBpbml0V2l0aFdlYlZpZXdJ
bXBsOl0pOgorICAgICAgICAoLVtXS1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciBkaWRE
ZXN0cm95Vmlld10pOgorICAgICAgICAoLVtXS1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxl
ciBfc2VsZWN0TGlzdDpdKToKKyAgICAgICAgKC1bV0tUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRy
b2xsZXIgc2V0Q3VycmVudExpc3RUeXBlOl0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0
ZW1Db250cm9sbGVyIGluaXRXaXRoV2ViVmlld0ltcGw6XSk6CisgICAgICAgICgtW1dLVGV4dFRv
dWNoQmFySXRlbUNvbnRyb2xsZXIgZGlkRGVzdHJveVZpZXddKToKKyAgICAgICAgKC1bV0tUZXh0
VG91Y2hCYXJJdGVtQ29udHJvbGxlciB0b3VjaEJhcjptYWtlSXRlbUZvcklkZW50aWZpZXI6XSk6
CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgaXRlbUZvcklkZW50aWZp
ZXI6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgY2FuZGlkYXRl
TGlzdFRvdWNoQmFySXRlbTplbmRTZWxlY3RpbmdDYW5kaWRhdGVBdEluZGV4Ol0pOgorICAgICAg
ICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIGNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0
ZW06Y2hhbmdlZENhbmRpZGF0ZUxpc3RWaXNpYmlsaXR5Ol0pOgorICAgICAgICAoLVtXS1RleHRU
b3VjaEJhckl0ZW1Db250cm9sbGVyIHRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlcl0pOgor
ICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFRleHRJc0JvbGQ6XSk6
CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzSXRhbGlj
Ol0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFRleHRJc1Vu
ZGVybGluZWQ6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgX3dr
Q2hhbmdlVGV4dFN0eWxlOl0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9s
bGVyIHNldEN1cnJlbnRUZXh0QWxpZ25tZW50Ol0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJh
ckl0ZW1Db250cm9sbGVyIF93a0NoYW5nZVRleHRBbGlnbm1lbnQ6XSk6CisgICAgICAgICgtW1dL
VGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgdGV4dENvbG9yXSk6CisgICAgICAgICgtW1dLVGV4
dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dENvbG9yOl0pOgorICAgICAgICAoLVtXS1Rl
eHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIF93a0NoYW5nZUNvbG9yOl0pOgorICAgICAgICAoLVtX
S1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHRleHRMaXN0Vmlld0NvbnRyb2xsZXJdKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6Om1ha2VUb3VjaEJhcik6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjpjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6Om1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3SW1wbDo6dXNlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkaXNtaXNzVGV4dFRvdWNoQmFyUG9wb3Zlckl0ZW1X
aXRoSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6OnRleHRUb3VjaEJhckN1c3RvbWl6YXRp
b25BbGxvd2VkSWRlbnRpZmllcnMpOgorICAgICAgICAoV2ViS2l0OjpwbGFpblRleHRUb3VjaEJh
ckN1c3RvbWl6YXRpb25EZWZhdWx0SXRlbUlkZW50aWZpZXJzKToKKyAgICAgICAgKFdlYktpdDo6
cmljaFRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25EZWZhdWx0SXRlbUlkZW50aWZpZXJzKToKKyAg
ICAgICAgKFdlYktpdDo6dG91Y2hCYXJEaWRFeGl0Q3VzdG9taXphdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OnRvdWNoQmFyV2lsbEVudGVyQ3VzdG9taXphdGlvbik6CisgICAgICAgIChXZWJLaXQ6
OmRpZENoYW5nZUF1dG9tYXRpY1RleHRDb21wbGV0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6OnVwZGF0ZVRvdWNoQmFyQW5kUmVmcmVzaFRleHRCYXJJZGVudGlmaWVycyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRVcFRleHRUb3VjaEJhcik6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjppc1JpY2hseUVkaXRhYmxlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OnRleHRUb3VjaEJhcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJ
bXBsOjp1cGRhdGVUZXh0VG91Y2hCYXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
dXBkYXRlTWVkaWFUb3VjaEJhcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpmb3Jj
ZVJlcXVlc3RDYW5kaWRhdGVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJ
bXBsOjp1cGRhdGVUb3VjaEJhcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzaG91
bGRSZXF1ZXN0Q2FuZGlkYXRlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzaG93
Q2FuZGlkYXRlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp3ZWJWaWV3SW1wbEFk
ZGl0aW9uc1dpbGxEZXN0cm95Vmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpz
ZXRFZGl0YWJsZUVsZW1lbnRJc0ZvY3VzZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1w
bDo6YmVjb21lRmlyc3RSZXNwb25kZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
c2VsZWN0aW9uRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnZpZGVv
Q29udHJvbHNNYW5hZ2VyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OnVwZGF0ZVdlYlZpZXdJbXBsQWRkaXRpb25zKTogRGVsZXRlZC4KKwogMjAxNi0xMS0wNCAgQWxl
eCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMDgyOTMuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLVmlld1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVmlld1ByaXZhdGUuaAkocmV2aXNpb24gMjA4NDA1KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ZpZXdQcml2YXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDggQEAKICNpbXBvcnQgPFdlYktpdC9XS1ZpZXcuaD4K
ICNpbXBvcnQgPFdlYktpdC9fV0tPdmVybGF5U2Nyb2xsYmFyU3R5bGUuaD4KIAorQGNsYXNzIEFW
RnVuY3Rpb25CYXJTY3J1YmJlcjsKKwogQGludGVyZmFjZSBXS1ZpZXcgKFByaXZhdGUpCiAKIC8q
IEMgU1BJIHN1cHBvcnQuICovCkBAIC0xMzIsNiArMTM0LDExIEBACiAKIC0gKHZvaWQpX2dlc3R1
cmVFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmU6KE5TRXZlbnQgKilldmVudDsKIAorQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWR3cml0ZSwgc2V0dGVyPV9zZXRXYW50c01lZGlhUGxheWJhY2tD
b250cm9sc1ZpZXc6KSBCT09MIF93YW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc7CitAcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEFWRnVuY3Rpb25CYXJTY3J1YmJlciAqX21lZGlh
UGxheWJhY2tDb250cm9sc1ZpZXc7CistICh2b2lkKV9hZGRNZWRpYVBsYXliYWNrQ29udHJvbHNW
aWV3OihBVkZ1bmN0aW9uQmFyU2NydWJiZXIgKiltZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Owor
LSAodm9pZClfcmVtb3ZlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzsKKwogQGVuZAogCiAjZW5k
aWYgLy8gIVRBUkdFVF9PU19JUEhPTkUKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tXZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMTcyLDcgKzE3MiwxMSBAQCBzdGF0aWMgY29uc3QgdWludDMyX3QgZmlyc3RTREtWZXJzaW9u
V2l0CiAjaW1wb3J0ICJXS1ZpZXdJbnRlcm5hbC5oIgogI2ltcG9ydCA8V2ViQ29yZS9Db2xvck1h
Yy5oPgogCi1AaW50ZXJmYWNlIFdLV2ViVmlldyAoKSA8V2ViVmlld0ltcGxEZWxlZ2F0ZSwgTlNU
ZXh0SW5wdXRDbGllbnQ+CitAaW50ZXJmYWNlIFdLV2ViVmlldyAoKSA8V2ViVmlld0ltcGxEZWxl
Z2F0ZSwgTlNUZXh0SW5wdXRDbGllbnQKKyNpZiBIQVZFKFRPVUNIX0JBUikKKywgTlNUb3VjaEJh
clByb3ZpZGVyCisjZW5kaWYKKz4KIEBlbmQKICNlbmRpZgogCkBAIC0zMTU1LDYgKzMxNTksMzgg
QEAgLSAodm9pZClfd2ViX2dlc3R1cmVFdmVudFdhc05vdEhhbmRsZWRCeQogCiAjZW5kaWYgLy8g
UExBVEZPUk0oTUFDKQogCisjaWYgSEFWRShUT1VDSF9CQVIpCisKK0BkeW5hbWljIHRvdWNoQmFy
OworCistIChOU1RvdWNoQmFyICopbWFrZVRvdWNoQmFyCit7CisgICAgcmV0dXJuIF9pbXBsLT5t
YWtlVG91Y2hCYXIoKTsKK30KKworLSAoTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtICopY2Fu
ZGlkYXRlTGlzdFRvdWNoQmFySXRlbQoreworICAgIHJldHVybiBfaW1wbC0+Y2FuZGlkYXRlTGlz
dFRvdWNoQmFySXRlbSgpOworfQorCistICh2b2lkKV93ZWJfZGlkQWRkTWVkaWFDb250cm9sc01h
bmFnZXI6KGlkKWNvbnRyb2xzTWFuYWdlcgoreworICAgIFtzZWxmIF9hZGRNZWRpYVBsYXliYWNr
Q29udHJvbHNWaWV3OmNvbnRyb2xzTWFuYWdlcl07Cit9CisKKy0gKHZvaWQpX3dlYl9kaWRSZW1v
dmVNZWRpYUNvbnRyb2xzTWFuYWdlcgoreworICAgIFtzZWxmIF9yZW1vdmVNZWRpYVBsYXliYWNr
Q29udHJvbHNWaWV3XTsKK30KKworLSAodm9pZClfaW50ZXJhY3RXaXRoTWVkaWFDb250cm9sc0Zv
clRlc3RpbmcKK3sKKyAgICBbc2VsZiBfc2V0V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3
OllFU107CisgICAgW3NlbGYgbWFrZVRvdWNoQmFyXTsKK30KKworI2VuZGlmIC8vIEhBVkUoVE9V
Q0hfQkFSKQorCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgKFdLUHJpdmF0ZSkK
QEAgLTQ1MjksNiArNDU2NSw0MCBAQCAtICh2b2lkKXNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJl
Y3Rpb246CiAgICAgX2ltcGwtPnNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24odXNlcklu
dGVyZmFjZUxheW91dERpcmVjdGlvbik7CiB9CiAKKy0gKEJPT0wpX3dhbnRzTWVkaWFQbGF5YmFj
a0NvbnRyb2xzVmlldworeworI2lmIEhBVkUoVE9VQ0hfQkFSKQorICAgIHJldHVybiBfaW1wbC0+
Y2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCk7CisjZW5kaWYKKyAgICByZXR1
cm4gTk87Cit9CisKKy0gKHZvaWQpX3NldFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzoo
Qk9PTCl3YW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcKK3sKKyNpZiBIQVZFKFRPVUNIX0JB
UikKKyAgICBfaW1wbC0+c2V0Q2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KHdh
bnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyk7CisjZW5kaWYKK30KKworLSAoQVZGdW5jdGlv
bkJhclNjcnViYmVyICopX21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcKK3sKKyNpZiBIQVZFKFRP
VUNIX0JBUikKKyAgICBpZiAoIV9pbXBsLT5jbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9s
c1ZpZXcoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gX2ltcGwtPm1lZGlhUGxh
eWJhY2tDb250cm9sc1ZpZXcoKTsKKyNlbHNlCisgICAgcmV0dXJuIG5pbDsKKyNlbmRpZgorfQor
CistICh2b2lkKV9hZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OihBVkZ1bmN0aW9uQmFyU2Ny
dWJiZXIgKiltZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Cit7Cit9CisKKy0gKHZvaWQpX3JlbW92
ZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcKK3sKK30KKwogI2VuZGlmCiAKIEBlbmQKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3
UHJpdmF0ZS5oCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIs
NyBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tJbW1lZGlhdGVBCiAKICNlbmRpZgog
CitAY2xhc3MgQVZGdW5jdGlvbkJhclNjcnViYmVyOwogQGNsYXNzIFdLQnJvd3NpbmdDb250ZXh0
SGFuZGxlOwogQGNsYXNzIF9XS0ZyYW1lSGFuZGxlOwogQGNsYXNzIF9XS0hpdFRlc3RSZXN1bHQ7
CkBAIC0yMDIsNiArMjAzLDEyIEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9XS0ltbWVk
aWF0ZUEKIC0gKE5TUHJpbnRPcGVyYXRpb24gKilfcHJpbnRPcGVyYXRpb25XaXRoUHJpbnRJbmZv
OihOU1ByaW50SW5mbyAqKXByaW50SW5mbzsKIC0gKE5TUHJpbnRPcGVyYXRpb24gKilfcHJpbnRP
cGVyYXRpb25XaXRoUHJpbnRJbmZvOihOU1ByaW50SW5mbyAqKXByaW50SW5mbyBmb3JGcmFtZToo
X1dLRnJhbWVIYW5kbGUgKilmcmFtZUhhbmRsZSBXS19BUElfQVZBSUxBQkxFKG1hY29zeCgxMC4x
MiksIGlvcygxMC4wKSk7CiAKKy8vIEZJWE1FOiBUaGlzIFNQSSBzaG91bGQgYmVjb21lIGEgcGFy
dCBvZiB0aGUgV0tVSURlbGVnYXRlLiByZGFyOi8vcHJvYmxlbS8yNjU2MTUzNworQHByb3BlcnR5
IChub25hdG9taWMsIHJlYWR3cml0ZSwgc2V0dGVyPV9zZXRXYW50c01lZGlhUGxheWJhY2tDb250
cm9sc1ZpZXc6KSBCT09MIF93YW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcgV0tfQVBJX0FW
QUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSkpOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRv
bmx5KSBBVkZ1bmN0aW9uQmFyU2NydWJiZXIgKl9tZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3IFdL
X0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpKTsKKy0gKHZvaWQpX2FkZE1lZGlhUGxh
eWJhY2tDb250cm9sc1ZpZXc6KEFWRnVuY3Rpb25CYXJTY3J1YmJlciAqKW1lZGlhUGxheWJhY2tD
b250cm9sc1ZpZXcgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSkpOworLSAodm9p
ZClfcmVtb3ZlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyBXS19BUElfQVZBSUxBQkxFKG1hY29z
eChXS19NQUNfVEJBKSk7CisKICNlbmRpZgogCiAtIChXS05hdmlnYXRpb24gKilfcmVsb2FkV2l0
aG91dENvbnRlbnRCbG9ja2VycyBXS19BUElfQVZBSUxBQkxFKG1hY29zeCgxMC4xMiksIGlvcygx
MC4wKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1t
CShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9X
S1ZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDExIEBAIEBpbnRlcmZhY2UgV0tW
aWV3RGF0YSA6IE5TT2JqZWN0IHsKIEBpbXBsZW1lbnRhdGlvbiBXS1ZpZXdEYXRhCiBAZW5kCiAK
LUBpbnRlcmZhY2UgV0tWaWV3ICgpIDxXZWJWaWV3SW1wbERlbGVnYXRlPgorQGludGVyZmFjZSBX
S1ZpZXcgKCkgPFdlYlZpZXdJbXBsRGVsZWdhdGUKKyNpZiBIQVZFKFRPVUNIX0JBUikKKywgTlNU
b3VjaEJhclByb3ZpZGVyCisjZW5kaWYKKz4KIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdLVmll
dwpAQCAtOTc3LDYgKzk4MSwzMiBAQCAtICh2b2lkKV9kaWRVcGRhdGVDYW5kaWRhdGVMaXN0Vmlz
aWJpbGl0CiB7CiB9CiAKKyNpZiBIQVZFKFRPVUNIX0JBUikKKworQGR5bmFtaWMgdG91Y2hCYXI7
CisKKy0gKE5TVG91Y2hCYXIgKiltYWtlVG91Y2hCYXIKK3sKKyAgICByZXR1cm4gX2RhdGEtPl9p
bXBsLT5tYWtlVG91Y2hCYXIoKTsKK30KKworLSAoTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVt
ICopY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbQoreworICAgIHJldHVybiBfZGF0YS0+X2ltcGwt
PmNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0oKTsKK30KKworLSAodm9pZClfd2ViX2RpZEFkZE1l
ZGlhQ29udHJvbHNNYW5hZ2VyOihpZCljb250cm9sc01hbmFnZXIKK3sKKyAgICBbc2VsZiBfYWRk
TWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzpjb250cm9sc01hbmFnZXJdOworfQorCistICh2b2lk
KV93ZWJfZGlkUmVtb3ZlTWVkaWFDb250cm9sc01hbmFnZXIKK3sKKyAgICBbc2VsZiBfcmVtb3Zl
TWVkaWFQbGF5YmFja0NvbnRyb2xzVmlld107Cit9CisKKyNlbmRpZiAvLyBIQVZFKFRPVUNIX0JB
UikKKwogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV0tWaWV3IChQcml2YXRlKQpAQCAtMTQ2Nywx
MCArMTQ5Nyw0MCBAQCAtICh2b2lkKXNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246CiAg
ICAgX2RhdGEtPl9pbXBsLT5zZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKHVzZXJJbnRl
cmZhY2VMYXlvdXREaXJlY3Rpb24pOwogfQogCi1AZW5kCistIChCT09MKV93YW50c01lZGlhUGxh
eWJhY2tDb250cm9sc1ZpZXcKK3sKKyNpZiBIQVZFKFRPVUNIX0JBUikKKyAgICByZXR1cm4gX2Rh
dGEtPl9pbXBsLT5jbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKTsKKyNlbmRp
ZgorICAgIHJldHVybiBOTzsKK30KIAotI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9W
RVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAgJiYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykK
LSNpbXBvcnQgPFdlYktpdEFkZGl0aW9ucy9XS1ZpZXdBZGRpdGlvbnMubW0+CistICh2b2lkKV9z
ZXRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6KEJPT0wpd2FudHNNZWRpYVBsYXliYWNr
Q29udHJvbHNWaWV3Cit7CisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgX2RhdGEtPl9pbXBsLT5z
ZXRDbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcod2FudHNNZWRpYVBsYXliYWNr
Q29udHJvbHNWaWV3KTsKKyNlbmRpZgorfQorCistIChBVkZ1bmN0aW9uQmFyU2NydWJiZXIgKilf
bWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldworeworI2lmIEhBVkUoVE9VQ0hfQkFSKQorICAgIGlm
ICghX2RhdGEtPl9pbXBsLT5jbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gX2RhdGEtPl9pbXBsLT5tZWRpYVBsYXli
YWNrQ29udHJvbHNWaWV3KCk7CisjZWxzZQorICAgIHJldHVybiBuaWw7CiAjZW5kaWYKK30KKwor
LSAodm9pZClfYWRkTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzooQVZGdW5jdGlvbkJhclNjcnVi
YmVyICopbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldworeworfQorCistICh2b2lkKV9yZW1vdmVN
ZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Cit7Cit9CisKK0BlbmQKIAogI2VuZGlmIC8vIFBMQVRG
T1JNKE1BQykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1w
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3
SW1wbC5oCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29j
b2EvV2ViVmlld0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsMTcgQEAgT0JKQ19D
TEFTUyBXS1dlYlZpZXc7CiBPQkpDX0NMQVNTIFdLV2luZG93VmlzaWJpbGl0eU9ic2VydmVyOwog
T0JKQ19DTEFTUyBfV0tUaHVtYm5haWxWaWV3OwogCi0jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NE
SykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAKLSNpbXBvcnQg
PFdlYktpdEFkZGl0aW9ucy9XZWJWaWV3SW1wbEFkZGl0aW9uc0RlY2xhcmF0aW9ucy5oPgotI2Vu
ZGlmCisjaWYgSEFWRShUT1VDSF9CQVIpCitPQkpDX0NMQVNTIEFWRnVuY3Rpb25CYXJQbGF5YmFj
a0NvbnRyb2xzUHJvdmlkZXI7CitPQkpDX0NMQVNTIEFWRnVuY3Rpb25CYXJTY3J1YmJlcjsKK09C
SkNfQ0xBU1MgTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtOworT0JKQ19DTEFTUyBOU0N1c3Rv
bVRvdWNoQmFySXRlbTsKK09CSkNfQ0xBU1MgTlNUb3VjaEJhcjsKK09CSkNfQ0xBU1MgTlNUb3Vj
aEJhckl0ZW07CitPQkpDX0NMQVNTIE5TUG9wb3ZlclRvdWNoQmFySXRlbTsKK09CSkNfQ0xBU1Mg
V0tUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlcjsKK09CSkNfQ0xBU1MgV2ViUGxheWJhY2tDb250
cm9sc01hbmFnZXI7CisjZW5kaWYgLy8gSEFWRShUT1VDSF9CQVIpCiAKIEBwcm90b2NvbCBXZWJW
aWV3SW1wbERlbGVnYXRlCiAKQEAgLTQ4MCw3ICs0ODgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBy
aWdodE1vdXNlRHJhZ2dlZChOU0V2ZW50ICopOwogICAgIHZvaWQgcmlnaHRNb3VzZVVwKE5TRXZl
bnQgKik7CiAKLSAgICB2b2lkIHVwZGF0ZVdlYlZpZXdJbXBsQWRkaXRpb25zKCk7CisgICAgdm9p
ZCB1cGRhdGVUb3VjaEJhcigpOwogICAgIHZvaWQgZm9yY2VSZXF1ZXN0Q2FuZGlkYXRlc0ZvclRl
c3RpbmcoKTsKICAgICBib29sIHNob3VsZFJlcXVlc3RDYW5kaWRhdGVzKCkgY29uc3Q7CiAgICAg
dm9pZCBzaG93Q2FuZGlkYXRlcyhOU0FycmF5ICpjYW5kaWRhdGVzLCBOU1N0cmluZyAqLCBOU1Jl
Y3QgcmVjdE9mVHlwZWRTdHJpbmcsIE5TUmFuZ2Ugc2VsZWN0ZWRSYW5nZSwgTlNWaWV3ICosIHZv
aWQgKF5jb21wbGV0aW9uSGFuZGxlcikoTlNUZXh0Q2hlY2tpbmdSZXN1bHQgKmFjY2VwdGVkQ2Fu
ZGlkYXRlKSk7CkBAIC00OTYsMTIgKzUwNCw1NCBAQCBwdWJsaWM6CiAKICNpZiBfX01BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMCAKICAgICB2b2lkIGhhbmRsZUFjY2VwdGVk
Q2FuZGlkYXRlKE5TVGV4dENoZWNraW5nUmVzdWx0ICphY2NlcHRlZENhbmRpZGF0ZSk7Ci0jaWYg
VVNFKEFQUExFX0lOVEVSTkFMX1NESykKLSNpbXBvcnQgPFdlYktpdEFkZGl0aW9ucy9XZWJWaWV3
SW1wbEFkZGl0aW9ucy5oPgotI2VuZGlmCiAjZW5kaWYKIAorI2lmIEhBVkUoVE9VQ0hfQkFSKQor
ICAgIE5TVG91Y2hCYXIgKm1ha2VUb3VjaEJhcigpOworICAgIE5TVG91Y2hCYXIgKmN1cnJlbnRU
b3VjaEJhcigpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFRvdWNoQmFyLmdldCgpOyB9CisgICAg
TlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtICpjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtKCkg
Y29uc3Q7CisgICAgQVZGdW5jdGlvbkJhclNjcnViYmVyICptZWRpYVBsYXliYWNrQ29udHJvbHNW
aWV3KCkgY29uc3Q7CisgICAgTlNUb3VjaEJhciAqdGV4dFRvdWNoQmFyKCkgY29uc3Q7CisgICAg
dm9pZCBkaXNtaXNzVGV4dFRvdWNoQmFyUG9wb3Zlckl0ZW1XaXRoSWRlbnRpZmllcihOU1N0cmlu
ZyAqKTsKKworICAgIGJvb2wgY2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCkg
Y29uc3QgeyByZXR1cm4gbV9jbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc7IH0K
KyAgICB2b2lkIHNldENsaWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyhib29sIGNs
aWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldykgeyBtX2NsaWVudFdhbnRzTWVkaWFQ
bGF5YmFja0NvbnRyb2xzVmlldyA9IGNsaWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmll
dzsgfQorCisgICAgdm9pZCB1cGRhdGVUb3VjaEJhckFuZFJlZnJlc2hUZXh0QmFySWRlbnRpZmll
cnMoKTsKKyAgICB2b2lkIHNldElzQ3VzdG9taXppbmdUb3VjaEJhcihib29sIGlzQ3VzdG9taXpp
bmdUb3VjaEJhcikgeyBtX2lzQ3VzdG9taXppbmdUb3VjaEJhciA9IGlzQ3VzdG9taXppbmdUb3Vj
aEJhcjsgfTsKKyNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikKKwogcHJpdmF0ZToKKyNpZiBIQVZF
KFRPVUNIX0JBUikKKyAgICB2b2lkIHNldFVwVGV4dFRvdWNoQmFyKE5TVG91Y2hCYXIgKik7Cisg
ICAgdm9pZCB1cGRhdGVUZXh0VG91Y2hCYXIoKTsKKyAgICB2b2lkIHVwZGF0ZU1lZGlhVG91Y2hC
YXIoKTsKKworICAgIGJvb2wgdXNlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpIGNvbnN0Owor
ICAgIGJvb2wgaXNSaWNobHlFZGl0YWJsZSgpIGNvbnN0OworCisgICAgYm9vbCBtX2NsaWVudFdh
bnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2NhbkNy
ZWF0ZVRvdWNoQmFycyB7IGZhbHNlIH07CisgICAgYm9vbCBtX3N0YXJ0ZWRMaXN0ZW5pbmdUb0N1
c3RvbWl6YXRpb25FdmVudHMgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc1VwZGF0aW5nVGV4dFRv
dWNoQmFyIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNDdXN0b21pemluZ1RvdWNoQmFyIHsgZmFs
c2UgfTsKKworICAgIFJldGFpblB0cjxOU1RvdWNoQmFyPiBtX2N1cnJlbnRUb3VjaEJhcjsKKyAg
ICBSZXRhaW5QdHI8TlNUb3VjaEJhcj4gbV9yaWNoVGV4dFRvdWNoQmFyOworICAgIFJldGFpblB0
cjxOU1RvdWNoQmFyPiBtX3BsYWluVGV4dFRvdWNoQmFyOworICAgIFJldGFpblB0cjxXS1RleHRU
b3VjaEJhckl0ZW1Db250cm9sbGVyPiBtX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyOworICAg
IFJldGFpblB0cjxOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0+IG1fcmljaFRleHRDYW5kaWRh
dGVMaXN0VG91Y2hCYXJJdGVtOworICAgIFJldGFpblB0cjxOU0NhbmRpZGF0ZUxpc3RUb3VjaEJh
ckl0ZW0+IG1fcGxhaW5UZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTsKKyAgICBSZXRhaW5Q
dHI8TlNBcnJheT4gbV9lbXB0eUNhbmRpZGF0ZXNBcnJheTsKKyAgICBSZXRhaW5QdHI8V2ViUGxh
eWJhY2tDb250cm9sc01hbmFnZXI+IG1fcGxheWJhY2tDb250cm9sc01hbmFnZXI7CisgICAgUmV0
YWluUHRyPE5TQ3VzdG9tVG91Y2hCYXJJdGVtPiBtX2V4aXRGdWxsU2NyZWVuQnV0dG9uOworCisj
aWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIFJldGFpblB0cjxB
VkZ1bmN0aW9uQmFyUGxheWJhY2tDb250cm9sc1Byb3ZpZGVyPiBtX21lZGlhVG91Y2hCYXJQcm92
aWRlcjsKKyAgICBSZXRhaW5QdHI8QVZGdW5jdGlvbkJhclNjcnViYmVyPiBtX21lZGlhUGxheWJh
Y2tDb250cm9sc1ZpZXc7CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19N
QU5BR0VSKQorI2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFSKQorCiAgICAgV2Vha1B0cjxXZWJWaWV3
SW1wbD4gY3JlYXRlV2Vha1B0cigpIHsgcmV0dXJuIG1fd2Vha1B0ckZhY3RvcnkuY3JlYXRlV2Vh
a1B0cigpOyB9CiAKICAgICBib29sIHN1cHBvcnRzQXJiaXRyYXJ5TGF5b3V0TW9kZXMoKSBjb25z
dDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwu
bW0JKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9X
ZWJWaWV3SW1wbC5tbQkod29ya2luZyBjb3B5KQpAQCAtNjAsMTEgKzYwLDEzIEBACiAjaW1wb3J0
ICJXZWJFdmVudEZhY3RvcnkuaCIKICNpbXBvcnQgIldlYkluc3BlY3RvclByb3h5LmgiCiAjaW1w
b3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eS5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc1Bvb2wuaCIKICNpbXBvcnQgIldlYlByb2Nlc3NQ
cm94eS5oIgogI2ltcG9ydCAiX1dLUmVtb3RlT2JqZWN0UmVnaXN0cnlJbnRlcm5hbC5oIgogI2lt
cG9ydCAiX1dLVGh1bWJuYWlsVmlld0ludGVybmFsLmgiCiAjaW1wb3J0IDxISVRvb2xib3gvQ2Fy
Ym9uRXZlbnRzQ29yZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9BVktpdFNQSS5oPgogI2ltcG9ydCA8
V2ViQ29yZS9BWE9iamVjdENhY2hlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0FjdGl2aXR5U3RhdGUu
aD4KICNpbXBvcnQgPFdlYkNvcmUvQ29sb3JNYWMuaD4KQEAgLTgwLDYgKzgyLDcgQEAKICNpbXBv
cnQgPFdlYkNvcmUvTlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXplclNQSS5oPgogI2lt
cG9ydCA8V2ViQ29yZS9OU1NwZWxsQ2hlY2tlclNQSS5oPgogI2ltcG9ydCA8V2ViQ29yZS9OU1Rl
eHRGaW5kZXJTUEkuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTlNUb3VjaEJhclNQSS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9OU1dpbmRvd1NQSS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUV2ZW50
RmFjdG9yeU1hYy5oPgogI2ltcG9ydCA8V2ViQ29yZS9Tb2Z0TGlua2luZy5oPgpAQCAtOTAsMTYg
KzkzLDIyIEBACiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJW
aWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVGdWxsU2NyZWVuV2luZG93Lmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1dlYkNvcmVOU1N0cmluZ0V4dHJhcy5oPgorI2ltcG9ydCA8V2ViQ29yZS9X
ZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oPgogI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJm
YWNlLmg+CiAjaW1wb3J0IDxzeXMvc3RhdC5oPgogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisjaW1wb3J0IDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CiAKLSNpZiBVU0UoQVBQTEVfSU5U
RVJOQUxfU0RLKQotI2ltcG9ydCA8V2ViS2l0QWRkaXRpb25zL1dlYlZpZXdJbXBsSW5jbHVkZXMu
aD4KLSNlbmRpZgorI2lmIEhBVkUoVE9VQ0hfQkFSKSAmJiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NP
TlRST0xTX01BTkFHRVIpCitTT0ZUX0xJTktfRlJBTUVXT1JLKEFWS2l0KQorU09GVF9MSU5LX0NM
QVNTKEFWS2l0LCBBVkZ1bmN0aW9uQmFyUGxheWJhY2tDb250cm9sc1Byb3ZpZGVyKQorU09GVF9M
SU5LX0NMQVNTKEFWS2l0LCBBVkZ1bmN0aW9uQmFyU2NydWJiZXIpCisjZW5kaWYgLy8gSEFWRShU
T1VDSF9CQVIpICYmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKIAogU09G
VF9MSU5LX0NPTlNUQU5UX01BWV9GQUlMKExvb2t1cCwgTFVOb3RpZmljYXRpb25Qb3BvdmVyV2ls
bENsb3NlLCBOU1N0cmluZyAqKQogCitOU1N0cmluZyAqIGNvbnN0IFdLTWVkaWFFeGl0RnVsbFNj
cmVlbkl0ZW0gPSBAIldLTWVkaWFFeGl0RnVsbFNjcmVlbkl0ZW0iOworCiBAaW50ZXJmYWNlIE5T
QXBwbGljYXRpb24gKCkKIC0gKEJPT0wpaXNTcGVha2luZzsKIC0gKHZvaWQpc3BlYWtTdHJpbmc6
KE5TU3RyaW5nICopc3RyaW5nOwpAQCAtNDMzLDEyICs0NDIsNjkxIEBAIC0gKEJPT0wpdHJ5VG9Q
ZXJmb3JtOihTRUwpYWN0aW9uIHdpdGg6KGkKIAogQGVuZAogCi0jaWYgX19NQUNfT1NfWF9WRVJT
SU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAgJiYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLSNp
bXBvcnQgPFdlYktpdEFkZGl0aW9ucy9XZWJWaWV3SW1wbEFkZGl0aW9ucy5tbT4KK3VzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7CisKKyNpZiBIQVZFKFRPVUNIX0JBUikKKworQGludGVyZmFjZSBXS1Rl
eHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciA6IE5TVmlld0NvbnRyb2xsZXIgeworICAgIExp
c3RUeXBlIF9jdXJyZW50TGlzdFR5cGU7CisKK0Bwcml2YXRlCisgICAgV2ViVmlld0ltcGwqIF93
ZWJWaWV3SW1wbDsKK30KKworQHByb3BlcnR5IChub25hdG9taWMpIExpc3RUeXBlIGN1cnJlbnRM
aXN0VHlwZTsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViVmlld0ltcGw6KFdlYlZpZXdJ
bXBsKil3ZWJWaWV3SW1wbDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tUZXh0TGlzdFRv
dWNoQmFyVmlld0NvbnRyb2xsZXIKKworQHN5bnRoZXNpemUgY3VycmVudExpc3RUeXBlPV9jdXJy
ZW50TGlzdFR5cGU7CisKK3N0YXRpYyBjb25zdCBkb3VibGUgbGlzdENvbnRyb2xTZWdtZW50V2lk
dGggPSA2NzsKK3N0YXRpYyBjb25zdCBkb3VibGUgZXhpdEZ1bGxTY3JlZW5CdXR0b25XaWR0aCA9
IDY0OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbm9MaXN0U2VnbWVudCA9IDA7CitzdGF0aWMg
Y29uc3QgdW5zaWduZWQgdW5vcmRlcmVkTGlzdFNlZ21lbnQgPSAxOworc3RhdGljIGNvbnN0IHVu
c2lnbmVkIG9yZGVyZWRMaXN0U2VnbWVudCA9IDI7CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFdlYlZpZXdJbXBsOihXZWJWaWV3SW1wbCopd2ViVmlld0ltcGwKK3sKKyAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF93ZWJWaWV3SW1w
bCA9IHdlYlZpZXdJbXBsOworCisgICAgTlNTZWdtZW50ZWRDb250cm9sICppbnNlcnRMaXN0Q29u
dHJvbCA9IFtOU1NlZ21lbnRlZENvbnRyb2wgc2VnbWVudGVkQ29udHJvbFdpdGhMYWJlbHM6QFsg
V2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVOb25lKCksIFdlYkNvcmU6Omluc2VydExpc3RUeXBlQnVs
bGV0ZWQoKSwgV2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVOdW1iZXJlZCgpIF0gdHJhY2tpbmdNb2Rl
Ok5TU2VnbWVudFN3aXRjaFRyYWNraW5nU2VsZWN0T25lIHRhcmdldDpzZWxmIGFjdGlvbjpAc2Vs
ZWN0b3IoX3NlbGVjdExpc3Q6KV07CisgICAgW2luc2VydExpc3RDb250cm9sIHNldFdpZHRoOmxp
c3RDb250cm9sU2VnbWVudFdpZHRoIGZvclNlZ21lbnQ6bm9MaXN0U2VnbWVudF07CisgICAgW2lu
c2VydExpc3RDb250cm9sIHNldFdpZHRoOmxpc3RDb250cm9sU2VnbWVudFdpZHRoIGZvclNlZ21l
bnQ6dW5vcmRlcmVkTGlzdFNlZ21lbnRdOworICAgIFtpbnNlcnRMaXN0Q29udHJvbCBzZXRXaWR0
aDpsaXN0Q29udHJvbFNlZ21lbnRXaWR0aCBmb3JTZWdtZW50Om9yZGVyZWRMaXN0U2VnbWVudF07
CisgICAgaW5zZXJ0TGlzdENvbnRyb2wuZm9udCA9IFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTox
NV07CisKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyAgICBpZCBzZWdtZW50
RWxlbWVudCA9IE5TQWNjZXNzaWJpbGl0eVVuaWdub3JlZERlc2NlbmRhbnQoaW5zZXJ0TGlzdENv
bnRyb2wpOworICAgIE5TQXJyYXkgKnNlZ21lbnRzID0gW3NlZ21lbnRFbGVtZW50IGFjY2Vzc2li
aWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlDaGlsZHJlbkF0dHJpYnV0ZV07Cisg
ICAgQVNTRVJUKHNlZ21lbnRzLmNvdW50ID09IDMpOworICAgIFtbc2VnbWVudHMgb2JqZWN0QXRJ
bmRleDpub0xpc3RTZWdtZW50XSBhY2Nlc3NpYmlsaXR5U2V0T3ZlcnJpZGVWYWx1ZTpXZWJDb3Jl
OjppbnNlcnRMaXN0VHlwZU5vbmUoKSBmb3JBdHRyaWJ1dGU6TlNBY2Nlc3NpYmlsaXR5RGVzY3Jp
cHRpb25BdHRyaWJ1dGVdOworICAgIFtbc2VnbWVudHMgb2JqZWN0QXRJbmRleDp1bm9yZGVyZWRM
aXN0U2VnbWVudF0gYWNjZXNzaWJpbGl0eVNldE92ZXJyaWRlVmFsdWU6V2ViQ29yZTo6aW5zZXJ0
TGlzdFR5cGVCdWxsZXRlZEFjY2Vzc2liaWxpdHlUaXRsZSgpIGZvckF0dHJpYnV0ZTpOU0FjY2Vz
c2liaWxpdHlEZXNjcmlwdGlvbkF0dHJpYnV0ZV07CisgICAgW1tzZWdtZW50cyBvYmplY3RBdElu
ZGV4Om9yZGVyZWRMaXN0U2VnbWVudF0gYWNjZXNzaWJpbGl0eVNldE92ZXJyaWRlVmFsdWU6V2Vi
Q29yZTo6aW5zZXJ0TGlzdFR5cGVOdW1iZXJlZEFjY2Vzc2liaWxpdHlUaXRsZSgpIGZvckF0dHJp
YnV0ZTpOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkF0dHJpYnV0ZV07CisjcHJhZ21hIGNsYW5n
IGRpYWdub3N0aWMgcG9wCisKKyAgICBzZWxmLnZpZXcgPSBpbnNlcnRMaXN0Q29udHJvbDsKKwor
ICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRpZERlc3Ryb3lWaWV3Cit7CisgICAgX3dl
YlZpZXdJbXBsID0gbnVsbHB0cjsKK30KKworLSAodm9pZClfc2VsZWN0TGlzdDooaWQpc2VuZGVy
Cit7CisgICAgaWYgKCFfd2ViVmlld0ltcGwpCisgICAgICAgIHJldHVybjsKKworICAgIE5TU2Vn
bWVudGVkQ29udHJvbCAqaW5zZXJ0TGlzdENvbnRyb2wgPSAoTlNTZWdtZW50ZWRDb250cm9sICop
c2VsZi52aWV3OworICAgIGlmIChpbnNlcnRMaXN0Q29udHJvbC5zZWxlY3RlZFNlZ21lbnQgPT0g
bm9MaXN0U2VnbWVudCkgeworICAgICAgICAvLyBUaGVyZSBpcyBubyAicmVtb3ZlIGxpc3QiIGVk
aXQgY29tbWFuZCwgYnV0IEluc2VydE9yZGVyZWRMaXN0IGFuZCBJbnNlcnRVbm9yZGVyZWRMaXN0
IGJvdGgKKyAgICAgICAgLy8gYmVoYXZlIGFzIHRvZ2dsZXMsIHNvIHdlIGNhbiBpbnZva2UgdGhl
IGFwcHJvcHJpYXRlIGVkaXQgY29tbWFuZCBkZXBlbmRpbmcgb24gb3VyIF9jdXJyZW50TGlzdFR5
cGUKKyAgICAgICAgLy8gdG8gcmVtb3ZlIGFuIGV4aXN0aW5nIGxpc3QuIFdlIGRvbid0IGhhdmUg
dG8gZG8gYW55dGhpbmcgaWYgX2N1cnJlbnRMaXN0VHlwZSBpcyBOb0xpc3QuCisgICAgICAgIGlm
IChfY3VycmVudExpc3RUeXBlID09IE9yZGVyZWRMaXN0KQorICAgICAgICAgICAgX3dlYlZpZXdJ
bXBsLT5wYWdlKCkuZXhlY3V0ZUVkaXRDb21tYW5kKEAiSW5zZXJ0T3JkZXJlZExpc3QiLCBAIiIp
OworICAgICAgICBlbHNlIGlmIChfY3VycmVudExpc3RUeXBlID09IFVub3JkZXJlZExpc3QpCisg
ICAgICAgICAgICBfd2ViVmlld0ltcGwtPnBhZ2UoKS5leGVjdXRlRWRpdENvbW1hbmQoQCJJbnNl
cnRVbm9yZGVyZWRMaXN0IiwgQCIiKTsKKyAgICB9IGVsc2UgaWYgKGluc2VydExpc3RDb250cm9s
LnNlbGVjdGVkU2VnbWVudCA9PSB1bm9yZGVyZWRMaXN0U2VnbWVudCkKKyAgICAgICAgX3dlYlZp
ZXdJbXBsLT5wYWdlKCkuZXhlY3V0ZUVkaXRDb21tYW5kKEAiSW5zZXJ0VW5vcmRlcmVkTGlzdCIs
IEAiIik7CisgICAgZWxzZSBpZiAoaW5zZXJ0TGlzdENvbnRyb2wuc2VsZWN0ZWRTZWdtZW50ID09
IG9yZGVyZWRMaXN0U2VnbWVudCkKKyAgICAgICAgX3dlYlZpZXdJbXBsLT5wYWdlKCkuZXhlY3V0
ZUVkaXRDb21tYW5kKEAiSW5zZXJ0T3JkZXJlZExpc3QiLCBAIiIpOworCisgICAgX3dlYlZpZXdJ
bXBsLT5kaXNtaXNzVGV4dFRvdWNoQmFyUG9wb3Zlckl0ZW1XaXRoSWRlbnRpZmllcihOU1RvdWNo
QmFySXRlbUlkZW50aWZpZXJUZXh0TGlzdCk7Cit9CisKKy0gKHZvaWQpc2V0Q3VycmVudExpc3RU
eXBlOihMaXN0VHlwZSlsaXN0VHlwZQoreworICAgIE5TU2VnbWVudGVkQ29udHJvbCAqaW5zZXJ0
TGlzdENvbnRyb2wgPSAoTlNTZWdtZW50ZWRDb250cm9sICopc2VsZi52aWV3OworICAgIHN3aXRj
aChsaXN0VHlwZSkgeworICAgIGNhc2UgTm9MaXN0OgorICAgICAgICBbaW5zZXJ0TGlzdENvbnRy
b2wgc2V0U2VsZWN0ZWQ6WUVTIGZvclNlZ21lbnQ6bm9MaXN0U2VnbWVudF07CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgT3JkZXJlZExpc3Q6CisgICAgICAgIFtpbnNlcnRMaXN0Q29udHJvbCBz
ZXRTZWxlY3RlZDpZRVMgZm9yU2VnbWVudDpvcmRlcmVkTGlzdFNlZ21lbnRdOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFVub3JkZXJlZExpc3Q6CisgICAgICAgIFtpbnNlcnRMaXN0Q29udHJv
bCBzZXRTZWxlY3RlZDpZRVMgZm9yU2VnbWVudDp1bm9yZGVyZWRMaXN0U2VnbWVudF07CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIF9jdXJyZW50TGlzdFR5cGUgPSBsaXN0VHlwZTsKK30K
KworQGVuZAorCitAaW50ZXJmYWNlIFdLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgOiBOU1Rl
eHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIDxOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW1EZWxl
Z2F0ZSwgTlNUb3VjaEJhckRlbGVnYXRlPiB7CisgICAgQk9PTCBfdGV4dElzQm9sZDsKKyAgICBC
T09MIF90ZXh0SXNJdGFsaWM7CisgICAgQk9PTCBfdGV4dElzVW5kZXJsaW5lZDsKKyAgICBOU1Rl
eHRBbGlnbm1lbnQgX2N1cnJlbnRUZXh0QWxpZ25tZW50OworICAgIFJldGFpblB0cjxOU0NvbG9y
PiBfdGV4dENvbG9yOworICAgIFJldGFpblB0cjxXS1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJv
bGxlcj4gX3drVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyOworCitAcHJpdmF0ZQorICAg
IFdlYlZpZXdJbXBsKiBfd2ViVmlld0ltcGw7Cit9CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBC
T09MIHRleHRJc0JvbGQ7CitAcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCB0ZXh0SXNJdGFsaWM7
CitAcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCB0ZXh0SXNVbmRlcmxpbmVkOworQHByb3BlcnR5
IChub25hdG9taWMpIE5TVGV4dEFsaWdubWVudCBjdXJyZW50VGV4dEFsaWdubWVudDsKK0Bwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHJlYWR3cml0ZSkgTlNDb2xvciAqdGV4dENvbG9yOwor
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWV3SW1wbDooV2ViVmlld0ltcGwqKXdlYlZp
ZXdJbXBsOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tUZXh0VG91Y2hCYXJJdGVtQ29udHJv
bGxlcgorCitAc3ludGhlc2l6ZSB0ZXh0SXNCb2xkPV90ZXh0SXNCb2xkOworQHN5bnRoZXNpemUg
dGV4dElzSXRhbGljPV90ZXh0SXNJdGFsaWM7CitAc3ludGhlc2l6ZSB0ZXh0SXNVbmRlcmxpbmVk
PV90ZXh0SXNVbmRlcmxpbmVkOworQHN5bnRoZXNpemUgY3VycmVudFRleHRBbGlnbm1lbnQ9X2N1
cnJlbnRUZXh0QWxpZ25tZW50OworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWV3SW1w
bDooV2ViVmlld0ltcGwqKXdlYlZpZXdJbXBsCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBp
bml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfd2ViVmlld0ltcGwgPSB3ZWJWaWV3
SW1wbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRpZERlc3Ryb3lWaWV3Cit7
CisgICAgX3dlYlZpZXdJbXBsID0gbnVsbHB0cjsKKyAgICBbX3drVGV4dExpc3RUb3VjaEJhclZp
ZXdDb250cm9sbGVyIGRpZERlc3Ryb3lWaWV3XTsKK30KKworI3ByYWdtYSBtYXJrIE5TVG91Y2hC
YXJEZWxlZ2F0ZQorCistIChOU1RvdWNoQmFySXRlbSAqKXRvdWNoQmFyOihOU1RvdWNoQmFyICop
dG91Y2hCYXIgbWFrZUl0ZW1Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIKK3sK
KyAgICByZXR1cm4gW3NlbGYgaXRlbUZvcklkZW50aWZpZXI6aWRlbnRpZmllcl07Cit9CisKKy0g
KG51bGxhYmxlIE5TVG91Y2hCYXJJdGVtICopaXRlbUZvcklkZW50aWZpZXI6KE5TU3RyaW5nICop
aWRlbnRpZmllcgoreworICAgIE5TVG91Y2hCYXJJdGVtICppdGVtID0gW3N1cGVyIGl0ZW1Gb3JJ
ZGVudGlmaWVyOmlkZW50aWZpZXJdOworICAgIEJPT0wgaXNUZXh0Rm9ybWF0SXRlbSA9IFtpZGVu
dGlmaWVyIGlzRXF1YWxUb1N0cmluZzpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Rm9ybWF0
XTsKKworICAgIGlmIChpc1RleHRGb3JtYXRJdGVtIHx8IFtpZGVudGlmaWVyIGlzRXF1YWxUb1N0
cmluZzpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0U3R5bGVdKQorICAgICAgICBzZWxmLnRl
eHRTdHlsZS5hY3Rpb24gPSBAc2VsZWN0b3IoX3drQ2hhbmdlVGV4dFN0eWxlOik7CisKKyAgICBp
ZiAoaXNUZXh0Rm9ybWF0SXRlbSB8fCBbaWRlbnRpZmllciBpc0VxdWFsVG9TdHJpbmc6TlNUb3Vj
aEJhckl0ZW1JZGVudGlmaWVyVGV4dEFsaWdubWVudF0pCisgICAgICAgIHNlbGYudGV4dEFsaWdu
bWVudHMuYWN0aW9uID0gQHNlbGVjdG9yKF93a0NoYW5nZVRleHRBbGlnbm1lbnQ6KTsKKworICAg
IE5TQ29sb3JQaWNrZXJUb3VjaEJhckl0ZW0gKmNvbG9yUGlja2VySXRlbSA9IG5pbDsKKyAgICBp
ZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRvU3RyaW5nOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRl
eHRDb2xvclBpY2tlcl0gJiYgW2l0ZW0gaXNLaW5kT2ZDbGFzczpbTlNDb2xvclBpY2tlclRvdWNo
QmFySXRlbSBjbGFzc11dKQorICAgICAgICBjb2xvclBpY2tlckl0ZW0gPSAoTlNDb2xvclBpY2tl
clRvdWNoQmFySXRlbSAqKWl0ZW07CisgICAgaWYgKGlzVGV4dEZvcm1hdEl0ZW0pCisgICAgICAg
IGNvbG9yUGlja2VySXRlbSA9IHNlbGYuY29sb3JQaWNrZXJJdGVtOworICAgIGlmIChjb2xvclBp
Y2tlckl0ZW0pIHsKKyAgICAgICAgY29sb3JQaWNrZXJJdGVtLnRhcmdldCA9IHNlbGY7CisgICAg
ICAgIGNvbG9yUGlja2VySXRlbS5hY3Rpb24gPSBAc2VsZWN0b3IoX3drQ2hhbmdlQ29sb3I6KTsK
KyAgICAgICAgY29sb3JQaWNrZXJJdGVtLnNob3dzQWxwaGEgPSBOTzsKKyAgICB9CisKKyAgICBy
ZXR1cm4gaXRlbTsKK30KKworI3ByYWdtYSBtYXJrIE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRl
bURlbGVnYXRlCisKKy0gKHZvaWQpY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTooTlNDYW5kaWRh
dGVMaXN0VG91Y2hCYXJJdGVtICopYW5JdGVtIGVuZFNlbGVjdGluZ0NhbmRpZGF0ZUF0SW5kZXg6
KE5TSW50ZWdlcilpbmRleAoreworICAgIGlmIChpbmRleCA9PSBOU05vdEZvdW5kKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIV93ZWJWaWV3SW1wbCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgTlNBcnJheSAqY2FuZGlkYXRlcyA9IGFuSXRlbS5jYW5kaWRhdGVzOworICAgIGlmICgoTlNV
SW50ZWdlcilpbmRleCA+PSBjYW5kaWRhdGVzLmNvdW50KQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZCBjYW5kaWRhdGUgPSBjYW5kaWRhdGVzW2luZGV4XTsKKyAgICBBU1NFUlQoW2NhbmRpZGF0
ZSBpc0tpbmRPZkNsYXNzOltOU1RleHRDaGVja2luZ1Jlc3VsdCBjbGFzc11dKTsKKworICAgIF93
ZWJWaWV3SW1wbC0+aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoKE5TVGV4dENoZWNraW5nUmVzdWx0
ICopY2FuZGlkYXRlKTsKK30KKworLSAodm9pZCljYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtOihO
U0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gKilhbkl0ZW0gY2hhbmdlZENhbmRpZGF0ZUxpc3RW
aXNpYmlsaXR5OihCT09MKWlzVmlzaWJsZQoreworICAgIGlmICghX3dlYlZpZXdJbXBsKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoaXNWaXNpYmxlKQorICAgICAgICBfd2ViVmlld0ltcGwt
PnJlcXVlc3RDYW5kaWRhdGVzRm9yU2VsZWN0aW9uSWZOZWVkZWQoKTsKKworICAgIF93ZWJWaWV3
SW1wbC0+dXBkYXRlVG91Y2hCYXIoKTsKK30KKworI3ByYWdtYSBtYXJrIE5TVGV4dFRvdWNoQmFy
SXRlbUNvbnRyb2xsZXIKKworLSAoV0tUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgKil0
ZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIKK3sKKyAgICByZXR1cm4gKFdLVGV4dExpc3RU
b3VjaEJhclZpZXdDb250cm9sbGVyICopW3NlbGYgdGV4dExpc3RWaWV3Q29udHJvbGxlcl07Cit9
CisKKy0gKHZvaWQpc2V0VGV4dElzQm9sZDooQk9PTClib2xkCit7CisgICAgX3RleHRJc0JvbGQg
PSBib2xkOworICAgIGlmIChbc2VsZi50ZXh0U3R5bGUgaXNTZWxlY3RlZEZvclNlZ21lbnQ6MF0g
IT0gX3RleHRJc0JvbGQpCisgICAgICAgIFtzZWxmLnRleHRTdHlsZSBzZXRTZWxlY3RlZDpfdGV4
dElzQm9sZCBmb3JTZWdtZW50OjBdOworfQorCistICh2b2lkKXNldFRleHRJc0l0YWxpYzooQk9P
TClpdGFsaWMKK3sKKyAgICBfdGV4dElzSXRhbGljID0gaXRhbGljOworICAgIGlmIChbc2VsZi50
ZXh0U3R5bGUgaXNTZWxlY3RlZEZvclNlZ21lbnQ6MV0gIT0gX3RleHRJc0l0YWxpYykKKyAgICAg
ICAgW3NlbGYudGV4dFN0eWxlIHNldFNlbGVjdGVkOl90ZXh0SXNJdGFsaWMgZm9yU2VnbWVudDox
XTsKK30KKworLSAodm9pZClzZXRUZXh0SXNVbmRlcmxpbmVkOihCT09MKXVuZGVybGluZWQKK3sK
KyAgICBfdGV4dElzVW5kZXJsaW5lZCA9IHVuZGVybGluZWQ7CisgICAgaWYgKFtzZWxmLnRleHRT
dHlsZSBpc1NlbGVjdGVkRm9yU2VnbWVudDoyXSAhPSBfdGV4dElzVW5kZXJsaW5lZCkKKyAgICAg
ICAgW3NlbGYudGV4dFN0eWxlIHNldFNlbGVjdGVkOl90ZXh0SXNVbmRlcmxpbmVkIGZvclNlZ21l
bnQ6Ml07Cit9CisKKy0gKHZvaWQpX3drQ2hhbmdlVGV4dFN0eWxlOihpZClzZW5kZXIKK3sKKyAg
ICBpZiAoIV93ZWJWaWV3SW1wbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKFtzZWxmLnRl
eHRTdHlsZSBpc1NlbGVjdGVkRm9yU2VnbWVudDowXSAhPSBfdGV4dElzQm9sZCkgeworICAgICAg
ICBfdGV4dElzQm9sZCA9ICFfdGV4dElzQm9sZDsKKyAgICAgICAgX3dlYlZpZXdJbXBsLT5wYWdl
KCkuZXhlY3V0ZUVkaXRDb21tYW5kKEAiVG9nZ2xlQm9sZCIsIEAiIik7CisgICAgfQorCisgICAg
aWYgKFtzZWxmLnRleHRTdHlsZSBpc1NlbGVjdGVkRm9yU2VnbWVudDoxXSAhPSBfdGV4dElzSXRh
bGljKSB7CisgICAgICAgIF90ZXh0SXNJdGFsaWMgPSAhX3RleHRJc0l0YWxpYzsKKyAgICAgICAg
X3dlYlZpZXdJbXBsLT5wYWdlKCkuZXhlY3V0ZUVkaXRDb21tYW5kKCJUb2dnbGVJdGFsaWMiLCBA
IiIpOworICAgIH0KKworICAgIGlmIChbc2VsZi50ZXh0U3R5bGUgaXNTZWxlY3RlZEZvclNlZ21l
bnQ6Ml0gIT0gX3RleHRJc1VuZGVybGluZWQpIHsKKyAgICAgICAgX3RleHRJc1VuZGVybGluZWQg
PSAhX3RleHRJc1VuZGVybGluZWQ7CisgICAgICAgIF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1
dGVFZGl0Q29tbWFuZCgiVG9nZ2xlVW5kZXJsaW5lIiwgQCIiKTsKKyAgICB9Cit9CisKKy0gKHZv
aWQpc2V0Q3VycmVudFRleHRBbGlnbm1lbnQ6KE5TVGV4dEFsaWdubWVudClhbGlnbm1lbnQKK3sK
KyAgICBfY3VycmVudFRleHRBbGlnbm1lbnQgPSBhbGlnbm1lbnQ7CisgICAgW3NlbGYudGV4dEFs
aWdubWVudHMgc2VsZWN0U2VnbWVudFdpdGhUYWc6X2N1cnJlbnRUZXh0QWxpZ25tZW50XTsKK30K
KworLSAodm9pZClfd2tDaGFuZ2VUZXh0QWxpZ25tZW50OihpZClzZW5kZXIKK3sKKyAgICBpZiAo
IV93ZWJWaWV3SW1wbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNUZXh0QWxpZ25tZW50IGFs
aWdubWVudCA9IChOU1RleHRBbGlnbm1lbnQpW3NlbGYudGV4dEFsaWdubWVudHMuY2VsbCB0YWdG
b3JTZWdtZW50OltzZWxmLnRleHRBbGlnbm1lbnRzIHNlbGVjdGVkU2VnbWVudF1dOworICAgIHN3
aXRjaCAoYWxpZ25tZW50KSB7CisgICAgY2FzZSBOU1RleHRBbGlnbm1lbnRMZWZ0OiB7CisgICAg
ICAgIF9jdXJyZW50VGV4dEFsaWdubWVudCA9IE5TVGV4dEFsaWdubWVudExlZnQ7CisgICAgICAg
IF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZCgiQWxpZ25MZWZ0IiwgQCIi
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgTlNUZXh0QWxpZ25tZW50UmlnaHQ6
IHsKKyAgICAgICAgX2N1cnJlbnRUZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25tZW50UmlnaHQ7
CisgICAgICAgIF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZCgiQWxpZ25S
aWdodCIsIEAiIik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIE5TVGV4dEFsaWdu
bWVudENlbnRlcjogeworICAgICAgICBfY3VycmVudFRleHRBbGlnbm1lbnQgPSBOU1RleHRBbGln
bm1lbnRDZW50ZXI7CisgICAgICAgIF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29t
bWFuZCgiQWxpZ25DZW50ZXIiLCBAIiIpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2Fz
ZSBOU1RleHRBbGlnbm1lbnRKdXN0aWZpZWQ6IHsKKyAgICAgICAgX2N1cnJlbnRUZXh0QWxpZ25t
ZW50ID0gTlNUZXh0QWxpZ25tZW50SnVzdGlmaWVkOworICAgICAgICBfd2ViVmlld0ltcGwtPnBh
Z2UoKS5leGVjdXRlRWRpdENvbW1hbmQoIkFsaWduSnVzdGlmaWVkIiwgQCIiKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IF93ZWJWaWV3SW1wbC0+ZGlzbWlzc1RleHRUb3VjaEJhclBvcG92ZXJJdGVtV2l0aElkZW50aWZp
ZXIoTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEFsaWdubWVudCk7Cit9CisKKy0gKE5TQ29s
b3IgKil0ZXh0Q29sb3IKK3sKKyAgICByZXR1cm4gX3RleHRDb2xvci5nZXQoKTsKK30KKworLSAo
dm9pZClzZXRUZXh0Q29sb3I6KE5TQ29sb3IgKiljb2xvcgoreworICAgIF90ZXh0Q29sb3IgPSBj
b2xvcjsKKyAgICBzZWxmLmNvbG9yUGlja2VySXRlbS5jb2xvciA9IF90ZXh0Q29sb3IuZ2V0KCk7
Cit9CisKKy0gKHZvaWQpX3drQ2hhbmdlQ29sb3I6KGlkKXNlbmRlcgoreworICAgIGlmICghX3dl
YlZpZXdJbXBsKQorICAgICAgICByZXR1cm47CisKKyAgICBfdGV4dENvbG9yID0gc2VsZi5jb2xv
clBpY2tlckl0ZW0uY29sb3I7CisgICAgX3dlYlZpZXdJbXBsLT5wYWdlKCkuZXhlY3V0ZUVkaXRD
b21tYW5kKCJGb3JlQ29sb3IiLCBXZWJDb3JlOjpjb2xvckZyb21OU0NvbG9yKF90ZXh0Q29sb3Iu
Z2V0KCkpLnNlcmlhbGl6ZWQoKSk7Cit9CisKKy0gKE5TVmlld0NvbnRyb2xsZXIgKil0ZXh0TGlz
dFZpZXdDb250cm9sbGVyCit7CisgICAgaWYgKCFfd2tUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRy
b2xsZXIpCisgICAgICAgIF93a1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciA9IGFkb3B0
TlMoW1tXS1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhXZWJW
aWV3SW1wbDpfd2ViVmlld0ltcGxdKTsKKyAgICByZXR1cm4gX3drVGV4dExpc3RUb3VjaEJhclZp
ZXdDb250cm9sbGVyLmdldCgpOworfQorCitAZW5kCisKK25hbWVzcGFjZSBXZWJLaXQgeworTlNU
b3VjaEJhciAqV2ViVmlld0ltcGw6Om1ha2VUb3VjaEJhcigpCit7CisgICAgaWYgKCFtX2NhbkNy
ZWF0ZVRvdWNoQmFycykgeworICAgICAgICBtX2NhbkNyZWF0ZVRvdWNoQmFycyA9IHRydWU7Cisg
ICAgICAgIHVwZGF0ZVRvdWNoQmFyKCk7CisgICAgfQorICAgIHJldHVybiBtX2N1cnJlbnRUb3Vj
aEJhci5nZXQoKTsKK30KKworTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtICpXZWJWaWV3SW1w
bDo6Y2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzUmlj
aGx5RWRpdGFibGUoKSA/IG1fcmljaFRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtLmdldCgp
IDogbV9wbGFpblRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtLmdldCgpOworfQorCitBVkZ1
bmN0aW9uQmFyU2NydWJiZXIgKldlYlZpZXdJbXBsOjptZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3
KCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisg
ICAgaWYgKG1fcGFnZS0+aGFzQWN0aXZlVmlkZW9Gb3JDb250cm9sc01hbmFnZXIoKSkKKyAgICAg
ICAgcmV0dXJuIG1fbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldy5nZXQoKTsKKyNlbmRpZgorICAg
IHJldHVybiBuaWw7Cit9CisKK2Jvb2wgV2ViVmlld0ltcGw6OnVzZU1lZGlhUGxheWJhY2tDb250
cm9sc1ZpZXcoKSBjb25zdAoreworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBpZiAo
aGFzRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIoKSkKKyAgICAgICAgcmV0dXJuICFbbV9mdWxs
U2NyZWVuV2luZG93Q29udHJvbGxlciBpc0Z1bGxTY3JlZW5dOworI2VuZGlmCisgICAgcmV0dXJu
IG1fY2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OworfQorCit2b2lkIFdlYlZp
ZXdJbXBsOjpkaXNtaXNzVGV4dFRvdWNoQmFyUG9wb3Zlckl0ZW1XaXRoSWRlbnRpZmllcihOU1N0
cmluZyAqaWRlbnRpZmllcikKK3sKKyAgICBOU1RvdWNoQmFySXRlbSAqZm91bmRJdGVtID0gbmls
OworICAgIGZvciAoTlNUb3VjaEJhckl0ZW0gKml0ZW0gaW4gdGV4dFRvdWNoQmFyKCkuaXRlbXMp
IHsKKyAgICAgICAgaWYgKFtpdGVtLmlkZW50aWZpZXIgaXNFcXVhbFRvU3RyaW5nOmlkZW50aWZp
ZXJdKSB7CisgICAgICAgICAgICBmb3VuZEl0ZW0gPSBpdGVtOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoW1tpdGVtIGlkZW50aWZpZXJdIGlzRXF1YWxUb1N0
cmluZzpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Rm9ybWF0XSkgeworICAgICAgICAgICAg
Zm9yIChOU1RvdWNoQmFySXRlbSAqY2hpbGRJdGVtIGluIFsoTlNHcm91cFRvdWNoQmFySXRlbSAq
KWl0ZW0gZ3JvdXBUb3VjaEJhcl0uaXRlbXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoW2NoaWxk
SXRlbS5pZGVudGlmaWVyIGlzRXF1YWxUb1N0cmluZzppZGVudGlmaWVyXSkgeworICAgICAgICAg
ICAgICAgICAgICBmb3VuZEl0ZW0gPSBjaGlsZEl0ZW07CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKFtmb3VuZEl0ZW0gaXNLaW5kT2ZDbGFzczpb
TlNQb3BvdmVyVG91Y2hCYXJJdGVtIGNsYXNzXV0pCisgICAgICAgIFsoTlNQb3BvdmVyVG91Y2hC
YXJJdGVtICopZm91bmRJdGVtIGRpc21pc3NQb3BvdmVyOm5pbF07Cit9CisKK3N0YXRpYyBOU0Fy
cmF5PE5TU3RyaW5nICo+ICp0ZXh0VG91Y2hCYXJDdXN0b21pemF0aW9uQWxsb3dlZElkZW50aWZp
ZXJzKCkKK3sKKyAgICByZXR1cm4gQFsgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyQ2hhcmFjdGVy
UGlja2VyLCBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Q29sb3JQaWNrZXIsIE5TVG91Y2hC
YXJJdGVtSWRlbnRpZmllclRleHRTdHlsZSwgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEFs
aWdubWVudCwgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dExpc3QsIE5TVG91Y2hCYXJJdGVt
SWRlbnRpZmllckZsZXhpYmxlU3BhY2UgXTsKK30KKworc3RhdGljIE5TQXJyYXk8TlNTdHJpbmcg
Kj4gKnBsYWluVGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkRlZmF1bHRJdGVtSWRlbnRpZmllcnMo
KQoreworICAgIHJldHVybiBAWyBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJDaGFyYWN0ZXJQaWNr
ZXIsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckNhbmRpZGF0ZUxpc3QgXTsKK30KKworc3RhdGlj
IE5TQXJyYXk8TlNTdHJpbmcgKj4gKnJpY2hUZXh0VG91Y2hCYXJDdXN0b21pemF0aW9uRGVmYXVs
dEl0ZW1JZGVudGlmaWVycygpCit7CisgICAgcmV0dXJuIEBbIE5TVG91Y2hCYXJJdGVtSWRlbnRp
ZmllckNoYXJhY3RlclBpY2tlciwgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEZvcm1hdCwg
TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyQ2FuZGlkYXRlTGlzdCBdOworfQorCitzdGF0aWMgdm9p
ZCB0b3VjaEJhckRpZEV4aXRDdXN0b21pemF0aW9uKENGTm90aWZpY2F0aW9uQ2VudGVyUmVmLCB2
b2lkKiBvYnNlcnZlciwgQ0ZTdHJpbmdSZWYsIGNvbnN0IHZvaWQqLCBDRkRpY3Rpb25hcnlSZWYp
Cit7CisgICAgV2ViVmlld0ltcGwgKndlYlZpZXcgPSAoV2ViVmlld0ltcGwgKilvYnNlcnZlcjsK
KyAgICB3ZWJWaWV3LT5zZXRJc0N1c3RvbWl6aW5nVG91Y2hCYXIoZmFsc2UpOworICAgIHdlYlZp
ZXctPnVwZGF0ZVRvdWNoQmFyKCk7Cit9CisKK3N0YXRpYyB2b2lkIHRvdWNoQmFyV2lsbEVudGVy
Q3VzdG9taXphdGlvbihDRk5vdGlmaWNhdGlvbkNlbnRlclJlZiwgdm9pZCogb2JzZXJ2ZXIsIENG
U3RyaW5nUmVmLCBjb25zdCB2b2lkKiwgQ0ZEaWN0aW9uYXJ5UmVmKQoreworICAgIFdlYlZpZXdJ
bXBsICp3ZWJWaWV3ID0gKFdlYlZpZXdJbXBsICopb2JzZXJ2ZXI7CisgICAgd2ViVmlldy0+c2V0
SXNDdXN0b21pemluZ1RvdWNoQmFyKHRydWUpOworfQorCitzdGF0aWMgdm9pZCBkaWRDaGFuZ2VB
dXRvbWF0aWNUZXh0Q29tcGxldGlvbihDRk5vdGlmaWNhdGlvbkNlbnRlclJlZiwgdm9pZCogb2Jz
ZXJ2ZXIsIENGU3RyaW5nUmVmLCBjb25zdCB2b2lkKiwgQ0ZEaWN0aW9uYXJ5UmVmKQoreworICAg
IFdlYlZpZXdJbXBsICp3ZWJWaWV3ID0gKFdlYlZpZXdJbXBsICopb2JzZXJ2ZXI7CisgICAgd2Vi
Vmlldy0+dXBkYXRlVG91Y2hCYXJBbmRSZWZyZXNoVGV4dEJhcklkZW50aWZpZXJzKCk7Cit9CisK
K3ZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZVRvdWNoQmFyQW5kUmVmcmVzaFRleHRCYXJJZGVudGlm
aWVycygpCit7CisgICAgaWYgKG1fcmljaFRleHRUb3VjaEJhcikKKyAgICAgICAgc2V0VXBUZXh0
VG91Y2hCYXIobV9yaWNoVGV4dFRvdWNoQmFyLmdldCgpKTsKKworICAgIGlmIChtX3BsYWluVGV4
dFRvdWNoQmFyKQorICAgICAgICBzZXRVcFRleHRUb3VjaEJhcihtX3BsYWluVGV4dFRvdWNoQmFy
LmdldCgpKTsKKworICAgIHVwZGF0ZVRvdWNoQmFyKCk7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6
OnNldFVwVGV4dFRvdWNoQmFyKE5TVG91Y2hCYXIgKnRvdWNoQmFyKQoreworICAgIGJvb2wgaXNS
aWNoVGV4dFRvdWNoQmFyID0gdG91Y2hCYXIgPT0gbV9yaWNoVGV4dFRvdWNoQmFyLmdldCgpOwor
ICAgIFt0b3VjaEJhciBzZXREZWxlZ2F0ZTptX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyLmdl
dCgpXTsKKyAgICBbdG91Y2hCYXIgc2V0RGVmYXVsdEl0ZW1zOltOU011dGFibGVTZXQgc2V0V2l0
aE9iamVjdHM6aXNSaWNoVGV4dFRvdWNoQmFyID8gbV9yaWNoVGV4dENhbmRpZGF0ZUxpc3RUb3Vj
aEJhckl0ZW0uZ2V0KCkgOiBtX3BsYWluVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0uZ2V0
KCksIG5pbF1dOworICAgIFt0b3VjaEJhciBzZXRDdXN0b21pemF0aW9uQWxsb3dlZEl0ZW1JZGVu
dGlmaWVyczp0ZXh0VG91Y2hCYXJDdXN0b21pemF0aW9uQWxsb3dlZElkZW50aWZpZXJzKCldOwor
ICAgIFt0b3VjaEJhciBzZXRDdXN0b21pemF0aW9uRGVmYXVsdEl0ZW1JZGVudGlmaWVyczppc1Jp
Y2hUZXh0VG91Y2hCYXIgPyByaWNoVGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkRlZmF1bHRJdGVt
SWRlbnRpZmllcnMoKSA6IHBsYWluVGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkRlZmF1bHRJdGVt
SWRlbnRpZmllcnMoKV07CisKKyAgICBpZiAoTlNHcm91cFRvdWNoQmFySXRlbSAqdGV4dEZvcm1h
dEl0ZW0gPSAoTlNHcm91cFRvdWNoQmFySXRlbSAqKVt0b3VjaEJhciBpdGVtRm9ySWRlbnRpZmll
cjpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Rm9ybWF0XSkKKyAgICAgICAgdGV4dEZvcm1h
dEl0ZW0uZ3JvdXBUb3VjaEJhci5jdXN0b21pemF0aW9uSWRlbnRpZmllciA9IEAiV0tUZXh0Rm9y
bWF0VG91Y2hCYXIiOworfQorCitib29sIFdlYlZpZXdJbXBsOjppc1JpY2hseUVkaXRhYmxlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudFJpY2hs
eUVkaXRhYmxlICYmICFtX3BhZ2UtPm5lZWRzUGxhaW5UZXh0UXVpcmsoKTsKK30KKworTlNUb3Vj
aEJhciAqV2ViVmlld0ltcGw6OnRleHRUb3VjaEJhcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlz
UmljaGx5RWRpdGFibGUoKSA/IG1fcmljaFRleHRUb3VjaEJhci5nZXQoKSA6IG1fcGxhaW5UZXh0
VG91Y2hCYXIuZ2V0KCk7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZVRleHRUb3VjaEJh
cigpCit7CisgICAgaWYgKCFtX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50RWRpdGFibGUp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2lzVXBkYXRpbmdUZXh0VG91Y2hCYXIpCisg
ICAgICAgIHJldHVybjsKKworICAgIFRlbXBvcmFyeUNoYW5nZTxib29sPiBpc1VwZGF0aW5nVGV4
dEZ1bmN0aW9uQmFyKG1faXNVcGRhdGluZ1RleHRUb3VjaEJhciwgdHJ1ZSk7CisKKyAgICBpZiAo
IW1fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIpCisgICAgICAgIG1fdGV4dFRvdWNoQmFySXRl
bUNvbnRyb2xsZXIgPSBhZG9wdE5TKFtbV0tUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBhbGxv
Y10gaW5pdFdpdGhXZWJWaWV3SW1wbDp0aGlzXSk7CisKKyAgICBpZiAoIW1fc3RhcnRlZExpc3Rl
bmluZ1RvQ3VzdG9taXphdGlvbkV2ZW50cykgeworICAgICAgICBDRk5vdGlmaWNhdGlvbkNlbnRl
ckFkZE9ic2VydmVyKENGTm90aWZpY2F0aW9uQ2VudGVyR2V0TG9jYWxDZW50ZXIoKSwgdGhpcywg
dG91Y2hCYXJEaWRFeGl0Q3VzdG9taXphdGlvbiwgKF9fYnJpZGdlIENGU3RyaW5nUmVmKU5TVG91
Y2hCYXJEaWRFeGl0Q3VzdG9taXphdGlvbiwgMCwgQ0ZOb3RpZmljYXRpb25TdXNwZW5zaW9uQmVo
YXZpb3JEZWxpdmVySW1tZWRpYXRlbHkpOworICAgICAgICBDRk5vdGlmaWNhdGlvbkNlbnRlckFk
ZE9ic2VydmVyKENGTm90aWZpY2F0aW9uQ2VudGVyR2V0TG9jYWxDZW50ZXIoKSwgdGhpcywgdG91
Y2hCYXJXaWxsRW50ZXJDdXN0b21pemF0aW9uLCAoX19icmlkZ2UgQ0ZTdHJpbmdSZWYpTlNUb3Vj
aEJhcldpbGxFbnRlckN1c3RvbWl6YXRpb24sIDAsIENGTm90aWZpY2F0aW9uU3VzcGVuc2lvbkJl
aGF2aW9yRGVsaXZlckltbWVkaWF0ZWx5KTsKKyAgICAgICAgQ0ZOb3RpZmljYXRpb25DZW50ZXJB
ZGRPYnNlcnZlcihDRk5vdGlmaWNhdGlvbkNlbnRlckdldExvY2FsQ2VudGVyKCksIHRoaXMsIGRp
ZENoYW5nZUF1dG9tYXRpY1RleHRDb21wbGV0aW9uLCAoX19icmlkZ2UgQ0ZTdHJpbmdSZWYpTlNT
cGVsbENoZWNrZXJEaWRDaGFuZ2VBdXRvbWF0aWNUZXh0Q29tcGxldGlvbk5vdGlmaWNhdGlvbiwg
MCwgQ0ZOb3RpZmljYXRpb25TdXNwZW5zaW9uQmVoYXZpb3JEZWxpdmVySW1tZWRpYXRlbHkpOwor
CisgICAgICAgIG1fc3RhcnRlZExpc3RlbmluZ1RvQ3VzdG9taXphdGlvbkV2ZW50cyA9IHRydWU7
CisgICAgfQorCisgICAgaWYgKCFtX3JpY2hUZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSB8
fCAhbV9wbGFpblRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtKSB7CisgICAgICAgIG1fcmlj
aFRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtID0gYWRvcHROUyhbW05TQ2FuZGlkYXRlTGlz
dFRvdWNoQmFySXRlbSBhbGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOk5TVG91Y2hCYXJJdGVtSWRl
bnRpZmllckNhbmRpZGF0ZUxpc3RdKTsKKyAgICAgICAgW21fcmljaFRleHRDYW5kaWRhdGVMaXN0
VG91Y2hCYXJJdGVtIHNldERlbGVnYXRlOm1fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIuZ2V0
KCldOworICAgICAgICBtX3BsYWluVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gPSBhZG9w
dE5TKFtbTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtIGFsbG9jXSBpbml0V2l0aElkZW50aWZp
ZXI6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyQ2FuZGlkYXRlTGlzdF0pOworICAgICAgICBbbV9w
bGFpblRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtIHNldERlbGVnYXRlOm1fdGV4dFRvdWNo
QmFySXRlbUNvbnRyb2xsZXIuZ2V0KCldOworICAgICAgICByZXF1ZXN0Q2FuZGlkYXRlc0ZvclNl
bGVjdGlvbklmTmVlZGVkKCk7CisgICAgfQorCisgICAgaWYgKCFtX3JpY2hUZXh0VG91Y2hCYXIp
IHsKKyAgICAgICAgbV9yaWNoVGV4dFRvdWNoQmFyID0gYWRvcHROUyhbW05TVG91Y2hCYXIgYWxs
b2NdIGluaXRdKTsKKyAgICAgICAgc2V0VXBUZXh0VG91Y2hCYXIobV9yaWNoVGV4dFRvdWNoQmFy
LmdldCgpKTsKKyAgICAgICAgW21fcmljaFRleHRUb3VjaEJhciBzZXRDdXN0b21pemF0aW9uSWRl
bnRpZmllcjpAIldLUmljaFRleHRUb3VjaEJhciJdOworICAgIH0KKworICAgIGlmICghbV9wbGFp
blRleHRUb3VjaEJhcikgeworICAgICAgICBtX3BsYWluVGV4dFRvdWNoQmFyID0gYWRvcHROUyhb
W05TVG91Y2hCYXIgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgc2V0VXBUZXh0VG91Y2hCYXIobV9w
bGFpblRleHRUb3VjaEJhci5nZXQoKSk7CisgICAgICAgIFttX3BsYWluVGV4dFRvdWNoQmFyIHNl
dEN1c3RvbWl6YXRpb25JZGVudGlmaWVyOkAiV0tQbGFpblRleHRUb3VjaEJhciJdOworICAgIH0K
KworICAgIGlmIChbTlNTcGVsbENoZWNrZXIgaXNBdXRvbWF0aWNUZXh0Q29tcGxldGlvbkVuYWJs
ZWRdICYmICFtX2lzQ3VzdG9taXppbmdUb3VjaEJhcikgeworICAgICAgICBCT09MIHNob3dDYW5k
aWRhdGVzTGlzdCA9ICFtX3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0aW9uSXNSYW5nZSB8fCBt
X2lzSGFuZGxpbmdBY2NlcHRlZENhbmRpZGF0ZTsKKyAgICAgICAgW2NhbmRpZGF0ZUxpc3RUb3Vj
aEJhckl0ZW0oKSB1cGRhdGVXaXRoSW5zZXJ0aW9uUG9pbnRWaXNpYmlsaXR5OnNob3dDYW5kaWRh
dGVzTGlzdF07CisgICAgICAgIFttX3ZpZXcgX2RpZFVwZGF0ZUNhbmRpZGF0ZUxpc3RWaXNpYmls
aXR5OnNob3dDYW5kaWRhdGVzTGlzdF07CisgICAgfQorCisgICAgaWYgKG1fcGFnZS0+ZWRpdG9y
U3RhdGUoKS5pc0luUGFzc3dvcmRGaWVsZCkgeworICAgICAgICAvLyBXZSBkb24ndCByZXF1ZXN0
IGNhbmRpZGF0ZXMgZm9yIHBhc3N3b3JkIGZpZWxkcy4gSWYgdGhlIHVzZXIgd2FzIHByZXZpb3Vz
bHkgaW4gYSBub24tcGFzc3dvcmQgZmllbGQsIHRoZW4gdGhlCisgICAgICAgIC8vIG9sZCBjYW5k
aWRhdGVzIHdpbGwgc3RpbGwgc2hvdyBieSBkZWZhdWx0LCBzbyB3ZSBjbGVhciB0aGVtIGhlcmUg
Ynkgc2V0dGluZyBhbiBlbXB0eSBhcnJheSBvZiBjYW5kaWRhdGVzLgorICAgICAgICBpZiAoIW1f
ZW1wdHlDYW5kaWRhdGVzQXJyYXkpCisgICAgICAgICAgICBtX2VtcHR5Q2FuZGlkYXRlc0FycmF5
ID0gYWRvcHROUyhbW05TQXJyYXkgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgW2NhbmRpZGF0ZUxp
c3RUb3VjaEJhckl0ZW0oKSBzZXRDYW5kaWRhdGVzOm1fZW1wdHlDYW5kaWRhdGVzQXJyYXkuZ2V0
KCkgZm9yU2VsZWN0ZWRSYW5nZTpOU01ha2VSYW5nZSgwLCAwKSBpblN0cmluZzpuaWxdOworICAg
IH0KKworICAgIE5TVG91Y2hCYXIgKnRleHRUb3VjaEJhciA9IHRoaXMtPnRleHRUb3VjaEJhcigp
OworICAgIEJPT0wgaXNTaG93aW5nQ29tYmluZWRUZXh0Rm9ybWF0SXRlbSA9IFt0ZXh0VG91Y2hC
YXIuaXRlbUlkZW50aWZpZXJzIGNvbnRhaW5zT2JqZWN0Ok5TVG91Y2hCYXJJdGVtSWRlbnRpZmll
clRleHRGb3JtYXRdOworICAgIFt0ZXh0VG91Y2hCYXIgc2V0UHJpbmNpcGFsSXRlbUlkZW50aWZp
ZXI6aXNTaG93aW5nQ29tYmluZWRUZXh0Rm9ybWF0SXRlbSA/IE5TVG91Y2hCYXJJdGVtSWRlbnRp
ZmllclRleHRGb3JtYXQgOiBuaWxdOworCisgICAgLy8gU2V0IGN1cnJlbnQgdHlwaW5nIGF0dHJp
YnV0ZXMgZm9yIHJpY2ggdGV4dC4gVGhpcyB3aWxsIGVuc3VyZSB0aGF0IHRoZSBidXR0b25zIHJl
ZmxlY3QgdGhlIHN0YXRlIG9mCisgICAgLy8gdGhlIHRleHQgd2hlbiBjaGFuZ2luZyBzZWxlY3Rp
b24gdGhyb3VnaG91dCB0aGUgZG9jdW1lbnQuCisgICAgaWYgKGlzUmljaGx5RWRpdGFibGUoKSkg
eworICAgICAgICBjb25zdCBFZGl0b3JTdGF0ZSYgZWRpdG9yU3RhdGUgPSBtX3BhZ2UtPmVkaXRv
clN0YXRlKCk7CisgICAgICAgIGlmICghZWRpdG9yU3RhdGUuaXNNaXNzaW5nUG9zdExheW91dERh
dGEpIHsKKyAgICAgICAgICAgIFttX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFRleHRJ
c0JvbGQ6KGJvb2wpKG1fcGFnZS0+ZWRpdG9yU3RhdGUoKS5wb3N0TGF5b3V0RGF0YSgpLnR5cGlu
Z0F0dHJpYnV0ZXMgJiBBdHRyaWJ1dGVCb2xkKV07CisgICAgICAgICAgICBbbV90ZXh0VG91Y2hC
YXJJdGVtQ29udHJvbGxlciBzZXRUZXh0SXNJdGFsaWM6KGJvb2wpKG1fcGFnZS0+ZWRpdG9yU3Rh
dGUoKS5wb3N0TGF5b3V0RGF0YSgpLnR5cGluZ0F0dHJpYnV0ZXMgJiBBdHRyaWJ1dGVJdGFsaWNz
KV07CisgICAgICAgICAgICBbbV90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRUZXh0SXNV
bmRlcmxpbmVkOihib29sKShtX3BhZ2UtPmVkaXRvclN0YXRlKCkucG9zdExheW91dERhdGEoKS50
eXBpbmdBdHRyaWJ1dGVzICYgQXR0cmlidXRlVW5kZXJsaW5lKV07CisgICAgICAgICAgICBbbV90
ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRUZXh0Q29sb3I6bnNDb2xvcihlZGl0b3JTdGF0
ZS5wb3N0TGF5b3V0RGF0YSgpLnRleHRDb2xvcildOworICAgICAgICAgICAgW1ttX3RleHRUb3Vj
aEJhckl0ZW1Db250cm9sbGVyIHRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlcl0gc2V0Q3Vy
cmVudExpc3RUeXBlOihMaXN0VHlwZSltX3BhZ2UtPmVkaXRvclN0YXRlKCkucG9zdExheW91dERh
dGEoKS5lbmNsb3NpbmdMaXN0VHlwZV07CisKKyAgICAgICAgICAgIE5TVGV4dEFsaWdubWVudCB0
ZXh0QWxpZ25tZW50OworICAgICAgICAgICAgc3dpdGNoIChlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0
RGF0YSgpLnRleHRBbGlnbm1lbnQpIHsKKyAgICAgICAgICAgIGNhc2UgTm9BbGlnbm1lbnQ6Cisg
ICAgICAgICAgICAgICAgdGV4dEFsaWdubWVudCA9IE5TVGV4dEFsaWdubWVudE5hdHVyYWw7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIExlZnRBbGlnbm1lbnQ6Cisg
ICAgICAgICAgICAgICAgdGV4dEFsaWdubWVudCA9IE5TVGV4dEFsaWdubWVudExlZnQ7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFJpZ2h0QWxpZ25tZW50OgorICAg
ICAgICAgICAgICAgIHRleHRBbGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRSaWdodDsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ2VudGVyQWxpZ25tZW50OgorICAg
ICAgICAgICAgICAgIHRleHRBbGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRDZW50ZXI7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEp1c3RpZmllZEFsaWdubWVudDoK
KyAgICAgICAgICAgICAgICB0ZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25tZW50SnVzdGlmaWVk
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgW21f
dGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0Q3VycmVudFRleHRBbGlnbm1lbnQ6dGV4dEFs
aWdubWVudF07CisgICAgICAgIH0KKyAgICAgICAgQk9PTCBpc1Nob3dpbmdDYW5kaWRhdGVMaXN0
SXRlbSA9IFt0ZXh0VG91Y2hCYXIuaXRlbUlkZW50aWZpZXJzIGNvbnRhaW5zT2JqZWN0Ok5TVG91
Y2hCYXJJdGVtSWRlbnRpZmllckNhbmRpZGF0ZUxpc3RdICYmIFtOU1NwZWxsQ2hlY2tlciBpc0F1
dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWRdOworICAgICAgICBbbV90ZXh0VG91Y2hCYXJJ
dGVtQ29udHJvbGxlciBzZXRVc2VzTmFycm93VGV4dFN0eWxlSXRlbTppc1Nob3dpbmdDb21iaW5l
ZFRleHRGb3JtYXRJdGVtICYmIGlzU2hvd2luZ0NhbmRpZGF0ZUxpc3RJdGVtXTsKKyAgICB9Cit9
CisKK3ZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZU1lZGlhVG91Y2hCYXIoKQoreworI2lmIEVOQUJM
RShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBpZiAoIW1fbWVkaWFUb3VjaEJh
clByb3ZpZGVyKQorICAgICAgICBtX21lZGlhVG91Y2hCYXJQcm92aWRlciA9IGFkb3B0TlMoW2Fs
bG9jQVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNQcm92aWRlckluc3RhbmNlKCkgaW5pdF0p
OworCisgICAgaWYgKCFtX21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcpCisgICAgICAgIG1fbWVk
aWFQbGF5YmFja0NvbnRyb2xzVmlldyA9IGFkb3B0TlMoW2FsbG9jQVZGdW5jdGlvbkJhclNjcnVi
YmVySW5zdGFuY2UoKSBpbml0XSk7CisKKyAgICBpZiAoIW1fcGxheWJhY2tDb250cm9sc01hbmFn
ZXIpCisgICAgICAgIG1fcGxheWJhY2tDb250cm9sc01hbmFnZXIgPSBhZG9wdE5TKFtbV2ViUGxh
eWJhY2tDb250cm9sc01hbmFnZXIgYWxsb2NdIGluaXRdKTsKKworICAgIGlmIChQbGF0Zm9ybVdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSogaW50ZXJmYWNlID0gbV9wYWdlLT5wbGF5YmFja1Nl
c3Npb25NYW5hZ2VyKCktPmNvbnRyb2xzTWFuYWdlckludGVyZmFjZSgpKQorICAgICAgICBbbV9w
bGF5YmFja0NvbnRyb2xzTWFuYWdlciBzZXRXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6
aW50ZXJmYWNlXTsKKworICAgIFttX21lZGlhVG91Y2hCYXJQcm92aWRlciBzZXRQbGF5YmFja0Nv
bnRyb2xzQ29udHJvbGxlcjptX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmdldCgpXTsKKyAgICBb
bV9tZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3IHNldFBsYXliYWNrQ29udHJvbHNDb250cm9sbGVy
Om1fcGxheWJhY2tDb250cm9sc01hbmFnZXIuZ2V0KCldOworCisgICAgaWYgKCF1c2VNZWRpYVBs
YXliYWNrQ29udHJvbHNWaWV3KCkpIHsKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAg
ICAgIC8vIElmIHdlIGNhbid0IGhhdmUgYSBtZWRpYSBwb3BvdmVyIGZ1bmN0aW9uIGJhciBpdGVt
LCBpdCBtaWdodCBiZSBiZWNhdXNlIHdlIGFyZSBpbiBmdWxsIHNjcmVlbi4KKyAgICAgICAgLy8g
SWYgc28sIGN1c3RvbWl6ZSB0aGUgZXNjYXBlIGtleS4KKyAgICAgICAgTlNUb3VjaEJhciAqdG91
Y2hCYXIgPSBbbV9tZWRpYVRvdWNoQmFyUHJvdmlkZXIgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3Rvcih0b3VjaEJhcildID8gWyhpZCltX21lZGlhVG91Y2hCYXJQcm92aWRlci5nZXQoKSB0b3Vj
aEJhcl0gOiBbKGlkKW1fbWVkaWFUb3VjaEJhclByb3ZpZGVyLmdldCgpIHRvdWNoQmFyXTsKKyAg
ICAgICAgaWYgKGhhc0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyKCkgJiYgW21fZnVsbFNjcmVl
bldpbmRvd0NvbnRyb2xsZXIgaXNGdWxsU2NyZWVuXSkgeworICAgICAgICAgICAgaWYgKCFtX2V4
aXRGdWxsU2NyZWVuQnV0dG9uKSB7CisgICAgICAgICAgICAgICAgbV9leGl0RnVsbFNjcmVlbkJ1
dHRvbiA9IGFkb3B0TlMoW1tOU0N1c3RvbVRvdWNoQmFySXRlbSBhbGxvY10gaW5pdFdpdGhJZGVu
dGlmaWVyOldLTWVkaWFFeGl0RnVsbFNjcmVlbkl0ZW1dKTsKKworICAgICAgICAgICAgICAgIE5T
SW1hZ2UgKmltYWdlID0gW05TSW1hZ2UgaW1hZ2VOYW1lZDpOU0ltYWdlTmFtZVRvdWNoQmFyRXhp
dEZ1bGxTY3JlZW5UZW1wbGF0ZV07CisgICAgICAgICAgICAgICAgW2ltYWdlIHNldFRlbXBsYXRl
OllFU107CisKKyAgICAgICAgICAgICAgICBOU0J1dHRvbiAqZXhpdEZ1bGxTY3JlZW5CdXR0b24g
PSBbTlNCdXR0b24gYnV0dG9uV2l0aFRpdGxlOmltYWdlID8gQCIiIDogQCJFeGl0IiBpbWFnZTpp
bWFnZSB0YXJnZXQ6bV9mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5nZXQoKSBhY3Rpb246QHNl
bGVjdG9yKHJlcXVlc3RFeGl0RnVsbFNjcmVlbildOworICAgICAgICAgICAgICAgIFtleGl0RnVs
bFNjcmVlbkJ1dHRvbiBzZXRBY2Nlc3NpYmlsaXR5VGl0bGU6V2ViQ29yZTo6ZXhpdEZ1bGxTY3Jl
ZW5CdXR0b25BY2Nlc3NpYmlsaXR5VGl0bGUoKV07CisKKyAgICAgICAgICAgICAgICBbW2V4aXRG
dWxsU2NyZWVuQnV0dG9uLndpZHRoQW5jaG9yIGNvbnN0cmFpbnRMZXNzVGhhbk9yRXF1YWxUb0Nv
bnN0YW50OmV4aXRGdWxsU2NyZWVuQnV0dG9uV2lkdGhdIHNldEFjdGl2ZTpZRVNdOworICAgICAg
ICAgICAgICAgIFttX2V4aXRGdWxsU2NyZWVuQnV0dG9uIHNldFZpZXc6ZXhpdEZ1bGxTY3JlZW5C
dXR0b25dOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdG91Y2hCYXIuZXNjYXBlS2V5UmVw
bGFjZW1lbnRJdGVtID0gbV9leGl0RnVsbFNjcmVlbkJ1dHRvbi5nZXQoKTsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICB0b3VjaEJhci5lc2NhcGVLZXlSZXBsYWNlbWVudEl0ZW0gPSBuaWw7
CisjZW5kaWYKKyAgICAgICAgLy8gVGhlIHJlc3Qgb2YgdGhlIHdvcmsgdG8gdXBkYXRlIHRoZSBt
ZWRpYSBmdW5jdGlvbiBiYXIgb25seSBhcHBsaWVzIHRvIHRoZSBwb3BvdmVyIHZlcnNpb24sIHNv
IHJldHVybiBlYXJseS4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3BsYXli
YWNrQ29udHJvbHNNYW5hZ2VyICYmIG1fdmlldyA9PSBtX3ZpZXcud2luZG93LmZpcnN0UmVzcG9u
ZGVyICYmIFttX3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViX2RpZEFkZE1l
ZGlhQ29udHJvbHNNYW5hZ2VyOildKQorICAgICAgICBbbV92aWV3IF93ZWJfZGlkQWRkTWVkaWFD
b250cm9sc01hbmFnZXI6bV9tZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3LmdldCgpXTsKKyNlbmRp
ZgorfQorCit2b2lkIFdlYlZpZXdJbXBsOjpmb3JjZVJlcXVlc3RDYW5kaWRhdGVzRm9yVGVzdGlu
ZygpCit7CisgICAgbV9jYW5DcmVhdGVUb3VjaEJhcnMgPSB0cnVlOworICAgIHVwZGF0ZVRvdWNo
QmFyKCk7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZVRvdWNoQmFyKCkKK3sKKyAgICBp
ZiAoIW1fY2FuQ3JlYXRlVG91Y2hCYXJzKQorICAgICAgICByZXR1cm47CisKKyAgICBOU1RvdWNo
QmFyICp0b3VjaEJhciA9IG5pbDsKKyAgICBib29sIHVzZXJBY3Rpb25SZXF1aXJlbWVudHNIYXZl
QmVlbk1ldCA9IG1fcmVxdWlyZXNVc2VyQWN0aW9uRm9yRWRpdGluZ0NvbnRyb2xzTWFuYWdlciA/
IG1fcGFnZS0+aGFzSGFkU2VsZWN0aW9uQ2hhbmdlc0Zyb21Vc2VySW50ZXJhY3Rpb24oKSA6IHRy
dWU7CisgICAgaWYgKG1fcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0NvbnRlbnRFZGl0YWJsZSAmJiAh
bV9wYWdlLT5uZWVkc0hpZGRlbkNvbnRlbnRFZGl0YWJsZVF1aXJrKCkpIHsKKyAgICAgICAgdXBk
YXRlVGV4dFRvdWNoQmFyKCk7CisgICAgICAgIGlmICh1c2VyQWN0aW9uUmVxdWlyZW1lbnRzSGF2
ZUJlZW5NZXQpCisgICAgICAgICAgICB0b3VjaEJhciA9IHRleHRUb3VjaEJhcigpOworICAgIH0K
KyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgZWxzZSBpZiAo
bV9wYWdlLT5oYXNBY3RpdmVWaWRlb0ZvckNvbnRyb2xzTWFuYWdlcigpKSB7CisgICAgICAgIHVw
ZGF0ZU1lZGlhVG91Y2hCYXIoKTsKKyAgICAgICAgLy8gSWYgdXNlTWVkaWFQbGF5YmFja0NvbnRy
b2xzVmlldygpIGlzIHRydWUsIHRoZW4gd2UgYXJlIHJlbHlpbmcgb24gdGhlIEFQSSBjbGllbnQg
dG8gZGlzcGxheSBhIHBvcG92ZXIgdmVyc2lvbgorICAgICAgICAvLyBvZiB0aGUgbWVkaWEgdGlt
ZWxpbmUgaW4gdGhlaXIgb3duIGZ1bmN0aW9uIGJhci4gSWYgaXQgaXMgZmFsc2UsIHRoZW4gd2Ug
d2lsbCBkaXNwbGF5IHRoZSBtZWRpYSB0aW1lbGluZSBpbiBvdXIKKyAgICAgICAgLy8gZnVuY3Rp
b24gYmFyLgorICAgICAgICBpZiAoIXVzZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSkgewor
ICAgICAgICAgICAgdG91Y2hCYXIgPSBbbV9tZWRpYVRvdWNoQmFyUHJvdmlkZXIgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3Rvcih0b3VjaEJhcildID8gWyhpZCltX21lZGlhVG91Y2hCYXJQcm92
aWRlci5nZXQoKSB0b3VjaEJhcl0gOiBbKGlkKW1fbWVkaWFUb3VjaEJhclByb3ZpZGVyLmdldCgp
IHRvdWNoQmFyXTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoW21fbWVkaWFUb3VjaEJhclBy
b3ZpZGVyIHBsYXliYWNrQ29udHJvbHNDb250cm9sbGVyXSkgeworICAgICAgICBpZiAobV9jbGll
bnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcpIHsKKyAgICAgICAgICAgIGlmIChbbV92
aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYl9kaWRSZW1vdmVNZWRpYUNvbnRy
b2xzTWFuYWdlcildICYmIG1fdmlldyA9PSBtX3ZpZXcud2luZG93LmZpcnN0UmVzcG9uZGVyKQor
ICAgICAgICAgICAgICAgIFttX3ZpZXcgX3dlYl9kaWRSZW1vdmVNZWRpYUNvbnRyb2xzTWFuYWdl
cl07CisgICAgICAgIH0KKyAgICAgICAgW21fbWVkaWFUb3VjaEJhclByb3ZpZGVyIHNldFBsYXli
YWNrQ29udHJvbHNDb250cm9sbGVyOm5pbF07CisgICAgICAgIFttX21lZGlhUGxheWJhY2tDb250
cm9sc1ZpZXcgc2V0UGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXI6bmlsXTsKKyAgICB9CisjZW5k
aWYKKworICAgIGlmICh0b3VjaEJhciA9PSBtX2N1cnJlbnRUb3VjaEJhcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gSWYgbV9lZGl0YWJsZUVsZW1lbnRJc0ZvY3VzZWQgaXMgdHJ1ZSwgdGhl
biB3ZSBtYXkgaGF2ZSBhIG5vbi1lZGl0YWJsZSBzZWxlY3Rpb24gcmlnaHQgbm93IGp1c3QgYmVj
YXVzZQorICAgIC8vIHRoZSB1c2VyIGlzIGNsaWNraW5nIG9yIHRhYmJpbmcgYmV0d2VlbiBlZGl0
YWJsZSBmaWVsZHMuCisgICAgaWYgKG1fZWRpdGFibGVFbGVtZW50SXNGb2N1c2VkICYmIHRvdWNo
QmFyICE9IHRleHRUb3VjaEJhcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2N1cnJlbnRU
b3VjaEJhciA9IHRvdWNoQmFyOworICAgIFttX3ZpZXcgd2lsbENoYW5nZVZhbHVlRm9yS2V5OkAi
dG91Y2hCYXIiXTsKKyAgICBbbV92aWV3IHNldFRvdWNoQmFyOm1fY3VycmVudFRvdWNoQmFyLmdl
dCgpXTsKKyAgICBbbV92aWV3IGRpZENoYW5nZVZhbHVlRm9yS2V5OkAidG91Y2hCYXIiXTsKK30K
KworYm9vbCBXZWJWaWV3SW1wbDo6c2hvdWxkUmVxdWVzdENhbmRpZGF0ZXMoKSBjb25zdAorewor
ICAgIHJldHVybiAhbV9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzSW5QYXNzd29yZEZpZWxkICYmIGNh
bmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0oKS5jYW5kaWRhdGVMaXN0VmlzaWJsZTsKK30KKwordm9p
ZCBXZWJWaWV3SW1wbDo6c2hvd0NhbmRpZGF0ZXMoTlNBcnJheSAqY2FuZGlkYXRlcywgTlNTdHJp
bmcgKnN0cmluZywgTlNSZWN0IHJlY3RPZlR5cGVkU3RyaW5nLCBOU1JhbmdlIHNlbGVjdGVkUmFu
Z2UsIE5TVmlldyAqdmlldywgdm9pZCAoXmNvbXBsZXRpb25IYW5kbGVyKShOU1RleHRDaGVja2lu
Z1Jlc3VsdCAqYWNjZXB0ZWRDYW5kaWRhdGUpKQoreworICAgIFtjYW5kaWRhdGVMaXN0VG91Y2hC
YXJJdGVtKCkgc2V0Q2FuZGlkYXRlczpjYW5kaWRhdGVzIGZvclNlbGVjdGVkUmFuZ2U6c2VsZWN0
ZWRSYW5nZSBpblN0cmluZzpzdHJpbmddOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjp3ZWJWaWV3
SW1wbEFkZGl0aW9uc1dpbGxEZXN0cm95VmlldygpCit7CisgICAgW21fdGV4dFRvdWNoQmFySXRl
bUNvbnRyb2xsZXIgZGlkRGVzdHJveVZpZXddOworCisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19D
T05UUk9MU19NQU5BR0VSKQorICAgIFttX21lZGlhVG91Y2hCYXJQcm92aWRlciBzZXRQbGF5YmFj
a0NvbnRyb2xzQ29udHJvbGxlcjpuaWxdOworICAgIFttX21lZGlhUGxheWJhY2tDb250cm9sc1Zp
ZXcgc2V0UGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXI6bmlsXTsKKyNlbmRpZgorCisgICAgQ0ZO
b3RpZmljYXRpb25DZW50ZXJSZW1vdmVPYnNlcnZlcihDRk5vdGlmaWNhdGlvbkNlbnRlckdldExv
Y2FsQ2VudGVyKCksIHRoaXMsIChfX2JyaWRnZSBDRlN0cmluZ1JlZilOU1RvdWNoQmFyRGlkRXhp
dEN1c3RvbWl6YXRpb24sIDApOworICAgIENGTm90aWZpY2F0aW9uQ2VudGVyUmVtb3ZlT2JzZXJ2
ZXIoQ0ZOb3RpZmljYXRpb25DZW50ZXJHZXRMb2NhbENlbnRlcigpLCB0aGlzLCAoX19icmlkZ2Ug
Q0ZTdHJpbmdSZWYpTlNUb3VjaEJhcldpbGxFbnRlckN1c3RvbWl6YXRpb24sIDApOworICAgIENG
Tm90aWZpY2F0aW9uQ2VudGVyUmVtb3ZlT2JzZXJ2ZXIoQ0ZOb3RpZmljYXRpb25DZW50ZXJHZXRM
b2NhbENlbnRlcigpLCB0aGlzLCAoX19icmlkZ2UgQ0ZTdHJpbmdSZWYpTlNTcGVsbENoZWNrZXJE
aWRDaGFuZ2VBdXRvbWF0aWNUZXh0Q29tcGxldGlvbk5vdGlmaWNhdGlvbiwgMCk7Cit9CisKK3Zv
aWQgV2ViVmlld0ltcGw6OnNldEVkaXRhYmxlRWxlbWVudElzRm9jdXNlZChib29sIGVkaXRhYmxl
RWxlbWVudElzRm9jdXNlZCkKK3sKKyAgICBtX2VkaXRhYmxlRWxlbWVudElzRm9jdXNlZCA9IGVk
aXRhYmxlRWxlbWVudElzRm9jdXNlZDsKKworICAgIC8vIElmIHRoZSBlZGl0YWJsZSBlbGVtZW50
cyBoYXZlIGJsdXJyZWQsIHRoZW4gd2UgbWlnaHQgbmVlZCB0byBnZXQgcmlkIG9mIHRoZSBlZGl0
aW5nIGZ1bmN0aW9uIGJhci4KKyAgICBpZiAoIW1fZWRpdGFibGVFbGVtZW50SXNGb2N1c2VkKQor
ICAgICAgICB1cGRhdGVUb3VjaEJhcigpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKICNl
bHNlCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotdm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlV2ViVmll
d0ltcGxBZGRpdGlvbnMoKQordm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlVG91Y2hCYXIoKQogewog
fQogCkBAIC00NjUsNyArMTE1Myw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldEVkaXRhYmxlRWxl
bWVudElzRm8KIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0jZW5kaWYgLy8gX19NQUNfT1Nf
WF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAgJiYgVVNFKEFQUExFX0lOVEVSTkFMX1NE
SykKKyNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAg
LTYxNSw3ICsxMzAzLDcgQEAgYm9vbCBXZWJWaWV3SW1wbDo6YmVjb21lRmlyc3RSZXNwb25kZXIo
KQogCiAgICAgbV9pbkJlY29tZUZpcnN0UmVzcG9uZGVyID0gZmFsc2U7CiAKLSAgICB1cGRhdGVX
ZWJWaWV3SW1wbEFkZGl0aW9ucygpOworICAgIHVwZGF0ZVRvdWNoQmFyKCk7CiAKICAgICBpZiAo
ZGlyZWN0aW9uICE9IE5TRGlyZWN0U2VsZWN0aW9uKSB7CiAgICAgICAgIE5TRXZlbnQgKmV2ZW50
ID0gW05TQXBwIGN1cnJlbnRFdmVudF07CkBAIC0xODA4LDcgKzI0OTYsNyBAQCB2b2lkIFdlYlZp
ZXdJbXBsOjpzZWxlY3Rpb25EaWRDaGFuZ2UoKQogICAgIGlmICghbV9pc0hhbmRsaW5nQWNjZXB0
ZWRDYW5kaWRhdGUpCiAgICAgICAgIG1fc29mdFNwYWNlUmFuZ2UgPSBOU01ha2VSYW5nZShOU05v
dEZvdW5kLCAwKTsKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIw
MAotICAgIHVwZGF0ZVdlYlZpZXdJbXBsQWRkaXRpb25zKCk7CisgICAgdXBkYXRlVG91Y2hCYXIo
KTsKICAgICBpZiAoIW1fcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc01pc3NpbmdQb3N0TGF5b3V0RGF0
YSkKICAgICAgICAgcmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb25JZk5lZWRlZCgpOwogI2Vu
ZGlmCkBAIC0yNDQ4LDcgKzMxMzYsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpkaWRIYW5kbGVBY2Nl
cHRlZENhbmRpCiB2b2lkIFdlYlZpZXdJbXBsOjp2aWRlb0NvbnRyb2xzTWFuYWdlckRpZENoYW5n
ZSgpCiB7CiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAKLSAg
ICB1cGRhdGVXZWJWaWV3SW1wbEFkZGl0aW9ucygpOworICAgIHVwZGF0ZVRvdWNoQmFyKCk7CiAj
ZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4NDA1KQorKysgU291
cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjcgQEAK
KzIwMTYtMTEtMDQgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIFN1
cHBvcnQgVG91Y2hCYXIgaW4gV2ViS2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjQ0MzcKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAg
ICAgICByZGFyOi8vcHJvYmxlbS8yODg3NjUyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1t
OgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKToK
KyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6dXBkYXRlRWRpdG9yU3RhdGVBZnRlckxheW91dElm
RWRpdGFiaWxpdHlDaGFuZ2VkKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgor
ICAgICAgICAoLVtXZWJIVE1MVmlldyBjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtXSk6CisgICAg
ICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtfV2ViVGV4dExpc3RUb3VjaEJh
clZpZXdDb250cm9sbGVyIGluaXRXaXRoV2ViVmlldzpdKToKKyAgICAgICAgKC1bX1dlYlRleHRM
aXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciBfc2VsZWN0TGlzdDpdKToKKyAgICAgICAgKC1bX1dl
YlRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciBzZXRDdXJyZW50TGlzdFR5cGU6XSk6Cisg
ICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIGluaXRXaXRoV2ViVmlldzpd
KToKKyAgICAgICAgKC1bV2ViVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgaXRlbUZvcklkZW50
aWZpZXI6XSk6CisgICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHdlYlRl
eHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlcl0pOgorICAgICAgICAoLVtXZWJUZXh0VG91Y2hC
YXJJdGVtQ29udHJvbGxlciBzZXRUZXh0SXNCb2xkOl0pOgorICAgICAgICAoLVtXZWJUZXh0VG91
Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRUZXh0SXNJdGFsaWM6XSk6CisgICAgICAgICgtW1dlYlRl
eHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFRleHRJc1VuZGVybGluZWQ6XSk6CisgICAgICAg
ICgtW1dlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIF93ZWJDaGFuZ2VUZXh0U3R5bGU6XSk6
CisgICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldEN1cnJlbnRUZXh0
QWxpZ25tZW50Ol0pOgorICAgICAgICAoLVtXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBf
d2ViQ2hhbmdlVGV4dEFsaWdubWVudDpdKToKKyAgICAgICAgKC1bV2ViVGV4dFRvdWNoQmFySXRl
bUNvbnRyb2xsZXIgdGV4dENvbG9yXSk6CisgICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0ZW1D
b250cm9sbGVyIHNldFRleHRDb2xvcjpdKToKKyAgICAgICAgKC1bV2ViVGV4dFRvdWNoQmFySXRl
bUNvbnRyb2xsZXIgX3dlYkNoYW5nZUNvbG9yOl0pOgorICAgICAgICAoLVtXZWJUZXh0VG91Y2hC
YXJJdGVtQ29udHJvbGxlciB0ZXh0TGlzdFZpZXdDb250cm9sbGVyXSk6CisgICAgICAgICgtW1dl
YlZpZXcgX2NvbW1vbkluaXRpYWxpemF0aW9uV2l0aEZyYW1lTmFtZTpncm91cE5hbWU6XSk6Cisg
ICAgICAgICgtW1dlYlZpZXcgc2hvd0NhbmRpZGF0ZXM6Zm9yU3RyaW5nOmluUmVjdDpmb3JTZWxl
Y3RlZFJhbmdlOnZpZXc6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dlYlZpZXcg
c2hvdWxkUmVxdWVzdENhbmRpZGF0ZXNdKToKKyAgICAgICAgKC1bV2ViVmlldyBmb3JjZVJlcXVl
c3RDYW5kaWRhdGVzRm9yVGVzdGluZ10pOgorICAgICAgICAoLVtXZWJWaWV3IG1ha2VUb3VjaEJh
cl0pOgorICAgICAgICAoLVtXZWJWaWV3IHRvdWNoQmFyOm1ha2VJdGVtRm9ySWRlbnRpZmllcjpd
KToKKyAgICAgICAgKHRleHRDaGVja2luZ1Jlc3VsdEZyb21OU1RleHRDaGVja2luZ1Jlc3VsdCk6
CisgICAgICAgICgtW1dlYlZpZXcgY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTplbmRTZWxlY3Rp
bmdDYW5kaWRhdGVBdEluZGV4Ol0pOgorICAgICAgICAoLVtXZWJWaWV3IGNhbmRpZGF0ZUxpc3RU
b3VjaEJhckl0ZW06Y2hhbmdlZENhbmRpZGF0ZUxpc3RWaXNpYmlsaXR5Ol0pOgorICAgICAgICAo
LVtXZWJWaWV3IF9zZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyRm9yTWVkaWFFbGVtZW50Ol0p
OgorICAgICAgICAoLVtXZWJWaWV3IF9jbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyXSk6Cisg
ICAgICAgICgtW1dlYlZpZXcgX2Rpc21pc3NUZXh0VG91Y2hCYXJQb3BvdmVySXRlbVdpdGhJZGVu
dGlmaWVyOl0pOgorICAgICAgICAoLVtXZWJWaWV3IF90ZXh0VG91Y2hCYXJDdXN0b21pemF0aW9u
QWxsb3dlZElkZW50aWZpZXJzXSk6CisgICAgICAgICgtW1dlYlZpZXcgX3BsYWluVGV4dFRvdWNo
QmFyQ3VzdG9taXphdGlvbkRlZmF1bHRJdGVtSWRlbnRpZmllcnNdKToKKyAgICAgICAgKC1bV2Vi
VmlldyBfcmljaFRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25EZWZhdWx0SXRlbUlkZW50aWZpZXJz
XSk6CisgICAgICAgICgtW1dlYlZpZXcgdG91Y2hCYXJEaWRFeGl0Q3VzdG9taXphdGlvbjpdKToK
KyAgICAgICAgKC1bV2ViVmlldyB0b3VjaEJhcldpbGxFbnRlckN1c3RvbWl6YXRpb246XSk6Cisg
ICAgICAgICgtW1dlYlZpZXcgZGlkQ2hhbmdlQXV0b21hdGljVGV4dENvbXBsZXRpb246XSk6Cisg
ICAgICAgICgtW1dlYlZpZXcgc2V0VXBUZXh0VG91Y2hCYXI6XSk6CisgICAgICAgICgtW1dlYlZp
ZXcgX2lzUmljaGx5RWRpdGFibGVdKToKKyAgICAgICAgKC1bV2ViVmlldyB0ZXh0VG91Y2hCYXJd
KToKKyAgICAgICAgKC1bV2ViVmlldyB1cGRhdGVUZXh0VG91Y2hCYXJdKToKKyAgICAgICAgKC1b
V2ViVmlldyB1cGRhdGVNZWRpYVRvdWNoQmFyXSk6CisgICAgICAgICgtW1dlYlZpZXcgdXBkYXRl
VG91Y2hCYXJdKToKKyAgICAgICAgKC1bV2ViVmlldyBwcmVwYXJlRm9yTW91c2VEb3duXSk6Cisg
ICAgICAgICgtW1dlYlZpZXcgcHJlcGFyZUZvck1vdXNlVXBdKToKKyAgICAgICAgKC1bV2ViVmll
dyB3ZWJWaWV3QWRkaXRpb25zV2lsbERlc3Ryb3lWaWV3XSk6CisgICAgICAgICgtW1dlYlZpZXcg
Y2FuZGlkYXRlTGlzdF0pOgorICAgICAgICAoLVtXZWJWaWV3IHVwZGF0ZVdlYlZpZXdBZGRpdGlv
bnNdKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXdEYXRhLmg6CisgICAgICAg
ICogV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXdQ
cml2YXRlLmg6CisKIDIwMTYtMTEtMDQgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdh
QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBzZXR0aW5nIGFuZCBwcmVmZXJlbmNlcyB0byBl
bmFibGUvZGlzYWJsZSBhc3luYyBpbWFnZSBkZWNvZGluZwpJbmRleDogU291cmNlL1dlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQkocmV2aXNpb24g
MjA4NDA1KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xp
ZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNDcsNyArMzQ3LDcgQEAgdm9pZCBXZWJFZGl0b3JD
bGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRTZQogICAgIE5TVmlldzxXZWJEb2N1bWVudFZpZXc+ICpk
b2N1bWVudFZpZXcgPSBbW2tpdChmcmFtZSkgZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOwogICAg
IGlmIChbZG9jdW1lbnRWaWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pIHsK
ICAgICAgICAgWyhXZWJIVE1MVmlldyAqKWRvY3VtZW50VmlldyBfc2VsZWN0aW9uQ2hhbmdlZF07
Ci0gICAgICAgIFttX3dlYlZpZXcgdXBkYXRlV2ViVmlld0FkZGl0aW9uc107CisgICAgICAgIFtt
X3dlYlZpZXcgdXBkYXRlVG91Y2hCYXJdOwogICAgICAgICBtX2xhc3RFZGl0b3JTdGF0ZVdhc0Nv
bnRlbnRFZGl0YWJsZSA9IFsoV2ViSFRNTFZpZXcgKilkb2N1bWVudFZpZXcgX2lzRWRpdGFibGVd
ID8gRWRpdG9yU3RhdGVJc0NvbnRlbnRFZGl0YWJsZTo6WWVzIDogRWRpdG9yU3RhdGVJc0NvbnRl
bnRFZGl0YWJsZTo6Tm87CiAgICAgfQogCkBAIC02NjcsNyArNjY3LDcgQEAgdm9pZCBXZWJFZGl0
b3JDbGllbnQ6OnVwZGF0ZUVkaXRvclN0YXRlQQogCiAgICAgRWRpdG9yU3RhdGVJc0NvbnRlbnRF
ZGl0YWJsZSBlZGl0b3JTdGF0ZUlzQ29udGVudEVkaXRhYmxlID0gWyhXZWJIVE1MVmlldyAqKWRv
Y3VtZW50VmlldyBfaXNFZGl0YWJsZV0gPyBFZGl0b3JTdGF0ZUlzQ29udGVudEVkaXRhYmxlOjpZ
ZXMgOiBFZGl0b3JTdGF0ZUlzQ29udGVudEVkaXRhYmxlOjpObzsKICAgICBpZiAobV9sYXN0RWRp
dG9yU3RhdGVXYXNDb250ZW50RWRpdGFibGUgIT0gZWRpdG9yU3RhdGVJc0NvbnRlbnRFZGl0YWJs
ZSkKLSAgICAgICAgW21fd2ViVmlldyB1cGRhdGVXZWJWaWV3QWRkaXRpb25zXTsKKyAgICAgICAg
W21fd2ViVmlldyB1cGRhdGVUb3VjaEJhcl07CiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojpy
ZWdpc3RlclVuZG9TdGVwKFBhc3NSZWZQdHI8VW5kb1N0ZXA+IGNtZCkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkocmV2aXNpb24gMjA4NDA1KQorKysgU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAt
NzIzMCw4ICs3MjMwLDExIEBAIC0gKHZvaWQpX3VwZGF0ZVNlbGVjdGlvbkZvcklucHV0TWFuYWdl
cgogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKIH0KIAotI2lmIFBMQVRGT1JNKE1BQykgJiYgX19N
QUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAgJiYgVVNFKEFQUExFX0lOVEVS
TkFMX1NESykKLSNpbXBvcnQgPFdlYktpdEFkZGl0aW9ucy9XZWJIVE1MVmlld1dlYk5TVGV4dElu
cHV0U3VwcG9ydEFkZGl0aW9ucy5tbT4KKyNpZiBIQVZFKFRPVUNIX0JBUikKKy0gKE5TQ2FuZGlk
YXRlTGlzdFRvdWNoQmFySXRlbSAqKWNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0KK3sKKyAgICBy
ZXR1cm4gW1tzZWxmIF93ZWJWaWV3XSBjYW5kaWRhdGVMaXN0XTsKK30KICNlbmRpZgogCiBAZW5k
CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiAyMDg0MDUp
CisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkK
QEAgLTExOCw2ICsxMTgsNyBAQAogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5oPgog
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvRXhjZXB0aW9uLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9KU1ZhbHVlUmVmLmg+CisjaW1wb3J0IDxXZWJDb3JlL0FWS2l0U1BJLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9BbmltYXRpb25Db250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0FwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlLmg+CkBAIC0xNDQsNiArMTQ1LDggQEAKICNpbXBvcnQgPFdlYkNvcmUvR2VvbG9j
YXRpb25Db250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0dlb2xvY2F0aW9uRXJyb3IuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxPTGlz
dEVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTFVMaXN0RWxlbWVudC5oPgogI2ltcG9y
dCA8V2ViQ29yZS9IVE1MVmlkZW9FbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hpc3RvcnlD
b250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hpc3RvcnlJdGVtLmg+CkBAIC0xNTMsMTEg
KzE1NiwxNCBAQAogI2ltcG9ydCA8V2ViQ29yZS9KU0VsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNv
cmUvSlNOb2RlTGlzdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9KU05vdGlmaWNhdGlvbi5oPgorI2lt
cG9ydCA8V2ViQ29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0xvZ0lu
aXRpYWxpemF0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL01JTUVUeXBlUmVnaXN0cnkuaD4KICNp
bXBvcnQgPFdlYkNvcmUvTWFpbkZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL01lbW9yeUNhY2hl
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL01lbW9yeVByZXNzdXJlSGFuZGxlci5oPgorI2ltcG9ydCA8
V2ViQ29yZS9OU1NwZWxsQ2hlY2tlclNQSS5oPgorI2ltcG9ydCA8V2ViQ29yZS9OU1RvdWNoQmFy
U1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05TVVJMRmlsZVR5cGVNYXBwaW5nc1NQSS5oPgogI2lt
cG9ydCA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbXBvcnQgPFdlYkNvcmUv
Tm9kZUxpc3QuaD4KQEAgLTE5Miw2ICsxOTgsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3Jl
T2JqQ0V4dHJhcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlVmlldy5oPgogI2ltcG9ydCA8
V2ViQ29yZS9XaWRnZXQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvaHRtbGVkaXRpbmcuaD4KICNpbXBv
cnQgPFdlYktpdExlZ2FjeS9ET00uaD4KICNpbXBvcnQgPFdlYktpdExlZ2FjeS9ET01FeHRlbnNp
b25zLmg+CiAjaW1wb3J0IDxXZWJLaXRMZWdhY3kvRE9NUHJpdmF0ZS5oPgpAQCAtMjEzLDYgKzIy
MCw3IEBACiAjaW1wb3J0IDx3dGYvUmVmUHRyLmg+CiAjaW1wb3J0IDx3dGYvUnVuTG9vcC5oPgog
I2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2ltcG9ydCA8d3RmL1RlbXBvcmFyeUNoYW5n
ZS5oPgogI2ltcG9ydCA8d3RmL3NwaS9kYXJ3aW4vZHlsZFNQSS5oPgogCiAjaWYgIVBMQVRGT1JN
KElPUykKQEAgLTMwNyw2ICszMTUsMTIgQEAKICNpbXBvcnQgPFdlYkNvcmUvV2ViUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaD4KICNlbmRpZgogCisjaWYgSEFWRShUT1VDSF9CQVIp
ICYmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKK1NPRlRfTElOS19GUkFN
RVdPUksoQVZLaXQpCitTT0ZUX0xJTktfQ0xBU1MoQVZLaXQsIEFWRnVuY3Rpb25CYXJQbGF5YmFj
a0NvbnRyb2xzUHJvdmlkZXIpCitTT0ZUX0xJTktfQ0xBU1MoQVZLaXQsIEFWRnVuY3Rpb25CYXJT
Y3J1YmJlcikKKyNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikgJiYgRU5BQkxFKFdFQl9QTEFZQkFD
S19DT05UUk9MU19NQU5BR0VSKQorCiAjaWYgUExBVEZPUk0oTUFDKQogU09GVF9MSU5LX0NPTlNU
QU5UX01BWV9GQUlMKExvb2t1cCwgTFVOb3RpZmljYXRpb25Qb3BvdmVyV2lsbENsb3NlLCBOU1N0
cmluZyAqKQogI2VuZGlmCkBAIC02NjIsNiArNjc2LDI4MSBAQCBzdGF0aWMgQk9PTCBhdXRvbWF0
aWNUZXh0UmVwbGFjZW1lbnRFbmFiCiBzdGF0aWMgQk9PTCBhdXRvbWF0aWNTcGVsbGluZ0NvcnJl
Y3Rpb25FbmFibGVkOwogI2VuZGlmCiAKKyNpZiBIQVZFKFRPVUNIX0JBUikKKworZW51bSBjbGFz
cyBXZWJMaXN0VHlwZSB7CisgICAgTm9uZSA9IDAsCisgICAgT3JkZXJlZCwKKyAgICBVbm9yZGVy
ZWQKK307CisKK0BpbnRlcmZhY2UgX1dlYlRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciA6
IE5TVmlld0NvbnRyb2xsZXIgeworICAgIFdlYkxpc3RUeXBlIF9jdXJyZW50TGlzdFR5cGU7CisK
K0Bwcml2YXRlCisgICAgV2ViVmlldyAqX3dlYlZpZXc7Cit9CisKK0Bwcm9wZXJ0eSAobm9uYXRv
bWljKSBXZWJMaXN0VHlwZSBjdXJyZW50TGlzdFR5cGU7CisKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3OworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlv
biBfV2ViVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyCisKK0BzeW50aGVzaXplIGN1cnJl
bnRMaXN0VHlwZT1fY3VycmVudExpc3RUeXBlOworCitzdGF0aWMgY29uc3QgZG91YmxlIGxpc3RD
b250cm9sU2VnbWVudFdpZHRoID0gNjcuMDsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIG5vTGlz
dFNlZ21lbnQgPSAwOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHVub3JkZXJlZExpc3RTZWdtZW50
ID0gMTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBvcmRlcmVkTGlzdFNlZ21lbnQgPSAyOworCist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldworeworICAg
IGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAg
X3dlYlZpZXcgPSB3ZWJWaWV3OworCisgICAgTlNTZWdtZW50ZWRDb250cm9sICppbnNlcnRMaXN0
Q29udHJvbCA9IFtOU1NlZ21lbnRlZENvbnRyb2wgc2VnbWVudGVkQ29udHJvbFdpdGhMYWJlbHM6
QFsgV2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVOb25lKCksIFdlYkNvcmU6Omluc2VydExpc3RUeXBl
QnVsbGV0ZWQoKSwgV2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVOdW1iZXJlZCgpIF0gdHJhY2tpbmdN
b2RlOk5TU2VnbWVudFN3aXRjaFRyYWNraW5nU2VsZWN0T25lIHRhcmdldDpzZWxmIGFjdGlvbjpA
c2VsZWN0b3IoX3NlbGVjdExpc3Q6KV07CisgICAgW2luc2VydExpc3RDb250cm9sIHNldFdpZHRo
Omxpc3RDb250cm9sU2VnbWVudFdpZHRoIGZvclNlZ21lbnQ6bm9MaXN0U2VnbWVudF07CisgICAg
W2luc2VydExpc3RDb250cm9sIHNldFdpZHRoOmxpc3RDb250cm9sU2VnbWVudFdpZHRoIGZvclNl
Z21lbnQ6dW5vcmRlcmVkTGlzdFNlZ21lbnRdOworICAgIFtpbnNlcnRMaXN0Q29udHJvbCBzZXRX
aWR0aDpsaXN0Q29udHJvbFNlZ21lbnRXaWR0aCBmb3JTZWdtZW50Om9yZGVyZWRMaXN0U2VnbWVu
dF07CisgICAgaW5zZXJ0TGlzdENvbnRyb2wuZm9udCA9IFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6
ZToxNV07CisKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyAgICBpZCBzZWdt
ZW50RWxlbWVudCA9IE5TQWNjZXNzaWJpbGl0eVVuaWdub3JlZERlc2NlbmRhbnQoaW5zZXJ0TGlz
dENvbnRyb2wpOworICAgIE5TQXJyYXkgKnNlZ21lbnRzID0gW3NlZ21lbnRFbGVtZW50IGFjY2Vz
c2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlDaGlsZHJlbkF0dHJpYnV0ZV07
CisgICAgQVNTRVJUKHNlZ21lbnRzLmNvdW50ID09IDMpOworICAgIFtbc2VnbWVudHMgb2JqZWN0
QXRJbmRleDpub0xpc3RTZWdtZW50XSBhY2Nlc3NpYmlsaXR5U2V0T3ZlcnJpZGVWYWx1ZTpXZWJD
b3JlOjppbnNlcnRMaXN0VHlwZU5vbmUoKSBmb3JBdHRyaWJ1dGU6TlNBY2Nlc3NpYmlsaXR5RGVz
Y3JpcHRpb25BdHRyaWJ1dGVdOworICAgIFtbc2VnbWVudHMgb2JqZWN0QXRJbmRleDp1bm9yZGVy
ZWRMaXN0U2VnbWVudF0gYWNjZXNzaWJpbGl0eVNldE92ZXJyaWRlVmFsdWU6V2ViQ29yZTo6aW5z
ZXJ0TGlzdFR5cGVCdWxsZXRlZEFjY2Vzc2liaWxpdHlUaXRsZSgpIGZvckF0dHJpYnV0ZTpOU0Fj
Y2Vzc2liaWxpdHlEZXNjcmlwdGlvbkF0dHJpYnV0ZV07CisgICAgW1tzZWdtZW50cyBvYmplY3RB
dEluZGV4Om9yZGVyZWRMaXN0U2VnbWVudF0gYWNjZXNzaWJpbGl0eVNldE92ZXJyaWRlVmFsdWU6
V2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVOdW1iZXJlZEFjY2Vzc2liaWxpdHlUaXRsZSgpIGZvckF0
dHJpYnV0ZTpOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkF0dHJpYnV0ZV07CisjcHJhZ21hIGNs
YW5nIGRpYWdub3N0aWMgcG9wCisKKyAgICBzZWxmLnZpZXcgPSBpbnNlcnRMaXN0Q29udHJvbDsK
KworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKV9zZWxlY3RMaXN0OihpZClzZW5kZXIK
K3sKKyAgICBOU1ZpZXcgKmRvY3VtZW50VmlldyA9IFtbW193ZWJWaWV3IF9zZWxlY3RlZE9yTWFp
bkZyYW1lXSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CisgICAgaWYgKCFbZG9jdW1lbnRWaWV3
IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pCisgICAgICAgIHJldHVybjsKKwor
ICAgIFdlYkhUTUxWaWV3ICp3ZWJIVE1MVmlldyA9IChXZWJIVE1MVmlldyAqKWRvY3VtZW50Vmll
dzsKKyAgICBOU1NlZ21lbnRlZENvbnRyb2wgKmluc2VydExpc3RDb250cm9sID0gKE5TU2VnbWVu
dGVkQ29udHJvbCAqKXNlbGYudmlldzsKKyAgICBpZiAoaW5zZXJ0TGlzdENvbnRyb2wuc2VsZWN0
ZWRTZWdtZW50ID09IG5vTGlzdFNlZ21lbnQpIHsKKyAgICAgICAgLy8gVGhlcmUgaXMgbm8gInJl
bW92ZSBsaXN0IiBlZGl0IGNvbW1hbmQsIGJ1dCBfaW5zZXJ0T3JkZXJlZExpc3QgYW5kIF9pbnNl
cnRVbm9yZGVyZWRMaXN0IGJvdGgKKyAgICAgICAgLy8gYmVoYXZlIGFzIHRvZ2dsZXMsIHNvIHdl
IGNhbiBpbnZva2UgdGhlIGFwcHJvcHJpYXRlIG1ldGhvZCBkZXBlbmRpbmcgb24gb3VyIF9jdXJy
ZW50TGlzdFR5cGUKKyAgICAgICAgLy8gdG8gcmVtb3ZlIGFuIGV4aXN0aW5nIGxpc3QuIFdlIGRv
bid0IGhhdmUgdG8gZG8gYW55dGhpbmcgaWYgX2N1cnJlbnRMaXN0VHlwZSBpcyBXZWJMaXN0VHlw
ZTo6Tm9uZS4KKyAgICAgICAgaWYgKF9jdXJyZW50TGlzdFR5cGUgPT0gV2ViTGlzdFR5cGU6Ok9y
ZGVyZWQpCisgICAgICAgICAgICBbd2ViSFRNTFZpZXcgX2luc2VydE9yZGVyZWRMaXN0XTsKKyAg
ICAgICAgZWxzZSBpZiAoX2N1cnJlbnRMaXN0VHlwZSA9PSBXZWJMaXN0VHlwZTo6VW5vcmRlcmVk
KQorICAgICAgICAgICAgW3dlYkhUTUxWaWV3IF9pbnNlcnRVbm9yZGVyZWRMaXN0XTsKKyAgICB9
IGVsc2UgaWYgKGluc2VydExpc3RDb250cm9sLnNlbGVjdGVkU2VnbWVudCA9PSB1bm9yZGVyZWRM
aXN0U2VnbWVudCkKKyAgICAgICAgW3dlYkhUTUxWaWV3IF9pbnNlcnRVbm9yZGVyZWRMaXN0XTsK
KyAgICBlbHNlIGlmIChpbnNlcnRMaXN0Q29udHJvbC5zZWxlY3RlZFNlZ21lbnQgPT0gb3JkZXJl
ZExpc3RTZWdtZW50KQorICAgICAgICBbd2ViSFRNTFZpZXcgX2luc2VydE9yZGVyZWRMaXN0XTsK
KworICAgIFtfd2ViVmlldyBfZGlzbWlzc1RleHRUb3VjaEJhclBvcG92ZXJJdGVtV2l0aElkZW50
aWZpZXI6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dExpc3RdOworfQorCistICh2b2lkKXNl
dEN1cnJlbnRMaXN0VHlwZTooV2ViTGlzdFR5cGUpbGlzdFR5cGUKK3sKKyAgICBOU1NlZ21lbnRl
ZENvbnRyb2wgKmluc2VydExpc3RDb250cm9sID0gKE5TU2VnbWVudGVkQ29udHJvbCAqKXNlbGYu
dmlldzsKKyAgICBzd2l0Y2gobGlzdFR5cGUpIHsKKyAgICBjYXNlIFdlYkxpc3RUeXBlOjpOb25l
OgorICAgICAgICBbaW5zZXJ0TGlzdENvbnRyb2wgc2V0U2VsZWN0ZWQ6WUVTIGZvclNlZ21lbnQ6
bm9MaXN0U2VnbWVudF07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViTGlzdFR5cGU6Ok9y
ZGVyZWQ6CisgICAgICAgIFtpbnNlcnRMaXN0Q29udHJvbCBzZXRTZWxlY3RlZDpZRVMgZm9yU2Vn
bWVudDpvcmRlcmVkTGlzdFNlZ21lbnRdOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYkxp
c3RUeXBlOjpVbm9yZGVyZWQ6CisgICAgICAgIFtpbnNlcnRMaXN0Q29udHJvbCBzZXRTZWxlY3Rl
ZDpZRVMgZm9yU2VnbWVudDp1bm9yZGVyZWRMaXN0U2VnbWVudF07CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIF9jdXJyZW50TGlzdFR5cGUgPSBsaXN0VHlwZTsKK30KKworQGVuZAorCitA
aW50ZXJmYWNlIFdlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIDogTlNUZXh0VG91Y2hCYXJJ
dGVtQ29udHJvbGxlciB7CisgICAgQk9PTCBfdGV4dElzQm9sZDsKKyAgICBCT09MIF90ZXh0SXNJ
dGFsaWM7CisgICAgQk9PTCBfdGV4dElzVW5kZXJsaW5lZDsKKyAgICBOU1RleHRBbGlnbm1lbnQg
X2N1cnJlbnRUZXh0QWxpZ25tZW50OworICAgIFJldGFpblB0cjxOU0NvbG9yPiBfdGV4dENvbG9y
OworICAgIFJldGFpblB0cjxfV2ViVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyPiBfd2Vi
VGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyOworCitAcHJpdmF0ZQorICAgIFdlYlZpZXcg
Kl93ZWJWaWV3OworfQorCitAcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCB0ZXh0SXNCb2xkOwor
QHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgdGV4dElzSXRhbGljOworQHByb3BlcnR5IChub25h
dG9taWMpIEJPT0wgdGV4dElzVW5kZXJsaW5lZDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBOU1Rl
eHRBbGlnbm1lbnQgY3VycmVudFRleHRBbGlnbm1lbnQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywg
cmV0YWluLCByZWFkd3JpdGUpIE5TQ29sb3IgKnRleHRDb2xvcjsKKworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoV2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXc7CitAZW5kCisKK0BpbXBsZW1lbnRh
dGlvbiBXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlcgorCitAc3ludGhlc2l6ZSB0ZXh0SXNC
b2xkPV90ZXh0SXNCb2xkOworQHN5bnRoZXNpemUgdGV4dElzSXRhbGljPV90ZXh0SXNJdGFsaWM7
CitAc3ludGhlc2l6ZSB0ZXh0SXNVbmRlcmxpbmVkPV90ZXh0SXNVbmRlcmxpbmVkOworQHN5bnRo
ZXNpemUgY3VycmVudFRleHRBbGlnbm1lbnQ9X2N1cnJlbnRUZXh0QWxpZ25tZW50OworCistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldworeworICAgIGlm
ICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX3dl
YlZpZXcgPSB3ZWJWaWV3OworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKE5TVG91Y2hCYXJJ
dGVtICopaXRlbUZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcgoreworICAgIE5T
VG91Y2hCYXJJdGVtICppdGVtID0gW3N1cGVyIGl0ZW1Gb3JJZGVudGlmaWVyOmlkZW50aWZpZXJd
OworICAgIEJPT0wgaXNUZXh0Rm9ybWF0SXRlbSA9IFtpZGVudGlmaWVyIGlzRXF1YWxUb1N0cmlu
ZzpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Rm9ybWF0XTsKKworICAgIGlmIChpc1RleHRG
b3JtYXRJdGVtIHx8IFtpZGVudGlmaWVyIGlzRXF1YWxUb1N0cmluZzpOU1RvdWNoQmFySXRlbUlk
ZW50aWZpZXJUZXh0U3R5bGVdKQorICAgICAgICBzZWxmLnRleHRTdHlsZS5hY3Rpb24gPSBAc2Vs
ZWN0b3IoX3dlYkNoYW5nZVRleHRTdHlsZTopOworCisgICAgaWYgKGlzVGV4dEZvcm1hdEl0ZW0g
fHwgW2lkZW50aWZpZXIgaXNFcXVhbFRvU3RyaW5nOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRl
eHRBbGlnbm1lbnRdKQorICAgICAgICBzZWxmLnRleHRBbGlnbm1lbnRzLmFjdGlvbiA9IEBzZWxl
Y3Rvcihfd2ViQ2hhbmdlVGV4dEFsaWdubWVudDopOworCisgICAgTlNDb2xvclBpY2tlclRvdWNo
QmFySXRlbSAqY29sb3JQaWNrZXJJdGVtID0gbmlsOworICAgIGlmIChbaWRlbnRpZmllciBpc0Vx
dWFsVG9TdHJpbmc6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dENvbG9yUGlja2VyXSAmJiBb
aXRlbSBpc0tpbmRPZkNsYXNzOltOU0NvbG9yUGlja2VyVG91Y2hCYXJJdGVtIGNsYXNzXV0pCisg
ICAgICAgIGNvbG9yUGlja2VySXRlbSA9IChOU0NvbG9yUGlja2VyVG91Y2hCYXJJdGVtICopaXRl
bTsKKyAgICBpZiAoaXNUZXh0Rm9ybWF0SXRlbSkKKyAgICAgICAgY29sb3JQaWNrZXJJdGVtID0g
c2VsZi5jb2xvclBpY2tlckl0ZW07CisgICAgaWYgKGNvbG9yUGlja2VySXRlbSkgeworICAgICAg
ICBjb2xvclBpY2tlckl0ZW0udGFyZ2V0ID0gc2VsZjsKKyAgICAgICAgY29sb3JQaWNrZXJJdGVt
LmFjdGlvbiA9IEBzZWxlY3Rvcihfd2ViQ2hhbmdlQ29sb3I6KTsKKyAgICAgICAgY29sb3JQaWNr
ZXJJdGVtLnNob3dzQWxwaGEgPSBOTzsKKyAgICB9CisKKyAgICByZXR1cm4gaXRlbTsKK30KKwor
LSAoX1dlYlRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciAqKXdlYlRleHRMaXN0VG91Y2hC
YXJWaWV3Q29udHJvbGxlcgoreworICAgIHJldHVybiAoX1dlYlRleHRMaXN0VG91Y2hCYXJWaWV3
Q29udHJvbGxlciAqKVtzZWxmIHRleHRMaXN0Vmlld0NvbnRyb2xsZXJdOworfQorCistICh2b2lk
KXNldFRleHRJc0JvbGQ6KEJPT0wpYm9sZAoreworICAgIF90ZXh0SXNCb2xkID0gYm9sZDsKKyAg
ICBpZiAoW3NlbGYudGV4dFN0eWxlIGlzU2VsZWN0ZWRGb3JTZWdtZW50OjBdICE9IF90ZXh0SXNC
b2xkKQorICAgICAgICBbc2VsZi50ZXh0U3R5bGUgc2V0U2VsZWN0ZWQ6X3RleHRJc0JvbGQgZm9y
U2VnbWVudDowXTsKK30KKworLSAodm9pZClzZXRUZXh0SXNJdGFsaWM6KEJPT0wpaXRhbGljCit7
CisgICAgX3RleHRJc0l0YWxpYyA9IGl0YWxpYzsKKyAgICBpZiAoW3NlbGYudGV4dFN0eWxlIGlz
U2VsZWN0ZWRGb3JTZWdtZW50OjFdICE9IF90ZXh0SXNJdGFsaWMpCisgICAgICAgIFtzZWxmLnRl
eHRTdHlsZSBzZXRTZWxlY3RlZDpfdGV4dElzSXRhbGljIGZvclNlZ21lbnQ6MV07Cit9CisKKy0g
KHZvaWQpc2V0VGV4dElzVW5kZXJsaW5lZDooQk9PTCl1bmRlcmxpbmVkCit7CisgICAgX3RleHRJ
c1VuZGVybGluZWQgPSB1bmRlcmxpbmVkOworICAgIGlmIChbc2VsZi50ZXh0U3R5bGUgaXNTZWxl
Y3RlZEZvclNlZ21lbnQ6Ml0gIT0gX3RleHRJc1VuZGVybGluZWQpCisgICAgICAgIFtzZWxmLnRl
eHRTdHlsZSBzZXRTZWxlY3RlZDpfdGV4dElzVW5kZXJsaW5lZCBmb3JTZWdtZW50OjJdOworfQor
CistICh2b2lkKV93ZWJDaGFuZ2VUZXh0U3R5bGU6KGlkKXNlbmRlcgoreworICAgIGlmIChbc2Vs
Zi50ZXh0U3R5bGUgaXNTZWxlY3RlZEZvclNlZ21lbnQ6MF0gIT0gX3RleHRJc0JvbGQpIHsKKyAg
ICAgICAgX3RleHRJc0JvbGQgPSAhX3RleHRJc0JvbGQ7CisgICAgICAgIFtfd2ViVmlldyBfZXhl
Y3V0ZUNvcmVDb21tYW5kQnlOYW1lOkAiVG9nZ2xlQm9sZCIgdmFsdWU6QCIiXTsKKyAgICB9CisK
KyAgICBpZiAoW3NlbGYudGV4dFN0eWxlIGlzU2VsZWN0ZWRGb3JTZWdtZW50OjFdICE9IF90ZXh0
SXNJdGFsaWMpIHsKKyAgICAgICAgX3RleHRJc0l0YWxpYyA9ICFfdGV4dElzSXRhbGljOworICAg
ICAgICBbX3dlYlZpZXcgX2V4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZTpAIlRvZ2dsZUl0YWxpYyIg
dmFsdWU6QCIiXTsKKyAgICB9CisKKyAgICBpZiAoW3NlbGYudGV4dFN0eWxlIGlzU2VsZWN0ZWRG
b3JTZWdtZW50OjJdICE9IF90ZXh0SXNVbmRlcmxpbmVkKSB7CisgICAgICAgIF90ZXh0SXNVbmRl
cmxpbmVkID0gIV90ZXh0SXNVbmRlcmxpbmVkOworICAgICAgICBbX3dlYlZpZXcgX2V4ZWN1dGVD
b3JlQ29tbWFuZEJ5TmFtZTpAIlRvZ2dsZVVuZGVybGluZSIgdmFsdWU6QCIiXTsKKyAgICB9Cit9
CisKKy0gKHZvaWQpc2V0Q3VycmVudFRleHRBbGlnbm1lbnQ6KE5TVGV4dEFsaWdubWVudClhbGln
bm1lbnQKK3sKKyAgICBfY3VycmVudFRleHRBbGlnbm1lbnQgPSBhbGlnbm1lbnQ7CisgICAgW3Nl
bGYudGV4dEFsaWdubWVudHMgc2VsZWN0U2VnbWVudFdpdGhUYWc6X2N1cnJlbnRUZXh0QWxpZ25t
ZW50XTsKK30KKworLSAodm9pZClfd2ViQ2hhbmdlVGV4dEFsaWdubWVudDooaWQpc2VuZGVyCit7
CisgICAgTlNUZXh0QWxpZ25tZW50IGFsaWdubWVudCA9IChOU1RleHRBbGlnbm1lbnQpW3NlbGYu
dGV4dEFsaWdubWVudHMuY2VsbCB0YWdGb3JTZWdtZW50OltzZWxmLnRleHRBbGlnbm1lbnRzIHNl
bGVjdGVkU2VnbWVudF1dOworICAgIHN3aXRjaCAoYWxpZ25tZW50KSB7CisgICAgY2FzZSBOU1Rl
eHRBbGlnbm1lbnRMZWZ0OiB7CisgICAgICAgIF9jdXJyZW50VGV4dEFsaWdubWVudCA9IE5TVGV4
dEFsaWdubWVudExlZnQ7CisgICAgICAgIFtfd2ViVmlldyBhbGlnbkxlZnQ6c2VuZGVyXTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgTlNUZXh0QWxpZ25tZW50UmlnaHQ6IHsKKyAg
ICAgICAgX2N1cnJlbnRUZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25tZW50UmlnaHQ7CisgICAg
ICAgIFtfd2ViVmlldyBhbGlnblJpZ2h0OnNlbmRlcl07CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIE5TVGV4dEFsaWdubWVudENlbnRlcjogeworICAgICAgICBfY3VycmVudFRleHRB
bGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRDZW50ZXI7CisgICAgICAgIFtfd2ViVmlldyBhbGln
bkNlbnRlcjpzZW5kZXJdOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBOU1RleHRB
bGlnbm1lbnRKdXN0aWZpZWQ6IHsKKyAgICAgICAgX2N1cnJlbnRUZXh0QWxpZ25tZW50ID0gTlNU
ZXh0QWxpZ25tZW50SnVzdGlmaWVkOworICAgICAgICBbX3dlYlZpZXcgYWxpZ25KdXN0aWZpZWQ6
c2VuZGVyXTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIFtfd2ViVmlldyBfZGlzbWlzc1RleHRUb3VjaEJhclBvcG92ZXJJ
dGVtV2l0aElkZW50aWZpZXI6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEFsaWdubWVudF07
Cit9CisKKy0gKE5TQ29sb3IgKil0ZXh0Q29sb3IKK3sKKyAgICByZXR1cm4gX3RleHRDb2xvci5n
ZXQoKTsKK30KKworLSAodm9pZClzZXRUZXh0Q29sb3I6KE5TQ29sb3IgKiljb2xvcgoreworICAg
IF90ZXh0Q29sb3IgPSBjb2xvcjsKKyAgICBzZWxmLmNvbG9yUGlja2VySXRlbS5jb2xvciA9IF90
ZXh0Q29sb3IuZ2V0KCk7Cit9CisKKy0gKHZvaWQpX3dlYkNoYW5nZUNvbG9yOihpZClzZW5kZXIK
K3sKKyAgICBfdGV4dENvbG9yID0gc2VsZi5jb2xvclBpY2tlckl0ZW0uY29sb3I7CisgICAgW193
ZWJWaWV3IF9leGVjdXRlQ29yZUNvbW1hbmRCeU5hbWU6QCJGb3JlQ29sb3IiIHZhbHVlOiBXZWJD
b3JlOjpjb2xvckZyb21OU0NvbG9yKF90ZXh0Q29sb3IuZ2V0KCkpLnNlcmlhbGl6ZWQoKV07Cit9
CisKKy0gKE5TVmlld0NvbnRyb2xsZXIgKil0ZXh0TGlzdFZpZXdDb250cm9sbGVyCit7CisgICAg
aWYgKCFfd2ViVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyKQorICAgICAgICBfd2ViVGV4
dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyID0gYWRvcHROUyhbW19XZWJUZXh0TGlzdFRvdWNo
QmFyVmlld0NvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoV2ViVmlldzpfd2ViVmlld10pOworICAg
IHJldHVybiBfd2ViVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyLmdldCgpOworfQorCitA
ZW5kCisKKyNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikKKwogQGltcGxlbWVudGF0aW9uIFdlYlZp
ZXcgKEFsbFdlYlZpZXdzKQogCiBzdGF0aWMgQ0ZTZXRDYWxsQmFja3MgTm9uUmV0YWluaW5nU2V0
Q2FsbGJhY2tzID0gewpAQCAtOTcwLDcgKzEyNTksNyBAQCAtICh2b2lkKV9jb21tb25Jbml0aWFs
aXphdGlvbldpdGhGcmFtZU5hCiAgICAgfQogI2VuZGlmCiAKLSAgICBbc2VsZiB1cGRhdGVXZWJW
aWV3QWRkaXRpb25zXTsKKyAgICBbc2VsZiB1cGRhdGVUb3VjaEJhcl07CiAKICNpZiAhUExBVEZP
Uk0oSU9TKQogICAgIHN0YXRpYyBib29sIGRpZE9uZVRpbWVJbml0aWFsaXphdGlvbiA9IGZhbHNl
OwpAQCAtNDY5Miw2ICs0OTgxLDQ1IEBAIC0gKHZvaWQpX3NldEZvbnRGYWxsYmFja1ByZWZlcnNQ
aWN0b2dyYXAKICAgICAgICAgX3ByaXZhdGUtPnBhZ2UtPnNldHRpbmdzKCkuc2V0Rm9udEZhbGxi
YWNrUHJlZmVyc1BpY3RvZ3JhcGhzKGZsYWcpOwogfQogCisjaWYgSEFWRShUT1VDSF9CQVIpCisK
Ky0gKHZvaWQpc2hvd0NhbmRpZGF0ZXM6KE5TQXJyYXk8TlNUZXh0Q2hlY2tpbmdSZXN1bHQgKj4g
KiljYW5kaWRhdGVzIGZvclN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgaW5SZWN0OihOU1JlY3Qp
cmVjdE9mVHlwZWRTdHJpbmcgZm9yU2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlyYW5nZSB2aWV3OihO
U1ZpZXcgKil2aWV3IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU1RleHRDaGVja2luZ1Jl
c3VsdCAqYWNjZXB0ZWRDYW5kaWRhdGUpKWNvbXBsZXRpb25CbG9jaworeworICAgIFtzZWxmLmNh
bmRpZGF0ZUxpc3Qgc2V0Q2FuZGlkYXRlczpjYW5kaWRhdGVzIGZvclNlbGVjdGVkUmFuZ2U6cmFu
Z2UgaW5TdHJpbmc6c3RyaW5nXTsKK30KKworLSAoQk9PTClzaG91bGRSZXF1ZXN0Q2FuZGlkYXRl
cworeworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9zZWxlY3RlZE9yTWFpbkZy
YW1lXSk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybiBOTzsKKworICAgIHJl
dHVybiAhY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVs
ZCgpICYmIHNlbGYuY2FuZGlkYXRlTGlzdC5jYW5kaWRhdGVMaXN0VmlzaWJsZTsKK30KKworLSAo
dm9pZClmb3JjZVJlcXVlc3RDYW5kaWRhdGVzRm9yVGVzdGluZworeworICAgIF9wcml2YXRlLT5f
Y2FuQ3JlYXRlVG91Y2hCYXJzID0gWUVTOworICAgIFtzZWxmIHVwZGF0ZVRvdWNoQmFyXTsKK30K
KworI2Vsc2UKKworLSAodm9pZClzaG93Q2FuZGlkYXRlczooTlNBcnJheSAqKWNhbmRpZGF0ZXMg
Zm9yU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBpblJlY3Q6KE5TUmVjdClyZWN0T2ZUeXBlZFN0
cmluZyBmb3JTZWxlY3RlZFJhbmdlOihOU1JhbmdlKXJhbmdlIHZpZXc6KE5TVmlldyAqKXZpZXcg
Y29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TVGV4dENoZWNraW5nUmVzdWx0ICphY2NlcHRl
ZENhbmRpZGF0ZSkpY29tcGxldGlvbkJsb2NrCit7Cit9CisKKy0gKHZvaWQpZm9yY2VSZXF1ZXN0
Q2FuZGlkYXRlc0ZvclRlc3RpbmcKK3sKK30KKworLSAoQk9PTClzaG91bGRSZXF1ZXN0Q2FuZGlk
YXRlcworeworICAgIHJldHVybiBOTzsKK30KKworI2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFSKQor
CiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBfV2ViU2FmZUZvcndhcmRlcgpAQCAtNDgwNCw2ICs1
MTMyLDEzIEBAIC0gKE5TTWV0aG9kU2lnbmF0dXJlICopbWV0aG9kU2lnbmF0dXJlRm8KIEBlbmQK
ICNlbmRpZgogCitAaW50ZXJmYWNlIFdlYlZpZXcgKCkgPAorI2lmIEhBVkUoVE9VQ0hfQkFSKQor
ICAgIE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbURlbGVnYXRlLCBOU1RvdWNoQmFyRGVsZWdh
dGUsIE5TVG91Y2hCYXJQcm92aWRlcgorI2VuZGlmCis+CitAZW5kCisKIEBpbXBsZW1lbnRhdGlv
biBXZWJWaWV3CiAKICsgKHZvaWQpaW5pdGlhbGl6ZQpAQCAtNjQ4OCw2ICs2ODIzLDg3IEBAIC0g
KE5TVmlldyAqKXByZXZpb3VzVmFsaWRLZXlWaWV3CiAgICAgcmV0dXJuIFtwcmV2aW91c1ZpZXcg
cHJldmlvdXNWYWxpZEtleVZpZXddOwogfQogCisjaWYgSEFWRShUT1VDSF9CQVIpCisKK0BkeW5h
bWljIHRvdWNoQmFyOworCistIChOU1RvdWNoQmFyICopbWFrZVRvdWNoQmFyCit7CisgICAgaWYg
KCFfcHJpdmF0ZS0+X2NhbkNyZWF0ZVRvdWNoQmFycykgeworICAgICAgICBfcHJpdmF0ZS0+X2Nh
bkNyZWF0ZVRvdWNoQmFycyA9IFlFUzsKKyAgICAgICAgW3NlbGYgdXBkYXRlVG91Y2hCYXJdOwor
ICAgIH0KKyAgICByZXR1cm4gX3ByaXZhdGUtPl9jdXJyZW50VG91Y2hCYXIuZ2V0KCk7Cit9CisK
Ky0gKE5TVG91Y2hCYXJJdGVtICopdG91Y2hCYXI6KE5TVG91Y2hCYXIgKil0b3VjaEJhciBtYWtl
SXRlbUZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcgoreworICAgIGlmICh0b3Vj
aEJhciA9PSBfcHJpdmF0ZS0+X3JpY2hUZXh0VG91Y2hCYXIgfHwgdG91Y2hCYXIgPT0gX3ByaXZh
dGUtPl9wbGFpblRleHRUb3VjaEJhcikKKyAgICAgICAgcmV0dXJuIFtfcHJpdmF0ZS0+X3RleHRU
b3VjaEJhckl0ZW1Db250cm9sbGVyIGl0ZW1Gb3JJZGVudGlmaWVyOmlkZW50aWZpZXJdOworCisg
ICAgcmV0dXJuIG5pbDsKK30KKworc3RhdGljIFRleHRDaGVja2luZ1Jlc3VsdCB0ZXh0Q2hlY2tp
bmdSZXN1bHRGcm9tTlNUZXh0Q2hlY2tpbmdSZXN1bHQoTlNUZXh0Q2hlY2tpbmdSZXN1bHQgKm5z
UmVzdWx0KQoreworICAgIFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CisKKyAg
ICBzd2l0Y2ggKFtuc1Jlc3VsdCByZXN1bHRUeXBlXSkgeworICAgIGNhc2UgTlNUZXh0Q2hlY2tp
bmdUeXBlU3BlbGxpbmc6CisgICAgICAgIHJlc3VsdC50eXBlID0gV2ViQ29yZTo6VGV4dENoZWNr
aW5nVHlwZVNwZWxsaW5nOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5TVGV4dENoZWNraW5n
VHlwZVJlcGxhY2VtZW50OgorICAgICAgICByZXN1bHQudHlwZSA9IFdlYkNvcmU6OlRleHRDaGVj
a2luZ1R5cGVSZXBsYWNlbWVudDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOU1RleHRDaGVj
a2luZ1R5cGVDb3JyZWN0aW9uOgorICAgICAgICByZXN1bHQudHlwZSA9IFdlYkNvcmU6OlRleHRD
aGVja2luZ1R5cGVDb3JyZWN0aW9uOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXN1bHQudHlwZSA9IFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGVOb25lOworICAgIH0K
KworICAgIE5TUmFuZ2UgcmVzdWx0UmFuZ2UgPSBbbnNSZXN1bHQgcmFuZ2VdOworICAgIHJlc3Vs
dC5sb2NhdGlvbiA9IHJlc3VsdFJhbmdlLmxvY2F0aW9uOworICAgIHJlc3VsdC5sZW5ndGggPSBy
ZXN1bHRSYW5nZS5sZW5ndGg7CisgICAgcmVzdWx0LnJlcGxhY2VtZW50ID0gW25zUmVzdWx0IHJl
cGxhY2VtZW50U3RyaW5nXTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKHZvaWQpY2Fu
ZGlkYXRlTGlzdFRvdWNoQmFySXRlbTooTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtICopYW5J
dGVtIGVuZFNlbGVjdGluZ0NhbmRpZGF0ZUF0SW5kZXg6KE5TSW50ZWdlcilpbmRleAoreworICAg
IGlmIChpbmRleCA9PSBOU05vdEZvdW5kKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYW5J
dGVtICE9IHNlbGYuY2FuZGlkYXRlTGlzdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNBcnJh
eSAqY2FuZGlkYXRlcyA9IGFuSXRlbS5jYW5kaWRhdGVzOworICAgIGlmICgoTlNVSW50ZWdlcilp
bmRleCA+PSBjYW5kaWRhdGVzLmNvdW50KQorICAgICAgICByZXR1cm47CisKKyAgICBpZCBjYW5k
aWRhdGUgPSBjYW5kaWRhdGVzW2luZGV4XTsKKyAgICBBU1NFUlQoW2NhbmRpZGF0ZSBpc0tpbmRP
ZkNsYXNzOltOU1RleHRDaGVja2luZ1Jlc3VsdCBjbGFzc11dKTsKKworICAgIGlmIChGcmFtZSog
Y29yZUZyYW1lID0gY29yZShzZWxmLl9zZWxlY3RlZE9yTWFpbkZyYW1lKSkKKyAgICAgICAgY29y
ZUZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGVXaXRoU29m
dFNwYWNlcyh0ZXh0Q2hlY2tpbmdSZXN1bHRGcm9tTlNUZXh0Q2hlY2tpbmdSZXN1bHQoKE5TVGV4
dENoZWNraW5nUmVzdWx0ICopY2FuZGlkYXRlKSk7Cit9CisKKy0gKHZvaWQpY2FuZGlkYXRlTGlz
dFRvdWNoQmFySXRlbTooTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtICopYW5JdGVtIGNoYW5n
ZWRDYW5kaWRhdGVMaXN0VmlzaWJpbGl0eTooQk9PTClpc1Zpc2libGUKK3sKKyAgICBpZiAoYW5J
dGVtICE9IHNlbGYuY2FuZGlkYXRlTGlzdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGlz
VmlzaWJsZSkgeworICAgICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX3Nl
bGVjdGVkT3JNYWluRnJhbWVdKSkKKyAgICAgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCkuY2xp
ZW50KCktPnJlcXVlc3RDYW5kaWRhdGVzRm9yU2VsZWN0aW9uKGNvcmVGcmFtZS0+c2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpOworICAgIH0KKworICAgIFtzZWxmIHVwZGF0ZVRvdWNoQmFyXTsKK30K
KworI2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFSKQorCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBX
ZWJWaWV3IChXZWJJQkFjdGlvbnMpCkBAIC02NzQ2LDQ4ICs3MTYyLDYgQEAgLSAoQk9PTCl2YWxp
ZGF0ZVVzZXJJbnRlcmZhY2VJdGVtOihpZCA8TgogCiBAZW5kCiAKLSNpZiBQTEFURk9STShNQUMp
ICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwICYmIFVTRShBUFBM
RV9JTlRFUk5BTF9TREspCi0jaW1wb3J0IDxXZWJLaXRBZGRpdGlvbnMvV2ViVmlld0FkZGl0aW9u
cy5tbT4KLSNlbHNlCi1AaW1wbGVtZW50YXRpb24gV2ViVmlldyAoV2ViVXBkYXRlV2ViVmlld0Fk
ZGl0aW9ucykKLQotLSAodm9pZCl1cGRhdGVXZWJWaWV3QWRkaXRpb25zCi17Ci19Ci0KLS0gKHZv
aWQpcHJlcGFyZUZvck1vdXNlRG93bgotewotfQotCi0tICh2b2lkKXByZXBhcmVGb3JNb3VzZVVw
Ci17Ci19Ci0KLS0gKHZvaWQpc2hvd0NhbmRpZGF0ZXM6KE5TQXJyYXkgKiljYW5kaWRhdGVzIGZv
clN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgaW5SZWN0OihOU1JlY3QpcmVjdE9mVHlwZWRTdHJp
bmcgZm9yU2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlyYW5nZSB2aWV3OihOU1ZpZXcgKil2aWV3IGNv
bXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU1RleHRDaGVja2luZ1Jlc3VsdCAqYWNjZXB0ZWRD
YW5kaWRhdGUpKWNvbXBsZXRpb25CbG9jawotewotfQotCi0tICh2b2lkKWZvcmNlUmVxdWVzdENh
bmRpZGF0ZXNGb3JUZXN0aW5nCi17Ci19Ci0KLS0gKEJPT0wpc2hvdWxkUmVxdWVzdENhbmRpZGF0
ZXMKLXsKLSAgICByZXR1cm4gTk87Ci19Ci0KLS0gKHZvaWQpd2ViVmlld0FkZGl0aW9uc1dpbGxE
ZXN0cm95VmlldwotewotfQotCi0tIChpZCljYW5kaWRhdGVMaXN0Ci17Ci0gICAgcmV0dXJuIG5p
bDsKLX0KLQotQGVuZAotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJT
SU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAgJiYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLQog
QGltcGxlbWVudGF0aW9uIFdlYlZpZXcgKFdlYlBlbmRpbmdQdWJsaWMpCiAKIC0gKHZvaWQpc2No
ZWR1bGVJblJ1bkxvb3A6KE5TUnVuTG9vcCAqKXJ1bkxvb3AgZm9yTW9kZTooTlNTdHJpbmcgKilt
b2RlCkBAIC04NjU2LDcgKzkwMzAsNyBAQCAtICh2b2lkKV9zZXRVcFBsYXliYWNrQ29udHJvbHNN
YW5hZ2VyRm9yCiAgICAgaWYgKCFfcHJpdmF0ZS0+cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQog
ICAgICAgICBfcHJpdmF0ZS0+cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlID0gV2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjOjpjcmVhdGUoKl9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25Nb2Rl
bCk7CiAKLSAgICBbc2VsZiB1cGRhdGVXZWJWaWV3QWRkaXRpb25zXTsKKyAgICBbc2VsZiB1cGRh
dGVUb3VjaEJhcl07CiB9CiAKIC0gKHZvaWQpX2NsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIK
QEAgLTg2NjksNyArOTA0Myw3IEBAIC0gKHZvaWQpX2NsZWFyUGxheWJhY2tDb250cm9sc01hbmFn
ZXIKIAogICAgIF9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCA9IG51bGxwdHI7CiAgICAg
X3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSA9IG51bGxwdHI7Ci0gICAgW3NlbGYg
dXBkYXRlV2ViVmlld0FkZGl0aW9uc107CisgICAgW3NlbGYgdXBkYXRlVG91Y2hCYXJdOwogfQog
I2VuZGlmIC8vIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RF
KQogI2VuZGlmIC8vIEVOQUJMRShWSURFTykKQEAgLTg4OTgsNiArOTI3MiwzNDIgQEAgLSAodm9p
ZClfc2V0TW9ja01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZQogfQogI2VuZGlmCiAKKyNpZiBIQVZF
KFRPVUNIX0JBUikKKy0gKHZvaWQpX2Rpc21pc3NUZXh0VG91Y2hCYXJQb3BvdmVySXRlbVdpdGhJ
ZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIKK3sKKyAgICBOU1RvdWNoQmFySXRlbSAq
Zm91bmRJdGVtID0gbmlsOworICAgIGZvciAoTlNUb3VjaEJhckl0ZW0gKml0ZW0gaW4gc2VsZi50
ZXh0VG91Y2hCYXIuaXRlbXMpIHsKKyAgICAgICAgaWYgKFtpdGVtLmlkZW50aWZpZXIgaXNFcXVh
bFRvU3RyaW5nOmlkZW50aWZpZXJdKSB7CisgICAgICAgICAgICBmb3VuZEl0ZW0gPSBpdGVtOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoW2l0ZW0uaWRlbnRp
ZmllciBpc0VxdWFsVG9TdHJpbmc6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEZvcm1hdF0p
IHsKKyAgICAgICAgICAgIGZvciAoTlNUb3VjaEJhckl0ZW0gKmNoaWxkSXRlbSBpbiBbKE5TR3Jv
dXBUb3VjaEJhckl0ZW0gKilpdGVtIGdyb3VwVG91Y2hCYXJdLml0ZW1zKSB7CisgICAgICAgICAg
ICAgICAgaWYgKFtjaGlsZEl0ZW0uaWRlbnRpZmllciBpc0VxdWFsVG9TdHJpbmc6aWRlbnRpZmll
cl0pIHsKKyAgICAgICAgICAgICAgICAgICAgZm91bmRJdGVtID0gY2hpbGRJdGVtOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChbZm91bmRJdGVt
IGlzS2luZE9mQ2xhc3M6W05TUG9wb3ZlclRvdWNoQmFySXRlbSBjbGFzc11dKQorICAgICAgICBb
KE5TUG9wb3ZlclRvdWNoQmFySXRlbSAqKWZvdW5kSXRlbSBkaXNtaXNzUG9wb3ZlcjpuaWxdOwor
fQorCistIChOU0FycmF5PE5TU3RyaW5nICo+ICopX3RleHRUb3VjaEJhckN1c3RvbWl6YXRpb25B
bGxvd2VkSWRlbnRpZmllcnMKK3sKKyAgICByZXR1cm4gQFsgTlNUb3VjaEJhckl0ZW1JZGVudGlm
aWVyQ2hhcmFjdGVyUGlja2VyLCBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Q29sb3JQaWNr
ZXIsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRTdHlsZSwgTlNUb3VjaEJhckl0ZW1JZGVu
dGlmaWVyVGV4dEFsaWdubWVudCwgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dExpc3QsIE5T
VG91Y2hCYXJJdGVtSWRlbnRpZmllckZsZXhpYmxlU3BhY2UgXTsKK30KKworLSAoTlNBcnJheTxO
U1N0cmluZyAqPiAqKV9wbGFpblRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25EZWZhdWx0SXRlbUlk
ZW50aWZpZXJzCit7CisgICAgcmV0dXJuIEBbIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckNoYXJh
Y3RlclBpY2tlciwgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyQ2FuZGlkYXRlTGlzdCBdOworfQor
CistIChOU0FycmF5PE5TU3RyaW5nICo+ICopX3JpY2hUZXh0VG91Y2hCYXJDdXN0b21pemF0aW9u
RGVmYXVsdEl0ZW1JZGVudGlmaWVycworeworICAgIHJldHVybiBAWyBOU1RvdWNoQmFySXRlbUlk
ZW50aWZpZXJDaGFyYWN0ZXJQaWNrZXIsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRGb3Jt
YXQsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckNhbmRpZGF0ZUxpc3QgXTsKK30KKworLSAodm9p
ZCl0b3VjaEJhckRpZEV4aXRDdXN0b21pemF0aW9uOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNh
dGlvbgoreworICAgIF9wcml2YXRlLT5faXNDdXN0b21pemluZ1RvdWNoQmFyID0gTk87CisgICAg
W3NlbGYgdXBkYXRlVG91Y2hCYXJdOworfQorCistICh2b2lkKXRvdWNoQmFyV2lsbEVudGVyQ3Vz
dG9taXphdGlvbjooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBfcHJpdmF0
ZS0+X2lzQ3VzdG9taXppbmdUb3VjaEJhciA9IFlFUzsKK30KKworLSAodm9pZClkaWRDaGFuZ2VB
dXRvbWF0aWNUZXh0Q29tcGxldGlvbjooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sK
KyAgICBpZiAoX3ByaXZhdGUtPl9yaWNoVGV4dFRvdWNoQmFyKQorICAgICAgICBbc2VsZiBzZXRV
cFRleHRUb3VjaEJhcjpfcHJpdmF0ZS0+X3JpY2hUZXh0VG91Y2hCYXIuZ2V0KCldOworCisgICAg
aWYgKF9wcml2YXRlLT5fcGxhaW5UZXh0VG91Y2hCYXIpCisgICAgICAgIFtzZWxmIHNldFVwVGV4
dFRvdWNoQmFyOl9wcml2YXRlLT5fcGxhaW5UZXh0VG91Y2hCYXIuZ2V0KCldOworCisgICAgW3Nl
bGYgdXBkYXRlVG91Y2hCYXJdOworfQorCistICh2b2lkKXNldFVwVGV4dFRvdWNoQmFyOihOU1Rv
dWNoQmFyICopdGV4dFRvdWNoQmFyCit7CisgICAgQk9PTCBpc1JpY2hUZXh0VG91Y2hCYXIgPSB0
ZXh0VG91Y2hCYXIgPT0gX3ByaXZhdGUtPl9yaWNoVGV4dFRvdWNoQmFyOworICAgIFt0ZXh0VG91
Y2hCYXIgc2V0RGVsZWdhdGU6c2VsZl07CisgICAgW3RleHRUb3VjaEJhciBzZXREZWZhdWx0SXRl
bXM6W05TTXV0YWJsZVNldCBzZXRXaXRoT2JqZWN0czppc1JpY2hUZXh0VG91Y2hCYXIgPyBfcHJp
dmF0ZS0+X3JpY2hUZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbS5nZXQoKSA6IF9wcml2YXRl
LT5fcGxhaW5UZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbS5nZXQoKSwgbmlsXV07CisgICAg
W3RleHRUb3VjaEJhciBzZXRDdXN0b21pemF0aW9uQWxsb3dlZEl0ZW1JZGVudGlmaWVyczpbc2Vs
ZiBfdGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkFsbG93ZWRJZGVudGlmaWVyc11dOworCisgICAg
TlNBcnJheTxOU1N0cmluZyAqPiAqZGVmYXVsdElkZW50aWZpZXJzID0gaXNSaWNoVGV4dFRvdWNo
QmFyID8gW3NlbGYgX3JpY2hUZXh0VG91Y2hCYXJDdXN0b21pemF0aW9uRGVmYXVsdEl0ZW1JZGVu
dGlmaWVyc10gOiBbc2VsZiBfcGxhaW5UZXh0VG91Y2hCYXJDdXN0b21pemF0aW9uRGVmYXVsdEl0
ZW1JZGVudGlmaWVyc107CisgICAgW3RleHRUb3VjaEJhciBzZXRDdXN0b21pemF0aW9uRGVmYXVs
dEl0ZW1JZGVudGlmaWVyczpkZWZhdWx0SWRlbnRpZmllcnNdOworCisgICAgaWYgKE5TR3JvdXBU
b3VjaEJhckl0ZW0gKnRleHRGb3JtYXRJdGVtID0gKE5TR3JvdXBUb3VjaEJhckl0ZW0gKilbdGV4
dFRvdWNoQmFyIGl0ZW1Gb3JJZGVudGlmaWVyOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRG
b3JtYXRdKQorICAgICAgICB0ZXh0Rm9ybWF0SXRlbS5ncm91cFRvdWNoQmFyLmN1c3RvbWl6YXRp
b25JZGVudGlmaWVyID0gQCJXZWJUZXh0Rm9ybWF0VG91Y2hCYXIiOworfQorCistIChCT09MKV9p
c1JpY2hseUVkaXRhYmxlCit7CisgICAgTlNWaWV3ICpkb2N1bWVudFZpZXcgPSBzZWxmLl9zZWxl
Y3RlZE9yTWFpbkZyYW1lLmZyYW1lVmlldy5kb2N1bWVudFZpZXc7CisgICAgaWYgKCFbZG9jdW1l
bnRWaWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pCisgICAgICAgIHJldHVy
biBOTzsKKworICAgIFdlYkhUTUxWaWV3ICp3ZWJIVE1MVmlldyA9IChXZWJIVE1MVmlldyAqKWRv
Y3VtZW50VmlldzsKKyAgICByZXR1cm4gd2ViSFRNTFZpZXcuX2lzRWRpdGFibGUgJiYgd2ViSFRN
TFZpZXcuX2NhbkVkaXRSaWNobHk7Cit9CisKKy0gKE5TVG91Y2hCYXIgKil0ZXh0VG91Y2hCYXIK
K3sKKyAgICBpZiAoc2VsZi5faXNSaWNobHlFZGl0YWJsZSkKKyAgICAgICAgcmV0dXJuIF9wcml2
YXRlLT5fcmljaFRleHRUb3VjaEJhci5nZXQoKTsKKworICAgIHJldHVybiBfcHJpdmF0ZS0+X3Bs
YWluVGV4dFRvdWNoQmFyLmdldCgpOworfQorCistICh2b2lkKXVwZGF0ZVRleHRUb3VjaEJhcgor
eworICAgIGlmIChfcHJpdmF0ZS0+X2lzRGVmZXJyaW5nVGV4dFRvdWNoQmFyVXBkYXRlcykgewor
ICAgICAgICBfcHJpdmF0ZS0+X25lZWRzRGVmZXJyZWRUZXh0VG91Y2hCYXJVcGRhdGUgPSBZRVM7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBOU1ZpZXcgKmRvY3VtZW50VmlldyA9IFtb
W3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVdIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsKKyAg
ICBpZiAoIVtkb2N1bWVudFZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFdlYkhUTUxWaWV3ICp3ZWJIVE1MVmlldyA9IChX
ZWJIVE1MVmlldyAqKWRvY3VtZW50VmlldzsKKyAgICBpZiAoIVt3ZWJIVE1MVmlldyBfaXNFZGl0
YWJsZV0pCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtz
ZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChfcHJpdmF0ZS0+X2lzVXBkYXRpbmdUZXh0VG91Y2hCYXIpCisg
ICAgICAgIHJldHVybjsKKworICAgIFRlbXBvcmFyeUNoYW5nZTxCT09MPiBpc1VwZGF0aW5nVGV4
dFRvdWNoQmFyKF9wcml2YXRlLT5faXNVcGRhdGluZ1RleHRUb3VjaEJhciwgWUVTKTsKKworICAg
IGlmICghX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlcikKKyAgICAgICAgX3By
aXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciA9IGFkb3B0TlMoW1tXZWJUZXh0VG91
Y2hCYXJJdGVtQ29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OnNlbGZdKTsKKworICAg
IGlmICghX3ByaXZhdGUtPl9zdGFydGVkTGlzdGVuaW5nVG9DdXN0b21pemF0aW9uRXZlbnRzKSB7
CisgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2
ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IodG91Y2hCYXJEaWRFeGl0Q3VzdG9taXphdGlvbjop
IG5hbWU6TlNUb3VjaEJhckRpZEV4aXRDdXN0b21pemF0aW9uIG9iamVjdDpuaWxdOworICAgICAg
ICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYg
c2VsZWN0b3I6QHNlbGVjdG9yKHRvdWNoQmFyV2lsbEVudGVyQ3VzdG9taXphdGlvbjopIG5hbWU6
TlNUb3VjaEJhcldpbGxFbnRlckN1c3RvbWl6YXRpb24gb2JqZWN0Om5pbF07CisgICAgICAgIFtb
TlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxl
Y3RvcjpAc2VsZWN0b3IoZGlkQ2hhbmdlQXV0b21hdGljVGV4dENvbXBsZXRpb246KSBuYW1lOk5T
U3BlbGxDaGVja2VyRGlkQ2hhbmdlQXV0b21hdGljVGV4dENvbXBsZXRpb25Ob3RpZmljYXRpb24g
b2JqZWN0Om5pbF07CisgICAgICAgIF9wcml2YXRlLT5fc3RhcnRlZExpc3RlbmluZ1RvQ3VzdG9t
aXphdGlvbkV2ZW50cyA9IFlFUzsKKyAgICB9CisKKyAgICBpZiAoIV9wcml2YXRlLT5fcGxhaW5U
ZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSB8fCAhX3ByaXZhdGUtPl9yaWNoVGV4dENhbmRp
ZGF0ZUxpc3RUb3VjaEJhckl0ZW0pIHsKKyAgICAgICAgX3ByaXZhdGUtPl9wbGFpblRleHRDYW5k
aWRhdGVMaXN0VG91Y2hCYXJJdGVtID0gYWRvcHROUyhbW05TQ2FuZGlkYXRlTGlzdFRvdWNoQmFy
SXRlbSBhbGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckNh
bmRpZGF0ZUxpc3RdKTsKKyAgICAgICAgW19wcml2YXRlLT5fcGxhaW5UZXh0Q2FuZGlkYXRlTGlz
dFRvdWNoQmFySXRlbSBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICAgICAgX3ByaXZhdGUtPl9yaWNo
VGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gPSBhZG9wdE5TKFtbTlNDYW5kaWRhdGVMaXN0
VG91Y2hCYXJJdGVtIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6TlNUb3VjaEJhckl0ZW1JZGVu
dGlmaWVyQ2FuZGlkYXRlTGlzdF0pOworICAgICAgICBbX3ByaXZhdGUtPl9yaWNoVGV4dENhbmRp
ZGF0ZUxpc3RUb3VjaEJhckl0ZW0gc2V0RGVsZWdhdGU6c2VsZl07CisgICAgICAgIGNvcmVGcmFt
ZS0+ZWRpdG9yKCkuY2xpZW50KCktPnJlcXVlc3RDYW5kaWRhdGVzRm9yU2VsZWN0aW9uKGNvcmVG
cmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIH0KKworICAgIGlmICghX3ByaXZh
dGUtPl9yaWNoVGV4dFRvdWNoQmFyKSB7CisgICAgICAgIF9wcml2YXRlLT5fcmljaFRleHRUb3Vj
aEJhciA9IGFkb3B0TlMoW1tOU1RvdWNoQmFyIGFsbG9jXSBpbml0XSk7CisgICAgICAgIFtzZWxm
IHNldFVwVGV4dFRvdWNoQmFyOl9wcml2YXRlLT5fcmljaFRleHRUb3VjaEJhci5nZXQoKV07Cisg
ICAgICAgIFtfcHJpdmF0ZS0+X3JpY2hUZXh0VG91Y2hCYXIgc2V0Q3VzdG9taXphdGlvbklkZW50
aWZpZXI6QCJXZWJSaWNoVGV4dFRvdWNoQmFyIl07CisgICAgfQorCisgICAgaWYgKCFfcHJpdmF0
ZS0+X3BsYWluVGV4dFRvdWNoQmFyKSB7CisgICAgICAgIF9wcml2YXRlLT5fcGxhaW5UZXh0VG91
Y2hCYXIgPSBhZG9wdE5TKFtbTlNUb3VjaEJhciBhbGxvY10gaW5pdF0pOworICAgICAgICBbc2Vs
ZiBzZXRVcFRleHRUb3VjaEJhcjpfcHJpdmF0ZS0+X3BsYWluVGV4dFRvdWNoQmFyLmdldCgpXTsK
KyAgICAgICAgW19wcml2YXRlLT5fcGxhaW5UZXh0VG91Y2hCYXIgc2V0Q3VzdG9taXphdGlvbklk
ZW50aWZpZXI6QCJXZWJQbGFpblRleHRUb3VjaEJhciJdOworICAgIH0KKworICAgIGlmIChbTlNT
cGVsbENoZWNrZXIgaXNBdXRvbWF0aWNUZXh0Q29tcGxldGlvbkVuYWJsZWRdICYmICFfcHJpdmF0
ZS0+X2lzQ3VzdG9taXppbmdUb3VjaEJhcikgeworICAgICAgICBCT09MIHNob3VsZFNob3dDYW5k
aWRhdGVMaXN0ID0gIWNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNSYW5nZSgp
IHx8IGNvcmVGcmFtZS0+ZWRpdG9yKCkuaWdub3JlQ29tcG9zaXRpb25TZWxlY3Rpb25DaGFuZ2Uo
KTsKKyAgICAgICAgW3NlbGYuY2FuZGlkYXRlTGlzdCB1cGRhdGVXaXRoSW5zZXJ0aW9uUG9pbnRW
aXNpYmlsaXR5OnNob3VsZFNob3dDYW5kaWRhdGVMaXN0XTsKKyAgICB9CisKKyAgICBpZiAoY29y
ZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKSB7Cisg
ICAgICAgIC8vIFdlIGRvbid0IHJlcXVlc3QgY2FuZGlkYXRlcyBmb3IgcGFzc3dvcmQgZmllbGRz
LiBJZiB0aGUgdXNlciB3YXMgcHJldmlvdXNseSBpbiBhIG5vbi1wYXNzd29yZCBmaWVsZCwgdGhl
biB0aGUKKyAgICAgICAgLy8gb2xkIGNhbmRpZGF0ZXMgd2lsbCBzdGlsbCBzaG93IGJ5IGRlZmF1
bHQsIHNvIHdlIGNsZWFyIHRoZW0gaGVyZSBieSBzZXR0aW5nIGFuIGVtcHR5IGFycmF5IG9mIGNh
bmRpZGF0ZXMuCisgICAgICAgIGlmICghX3ByaXZhdGUtPl9lbXB0eUNhbmRpZGF0ZXNBcnJheSkK
KyAgICAgICAgICAgIF9wcml2YXRlLT5fZW1wdHlDYW5kaWRhdGVzQXJyYXkgPSBhZG9wdE5TKFtb
TlNBcnJheSBhbGxvY10gaW5pdF0pOworICAgICAgICBbc2VsZi5jYW5kaWRhdGVMaXN0IHNldENh
bmRpZGF0ZXM6X3ByaXZhdGUtPl9lbXB0eUNhbmRpZGF0ZXNBcnJheS5nZXQoKSBmb3JTZWxlY3Rl
ZFJhbmdlOk5TTWFrZVJhbmdlKDAsIDApIGluU3RyaW5nOm5pbF07CisgICAgfQorCisgICAgTlNU
b3VjaEJhciAqdGV4dFRvdWNoQmFyID0gc2VsZi50ZXh0VG91Y2hCYXI7CisgICAgTlNBcnJheTxO
U1N0cmluZyAqPiAqaXRlbUlkZW50aWZpZXJzID0gdGV4dFRvdWNoQmFyLml0ZW1JZGVudGlmaWVy
czsKKyAgICBCT09MIGlzU2hvd2luZ0NvbWJpbmVkVGV4dEZvcm1hdEl0ZW0gPSBbaXRlbUlkZW50
aWZpZXJzIGNvbnRhaW5zT2JqZWN0Ok5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRGb3JtYXRd
OworICAgIFt0ZXh0VG91Y2hCYXIgc2V0UHJpbmNpcGFsSXRlbUlkZW50aWZpZXI6aXNTaG93aW5n
Q29tYmluZWRUZXh0Rm9ybWF0SXRlbSA/IE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRGb3Jt
YXQgOiBuaWxdOworCisgICAgLy8gU2V0IGN1cnJlbnQgdHlwaW5nIGF0dHJpYnV0ZXMgZm9yIHJp
Y2ggdGV4dC4gVGhpcyB3aWxsIGVuc3VyZSB0aGF0IHRoZSBidXR0b25zIHJlZmxlY3QgdGhlIHN0
YXRlIG9mCisgICAgLy8gdGhlIHRleHQgd2hlbiBjaGFuZ2luZyBzZWxlY3Rpb24gdGhyb3VnaG91
dCB0aGUgZG9jdW1lbnQuCisgICAgaWYgKHdlYkhUTUxWaWV3Ll9jYW5FZGl0UmljaGx5KSB7Cisg
ICAgICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGNvcmVGcmFtZS0+c2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAgIGlmICghc2VsZWN0aW9uLmlzTm9uZSgpKSB7
CisgICAgICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmU7CisgICAgICAgICAgICBpZiAoYXV0byog
c3R5bGUgPSBFZGl0b3I6OnN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoY29yZUZyYW1lLCBub2RlVG9S
ZW1vdmUpKSB7CisgICAgICAgICAgICAgICAgW19wcml2YXRlLT5fdGV4dFRvdWNoQmFySXRlbUNv
bnRyb2xsZXIgc2V0VGV4dElzQm9sZDooc3R5bGUtPmZvbnRDYXNjYWRlKCkud2VpZ2h0KCkgPj0g
Rm9udFdlaWdodEJvbGQpXTsKKyAgICAgICAgICAgICAgICBbX3ByaXZhdGUtPl90ZXh0VG91Y2hC
YXJJdGVtQ29udHJvbGxlciBzZXRUZXh0SXNJdGFsaWM6KHN0eWxlLT5mb250Q2FzY2FkZSgpLml0
YWxpYygpID09IEZvbnRJdGFsaWNPbildOworCisgICAgICAgICAgICAgICAgUmVmUHRyPEVkaXRp
bmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnR5cGluZ1N0eWxl
KCk7CisgICAgICAgICAgICAgICAgaWYgKHR5cGluZ1N0eWxlICYmIHR5cGluZ1N0eWxlLT5zdHls
ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHR5cGluZ1N0eWxlLT5z
dHlsZSgpLT5nZXRQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25z
SW5FZmZlY3QpOworICAgICAgICAgICAgICAgICAgICBbX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJ
dGVtQ29udHJvbGxlciBzZXRUZXh0SXNVbmRlcmxpbmVkOnZhbHVlLmNvbnRhaW5zKCJ1bmRlcmxp
bmUiKV07CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIFtfcHJp
dmF0ZS0+X3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFRleHRJc1VuZGVybGluZWQ6KHN0
eWxlLT50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpICYgVGV4dERlY29yYXRpb25VbmRlcmxpbmUp
XTsKKworICAgICAgICAgICAgICAgIGlmIChzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5Q29sb3IpLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgW19wcml2YXRl
LT5fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dENvbG9yOm5zQ29sb3Ioc3R5bGUt
PnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSldOworCisgICAgICAgICAg
ICAgICAgTlNUZXh0QWxpZ25tZW50IHRleHRBbGlnbm1lbnQ7CisgICAgICAgICAgICAgICAgc3dp
dGNoIChzdHlsZS0+dGV4dEFsaWduKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFJJR0hUOgor
ICAgICAgICAgICAgICAgIGNhc2UgV0VCS0lUX1JJR0hUOgorICAgICAgICAgICAgICAgICAgICB0
ZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25tZW50UmlnaHQ7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTEVGVDoKKyAgICAgICAgICAgICAgICBjYXNl
IFdFQktJVF9MRUZUOgorICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ25tZW50ID0gTlNUZXh0
QWxpZ25tZW50TGVmdDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSBDRU5URVI6CisgICAgICAgICAgICAgICAgY2FzZSBXRUJLSVRfQ0VOVEVSOgorICAg
ICAgICAgICAgICAgICAgICB0ZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25tZW50Q2VudGVyOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEpVU1RJRlk6
CisgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRKdXN0
aWZpZWQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ug
VEFTVEFSVDoKKyAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWdubWVudCA9IHN0eWxlLT5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBOU1RleHRBbGlnbm1lbnRMZWZ0IDogTlNUZXh0QWxpZ25t
ZW50UmlnaHQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgVEFFTkQ6CisgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbm1lbnQgPSBzdHlsZS0+aXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpID8gTlNUZXh0QWxpZ25tZW50UmlnaHQgOiBOU1RleHRBbGln
bm1lbnRMZWZ0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgW19wcml2YXRlLT5fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIg
c2V0Q3VycmVudFRleHRBbGlnbm1lbnQ6dGV4dEFsaWdubWVudF07CisKKyAgICAgICAgICAgICAg
ICBIVE1MRWxlbWVudCogZW5jbG9zaW5nTGlzdEVsZW1lbnQgPSBlbmNsb3NpbmdMaXN0KHNlbGVj
dGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpOworICAgICAgICAgICAgICAgIGlmIChlbmNs
b3NpbmdMaXN0RWxlbWVudCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXM8SFRNTFVMaXN0
RWxlbWVudD4oKmVuY2xvc2luZ0xpc3RFbGVtZW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IFtbX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciB3ZWJUZXh0TGlzdFRvdWNo
QmFyVmlld0NvbnRyb2xsZXJdIHNldEN1cnJlbnRMaXN0VHlwZTpXZWJMaXN0VHlwZTo6VW5vcmRl
cmVkXTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXM8SFRNTE9MaXN0RWxlbWVudD4o
KmVuY2xvc2luZ0xpc3RFbGVtZW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIFtbX3ByaXZh
dGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciB3ZWJUZXh0TGlzdFRvdWNoQmFyVmlld0Nv
bnRyb2xsZXJdIHNldEN1cnJlbnRMaXN0VHlwZTpXZWJMaXN0VHlwZTo6T3JkZXJlZF07CisgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBb
W19wcml2YXRlLT5fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgd2ViVGV4dExpc3RUb3VjaEJh
clZpZXdDb250cm9sbGVyXSBzZXRDdXJyZW50TGlzdFR5cGU6V2ViTGlzdFR5cGU6Ok5vbmVdOwor
CisgICAgICAgICAgICAgICAgaWYgKG5vZGVUb1JlbW92ZSkKKyAgICAgICAgICAgICAgICAgICAg
bm9kZVRvUmVtb3ZlLT5yZW1vdmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBCT09MIGlzU2hvd2luZ0NhbmRpZGF0ZUxpc3RJdGVtID0gW2l0ZW1JZGVudGlmaWVycyBjb250
YWluc09iamVjdDpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJDYW5kaWRhdGVMaXN0XSAmJiBbTlNT
cGVsbENoZWNrZXIgaXNBdXRvbWF0aWNUZXh0Q29tcGxldGlvbkVuYWJsZWRdOworICAgICAgICBb
X3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRVc2VzTmFycm93VGV4dFN0
eWxlSXRlbTppc1Nob3dpbmdDb21iaW5lZFRleHRGb3JtYXRJdGVtICYmIGlzU2hvd2luZ0NhbmRp
ZGF0ZUxpc3RJdGVtXTsKKyAgICB9Cit9CisKKy0gKHZvaWQpdXBkYXRlTWVkaWFUb3VjaEJhcgor
eworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBpZiAoIV9w
cml2YXRlLT5tZWRpYVRvdWNoQmFyUHJvdmlkZXIpCisgICAgICAgIF9wcml2YXRlLT5tZWRpYVRv
dWNoQmFyUHJvdmlkZXIgPSBhZG9wdE5TKFthbGxvY0FWRnVuY3Rpb25CYXJQbGF5YmFja0NvbnRy
b2xzUHJvdmlkZXJJbnN0YW5jZSgpIGluaXRdKTsKKworICAgIGlmICghW19wcml2YXRlLT5tZWRp
YVRvdWNoQmFyUHJvdmlkZXIgcGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXJdKSB7CisgICAgICAg
IEFTU0VSVChfcHJpdmF0ZS0+cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKTsKKyAgICAgICAgV2Vi
UGxheWJhY2tDb250cm9sc01hbmFnZXIgKm1hbmFnZXIgPSBfcHJpdmF0ZS0+cGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlLT5wbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOworICAgICAgICBbX3ByaXZh
dGUtPm1lZGlhVG91Y2hCYXJQcm92aWRlciBzZXRQbGF5YmFja0NvbnRyb2xzQ29udHJvbGxlcjoo
aWQgPEFWRnVuY3Rpb25CYXJQbGF5YmFja0NvbnRyb2xzQ29udHJvbGxpbmc+KW1hbmFnZXJdOwor
ICAgICAgICBbX3ByaXZhdGUtPm1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcgc2V0UGxheWJhY2tD
b250cm9sc0NvbnRyb2xsZXI6KGlkIDxBVkZ1bmN0aW9uQmFyUGxheWJhY2tDb250cm9sc0NvbnRy
b2xsaW5nPiltYW5hZ2VyXTsKKyAgICB9CisjZW5kaWYKK30KKworLSAodm9pZCl1cGRhdGVUb3Vj
aEJhcgoreworICAgIGlmICghX3ByaXZhdGUtPl9jYW5DcmVhdGVUb3VjaEJhcnMpCisgICAgICAg
IHJldHVybjsKKworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9zZWxlY3RlZE9y
TWFpbkZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAg
IE5TVG91Y2hCYXIgKnRvdWNoQmFyID0gbmlsOworICAgIE5TVmlldyAqZG9jdW1lbnRWaWV3ID0g
W1tbc2VsZiBfc2VsZWN0ZWRPck1haW5GcmFtZV0gZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOwor
ICAgIGlmIChbZG9jdW1lbnRWaWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0p
IHsKKyAgICAgICAgV2ViSFRNTFZpZXcgKndlYkhUTUxWaWV3ID0gKFdlYkhUTUxWaWV3ICopZG9j
dW1lbnRWaWV3OworICAgICAgICBpZiAoW3dlYkhUTUxWaWV3IF9pc0VkaXRhYmxlXSkgeworICAg
ICAgICAgICAgW3NlbGYgdXBkYXRlVGV4dFRvdWNoQmFyXTsKKyAgICAgICAgICAgIHRvdWNoQmFy
ID0gW3NlbGYgdGV4dFRvdWNoQmFyXTsKKyAgICAgICAgfQorI2lmIEVOQUJMRShXRUJfUExBWUJB
Q0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICAgICAgZWxzZSBpZiAoW3NlbGYgX2hhc0FjdGl2ZVZp
ZGVvRm9yQ29udHJvbHNJbnRlcmZhY2VdKSB7CisgICAgICAgICAgICBbc2VsZiB1cGRhdGVNZWRp
YVRvdWNoQmFyXTsKKyAgICAgICAgICAgIHRvdWNoQmFyID0gW19wcml2YXRlLT5tZWRpYVRvdWNo
QmFyUHJvdmlkZXIgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih0b3VjaEJhcildID8gWyhp
ZClfcHJpdmF0ZS0+bWVkaWFUb3VjaEJhclByb3ZpZGVyIHRvdWNoQmFyXSA6IFsoaWQpX3ByaXZh
dGUtPm1lZGlhVG91Y2hCYXJQcm92aWRlciB0b3VjaEJhcl07CisgICAgICAgIH0gZWxzZSBpZiAo
W19wcml2YXRlLT5tZWRpYVRvdWNoQmFyUHJvdmlkZXIgcGxheWJhY2tDb250cm9sc0NvbnRyb2xs
ZXJdKSB7CisgICAgICAgICAgICBbX3ByaXZhdGUtPm1lZGlhVG91Y2hCYXJQcm92aWRlciBzZXRQ
bGF5YmFja0NvbnRyb2xzQ29udHJvbGxlcjpuaWxdOworICAgICAgICAgICAgW19wcml2YXRlLT5t
ZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3IHNldFBsYXliYWNrQ29udHJvbHNDb250cm9sbGVyOm5p
bF07CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKworICAgIGlmICh0b3VjaEJhciA9PSBfcHJp
dmF0ZS0+X2N1cnJlbnRUb3VjaEJhcikKKyAgICAgICAgcmV0dXJuOworCisgICAgX3ByaXZhdGUt
Pl9jdXJyZW50VG91Y2hCYXIgPSB0b3VjaEJhcjsKKyAgICBbc2VsZiB3aWxsQ2hhbmdlVmFsdWVG
b3JLZXk6QCJ0b3VjaEJhciJdOworICAgIFtzZWxmIHNldFRvdWNoQmFyOl9wcml2YXRlLT5fY3Vy
cmVudFRvdWNoQmFyLmdldCgpXTsKKyAgICBbc2VsZiBkaWRDaGFuZ2VWYWx1ZUZvcktleTpAInRv
dWNoQmFyIl07Cit9CisKKy0gKHZvaWQpcHJlcGFyZUZvck1vdXNlRG93bgoreworICAgIF9wcml2
YXRlLT5fbmVlZHNEZWZlcnJlZFRleHRUb3VjaEJhclVwZGF0ZSA9IE5POworICAgIF9wcml2YXRl
LT5faXNEZWZlcnJpbmdUZXh0VG91Y2hCYXJVcGRhdGVzID0gWUVTOworfQorCistICh2b2lkKXBy
ZXBhcmVGb3JNb3VzZVVwCit7CisgICAgaWYgKCFfcHJpdmF0ZS0+X2lzRGVmZXJyaW5nVGV4dFRv
dWNoQmFyVXBkYXRlcykKKyAgICAgICAgcmV0dXJuOworCisgICAgX3ByaXZhdGUtPl9pc0RlZmVy
cmluZ1RleHRUb3VjaEJhclVwZGF0ZXMgPSBOTzsKKyAgICBpZiAoX3ByaXZhdGUtPl9uZWVkc0Rl
ZmVycmVkVGV4dFRvdWNoQmFyVXBkYXRlKSB7CisgICAgICAgIC8vIE9ubHkgdHJpZ2dlciBhbm90
aGVyIHVwZGF0ZSBpZiB3ZSBhdHRlbXB0ZWQgYW5kIGJhaWxlZCBmcm9tIGFuIHVwZGF0ZSBkdXJp
bmcgdGhlIGRlZmVycmFsLgorICAgICAgICBbc2VsZiB1cGRhdGVUb3VjaEJhcl07CisgICAgfQor
fQorCistICh2b2lkKXdlYlZpZXdBZGRpdGlvbnNXaWxsRGVzdHJveVZpZXcKK3sKKyAgICBbW05T
Tm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGZdOwor
fQorCistIChOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gKiljYW5kaWRhdGVMaXN0Cit7Cisg
ICAgcmV0dXJuIHNlbGYuX2lzUmljaGx5RWRpdGFibGUgPyBfcHJpdmF0ZS0+X3JpY2hUZXh0Q2Fu
ZGlkYXRlTGlzdFRvdWNoQmFySXRlbS5nZXQoKSA6IF9wcml2YXRlLT5fcGxhaW5UZXh0Q2FuZGlk
YXRlTGlzdFRvdWNoQmFySXRlbS5nZXQoKTsKK30KKyNlbHNlCisKKy0gKHZvaWQpdXBkYXRlVG91
Y2hCYXIKK3sKK30KKworLSAodm9pZClwcmVwYXJlRm9yTW91c2VEb3duCit7Cit9CisKKy0gKHZv
aWQpcHJlcGFyZUZvck1vdXNlVXAKK3sKK30KKworLSAodm9pZCl3ZWJWaWV3QWRkaXRpb25zV2ls
bERlc3Ryb3lWaWV3Cit7Cit9CisKKy0gKGlkKWNhbmRpZGF0ZUxpc3QKK3sKKyAgICByZXR1cm4g
bmlsOworfQorCisjZW5kaWYKKwogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV2ViVmlldyAoV2Vi
Vmlld0RldmljZU9yaWVudGF0aW9uKQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJWaWV3RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
Vmlld0RhdGEuaAkocmV2aXNpb24gMjA4NDA1KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsOCArMTAxLDEwIEBAIGNsYXNz
IFdlYlZpZXdHcm91cDsKIGNsYXNzIFdlYlNlbGVjdGlvblNlcnZpY2VDb250cm9sbGVyOwogI2Vu
ZGlmCiAKLSNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPj0gMTAxMjAwICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0jaW1wb3J0IDxXZWJLaXRB
ZGRpdGlvbnMvV2ViVmlld0RhdGFBZGRpdGlvbnNEZWNsYXJhdGlvbnMuaD4KKyNpZiBIQVZFKFRP
VUNIX0JBUikKK0BjbGFzcyBXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlcjsKK0BjbGFzcyBB
VkZ1bmN0aW9uQmFyUGxheWJhY2tDb250cm9sc1Byb3ZpZGVyOworQGNsYXNzIEFWRnVuY3Rpb25C
YXJTY3J1YmJlcjsKICNlbmRpZgogCiBjbGFzcyBXZWJWaWV3TGF5ZXJGbHVzaFNjaGVkdWxlciA6
IHB1YmxpYyBXZWJDb3JlOjpMYXllckZsdXNoU2NoZWR1bGVyIHsKQEAgLTE3OCw5ICsxODAsMjQg
QEAgQGludGVyZmFjZSBXZWJWaWV3UHJpdmF0ZSA6IE5TT2JqZWN0IHsKICNpZiBQTEFURk9STShN
QUMpCiAgICAgV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlciAqaW1tZWRpYXRlQWN0aW9uQ29u
dHJvbGxlcjsKIAotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAw
ICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0jaW1wb3J0IDxXZWJLaXRBZGRpdGlvbnMvV2Vi
Vmlld0RhdGFBZGRpdGlvbnMuaD4KLSNlbmRpZgorI2lmIEhBVkUoVE9VQ0hfQkFSKQorICAgIFJl
dGFpblB0cjxOU1RvdWNoQmFyPiBfY3VycmVudFRvdWNoQmFyOworICAgIFJldGFpblB0cjxOU1Rv
dWNoQmFyPiBfcGxhaW5UZXh0VG91Y2hCYXI7CisgICAgUmV0YWluUHRyPE5TVG91Y2hCYXI+IF9y
aWNoVGV4dFRvdWNoQmFyOworICAgIFJldGFpblB0cjxXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJv
bGxlcj4gX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyOworICAgIFJldGFpblB0cjxOU0NhbmRp
ZGF0ZUxpc3RUb3VjaEJhckl0ZW0+IF9yaWNoVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW07
CisgICAgUmV0YWluUHRyPE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbT4gX3BsYWluVGV4dENh
bmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW07CisgICAgUmV0YWluUHRyPE5TQXJyYXk+IF9lbXB0eUNh
bmRpZGF0ZXNBcnJheTsKKyAgICBSZXRhaW5QdHI8QVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJv
bHNQcm92aWRlcj4gbWVkaWFUb3VjaEJhclByb3ZpZGVyOworICAgIFJldGFpblB0cjxBVkZ1bmN0
aW9uQmFyU2NydWJiZXI+IG1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc7CisKKyAgICBCT09MIF9j
YW5DcmVhdGVUb3VjaEJhcnM7CisgICAgQk9PTCBfaXNVcGRhdGluZ1RleHRUb3VjaEJhcjsKKyAg
ICBCT09MIF9zdGFydGVkTGlzdGVuaW5nVG9DdXN0b21pemF0aW9uRXZlbnRzOworICAgIEJPT0wg
X2lzQ3VzdG9taXppbmdUb3VjaEJhcjsKKyAgICBCT09MIF9pc0RlZmVycmluZ1RleHRUb3VjaEJh
clVwZGF0ZXM7CisgICAgQk9PTCBfbmVlZHNEZWZlcnJlZFRleHRUb3VjaEJhclVwZGF0ZTsKKyNl
bmRpZiAvLyBIQVZFKFRPVUNIX0JBUikKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpU
ZXh0SW5kaWNhdG9yV2luZG93PiB0ZXh0SW5kaWNhdG9yV2luZG93OwogICAgIEJPT0wgaGFzSW5p
dGlhbGl6ZWRMb29rdXBPYnNlcnZlcjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVmlld0ludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3SW50ZXJuYWwuaAkocmV2aXNpb24gMjA4NDA1KQorKysgU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjkzLDEyICsy
OTMsMTEgQEAgQGludGVyZmFjZSBXZWJWaWV3IChXZWJWaWV3T3RoZXJJbnRlcm5hbAogLSAodm9p
ZClfc2V0TW9ja01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJOYW1lOihOU1N0cmluZyAqKW5hbWUg
c3RhdGU6KFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRDb250ZXh0OjpTdGF0ZSlzdGF0ZTsK
ICNlbmRpZgogCi1AZW5kCi0KLUBpbnRlcmZhY2UgV2ViVmlldyAoV2ViVXBkYXRlV2ViVmlld0Fk
ZGl0aW9ucykKIC0gKHZvaWQpcHJlcGFyZUZvck1vdXNlVXA7CiAtICh2b2lkKXByZXBhcmVGb3JN
b3VzZURvd247Ci0tICh2b2lkKXVwZGF0ZVdlYlZpZXdBZGRpdGlvbnM7CistICh2b2lkKXVwZGF0
ZVRvdWNoQmFyOwogLSAodm9pZCl3ZWJWaWV3QWRkaXRpb25zV2lsbERlc3Ryb3lWaWV3OwotLSAo
aWQpY2FuZGlkYXRlTGlzdDsKKy0gKHZvaWQpX2Rpc21pc3NUZXh0VG91Y2hCYXJQb3BvdmVySXRl
bVdpdGhJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXI7CistIChOU0NhbmRpZGF0ZUxp
c3RUb3VjaEJhckl0ZW0gKiljYW5kaWRhdGVMaXN0OworCiBAZW5kCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlZpZXdQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJWaWV3UHJpdmF0ZS5oCShyZXZpc2lvbiAyMDg0MDUpCisrKyBT
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdQcml2YXRlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTg4OSw2ICs4ODksMTAgQEAgQ291bGQgYmUgd29ydGggYWRkaW5nIHRvIHRoZSBBUEkuCiAK
IC0gKHZvaWQpX3NldEZvbnRGYWxsYmFja1ByZWZlcnNQaWN0b2dyYXBoczooQk9PTClmbGFnOwog
CistICh2b2lkKXNob3dDYW5kaWRhdGVzOihOU0FycmF5ICopY2FuZGlkYXRlcyBmb3JTdHJpbmc6
KE5TU3RyaW5nICopc3RyaW5nIGluUmVjdDooTlNSZWN0KXJlY3RPZlR5cGVkU3RyaW5nIGZvclNl
bGVjdGVkUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UgdmlldzooTlNWaWV3ICopdmlldyBjb21wbGV0aW9u
SGFuZGxlcjoodm9pZCAoXikoTlNUZXh0Q2hlY2tpbmdSZXN1bHQgKmFjY2VwdGVkQ2FuZGlkYXRl
KSljb21wbGV0aW9uQmxvY2s7CistICh2b2lkKWZvcmNlUmVxdWVzdENhbmRpZGF0ZXNGb3JUZXN0
aW5nOworLSAoQk9PTClzaG91bGRSZXF1ZXN0Q2FuZGlkYXRlczsKKwogQGVuZAogCiAjaWYgIVRB
UkdFVF9PU19JUEhPTkUKQEAgLTEwNjEsMTIgKzEwNjUsNiBAQCBAaW50ZXJmYWNlIE5TT2JqZWN0
IChXZWJWaWV3UmVzb3VyY2VMb2FkCiAtIChOU0NhY2hlZFVSTFJlc3BvbnNlICopd2ViVmlldzoo
V2ViVmlldyAqKXNlbmRlciByZXNvdXJjZTooaWQpaWRlbnRpZmllciB3aWxsQ2FjaGVSZXNwb25z
ZTooTlNDYWNoZWRVUkxSZXNwb25zZSAqKXJlc3BvbnNlIGZyb21EYXRhU291cmNlOihXZWJEYXRh
U291cmNlICopZGF0YVNvdXJjZTsKIEBlbmQKIAotQGludGVyZmFjZSBXZWJWaWV3IChXZWJTaG93
Q2FuZGlkYXRlcykKLS0gKHZvaWQpc2hvd0NhbmRpZGF0ZXM6KE5TQXJyYXkgKiljYW5kaWRhdGVz
IGZvclN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgaW5SZWN0OihOU1JlY3QpcmVjdE9mVHlwZWRT
dHJpbmcgZm9yU2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlyYW5nZSB2aWV3OihOU1ZpZXcgKil2aWV3
IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU1RleHRDaGVja2luZ1Jlc3VsdCAqYWNjZXB0
ZWRDYW5kaWRhdGUpKWNvbXBsZXRpb25CbG9jazsKLS0gKHZvaWQpZm9yY2VSZXF1ZXN0Q2FuZGlk
YXRlc0ZvclRlc3Rpbmc7Ci0tIChCT09MKXNob3VsZFJlcXVlc3RDYW5kaWRhdGVzOwotQGVuZAot
CiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewogI2VuZGlmCkluZGV4OiBUb29scy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDg0MDUp
CisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAx
Ni0xMS0wNCAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3VwcG9y
dCBUb3VjaEJhciBpbiBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2NDQzNworICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAg
IHJkYXI6Ly9wcm9ibGVtLzI4ODc2NTI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBtYWtlcyBNaW5pQnJvd3NlciBzdXBwb3J0IFRvdWNoQmFy
IGN1c3RvbWl6YXRpb24uIAorCisgICAgICAgICogTWluaUJyb3dzZXIvbWFjL0FwcERlbGVnYXRl
Lm06CisgICAgICAgICgtW0Jyb3dzZXJBcHBEZWxlZ2F0ZSBhd2FrZUZyb21OaWJdKToKKwogMjAx
Ni0xMS0wNCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMDgyOTMuCkluZGV4OiBUb29scy9NaW5p
QnJvd3Nlci9tYWMvQXBwRGVsZWdhdGUubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9NaW5pQnJvd3Nl
ci9tYWMvQXBwRGVsZWdhdGUubQkocmV2aXNpb24gMjA4NDA1KQorKysgVG9vbHMvTWluaUJyb3dz
ZXIvbWFjL0FwcERlbGVnYXRlLm0JKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDkgQEAgLSAo
dm9pZClhd2FrZUZyb21OaWIKICNlbmRpZgogCiAgICAgW1tOU0FwcCBtYWluTWVudV0gaW5zZXJ0
SXRlbTpbaXRlbSBhdXRvcmVsZWFzZV0gYXRJbmRleDpbW05TQXBwIG1haW5NZW51XSBpbmRleE9m
SXRlbVdpdGhUaXRsZTpAIkRlYnVnIl1dOworCisgICAgaWYgKFtOU0FwcCByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKHNldEF1dG9tYXRpY0N1c3RvbWl6ZVRvdWNoQmFyTWVudUl0ZW1FbmFi
bGVkOildKQorICAgICAgICBbTlNBcHAgc2V0QXV0b21hdGljQ3VzdG9taXplVG91Y2hCYXJNZW51
SXRlbUVuYWJsZWQ6WUVTXTsKIH0KIAogI2lmIFdLX0FQSV9FTkFCTEVECg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293983</attachid>
            <date>2016-11-04 21:58:20 -0700</date>
            <delta_ts>2016-11-04 22:29:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-2.txt</filename>
            <type>text/plain</type>
            <size>117668</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE2LTExLTA0ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBTdXBwb3J0IFRvdWNoQmFyIGluIFdl
YktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0
NDM3CisgICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0v
Mjg4NzY1MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9y
bS9zcGkvY29jb2EvQVZLaXRTUEkuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcGkvY29jb2EvTlNU
b3VjaEJhclNQSS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxD
aGVja2VyU1BJLmg6CisKIDIwMTYtMTEtMDQgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgogCiAgICAgICAgIEluZGV4ZWREQiAyLjA6IENsZWFuIHVwIG1vcmUgdHJhbnNhY3Rpb24g
YWJvcnQgYW5kIGV4Y2VwdGlvbiB0aHJvd2luZyBiZWhhdmlvciBmcm9tIElEQk9iamVjdFN0b3Jl
LgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMjA4NDA1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNTY0LDEwICsxNTY0LDEw
IEBACiAJCTQxNjJBNDU3MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQxNjJBNDU1MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
LmNwcCAqLzsgfTsKIAkJNDE2MkE0NTgxMDExNDY0NzAwREZGM0VEIC8qIEpTRGVkaWNhdGVkV29y
a2VyR2xvYmFsU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQxNjJBNDU2MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlLmggKi87IH07CiAJCTQxNkUyOUE2MTAyRkE5NjIwMDdGQzE0RSAvKiBXb3JrZXJSZXBv
cnRpbmdQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDE2RTI5QTUxMDJGQTk2MjAwN0ZDMTRFIC8qIFdvcmtlclJlcG9ydGluZ1Byb3h5LmggKi87
IH07CisJCTQxNkU2RkU4MUJCRDEyREYwMDBBM0Y2NCAvKiBSZWFkYWJsZVN0cmVhbUludGVybmFs
c0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTQxNkU2RkU4MUJCRDEyREYwMDBBNjAyMyAvKiBGZXRjaEludGVybmFsc0J1aWx0aW5zLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMx
MTBEMDBCNzY0QjkgLyogRmV0Y2hJbnRlcm5hbHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjAz
MyAvKiBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEM5IC8qIFN0cmVhbUlu
dGVybmFsc0J1aWx0aW5zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJNDE2RTZGRTgxQkJEMTJERjAwMEEzRjY0IC8qIFJlYWRhYmxlQnl0ZVN0cmVh
bUludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVCeXRlU3RyZWFt
SW50ZXJuYWxzQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQk0MTZFNkZFODFCQkQxMkRGMDAwQTYwNDMgLyogUmVhZGFibGVTdHJlYW1J
bnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOUIwM0Q4MDYxQkIzMTEwRDAwQjczRjY0IC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJu
YWxzQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk0MTZFNkZFODFCQkQxMkRGMDAwQTYwNDMgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50
ZXJuYWxzQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRl
cm5hbHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjA1MyAvKiBXcml0YWJsZVN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RTkgLyogV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNC
dWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTQxNkU2RkU5MUJCRDEyRTUwMDBBNjA0MyAvKiBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFC
QjMxMTBEMDBCNzY0RDggLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxNkU2RkU5MUJCRDEyRTUwMDBB
NjA1MyAvKiBXcml0YWJsZVN0cmVhbUJ1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RTggLyogV3JpdGFi
bGVTdHJlYW1CdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0yNTkwLDggKzI1OTAsOCBAQAogCQk2QjY5M0EyRTFDNTFBODJFMDBCMDNC
RUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZCNjkzQTJEMUM1MUE4MkUwMEIwM0JFRiAvKiBSZXNvdXJjZUxv
YWRPYnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTZCNjkzQTM0MUM1MUE5NUQwMEIwM0JFRiAvKiBSZXNvdXJjZUxvYWRPYnNlcnZlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QjY5M0Ez
MzFDNTFBOTVEMDBCMDNCRUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwICovOyB9OwogCQk2
QzRDOTZERTFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNEM5
NkRBMUFENDQ4MzUwMDM2M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuY3Bw
ICovOyB9OwotCQk2QzRDOTZERjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJl
YW1Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2QzRDOTZEQjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250
cm9sbGVyLmggKi87IH07CiAJCTZDNEM5NkRFMUFENDQ4MzUwMDM2NUE1MCAvKiBKU1JlYWRhYmxl
U3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkM0Qzk2REExQUQ0NDgzNTAwMzY1QTUwIC8qIEpTUmVhZGFibGVT
dHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHAgKi87IH07CisJCTZDNEM5NkRGMUFENDQ4MzUwMDM2
M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNEM5NkRCMUFENDQ4MzUwMDM2M0Y2NCAv
KiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaCAqLzsgfTsKIAkJNkM0Qzk2REYxQUQ0
NDgzNTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0Qzk2REIxQUQ0NDgz
NTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5oICovOyB9Owog
CQk2QzYzODg5NUE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlh
dG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM2
Mzg4OTNBOTZDQ0VFNTBDOEM5NDZDIC8qIENhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2QzYz
ODg5NkE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzYzODg5
NEE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5jcHAg
Ki87IH07CkBAIC0zMjc0LDYgKzMyNzQsNyBAQAogCQk5MzMwOUVBMzA5OUVCNzhDMDA1NkU1ODEg
LyogU2hhcmVkVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzMzA5RUEwMDk5RUI3OEMwMDU2RTU4MSAvKiBTaGFyZWRUaW1lci5oICovOyB9Owog
CQk5MzMwOUVBNDA5OUVCNzhDMDA1NkU1ODEgLyogVGltZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlFQTEwOTlFQjc4QzAwNTZFNTgxIC8q
IFRpbWVyLmNwcCAqLzsgfTsKIAkJOTMzNTRBM0MwQjI0RjhDOTAwM0Y2REVBIC8qIFVJRXZlbnRX
aXRoS2V5U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTMzNTRBM0IwQjI0RjhDOTAwM0Y2REVBIC8qIFVJRXZlbnRXaXRoS2V5U3RhdGUuY3Bw
ICovOyB9OworCQk5MzM1QjQ5RDFEQ0JFRjdDMDBFRDQ2OEUgLyogTlNUb3VjaEJhclNQSS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzNUI0OUIxRENC
RUY3MTAwRUQ0NjhFIC8qIE5TVG91Y2hCYXJTUEkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5MzNBMTQyRTBCN0QxODg2MDBBNTNGRkQgLyogVGV4
dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzM0ExNDJCMEI3RDE4ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuY3BwICovOyB9OwogCQk5MzNB
MTQzMDBCN0QxODg2MDBBNTNGRkQgLyogVGV4dEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzNBMTQyRDBCN0QxODg2MDBBNTNGRkQgLyogVGV4
dEV2ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJOTMzQTE0QjgwQjdEMUQ1MjAwQTUzRkZEIC8qIEpTVGV4dEV2ZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzM0ExNEI2MEI3RDFENTIwMEE1
M0ZGRCAvKiBKU1RleHRFdmVudC5jcHAgKi87IH07CkBAIC05NzgyLDggKzk3ODMsOCBAQAogCQk2
QjY5M0EyRDFDNTFBODJFMDBCMDNCRUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkI2OTNBMzMxQzUxQTk1RDAwQjAzQkVGIC8qIFJlc291
cmNlTG9hZE9ic2VydmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlc291cmNlTG9hZE9ic2VydmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NkM0Qzk2REExQUQ0NDgzNTAwMzYzRjY0IC8qIEpTUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1JlYWRhYmxlQnl0
ZVN0cmVhbUNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzRD
OTZEQjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUmVhZGFibGVCeXRlU3RyZWFtQ29u
dHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QzRDOTZEQTFBRDQ0ODM1
MDAzNjVBNTAgLyogSlNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29u
dHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZDNEM5NkRCMUFENDQ4
MzUwMDM2M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZDNEM5NkRCMUFENDQ4MzUwMDM2NUE1MCAv
KiBKU1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZDNjM4ODkzQTk2Q0NFRTUwQzhDOTQ2QyAvKiBDYWNo
ZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTZDNjM4ODk0QTk2Q0NFRTUwQzhDOTQ2QyAvKiBDYWNoZWRSZXNvdXJj
ZVJlcXVlc3RJbml0aWF0b3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTEwNzIyLDYgKzEwNzIzLDcgQEAKIAkJOTMzMkFCOEIxNjUzQTk3OTAw
RDgyN0VDIC8qIEZFTGlnaHRpbmdORU9OLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZFTGlnaHRpbmdORU9OLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMzJB
QjhDMTY1M0E5NzkwMEQ4MjdFQyAvKiBORU9OSGVscGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBORU9OSGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5MzM1NEEzQjBCMjRGOEM5MDAzRjZERUEgLyogVUlFdmVudFdpdGhLZXlTdGF0ZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVSUV2ZW50V2l0aEtleVN0YXRlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTMzNUI0OUIxRENCRUY3MTAwRUQ0NjhF
IC8qIE5TVG91Y2hCYXJTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTlNU
b3VjaEJhclNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzNBMTQyQjBCN0Qx
ODg2MDBBNTNGRkQgLyogVGV4dEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFRleHRFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkz
M0ExNDJDMEI3RDE4ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFRleHRFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzM0Ex
NDJEMEI3RDE4ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGV4dEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MTE3NSw4ICsxMTE3Nyw4IEBACiAJCTk5MDhCMEYwMUJDQUNGOTEwMEVEM0Y2NCAvKiBSZWFkYWJs
ZUJ5dGVTdHJlYW1Db250cm9sbGVyLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0
OyBwYXRoID0gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlci5qczsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTkwOEIwRjExQkNBQ0Y5MTAwRUQwRjU1IC8qIFN0cmVhbUludGVybmFs
cy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFN0cmVhbUludGVy
bmFscy5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkwOEIwRjExQkNBQ0Y5MTAw
RUQwRjY1IC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzLmpzICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVhZGFibGVTdHJlYW1JbnRlcm5hbHMuanM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk5MDhCMEYxMUJDQUNGOTEwMEVEM0Y2NCAvKiBSZWFkYWJs
ZUJ5dGVTdHJlYW1JbnRlcm5hbHMuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7
IHBhdGggPSBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHMuanM7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTk5MDhCMEYxMUJDQUNGOTEwMEVEMEY3NSAvKiBXcml0YWJsZVN0cmVhbUlu
dGVybmFscy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFdyaXRh
YmxlU3RyZWFtSW50ZXJuYWxzLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OTA4
QjBGMTFCQ0FDRjkxMDBFRDNGNjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzLmpzICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVhZGFibGVCeXRlU3RyZWFt
SW50ZXJuYWxzLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGMjFCQ0FD
RjkxMDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyLmpzICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVy
LmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGMzFCQ0FDRkZFMDBFRDBG
NjUgLyogQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJ5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3lCdWlsdGlu
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5MDhCMEY1MUJDQUQwN0QwMEVE
MEY2NSAvKiBCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5QnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTE4NCwxNSArMTExODYsMTMgQEAKIAkJ
OTkwOEIwRjcxQkNBRDA3RDAwRUQwRjY1IC8qIENvdW50UXVldWluZ1N0cmF0ZWd5QnVpbHRpbnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ291bnRRdWV1aW5nU3RyYXRlZ3lC
dWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGOTFCQ0FEMDdE
MDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkwOEIwRjkxQkNBRDA3RDAwRUQwRjc1IC8qIFdyaXRhYmxl
U3RyZWFtQnVpbHRpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V3JpdGFibGVTdHJlYW1CdWlsdGlucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTk5MDhCMEZBMUJDQUQwN0QwMEVEM0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVy
QnVpbHRpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFi
bGVCeXRlU3RyZWFtQ29udHJvbGxlckJ1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJOTkwOEIwRkIxQkNBRDA3RDAwRUQzRjY0IC8qIFJlYWRhYmxlQnl0ZVN0cmVhbUNv
bnRyb2xsZXJCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFk
YWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQnVpbHRpbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTkwOEIwRkExQkNBRDA3RDAwRUQwRjY1IC8qIFJlYWRhYmxlU3RyZWFtRGVmYXVs
dENvbnRyb2xsZXJCdWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQnVpbHRpbnMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGQjFCQ0FEMDdEMDBFRDBGNjUgLyogUmVhZGFi
bGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckJ1aWx0aW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJCdWlsdGlucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGRDFCQ0FEMDdEMDBFRDBGNDUgLyog
RmV0Y2hJbnRlcm5hbHNCdWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGZXRjaEludGVybmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTkwOEIwRkQxQkNBRDA3RDAwRUQwRjU1IC8qIFN0cmVhbUludGVybmFsc0J1aWx0
aW5zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTkwOEIwRkQx
QkNBRDA3RDAwRUQzRjY0IC8qIFJlYWRhYmxlQnl0ZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlYWRhYmxlQnl0ZVN0cmVh
bUludGVybmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkw
OEIwRkQxQkNBRDA3RDAwRUQwRjY1IC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFibGVTdHJlYW1J
bnRlcm5hbHNCdWlsdGlucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5MDhC
MEZEMUJDQUQwN0QwMEVEMEY3NSAvKiBXcml0YWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdyaXRhYmxlU3RyZWFtSW50
ZXJuYWxzQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OTA4QjBG
RDFCQ0FEMDdEMDBFRDNGNjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFibGVCeXRlU3Ry
ZWFtSW50ZXJuYWxzQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
OTA4QjBGRTFCQ0FEMDdEMDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyQnVp
bHRpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFibGVT
dHJlYW1EZWZhdWx0UmVhZGVyQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5OTA4QjBGRjFCQ0FEMDdEMDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVh
ZGVyQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVhZGFibGVT
dHJlYW1EZWZhdWx0UmVhZGVyQnVpbHRpbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTkyMDM5ODAxOEI5NUJDNjAwQjM5QUY5IC8qIFVzZXJJbnB1dEJyaWRnZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVc2VySW5wdXRCcmlkZ2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEyMzAsMTAgKzExMjMwLDEwIEBACiAJCTlBNTI4
RTgyMTdEN0Y1MkYwMEFBOTUxOCAvKiBGbG9hdGluZ09iamVjdHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRmxvYXRpbmdPYmplY3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTlBQjFGMzdFMThFMjQ4OUEwMDUzNDc0MyAvKiBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUFCMUYzN0YxOEUy
NDg5QTAwNTM0NzQzIC8qIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAv
KiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0QjkgLyog
RmV0Y2hJbnRlcm5hbHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGZXRjaEludGVybmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTlCMDNEODA2MUJCMzExMEQwMEI3NjRDOSAvKiBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDgg
LyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5h
bHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZUJ5
dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZVN0cmVhbUlu
dGVybmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMDNEODA2
MUJCMzExMEQwMEI3NjRFOCAvKiBXcml0YWJsZVN0cmVhbUJ1aWx0aW5zLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyaXRhYmxlU3RyZWFtQnVpbHRpbnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEU5IC8qIFdyaXRhYmxl
U3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTcyNTcsNiArMTcyNTcsNyBAQAogCQkJCTJEREI5N0YzMTlGOUFFQ0EwMDIw
MjVEOCAvKiBOU0V4dGVuc2lvblNQSS5oICovLAogCQkJCUNFMTI1MjNBMUExNjcxMTAwMDg2NDQ4
MCAvKiBOU0ZpbGVNYW5hZ2VyU1BJLmggKi8sCiAJCQkJQ0UxMjUyNTIxQTFCRUMwNjAwODY0NDgw
IC8qIE5TU3RyaW5nU1BJLmggKi8sCisJCQkJOTMzNUI0OUIxRENCRUY3MTAwRUQ0NjhFIC8qIE5T
VG91Y2hCYXJTUEkuaCAqLywKIAkJCQkzMUIzMTNEQTFCNjk4NzE2MDBGMkFBQkMgLyogTlNVUkxD
b25uZWN0aW9uU1BJLmggKi8sCiAJCQkJQ0UxMjUyNTQxQTFCRUMwRTAwODY0NDgwIC8qIE5TVVJM
RG93bmxvYWRTUEkuaCAqLywKIAkJCQk2NTNFRjgzODE5QTA0M0FFMDA1MjIwMkMgLyogTlNVUkxG
aWxlVHlwZU1hcHBpbmdzU1BJLmggKi8sCkBAIC0xNzMzMyw4ICsxNzMzNCw2IEBACiAJCQkJNDRB
MjhBQUUxMkRGQjhCRjAwQUU5MjNCIC8qIE1hdGhNTE5hbWVzLmggKi8sCiAJCQkJNzFFMjE4Mzgx
NzM1OUZCODAwNkU2RTREIC8qIFBsdWdJbnNSZXNvdXJjZXMuaCAqLywKIAkJCQk3MUUyMTgzOTE3
MzU5RkI4MDA2RTZFNEQgLyogUGx1Z0luc1Jlc291cmNlc0RhdGEuY3BwICovLAotCQkJCTk5MDhC
MEZBMUJDQUQwN0QwMDc2M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQnVpbHRp
bnMuY3BwICovLAotCQkJCTk5MDhCMEZCMUJDQUQwN0QwMDc2M0Y2NCAvKiBSZWFkYWJsZUJ5dGVT
dHJlYW1Db250cm9sbGVyQnVpbHRpbnMuaCAqLywKIAkJCQk5OTA4QjBGRDFCQ0FEMDdEMDBFRDNG
NjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuY3BwICovLAogCQkJCTlC
MDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oICovLAogCQkJCTk5MDhCMEY5MUJDQUQwN0QwMEVEMEY2NSAvKiBSZWFkYWJsZVN0cmVh
bUJ1aWx0aW5zLmNwcCAqLywKQEAgLTI1MDc3LDcgKzI1MDc2LDYgQEAKIAkJCQlCQzFCREYyNTE1
NkMxOEM3MDAxQzEyNDMgLyogRE9NRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTJFRDYwOUJE
MTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgx
ODVGM0IwOTc2NTc2NjAwNTgyNkQ5IC8qIERPTUltcGxlbWVudGF0aW9uLmggaW4gSGVhZGVycyAq
LywKLQkJCQlFMzVDQTE0RTFEQkMzQTQyMDBGODM1MTYgLyogRE9NSklUQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMxNTBFQTcxREE3MjE5MzAwMTk0MDEyIC8q
IERPTUpJVEhlbHBlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE5QzZFNEU0MEQ3NDVFMDUwMDY0
NDJFOSAvKiBET01NaW1lVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTlDNkU0RTgwRDc0NUUx
ODAwNjQ0MkU5IC8qIERPTU1pbWVUeXBlQXJyYXkuaCBpbiBIZWFkZXJzICovLApAQCAtMjY3OTEs
OSArMjY3ODksOSBAQAogCQkJCUY1NUIzRENFMTI1MUYxMkQwMDNFRjI2OSAvKiBSYW5nZUlucHV0
VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU4NEU5RTExNzY2OEJGMTAwODE1QjY4IC8qIFJh
c3RlclNoYXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODREODI3QzExRDMzM0VEMDA5NzI5OTAg
LyogUmF3RGF0YURvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQk0MTZFNkZFODFC
QkQxMkRGMDAwQTNGNjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCBp
biBIZWFkZXJzICovLAorCQkJCTQxNkU2RkU4MUJCRDEyREYwMDBBM0Y2NCAvKiBSZWFkYWJsZVN0
cmVhbUludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTZFNkZFOTFCQkQx
MkU1MDAwQTYwNDMgLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJNDE2RTZGRTgxQkJEMTJERjAwMEE2MDQzIC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVp
bHRpbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjA0MyAvKiBS
ZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkQzMTYwM0MxMkIwMjY3NjAwQzFBMzU5IC8qIFJlYWx0aW1lQW5hbHlzZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTRBNEY2NTcxMUFBOTk3RjEwMEUzOENERCAvKiBSZWFsdGltZU1lZGlhU291cmNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0QTRGNjU3MjFBQTk5N0YxMDBFMzhDREQgLyogUmVhbHRp
bWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzg3NSw2ICsy
Nzg3Myw3IEBACiAJCQkJMUNBRjM0ODEwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVj
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUNBRjM0ODMwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNj
cmlwdE9iamVjdFByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNTY5RDFCMEQ3RTJCODIw
MDdDMzk4MyAvKiBXZWJTY3JpcHRPYmplY3RQcm90b2NvbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
OTMzNUI0OUQxRENCRUY3QzAwRUQ0NjhFIC8qIE5TVG91Y2hCYXJTUEkuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk3QUFCRDFCMTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk3QUFCRDFFMTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXRDaGFubmVsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5N0FBQkQxRjE0RkEwOUQ1MDA3NDU3QUUgLyogV2ViU29ja2V0
Q2hhbm5lbENsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODgzNCw3ICsyODgzMyw2IEBACiAJ
CQkJQkMxQkRGMjQxNTZDMTg4MzAwMUMxMjQzIC8qIERPTUVycm9yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTJFRDYwOUJDMTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBODE4NUYzRTA5NzY1NzY2MDA1ODI2RDkgLyogRE9NSW1wbGVtZW50YXRp
b24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRTM1Q0ExNEQxREJDM0EzRjAwRjgzNTE2IC8qIERP
TUpJVEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTlDNkU0
RTMwRDc0NUUwNTAwNjQ0MkU5IC8qIERPTU1pbWVUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE5QzZFNEU3MEQ3NDVFMTgwMDY0NDJFOSAvKiBET01NaW1lVHlwZUFycmF5LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTUyQjZDOUMyMTVFM0Y0REYwMDY5MEIwNSAvKiBET01OYW1lZEZsb3dDb2xs
ZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
c3BpL2NvY29hL0FWS2l0U1BJLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vc3BpL2NvY29hL0FWS2l0U1BJLmgJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3NwaS9jb2NvYS9BVktpdFNQSS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3
ICs2NCw3IEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIEFWUGxheWVyQ29udHIKIEBjbGFz
cyBBVlBsYXllckxheWVyOwogCiBAaW50ZXJmYWNlIEFWUGljdHVyZUluUGljdHVyZVBsYXllckxh
eWVyVmlldyA6IFVJVmlldwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBBVlBsYXll
ckxheWVyICpwbGF5ZXJMYXllcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgbnVs
bGFibGUpIEFWUGxheWVyTGF5ZXIgKnBsYXllckxheWVyOwogQGVuZAogCiBAaW50ZXJmYWNlIF9f
QVZQbGF5ZXJMYXllclZpZXcgOiBVSVZpZXcKQEAgLTEzNiw2ICsxMzYsMjcgQEAgTlNfQ0xBU1Nf
QVZBSUxBQkxFX01BQygxMF8xMSkKIEBlbmQKIAogQGludGVyZmFjZSBBVlZhbHVlVGltaW5nICgp
Ci0rIChBVlZhbHVlVGltaW5nICopdmFsdWVUaW1pbmdXaXRoQW5jaG9yVmFsdWU6KGRvdWJsZSlh
bmNob3JWYWx1ZSBhbmNob3JUaW1lU3RhbXA6KE5TVGltZUludGVydmFsKXRpbWVTdGFtcCByYXRl
Oihkb3VibGUpcmF0ZTsKKysgKG51bGxhYmxlIEFWVmFsdWVUaW1pbmcgKil2YWx1ZVRpbWluZ1dp
dGhBbmNob3JWYWx1ZTooZG91YmxlKWFuY2hvclZhbHVlIGFuY2hvclRpbWVTdGFtcDooTlNUaW1l
SW50ZXJ2YWwpdGltZVN0YW1wIHJhdGU6KGRvdWJsZSlyYXRlOwogQHByb3BlcnR5IChOU19OT05B
VE9NSUNfSU9TT05MWSwgcmVhZG9ubHkpIGRvdWJsZSBjdXJyZW50VmFsdWU7CiBAZW5kCisKKyNp
ZiBQTEFURk9STShNQUMpCisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VS
KQorI2ltcG9ydCA8QVZLaXQvQVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNQcm92aWRlci5o
PgorI2ltcG9ydCA8QVZLaXQvQVZGdW5jdGlvbkJhclNjcnViYmVyLmg+CisjZWxzZQorQHByb3Rv
Y29sIEFWRnVuY3Rpb25CYXJQbGF5YmFja0NvbnRyb2xzQ29udHJvbGxpbmcgPE5TT2JqZWN0Pgor
QHByb3BlcnR5IChyZWFkb25seSkgTlNUaW1lSW50ZXJ2YWwgY29udGVudER1cmF0aW9uOworQHBy
b3BlcnR5IChyZWFkb25seSwgbnVsbGFibGUpIEFWVmFsdWVUaW1pbmcgKnRpbWluZzsKK0Bwcm9w
ZXJ0eSAocmVhZG9ubHksIGdldHRlcj1pc1NlZWtpbmcpIEJPT0wgc2Vla2luZzsKK0Bwcm9wZXJ0
eSAocmVhZG9ubHkpIE5TVGltZUludGVydmFsIHNlZWtUb1RpbWU7CistICh2b2lkKXNlZWtUb1Rp
bWU6KE5TVGltZUludGVydmFsKXRpbWUgdG9sZXJhbmNlQmVmb3JlOihOU1RpbWVJbnRlcnZhbCl0
b2xlcmFuY2VCZWZvcmUgdG9sZXJhbmNlQWZ0ZXI6KE5TVGltZUludGVydmFsKXRvbGVyYW5jZUFm
dGVyOworQHByb3BlcnR5IChyZWFkb25seSkgQk9PTCBoYXNFbmFibGVkQXVkaW87CitAcHJvcGVy
dHkgKHJlYWRvbmx5KSBCT09MIGhhc0VuYWJsZWRWaWRlbzsKK0BlbmQKKworQGludGVyZmFjZSBB
VkZ1bmN0aW9uQmFyU2NydWJiZXIgOiBOU1ZpZXcKK0Bwcm9wZXJ0eSAoYXNzaWduLCBudWxsYWJs
ZSkgaWQ8QVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNDb250cm9sbGluZz4gcGxheWJhY2tD
b250cm9sc0NvbnRyb2xsZXI7CitAZW5kCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9QTEFZQkFDS19D
T05UUk9MU19NQU5BR0VSKQorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3NwaS9jb2NvYS9OU1RvdWNoQmFyU1BJLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL2NvY29hL05TVG91Y2hCYXJTUEkuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvY29jb2EvTlNUb3VjaEJhclNQ
SS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgVVNF
KEFQUExFX0lOVEVSTkFMX1NESykgJiYgSEFWRShUT1VDSF9CQVIpCisKKyNpbXBvcnQgPEFwcEtp
dC9OU0Z1bmN0aW9uQmFyX1ByaXZhdGUuaD4KKyNpbXBvcnQgPEFwcEtpdC9OU1RleHRUb3VjaEJh
ckl0ZW1Db250cm9sbGVyX1dlYktpdFNQSS5oPgorI2ltcG9ydCA8QXBwS2l0L05TVG91Y2hCYXJf
UHJpdmF0ZS5oPgorCisjZWxzZQorCitAaW50ZXJmYWNlIE5TVG91Y2hCYXIgKCkKK0Bwcm9wZXJ0
eSAocmVhZG9ubHksIGNvcHksIG51bGxhYmxlKSBOU0FycmF5PE5TVG91Y2hCYXJJdGVtICo+ICpp
dGVtczsKK0Bwcm9wZXJ0eSAoc3Ryb25nLCBudWxsYWJsZSkgTlNUb3VjaEJhckl0ZW0gKmVzY2Fw
ZUtleVJlcGxhY2VtZW50SXRlbTsKK0BlbmQKKworQGludGVyZmFjZSBOU1RleHRUb3VjaEJhckl0
ZW1Db250cm9sbGVyIDogTlNPYmplY3QKKworQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nLCBu
dWxsYWJsZSkgTlNDb2xvclBpY2tlclRvdWNoQmFySXRlbSAqY29sb3JQaWNrZXJJdGVtOworQHBy
b3BlcnR5IChyZWFkb25seSwgc3Ryb25nLCBudWxsYWJsZSkgTlNTZWdtZW50ZWRDb250cm9sICp0
ZXh0U3R5bGU7CitAcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcsIG51bGxhYmxlKSBOU1NlZ21l
bnRlZENvbnRyb2wgKnRleHRBbGlnbm1lbnRzOworQHByb3BlcnR5IChudWxsYWJsZSwgc3Ryb25n
KSBOU1ZpZXdDb250cm9sbGVyICp0ZXh0TGlzdFZpZXdDb250cm9sbGVyOworQHByb3BlcnR5IEJP
T0wgdXNlc05hcnJvd1RleHRTdHlsZUl0ZW07CisKKy0gKG51bGxhYmxlIE5TVG91Y2hCYXJJdGVt
ICopaXRlbUZvcklkZW50aWZpZXI6KG51bGxhYmxlIE5TU3RyaW5nICopaWRlbnRpZmllcjsKKwor
QGVuZAorCisjZGVmaW5lIE5TVG91Y2hCYXJXaWxsRW50ZXJDdXN0b21pemF0aW9uIEAiTlNUb3Vj
aEJhcldpbGxFbnRlckN1c3RvbWl6YXRpb24iCisjZGVmaW5lIE5TVG91Y2hCYXJEaWRFeGl0Q3Vz
dG9taXphdGlvbiBAIk5TVG91Y2hCYXJEaWRFeGl0Q3VzdG9taXphdGlvbiIKKworI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxDaGVja2VyU1BJLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL21hYy9OU1NwZWxsQ2hl
Y2tlclNQSS5oCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9z
cGkvbWFjL05TU3BlbGxDaGVja2VyU1BJLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcg
QEAKIC8vIEZJWE1FOiBUaGlzIGhlYWRlciBzaG91bGQgaW5jbHVkZSBzeXN0ZW0gaGVhZGVycyB3
aGVuIHBvc3NpYmxlLgogCiBleHRlcm4gTlNTdHJpbmcgKk5TVGV4dENoZWNraW5nSW5zZXJ0aW9u
UG9pbnRLZXk7CitleHRlcm4gTlNOb3RpZmljYXRpb25OYW1lIGNvbnN0IE5TU3BlbGxDaGVja2Vy
RGlkQ2hhbmdlQXV0b21hdGljVGV4dENvbXBsZXRpb25Ob3RpZmljYXRpb247CiAKIEBpbnRlcmZh
Y2UgTlNTcGVsbENoZWNrZXIgKCkKIC0gKE5TSW50ZWdlcilyZXF1ZXN0Q2FuZGlkYXRlc0ZvclNl
bGVjdGVkUmFuZ2U6KE5TUmFuZ2Upc2VsZWN0ZWRSYW5nZSBpblN0cmluZzooTlNTdHJpbmcgKilz
dHJpbmdUb0NoZWNrIHR5cGVzOihOU1RleHRDaGVja2luZ1R5cGVzKWNoZWNraW5nVHlwZXMgb3B0
aW9uczooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKW9wdGlvbnMgaW5TcGVsbERvY3Vt
ZW50V2l0aFRhZzooTlNJbnRlZ2VyKXRhZyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNJ
bnRlZ2VyIHNlcXVlbmNlTnVtYmVyLCBOU0FycmF5PE5TVGV4dENoZWNraW5nUmVzdWx0ICo+ICpj
YW5kaWRhdGVzKSljb21wbGV0aW9uSGFuZGxlcjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIw
ODQwNSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDkwIEBACisyMDE2LTExLTA0ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKwor
ICAgICAgICBTdXBwb3J0IFRvdWNoQmFyIGluIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NDM3CisgICAgICAgIC1hbmQgY29ycmVzcG9u
ZGluZy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjg4NzY1MjQKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tW
aWV3UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1t
OgorICAgICAgICAoLVtXS1dlYlZpZXcgbWFrZVRvdWNoQmFyXSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
d2ViX2RpZEFkZE1lZGlhQ29udHJvbHNNYW5hZ2VyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3dlYl9kaWRSZW1vdmVNZWRpYUNvbnRyb2xzTWFuYWdlcl0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX2ludGVyYWN0V2l0aE1lZGlhQ29udHJvbHNGb3JUZXN0aW5nXSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfc2V0V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Ol0pOgorICAgICAgICAo
LVtXS1dlYlZpZXcgX21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXddKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9hZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Ol0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX3JlbW92ZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXddKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL21hYy9XS1ZpZXcubW06CisgICAgICAgICgtW1dLVmlldyBtYWtlVG91Y2hCYXJdKToKKyAg
ICAgICAgKC1bV0tWaWV3IGNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW1dKToKKyAgICAgICAgKC1b
V0tWaWV3IF93ZWJfZGlkQWRkTWVkaWFDb250cm9sc01hbmFnZXI6XSk6CisgICAgICAgICgtW1dL
VmlldyBfd2ViX2RpZFJlbW92ZU1lZGlhQ29udHJvbHNNYW5hZ2VyXSk6CisgICAgICAgICgtW1dL
VmlldyBfd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3XSk6CisgICAgICAgICgtW1dLVmll
dyBfc2V0V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Ol0pOgorICAgICAgICAoLVtXS1Zp
ZXcgX21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXddKToKKyAgICAgICAgKC1bV0tWaWV3IF9hZGRN
ZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Ol0pOgorICAgICAgICAoLVtXS1ZpZXcgX3JlbW92ZU1l
ZGlhUGxheWJhY2tDb250cm9sc1ZpZXddKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2Vi
Vmlld0ltcGwuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmN1cnJlbnRUb3VjaEJh
cik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjbGllbnRXYW50c01lZGlhUGxheWJh
Y2tDb250cm9sc1ZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Q2xpZW50
V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0ltcGw6OnNldElzQ3VzdG9taXppbmdUb3VjaEJhcik6CisgICAgICAgICogVUlQcm9jZXNzL0Nv
Y29hL1dlYlZpZXdJbXBsLm1tOgorICAgICAgICAoLVtXS1RleHRMaXN0VG91Y2hCYXJWaWV3Q29u
dHJvbGxlciBpbml0V2l0aFdlYlZpZXdJbXBsOl0pOgorICAgICAgICAoLVtXS1RleHRMaXN0VG91
Y2hCYXJWaWV3Q29udHJvbGxlciBkaWREZXN0cm95Vmlld10pOgorICAgICAgICAoLVtXS1RleHRM
aXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciBfc2VsZWN0TGlzdDpdKToKKyAgICAgICAgKC1bV0tU
ZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgc2V0Q3VycmVudExpc3RUeXBlOl0pOgorICAg
ICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIGluaXRXaXRoV2ViVmlld0ltcGw6
XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgZGlkRGVzdHJveVZp
ZXddKToKKyAgICAgICAgKC1bV0tUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciB0b3VjaEJhcjpt
YWtlSXRlbUZvcklkZW50aWZpZXI6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNv
bnRyb2xsZXIgaXRlbUZvcklkZW50aWZpZXI6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFy
SXRlbUNvbnRyb2xsZXIgY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTplbmRTZWxlY3RpbmdDYW5k
aWRhdGVBdEluZGV4Ol0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVy
IGNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW06Y2hhbmdlZENhbmRpZGF0ZUxpc3RWaXNpYmlsaXR5
Ol0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHRleHRMaXN0VG91
Y2hCYXJWaWV3Q29udHJvbGxlcl0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250
cm9sbGVyIHNldFRleHRJc0JvbGQ6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNv
bnRyb2xsZXIgc2V0VGV4dElzSXRhbGljOl0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0
ZW1Db250cm9sbGVyIHNldFRleHRJc1VuZGVybGluZWQ6XSk6CisgICAgICAgICgtW1dLVGV4dFRv
dWNoQmFySXRlbUNvbnRyb2xsZXIgX3drQ2hhbmdlVGV4dFN0eWxlOl0pOgorICAgICAgICAoLVtX
S1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldEN1cnJlbnRUZXh0QWxpZ25tZW50Ol0pOgor
ICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIF93a0NoYW5nZVRleHRBbGln
bm1lbnQ6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgdGV4dENv
bG9yXSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dENv
bG9yOl0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIF93a0NoYW5n
ZUNvbG9yOl0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHRleHRM
aXN0Vmlld0NvbnRyb2xsZXJdKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6Om1ha2VU
b3VjaEJhcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjYW5kaWRhdGVMaXN0VG91
Y2hCYXJJdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6Om1lZGlhUGxheWJhY2tD
b250cm9sc1ZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dXNlTWVkaWFQbGF5
YmFja0NvbnRyb2xzVmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkaXNtaXNz
VGV4dFRvdWNoQmFyUG9wb3Zlckl0ZW1XaXRoSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6
OnRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25BbGxvd2VkSWRlbnRpZmllcnMpOgorICAgICAgICAo
V2ViS2l0OjpwbGFpblRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25EZWZhdWx0SXRlbUlkZW50aWZp
ZXJzKToKKyAgICAgICAgKFdlYktpdDo6cmljaFRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25EZWZh
dWx0SXRlbUlkZW50aWZpZXJzKToKKyAgICAgICAgKFdlYktpdDo6dG91Y2hCYXJEaWRFeGl0Q3Vz
dG9taXphdGlvbik6CisgICAgICAgIChXZWJLaXQ6OnRvdWNoQmFyV2lsbEVudGVyQ3VzdG9taXph
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OmRpZENoYW5nZUF1dG9tYXRpY1RleHRDb21wbGV0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0ZVRvdWNoQmFyQW5kUmVmcmVz
aFRleHRCYXJJZGVudGlmaWVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRV
cFRleHRUb3VjaEJhcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjppc1JpY2hseUVk
aXRhYmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnRleHRUb3VjaEJhcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVUZXh0VG91Y2hCYXIpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dXBkYXRlTWVkaWFUb3VjaEJhcik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpmb3JjZVJlcXVlc3RDYW5kaWRhdGVzRm9yVGVzdGluZyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVUb3VjaEJhcik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpzaG91bGRSZXF1ZXN0Q2FuZGlkYXRlcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpzaG93Q2FuZGlkYXRlcyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjp3ZWJWaWV3SW1wbEFkZGl0aW9uc1dpbGxEZXN0cm95Vmlldyk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRFZGl0YWJsZUVsZW1lbnRJc0ZvY3VzZWQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YmVjb21lRmlyc3RSZXNwb25kZXIpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2VsZWN0aW9uRGlkQ2hhbmdlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OnZpZGVvQ29udHJvbHNNYW5hZ2VyRGlkQ2hhbmdlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0ZVdlYlZpZXdJbXBsQWRkaXRpb25zKTogRGVs
ZXRlZC4KKwogMjAxNi0xMS0wNCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMDgyOTMuCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVmlld1ByaXZhdGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVmlld1ByaXZh
dGUuaAkocmV2aXNpb24gMjA4NDA1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1ZpZXdQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDggQEAKICNp
bXBvcnQgPFdlYktpdC9XS1ZpZXcuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tPdmVybGF5U2Nyb2xs
YmFyU3R5bGUuaD4KIAorQGNsYXNzIEFWRnVuY3Rpb25CYXJTY3J1YmJlcjsKKwogQGludGVyZmFj
ZSBXS1ZpZXcgKFByaXZhdGUpCiAKIC8qIEMgU1BJIHN1cHBvcnQuICovCkBAIC0xMzIsNiArMTM0
LDExIEBACiAKIC0gKHZvaWQpX2dlc3R1cmVFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmU6KE5T
RXZlbnQgKilldmVudDsKIAorQHByb3BlcnR5IChub25hdG9taWMsIHJlYWR3cml0ZSwgc2V0dGVy
PV9zZXRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6KSBCT09MIF93YW50c01lZGlhUGxh
eWJhY2tDb250cm9sc1ZpZXc7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEFWRnVu
Y3Rpb25CYXJTY3J1YmJlciAqX21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc7CistICh2b2lkKV9h
ZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OihBVkZ1bmN0aW9uQmFyU2NydWJiZXIgKiltZWRp
YVBsYXliYWNrQ29udHJvbHNWaWV3OworLSAodm9pZClfcmVtb3ZlTWVkaWFQbGF5YmFja0NvbnRy
b2xzVmlldzsKKwogQGVuZAogCiAjZW5kaWYgLy8gIVRBUkdFVF9PU19JUEhPTkUKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCShyZXZp
c2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vi
Vmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTc0LDcgKzE3NCwxMiBAQCBzdGF0aWMgY29uc3Qg
dWludDMyX3QgZmlyc3RTREtWZXJzaW9uV2l0CiAKIEBpbnRlcmZhY2UgV0tXZWJWaWV3ICgpIDxX
ZWJWaWV3SW1wbERlbGVnYXRlLCBOU1RleHRJbnB1dENsaWVudD4KIEBlbmQKLSNlbmRpZgorCisj
aWYgSEFWRShUT1VDSF9CQVIpCitAaW50ZXJmYWNlIFdLV2ViVmlldyAoKSA8TlNUb3VjaEJhclBy
b3ZpZGVyPgorQGVuZAorI2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFSKQorI2VuZGlmIC8vIFBMQVRG
T1JNKE1BQykKIAogc3RhdGljIEhhc2hNYXA8V2ViS2l0OjpXZWJQYWdlUHJveHkqLCBXS1dlYlZp
ZXcgKj4mIHBhZ2VUb1ZpZXdNYXAoKQogewpAQCAtMzE1NSw2ICszMTYwLDM4IEBAIC0gKHZvaWQp
X3dlYl9nZXN0dXJlRXZlbnRXYXNOb3RIYW5kbGVkQnkKIAogI2VuZGlmIC8vIFBMQVRGT1JNKE1B
QykKIAorI2lmIEhBVkUoVE9VQ0hfQkFSKQorCitAZHluYW1pYyB0b3VjaEJhcjsKKworLSAoTlNU
b3VjaEJhciAqKW1ha2VUb3VjaEJhcgoreworICAgIHJldHVybiBfaW1wbC0+bWFrZVRvdWNoQmFy
KCk7Cit9CisKKy0gKE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSAqKWNhbmRpZGF0ZUxpc3RU
b3VjaEJhckl0ZW0KK3sKKyAgICByZXR1cm4gX2ltcGwtPmNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0
ZW0oKTsKK30KKworLSAodm9pZClfd2ViX2RpZEFkZE1lZGlhQ29udHJvbHNNYW5hZ2VyOihpZClj
b250cm9sc01hbmFnZXIKK3sKKyAgICBbc2VsZiBfYWRkTWVkaWFQbGF5YmFja0NvbnRyb2xzVmll
dzpjb250cm9sc01hbmFnZXJdOworfQorCistICh2b2lkKV93ZWJfZGlkUmVtb3ZlTWVkaWFDb250
cm9sc01hbmFnZXIKK3sKKyAgICBbc2VsZiBfcmVtb3ZlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmll
d107Cit9CisKKy0gKHZvaWQpX2ludGVyYWN0V2l0aE1lZGlhQ29udHJvbHNGb3JUZXN0aW5nCit7
CisgICAgW3NlbGYgX3NldFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzpZRVNdOworICAg
IFtzZWxmIG1ha2VUb3VjaEJhcl07Cit9CisKKyNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikKKwog
QGVuZAogCiBAaW1wbGVtZW50YXRpb24gV0tXZWJWaWV3IChXS1ByaXZhdGUpCkBAIC00NTI5LDYg
KzQ1NjYsNDEgQEAgLSAodm9pZClzZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOgogICAg
IF9pbXBsLT5zZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKHVzZXJJbnRlcmZhY2VMYXlv
dXREaXJlY3Rpb24pOwogfQogCistIChCT09MKV93YW50c01lZGlhUGxheWJhY2tDb250cm9sc1Zp
ZXcKK3sKKyNpZiBIQVZFKFRPVUNIX0JBUikKKyAgICByZXR1cm4gX2ltcGwtPmNsaWVudFdhbnRz
TWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpOworI2Vsc2UKKyAgICByZXR1cm4gTk87CisjZW5k
aWYKK30KKworLSAodm9pZClfc2V0V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OihCT09M
KXdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldworeworI2lmIEhBVkUoVE9VQ0hfQkFSKQor
ICAgIF9pbXBsLT5zZXRDbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcod2FudHNN
ZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KTsKKyNlbmRpZgorfQorCistIChBVkZ1bmN0aW9uQmFy
U2NydWJiZXIgKilfbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldworeworI2lmIEhBVkUoVE9VQ0hf
QkFSKQorICAgIGlmICghX2ltcGwtPmNsaWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmll
dygpKQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBfaW1wbC0+bWVkaWFQbGF5YmFj
a0NvbnRyb2xzVmlldygpOworI2Vsc2UKKyAgICByZXR1cm4gbmlsOworI2VuZGlmCit9CisKKy0g
KHZvaWQpX2FkZE1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6KEFWRnVuY3Rpb25CYXJTY3J1YmJl
ciAqKW1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcKK3sKK30KKworLSAodm9pZClfcmVtb3ZlTWVk
aWFQbGF5YmFja0NvbnRyb2xzVmlldworeworfQorCiAjZW5kaWYKIAogQGVuZApJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2
YXRlLmgJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw3IEBA
IHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9XS0ltbWVkaWF0ZUEKIAogI2VuZGlmCiAKK0Bj
bGFzcyBBVkZ1bmN0aW9uQmFyU2NydWJiZXI7CiBAY2xhc3MgV0tCcm93c2luZ0NvbnRleHRIYW5k
bGU7CiBAY2xhc3MgX1dLRnJhbWVIYW5kbGU7CiBAY2xhc3MgX1dLSGl0VGVzdFJlc3VsdDsKQEAg
LTIwMiw2ICsyMDMsMTIgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dLSW1tZWRpYXRl
QQogLSAoTlNQcmludE9wZXJhdGlvbiAqKV9wcmludE9wZXJhdGlvbldpdGhQcmludEluZm86KE5T
UHJpbnRJbmZvICopcHJpbnRJbmZvOwogLSAoTlNQcmludE9wZXJhdGlvbiAqKV9wcmludE9wZXJh
dGlvbldpdGhQcmludEluZm86KE5TUHJpbnRJbmZvICopcHJpbnRJbmZvIGZvckZyYW1lOihfV0tG
cmFtZUhhbmRsZSAqKWZyYW1lSGFuZGxlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjEyKSwg
aW9zKDEwLjApKTsKIAorLy8gRklYTUU6IFRoaXMgU1BJIHNob3VsZCBiZWNvbWUgYSBwYXJ0IG9m
IHRoZSBXS1VJRGVsZWdhdGUuIHJkYXI6Ly9wcm9ibGVtLzI2NTYxNTM3CitAcHJvcGVydHkgKG5v
bmF0b21pYywgcmVhZHdyaXRlLCBzZXR0ZXI9X3NldFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xz
VmlldzopIEJPT0wgX3dhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyBXS19BUElfQVZBSUxB
QkxFKG1hY29zeChXS19NQUNfVEJBKSk7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IEFWRnVuY3Rpb25CYXJTY3J1YmJlciAqX21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcgV0tfQVBJ
X0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSkpOworLSAodm9pZClfYWRkTWVkaWFQbGF5YmFj
a0NvbnRyb2xzVmlldzooQVZGdW5jdGlvbkJhclNjcnViYmVyICopbWVkaWFQbGF5YmFja0NvbnRy
b2xzVmlldyBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSk7CistICh2b2lkKV9y
ZW1vdmVNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3IFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdL
X01BQ19UQkEpKTsKKwogI2VuZGlmCiAKIC0gKFdLTmF2aWdhdGlvbiAqKV9yZWxvYWRXaXRob3V0
Q29udGVudEJsb2NrZXJzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjEyKSwgaW9zKDEwLjAp
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHJl
dmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmll
dy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsMTEgQEAgQGludGVyZmFjZSBXS1ZpZXdE
YXRhIDogTlNPYmplY3QgewogQGludGVyZmFjZSBXS1ZpZXcgKCkgPFdlYlZpZXdJbXBsRGVsZWdh
dGU+CiBAZW5kCiAKKyNpZiBIQVZFKFRPVUNIX0JBUikKK0BpbnRlcmZhY2UgV0tWaWV3ICgpIDxO
U1RvdWNoQmFyUHJvdmlkZXI+CitAZW5kCisjZW5kaWYKKwogQGltcGxlbWVudGF0aW9uIFdLVmll
dwogCiAjaWYgV0tfQVBJX0VOQUJMRUQKQEAgLTk3Nyw2ICs5ODIsMzIgQEAgLSAodm9pZClfZGlk
VXBkYXRlQ2FuZGlkYXRlTGlzdFZpc2liaWxpdAogewogfQogCisjaWYgSEFWRShUT1VDSF9CQVIp
CisKK0BkeW5hbWljIHRvdWNoQmFyOworCistIChOU1RvdWNoQmFyICopbWFrZVRvdWNoQmFyCit7
CisgICAgcmV0dXJuIF9kYXRhLT5faW1wbC0+bWFrZVRvdWNoQmFyKCk7Cit9CisKKy0gKE5TQ2Fu
ZGlkYXRlTGlzdFRvdWNoQmFySXRlbSAqKWNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0KK3sKKyAg
ICByZXR1cm4gX2RhdGEtPl9pbXBsLT5jYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtKCk7Cit9CisK
Ky0gKHZvaWQpX3dlYl9kaWRBZGRNZWRpYUNvbnRyb2xzTWFuYWdlcjooaWQpY29udHJvbHNNYW5h
Z2VyCit7CisgICAgW3NlbGYgX2FkZE1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6Y29udHJvbHNN
YW5hZ2VyXTsKK30KKworLSAodm9pZClfd2ViX2RpZFJlbW92ZU1lZGlhQ29udHJvbHNNYW5hZ2Vy
Cit7CisgICAgW3NlbGYgX3JlbW92ZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXddOworfQorCisj
ZW5kaWYgLy8gSEFWRShUT1VDSF9CQVIpCisKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdLVmll
dyAoUHJpdmF0ZSkKQEAgLTE0NjcsMTAgKzE0OTgsNDEgQEAgLSAodm9pZClzZXRVc2VySW50ZXJm
YWNlTGF5b3V0RGlyZWN0aW9uOgogICAgIF9kYXRhLT5faW1wbC0+c2V0VXNlckludGVyZmFjZUxh
eW91dERpcmVjdGlvbih1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKTsKIH0KIAotQGVuZAor
LSAoQk9PTClfd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Cit7CisjaWYgSEFWRShUT1VD
SF9CQVIpCisgICAgcmV0dXJuIF9kYXRhLT5faW1wbC0+Y2xpZW50V2FudHNNZWRpYVBsYXliYWNr
Q29udHJvbHNWaWV3KCk7CisjZWxzZQorICAgIHJldHVybiBOTzsKKyNlbmRpZgorfQorCistICh2
b2lkKV9zZXRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6KEJPT0wpd2FudHNNZWRpYVBs
YXliYWNrQ29udHJvbHNWaWV3Cit7CisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgX2RhdGEtPl9p
bXBsLT5zZXRDbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcod2FudHNNZWRpYVBs
YXliYWNrQ29udHJvbHNWaWV3KTsKKyNlbmRpZgorfQogCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBf
X01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMCAmJiBVU0UoQVBQTEVfSU5U
RVJOQUxfU0RLKQotI2ltcG9ydCA8V2ViS2l0QWRkaXRpb25zL1dLVmlld0FkZGl0aW9ucy5tbT4K
Ky0gKEFWRnVuY3Rpb25CYXJTY3J1YmJlciAqKV9tZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Cit7
CisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgaWYgKCFfZGF0YS0+X2ltcGwtPmNsaWVudFdhbnRz
TWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpKQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJl
dHVybiBfZGF0YS0+X2ltcGwtPm1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKTsKKyNlbHNlCisg
ICAgcmV0dXJuIG5pbDsKICNlbmRpZgorfQorCistICh2b2lkKV9hZGRNZWRpYVBsYXliYWNrQ29u
dHJvbHNWaWV3OihBVkZ1bmN0aW9uQmFyU2NydWJiZXIgKiltZWRpYVBsYXliYWNrQ29udHJvbHNW
aWV3Cit7Cit9CisKKy0gKHZvaWQpX3JlbW92ZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcKK3sK
K30KKworQGVuZAogCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLmgJKHJldmlzaW9uIDIwODQwNSkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Miw5ICs1MiwxNyBAQCBPQkpDX0NMQVNTIFdLV2ViVmlldzsKIE9CSkNfQ0xBU1Mg
V0tXaW5kb3dWaXNpYmlsaXR5T2JzZXJ2ZXI7CiBPQkpDX0NMQVNTIF9XS1RodW1ibmFpbFZpZXc7
CiAKLSNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID49IDEwMTIwMAotI2ltcG9ydCA8V2ViS2l0QWRkaXRpb25zL1dlYlZpZXdJbXBs
QWRkaXRpb25zRGVjbGFyYXRpb25zLmg+Ci0jZW5kaWYKKyNpZiBIQVZFKFRPVUNIX0JBUikKK09C
SkNfQ0xBU1MgQVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNQcm92aWRlcjsKK09CSkNfQ0xB
U1MgQVZGdW5jdGlvbkJhclNjcnViYmVyOworT0JKQ19DTEFTUyBOU0NhbmRpZGF0ZUxpc3RUb3Vj
aEJhckl0ZW07CitPQkpDX0NMQVNTIE5TQ3VzdG9tVG91Y2hCYXJJdGVtOworT0JKQ19DTEFTUyBO
U1RvdWNoQmFyOworT0JKQ19DTEFTUyBOU1RvdWNoQmFySXRlbTsKK09CSkNfQ0xBU1MgTlNQb3Bv
dmVyVG91Y2hCYXJJdGVtOworT0JKQ19DTEFTUyBXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVy
OworT0JKQ19DTEFTUyBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcjsKKyNlbmRpZiAvLyBIQVZF
KFRPVUNIX0JBUikKIAogQHByb3RvY29sIFdlYlZpZXdJbXBsRGVsZWdhdGUKIApAQCAtNDgwLDcg
KzQ4OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJpZ2h0TW91c2VEcmFnZ2VkKE5TRXZlbnQgKik7
CiAgICAgdm9pZCByaWdodE1vdXNlVXAoTlNFdmVudCAqKTsKIAotICAgIHZvaWQgdXBkYXRlV2Vi
Vmlld0ltcGxBZGRpdGlvbnMoKTsKKyAgICB2b2lkIHVwZGF0ZVRvdWNoQmFyKCk7CiAgICAgdm9p
ZCBmb3JjZVJlcXVlc3RDYW5kaWRhdGVzRm9yVGVzdGluZygpOwogICAgIGJvb2wgc2hvdWxkUmVx
dWVzdENhbmRpZGF0ZXMoKSBjb25zdDsKICAgICB2b2lkIHNob3dDYW5kaWRhdGVzKE5TQXJyYXkg
KmNhbmRpZGF0ZXMsIE5TU3RyaW5nICosIE5TUmVjdCByZWN0T2ZUeXBlZFN0cmluZywgTlNSYW5n
ZSBzZWxlY3RlZFJhbmdlLCBOU1ZpZXcgKiwgdm9pZCAoXmNvbXBsZXRpb25IYW5kbGVyKShOU1Rl
eHRDaGVja2luZ1Jlc3VsdCAqYWNjZXB0ZWRDYW5kaWRhdGUpKTsKQEAgLTQ5NiwxMiArNTA0LDU0
IEBAIHB1YmxpYzoKIAogI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAx
MjAwIAogICAgIHZvaWQgaGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoTlNUZXh0Q2hlY2tpbmdSZXN1
bHQgKmFjY2VwdGVkQ2FuZGlkYXRlKTsKLSNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2lt
cG9ydCA8V2ViS2l0QWRkaXRpb25zL1dlYlZpZXdJbXBsQWRkaXRpb25zLmg+Ci0jZW5kaWYKICNl
bmRpZgogCisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgTlNUb3VjaEJhciAqbWFrZVRvdWNoQmFy
KCk7CisgICAgTlNUb3VjaEJhciAqY3VycmVudFRvdWNoQmFyKCkgY29uc3QgeyByZXR1cm4gbV9j
dXJyZW50VG91Y2hCYXIuZ2V0KCk7IH0KKyAgICBOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0g
KmNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0oKSBjb25zdDsKKyAgICBBVkZ1bmN0aW9uQmFyU2Ny
dWJiZXIgKm1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSBjb25zdDsKKyAgICBOU1RvdWNoQmFy
ICp0ZXh0VG91Y2hCYXIoKSBjb25zdDsKKyAgICB2b2lkIGRpc21pc3NUZXh0VG91Y2hCYXJQb3Bv
dmVySXRlbVdpdGhJZGVudGlmaWVyKE5TU3RyaW5nICopOworCisgICAgYm9vbCBjbGllbnRXYW50
c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudFdhbnRz
TWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzsgfQorICAgIHZvaWQgc2V0Q2xpZW50V2FudHNNZWRp
YVBsYXliYWNrQ29udHJvbHNWaWV3KGJvb2wgY2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJv
bHNWaWV3KSB7IG1fY2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3ID0gY2xpZW50
V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OyB9CisKKyAgICB2b2lkIHVwZGF0ZVRvdWNo
QmFyQW5kUmVmcmVzaFRleHRCYXJJZGVudGlmaWVycygpOworICAgIHZvaWQgc2V0SXNDdXN0b21p
emluZ1RvdWNoQmFyKGJvb2wgaXNDdXN0b21pemluZ1RvdWNoQmFyKSB7IG1faXNDdXN0b21pemlu
Z1RvdWNoQmFyID0gaXNDdXN0b21pemluZ1RvdWNoQmFyOyB9OworI2VuZGlmIC8vIEhBVkUoVE9V
Q0hfQkFSKQorCiBwcml2YXRlOgorI2lmIEhBVkUoVE9VQ0hfQkFSKQorICAgIHZvaWQgc2V0VXBU
ZXh0VG91Y2hCYXIoTlNUb3VjaEJhciAqKTsKKyAgICB2b2lkIHVwZGF0ZVRleHRUb3VjaEJhcigp
OworICAgIHZvaWQgdXBkYXRlTWVkaWFUb3VjaEJhcigpOworCisgICAgYm9vbCB1c2VNZWRpYVBs
YXliYWNrQ29udHJvbHNWaWV3KCkgY29uc3Q7CisgICAgYm9vbCBpc1JpY2hseUVkaXRhYmxlKCkg
Y29uc3Q7CisKKyAgICBib29sIG1fY2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3
IHsgZmFsc2UgfTsKKyAgICBib29sIG1fY2FuQ3JlYXRlVG91Y2hCYXJzIHsgZmFsc2UgfTsKKyAg
ICBib29sIG1fc3RhcnRlZExpc3RlbmluZ1RvQ3VzdG9taXphdGlvbkV2ZW50cyB7IGZhbHNlIH07
CisgICAgYm9vbCBtX2lzVXBkYXRpbmdUZXh0VG91Y2hCYXIgeyBmYWxzZSB9OworICAgIGJvb2wg
bV9pc0N1c3RvbWl6aW5nVG91Y2hCYXIgeyBmYWxzZSB9OworCisgICAgUmV0YWluUHRyPE5TVG91
Y2hCYXI+IG1fY3VycmVudFRvdWNoQmFyOworICAgIFJldGFpblB0cjxOU1RvdWNoQmFyPiBtX3Jp
Y2hUZXh0VG91Y2hCYXI7CisgICAgUmV0YWluUHRyPE5TVG91Y2hCYXI+IG1fcGxhaW5UZXh0VG91
Y2hCYXI7CisgICAgUmV0YWluUHRyPFdLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXI+IG1fdGV4
dFRvdWNoQmFySXRlbUNvbnRyb2xsZXI7CisgICAgUmV0YWluUHRyPE5TQ2FuZGlkYXRlTGlzdFRv
dWNoQmFySXRlbT4gbV9yaWNoVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW07CisgICAgUmV0
YWluUHRyPE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbT4gbV9wbGFpblRleHRDYW5kaWRhdGVM
aXN0VG91Y2hCYXJJdGVtOworICAgIFJldGFpblB0cjxOU0FycmF5PiBtX2VtcHR5Q2FuZGlkYXRl
c0FycmF5OworICAgIFJldGFpblB0cjxXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcj4gbV9wbGF5
YmFja0NvbnRyb2xzTWFuYWdlcjsKKyAgICBSZXRhaW5QdHI8TlNDdXN0b21Ub3VjaEJhckl0ZW0+
IG1fZXhpdEZ1bGxTY3JlZW5CdXR0b247CisKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRS
T0xTX01BTkFHRVIpCisgICAgUmV0YWluUHRyPEFWRnVuY3Rpb25CYXJQbGF5YmFja0NvbnRyb2xz
UHJvdmlkZXI+IG1fbWVkaWFUb3VjaEJhclByb3ZpZGVyOworICAgIFJldGFpblB0cjxBVkZ1bmN0
aW9uQmFyU2NydWJiZXI+IG1fbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzsKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisjZW5kaWYgLy8gSEFWRShUT1VD
SF9CQVIpCisKICAgICBXZWFrUHRyPFdlYlZpZXdJbXBsPiBjcmVhdGVXZWFrUHRyKCkgeyByZXR1
cm4gbV93ZWFrUHRyRmFjdG9yeS5jcmVhdGVXZWFrUHRyKCk7IH0KIAogICAgIGJvb2wgc3VwcG9y
dHNBcmJpdHJhcnlMYXlvdXRNb2RlcygpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQkocmV2aXNpb24gMjA4NDA1KQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC02MCwxMSArNjAsMTMgQEAKICNpbXBvcnQgIldlYkV2ZW50RmFjdG9yeS5oIgogI2ltcG9y
dCAiV2ViSW5zcGVjdG9yUHJveHkuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgorI2ltcG9y
dCAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCiAjaW1wb3J0ICJXZWJQcm9jZXNz
UG9vbC5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW1wb3J0ICJfV0tSZW1vdGVP
YmplY3RSZWdpc3RyeUludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tUaHVtYm5haWxWaWV3SW50ZXJu
YWwuaCIKICNpbXBvcnQgPEhJVG9vbGJveC9DYXJib25FdmVudHNDb3JlLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL0FWS2l0U1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0FYT2JqZWN0Q2FjaGUuaD4KICNp
bXBvcnQgPFdlYkNvcmUvQWN0aXZpdHlTdGF0ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Db2xvck1h
Yy5oPgpAQCAtODAsNiArODIsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9OU0ltbWVkaWF0ZUFjdGlv
bkdlc3R1cmVSZWNvZ25pemVyU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05TU3BlbGxDaGVja2Vy
U1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05TVGV4dEZpbmRlclNQSS5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9OU1RvdWNoQmFyU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05TV2luZG93U1BJLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL1NvZnRMaW5raW5nLmg+CkBAIC05MCwxNiArOTMsMjIgQEAKICNpbXBvcnQgPFdlYkNvcmUv
V2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2Vi
Q29yZUZ1bGxTY3JlZW5XaW5kb3cuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZU5TU3RyaW5n
RXh0cmFzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmg+
CiAjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KICNpbXBvcnQgPHN5cy9zdGF0Lmg+
CiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbXBvcnQgPHd0Zi9UZW1wb3JhcnlD
aGFuZ2UuaD4KIAotI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0jaW1wb3J0IDxXZWJLaXRB
ZGRpdGlvbnMvV2ViVmlld0ltcGxJbmNsdWRlcy5oPgotI2VuZGlmCisjaWYgSEFWRShUT1VDSF9C
QVIpICYmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKK1NPRlRfTElOS19G
UkFNRVdPUksoQVZLaXQpCitTT0ZUX0xJTktfQ0xBU1MoQVZLaXQsIEFWRnVuY3Rpb25CYXJQbGF5
YmFja0NvbnRyb2xzUHJvdmlkZXIpCitTT0ZUX0xJTktfQ0xBU1MoQVZLaXQsIEFWRnVuY3Rpb25C
YXJTY3J1YmJlcikKKyNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikgJiYgRU5BQkxFKFdFQl9QTEFZ
QkFDS19DT05UUk9MU19NQU5BR0VSKQogCiBTT0ZUX0xJTktfQ09OU1RBTlRfTUFZX0ZBSUwoTG9v
a3VwLCBMVU5vdGlmaWNhdGlvblBvcG92ZXJXaWxsQ2xvc2UsIE5TU3RyaW5nICopCiAKK05TU3Ry
aW5nICogY29uc3QgV0tNZWRpYUV4aXRGdWxsU2NyZWVuSXRlbSA9IEAiV0tNZWRpYUV4aXRGdWxs
U2NyZWVuSXRlbSI7CisKIEBpbnRlcmZhY2UgTlNBcHBsaWNhdGlvbiAoKQogLSAoQk9PTClpc1Nw
ZWFraW5nOwogLSAodm9pZClzcGVha1N0cmluZzooTlNTdHJpbmcgKilzdHJpbmc7CkBAIC00MzMs
MTIgKzQ0Miw2OTYgQEAgLSAoQk9PTCl0cnlUb1BlcmZvcm06KFNFTClhY3Rpb24gd2l0aDooaQog
CiBAZW5kCiAKLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMCAm
JiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2ltcG9ydCA8V2ViS2l0QWRkaXRpb25zL1dlYlZp
ZXdJbXBsQWRkaXRpb25zLm1tPgordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworI2lmIEhBVkUo
VE9VQ0hfQkFSKQorCitAaW50ZXJmYWNlIFdLVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVy
IDogTlNWaWV3Q29udHJvbGxlciB7CisgICAgTGlzdFR5cGUgX2N1cnJlbnRMaXN0VHlwZTsKKwor
QHByaXZhdGUKKyAgICBXZWJWaWV3SW1wbCogX3dlYlZpZXdJbXBsOworfQorCitAcHJvcGVydHkg
KG5vbmF0b21pYykgTGlzdFR5cGUgY3VycmVudExpc3RUeXBlOworCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhXZWJWaWV3SW1wbDooV2ViVmlld0ltcGwqKXdlYlZpZXdJbXBsOworCitAZW5kCisK
K0BpbXBsZW1lbnRhdGlvbiBXS1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlcgorCitAc3lu
dGhlc2l6ZSBjdXJyZW50TGlzdFR5cGU9X2N1cnJlbnRMaXN0VHlwZTsKKworc3RhdGljIGNvbnN0
IGRvdWJsZSBsaXN0Q29udHJvbFNlZ21lbnRXaWR0aCA9IDY3Oworc3RhdGljIGNvbnN0IGRvdWJs
ZSBleGl0RnVsbFNjcmVlbkJ1dHRvbldpZHRoID0gNjQ7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25l
ZCBub0xpc3RTZWdtZW50ID0gMDsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCB1bm9yZGVyZWRMaXN0
U2VnbWVudCA9IDE7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgb3JkZXJlZExpc3RTZWdtZW50ID0g
MjsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViVmlld0ltcGw6KFdlYlZpZXdJbXBsKil3
ZWJWaWV3SW1wbAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICBy
ZXR1cm4gbmlsOworCisgICAgX3dlYlZpZXdJbXBsID0gd2ViVmlld0ltcGw7CisKKyAgICBOU1Nl
Z21lbnRlZENvbnRyb2wgKmluc2VydExpc3RDb250cm9sID0gW05TU2VnbWVudGVkQ29udHJvbCBz
ZWdtZW50ZWRDb250cm9sV2l0aExhYmVsczpAWyBXZWJDb3JlOjppbnNlcnRMaXN0VHlwZU5vbmUo
KSwgV2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVCdWxsZXRlZCgpLCBXZWJDb3JlOjppbnNlcnRMaXN0
VHlwZU51bWJlcmVkKCkgXSB0cmFja2luZ01vZGU6TlNTZWdtZW50U3dpdGNoVHJhY2tpbmdTZWxl
Y3RPbmUgdGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3Rvcihfc2VsZWN0TGlzdDopXTsKKyAgICBb
aW5zZXJ0TGlzdENvbnRyb2wgc2V0V2lkdGg6bGlzdENvbnRyb2xTZWdtZW50V2lkdGggZm9yU2Vn
bWVudDpub0xpc3RTZWdtZW50XTsKKyAgICBbaW5zZXJ0TGlzdENvbnRyb2wgc2V0V2lkdGg6bGlz
dENvbnRyb2xTZWdtZW50V2lkdGggZm9yU2VnbWVudDp1bm9yZGVyZWRMaXN0U2VnbWVudF07Cisg
ICAgW2luc2VydExpc3RDb250cm9sIHNldFdpZHRoOmxpc3RDb250cm9sU2VnbWVudFdpZHRoIGZv
clNlZ21lbnQ6b3JkZXJlZExpc3RTZWdtZW50XTsKKyAgICBpbnNlcnRMaXN0Q29udHJvbC5mb250
ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOjE1XTsKKworI3ByYWdtYSBjbGFuZyBkaWFnbm9z
dGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQt
ZGVjbGFyYXRpb25zIgorICAgIGlkIHNlZ21lbnRFbGVtZW50ID0gTlNBY2Nlc3NpYmlsaXR5VW5p
Z25vcmVkRGVzY2VuZGFudChpbnNlcnRMaXN0Q29udHJvbCk7CisgICAgTlNBcnJheSAqc2VnbWVu
dHMgPSBbc2VnbWVudEVsZW1lbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNz
aWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlXTsKKyAgICBBU1NFUlQoc2VnbWVudHMuY291bnQgPT0g
Myk7CisgICAgW1tzZWdtZW50cyBvYmplY3RBdEluZGV4Om5vTGlzdFNlZ21lbnRdIGFjY2Vzc2li
aWxpdHlTZXRPdmVycmlkZVZhbHVlOldlYkNvcmU6Omluc2VydExpc3RUeXBlTm9uZSgpIGZvckF0
dHJpYnV0ZTpOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkF0dHJpYnV0ZV07CisgICAgW1tzZWdt
ZW50cyBvYmplY3RBdEluZGV4OnVub3JkZXJlZExpc3RTZWdtZW50XSBhY2Nlc3NpYmlsaXR5U2V0
T3ZlcnJpZGVWYWx1ZTpXZWJDb3JlOjppbnNlcnRMaXN0VHlwZUJ1bGxldGVkQWNjZXNzaWJpbGl0
eVRpdGxlKCkgZm9yQXR0cmlidXRlOk5TQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uQXR0cmlidXRl
XTsKKyAgICBbW3NlZ21lbnRzIG9iamVjdEF0SW5kZXg6b3JkZXJlZExpc3RTZWdtZW50XSBhY2Nl
c3NpYmlsaXR5U2V0T3ZlcnJpZGVWYWx1ZTpXZWJDb3JlOjppbnNlcnRMaXN0VHlwZU51bWJlcmVk
QWNjZXNzaWJpbGl0eVRpdGxlKCkgZm9yQXR0cmlidXRlOk5TQWNjZXNzaWJpbGl0eURlc2NyaXB0
aW9uQXR0cmlidXRlXTsKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKKworICAgIHNlbGYu
dmlldyA9IGluc2VydExpc3RDb250cm9sOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZv
aWQpZGlkRGVzdHJveVZpZXcKK3sKKyAgICBfd2ViVmlld0ltcGwgPSBudWxscHRyOworfQorCist
ICh2b2lkKV9zZWxlY3RMaXN0OihpZClzZW5kZXIKK3sKKyAgICBpZiAoIV93ZWJWaWV3SW1wbCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgTlNTZWdtZW50ZWRDb250cm9sICppbnNlcnRMaXN0Q29u
dHJvbCA9IChOU1NlZ21lbnRlZENvbnRyb2wgKilzZWxmLnZpZXc7CisgICAgaWYgKGluc2VydExp
c3RDb250cm9sLnNlbGVjdGVkU2VnbWVudCA9PSBub0xpc3RTZWdtZW50KSB7CisgICAgICAgIC8v
IFRoZXJlIGlzIG5vICJyZW1vdmUgbGlzdCIgZWRpdCBjb21tYW5kLCBidXQgSW5zZXJ0T3JkZXJl
ZExpc3QgYW5kIEluc2VydFVub3JkZXJlZExpc3QgYm90aAorICAgICAgICAvLyBiZWhhdmUgYXMg
dG9nZ2xlcywgc28gd2UgY2FuIGludm9rZSB0aGUgYXBwcm9wcmlhdGUgZWRpdCBjb21tYW5kIGRl
cGVuZGluZyBvbiBvdXIgX2N1cnJlbnRMaXN0VHlwZQorICAgICAgICAvLyB0byByZW1vdmUgYW4g
ZXhpc3RpbmcgbGlzdC4gV2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZyBpZiBfY3VycmVudExp
c3RUeXBlIGlzIE5vTGlzdC4KKyAgICAgICAgaWYgKF9jdXJyZW50TGlzdFR5cGUgPT0gT3JkZXJl
ZExpc3QpCisgICAgICAgICAgICBfd2ViVmlld0ltcGwtPnBhZ2UoKS5leGVjdXRlRWRpdENvbW1h
bmQoQCJJbnNlcnRPcmRlcmVkTGlzdCIsIEAiIik7CisgICAgICAgIGVsc2UgaWYgKF9jdXJyZW50
TGlzdFR5cGUgPT0gVW5vcmRlcmVkTGlzdCkKKyAgICAgICAgICAgIF93ZWJWaWV3SW1wbC0+cGFn
ZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZChAIkluc2VydFVub3JkZXJlZExpc3QiLCBAIiIpOworICAg
IH0gZWxzZSBpZiAoaW5zZXJ0TGlzdENvbnRyb2wuc2VsZWN0ZWRTZWdtZW50ID09IHVub3JkZXJl
ZExpc3RTZWdtZW50KQorICAgICAgICBfd2ViVmlld0ltcGwtPnBhZ2UoKS5leGVjdXRlRWRpdENv
bW1hbmQoQCJJbnNlcnRVbm9yZGVyZWRMaXN0IiwgQCIiKTsKKyAgICBlbHNlIGlmIChpbnNlcnRM
aXN0Q29udHJvbC5zZWxlY3RlZFNlZ21lbnQgPT0gb3JkZXJlZExpc3RTZWdtZW50KQorICAgICAg
ICBfd2ViVmlld0ltcGwtPnBhZ2UoKS5leGVjdXRlRWRpdENvbW1hbmQoQCJJbnNlcnRPcmRlcmVk
TGlzdCIsIEAiIik7CisKKyAgICBfd2ViVmlld0ltcGwtPmRpc21pc3NUZXh0VG91Y2hCYXJQb3Bv
dmVySXRlbVdpdGhJZGVudGlmaWVyKE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRMaXN0KTsK
K30KKworLSAodm9pZClzZXRDdXJyZW50TGlzdFR5cGU6KExpc3RUeXBlKWxpc3RUeXBlCit7Cisg
ICAgTlNTZWdtZW50ZWRDb250cm9sICppbnNlcnRMaXN0Q29udHJvbCA9IChOU1NlZ21lbnRlZENv
bnRyb2wgKilzZWxmLnZpZXc7CisgICAgc3dpdGNoIChsaXN0VHlwZSkgeworICAgIGNhc2UgTm9M
aXN0OgorICAgICAgICBbaW5zZXJ0TGlzdENvbnRyb2wgc2V0U2VsZWN0ZWQ6WUVTIGZvclNlZ21l
bnQ6bm9MaXN0U2VnbWVudF07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT3JkZXJlZExpc3Q6
CisgICAgICAgIFtpbnNlcnRMaXN0Q29udHJvbCBzZXRTZWxlY3RlZDpZRVMgZm9yU2VnbWVudDpv
cmRlcmVkTGlzdFNlZ21lbnRdOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFVub3JkZXJlZExp
c3Q6CisgICAgICAgIFtpbnNlcnRMaXN0Q29udHJvbCBzZXRTZWxlY3RlZDpZRVMgZm9yU2VnbWVu
dDp1bm9yZGVyZWRMaXN0U2VnbWVudF07CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIF9j
dXJyZW50TGlzdFR5cGUgPSBsaXN0VHlwZTsKK30KKworQGVuZAorCitAaW50ZXJmYWNlIFdLVGV4
dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgOiBOU1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIDxO
U0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW1EZWxlZ2F0ZSwgTlNUb3VjaEJhckRlbGVnYXRlPiB7
CisgICAgQk9PTCBfdGV4dElzQm9sZDsKKyAgICBCT09MIF90ZXh0SXNJdGFsaWM7CisgICAgQk9P
TCBfdGV4dElzVW5kZXJsaW5lZDsKKyAgICBOU1RleHRBbGlnbm1lbnQgX2N1cnJlbnRUZXh0QWxp
Z25tZW50OworICAgIFJldGFpblB0cjxOU0NvbG9yPiBfdGV4dENvbG9yOworICAgIFJldGFpblB0
cjxXS1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlcj4gX3drVGV4dExpc3RUb3VjaEJhclZp
ZXdDb250cm9sbGVyOworCitAcHJpdmF0ZQorICAgIFdlYlZpZXdJbXBsKiBfd2ViVmlld0ltcGw7
Cit9CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIHRleHRJc0JvbGQ7CitAcHJvcGVydHkg
KG5vbmF0b21pYykgQk9PTCB0ZXh0SXNJdGFsaWM7CitAcHJvcGVydHkgKG5vbmF0b21pYykgQk9P
TCB0ZXh0SXNVbmRlcmxpbmVkOworQHByb3BlcnR5IChub25hdG9taWMpIE5TVGV4dEFsaWdubWVu
dCBjdXJyZW50VGV4dEFsaWdubWVudDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHJl
YWR3cml0ZSkgTlNDb2xvciAqdGV4dENvbG9yOworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhX
ZWJWaWV3SW1wbDooV2ViVmlld0ltcGwqKXdlYlZpZXdJbXBsOworQGVuZAorCitAaW1wbGVtZW50
YXRpb24gV0tUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlcgorCitAc3ludGhlc2l6ZSB0ZXh0SXNC
b2xkPV90ZXh0SXNCb2xkOworQHN5bnRoZXNpemUgdGV4dElzSXRhbGljPV90ZXh0SXNJdGFsaWM7
CitAc3ludGhlc2l6ZSB0ZXh0SXNVbmRlcmxpbmVkPV90ZXh0SXNVbmRlcmxpbmVkOworQHN5bnRo
ZXNpemUgY3VycmVudFRleHRBbGlnbm1lbnQ9X2N1cnJlbnRUZXh0QWxpZ25tZW50OworCistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWV3SW1wbDooV2ViVmlld0ltcGwqKXdlYlZpZXdJbXBs
Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7
CisKKyAgICBfd2ViVmlld0ltcGwgPSB3ZWJWaWV3SW1wbDsKKworICAgIHJldHVybiBzZWxmOwor
fQorCistICh2b2lkKWRpZERlc3Ryb3lWaWV3Cit7CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRl
ciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmXTsKKyAgICBfd2ViVmlld0ltcGwg
PSBudWxscHRyOworICAgIFtfd2tUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgZGlkRGVz
dHJveVZpZXddOworfQorCisjcHJhZ21hIG1hcmsgTlNUb3VjaEJhckRlbGVnYXRlCisKKy0gKE5T
VG91Y2hCYXJJdGVtICopdG91Y2hCYXI6KE5TVG91Y2hCYXIgKil0b3VjaEJhciBtYWtlSXRlbUZv
cklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcgoreworICAgIHJldHVybiBbc2VsZiBp
dGVtRm9ySWRlbnRpZmllcjppZGVudGlmaWVyXTsKK30KKworLSAobnVsbGFibGUgTlNUb3VjaEJh
ckl0ZW0gKilpdGVtRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyCit7CisgICAg
TlNUb3VjaEJhckl0ZW0gKml0ZW0gPSBbc3VwZXIgaXRlbUZvcklkZW50aWZpZXI6aWRlbnRpZmll
cl07CisgICAgQk9PTCBpc1RleHRGb3JtYXRJdGVtID0gW2lkZW50aWZpZXIgaXNFcXVhbFRvU3Ry
aW5nOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRGb3JtYXRdOworCisgICAgaWYgKGlzVGV4
dEZvcm1hdEl0ZW0gfHwgW2lkZW50aWZpZXIgaXNFcXVhbFRvU3RyaW5nOk5TVG91Y2hCYXJJdGVt
SWRlbnRpZmllclRleHRTdHlsZV0pCisgICAgICAgIHNlbGYudGV4dFN0eWxlLmFjdGlvbiA9IEBz
ZWxlY3Rvcihfd2tDaGFuZ2VUZXh0U3R5bGU6KTsKKworICAgIGlmIChpc1RleHRGb3JtYXRJdGVt
IHx8IFtpZGVudGlmaWVyIGlzRXF1YWxUb1N0cmluZzpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJU
ZXh0QWxpZ25tZW50XSkKKyAgICAgICAgc2VsZi50ZXh0QWxpZ25tZW50cy5hY3Rpb24gPSBAc2Vs
ZWN0b3IoX3drQ2hhbmdlVGV4dEFsaWdubWVudDopOworCisgICAgTlNDb2xvclBpY2tlclRvdWNo
QmFySXRlbSAqY29sb3JQaWNrZXJJdGVtID0gbmlsOworICAgIGlmIChbaWRlbnRpZmllciBpc0Vx
dWFsVG9TdHJpbmc6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dENvbG9yUGlja2VyXSAmJiBb
aXRlbSBpc0tpbmRPZkNsYXNzOltOU0NvbG9yUGlja2VyVG91Y2hCYXJJdGVtIGNsYXNzXV0pCisg
ICAgICAgIGNvbG9yUGlja2VySXRlbSA9IChOU0NvbG9yUGlja2VyVG91Y2hCYXJJdGVtICopaXRl
bTsKKyAgICBpZiAoaXNUZXh0Rm9ybWF0SXRlbSkKKyAgICAgICAgY29sb3JQaWNrZXJJdGVtID0g
c2VsZi5jb2xvclBpY2tlckl0ZW07CisgICAgaWYgKGNvbG9yUGlja2VySXRlbSkgeworICAgICAg
ICBjb2xvclBpY2tlckl0ZW0udGFyZ2V0ID0gc2VsZjsKKyAgICAgICAgY29sb3JQaWNrZXJJdGVt
LmFjdGlvbiA9IEBzZWxlY3Rvcihfd2tDaGFuZ2VDb2xvcjopOworICAgICAgICBjb2xvclBpY2tl
ckl0ZW0uc2hvd3NBbHBoYSA9IE5POworICAgIH0KKworICAgIHJldHVybiBpdGVtOworfQorCisj
cHJhZ21hIG1hcmsgTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtRGVsZWdhdGUKKworLSAodm9p
ZCljYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtOihOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0g
Kilhbkl0ZW0gZW5kU2VsZWN0aW5nQ2FuZGlkYXRlQXRJbmRleDooTlNJbnRlZ2VyKWluZGV4Cit7
CisgICAgaWYgKGluZGV4ID09IE5TTm90Rm91bmQpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICghX3dlYlZpZXdJbXBsKQorICAgICAgICByZXR1cm47CisKKyAgICBOU0FycmF5ICpjYW5kaWRh
dGVzID0gYW5JdGVtLmNhbmRpZGF0ZXM7CisgICAgaWYgKChOU1VJbnRlZ2VyKWluZGV4ID49IGNh
bmRpZGF0ZXMuY291bnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlkIGNhbmRpZGF0ZSA9IGNh
bmRpZGF0ZXNbaW5kZXhdOworICAgIEFTU0VSVChbY2FuZGlkYXRlIGlzS2luZE9mQ2xhc3M6W05T
VGV4dENoZWNraW5nUmVzdWx0IGNsYXNzXV0pOworCisgICAgX3dlYlZpZXdJbXBsLT5oYW5kbGVB
Y2NlcHRlZENhbmRpZGF0ZSgoTlNUZXh0Q2hlY2tpbmdSZXN1bHQgKiljYW5kaWRhdGUpOworfQor
CistICh2b2lkKWNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW06KE5TQ2FuZGlkYXRlTGlzdFRvdWNo
QmFySXRlbSAqKWFuSXRlbSBjaGFuZ2VkQ2FuZGlkYXRlTGlzdFZpc2liaWxpdHk6KEJPT0wpaXNW
aXNpYmxlCit7CisgICAgaWYgKCFfd2ViVmlld0ltcGwpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChpc1Zpc2libGUpCisgICAgICAgIF93ZWJWaWV3SW1wbC0+cmVxdWVzdENhbmRpZGF0ZXNG
b3JTZWxlY3Rpb25JZk5lZWRlZCgpOworCisgICAgX3dlYlZpZXdJbXBsLT51cGRhdGVUb3VjaEJh
cigpOworfQorCisjcHJhZ21hIG1hcmsgTlNOb3RpZmljYXRpb25DZW50ZXIgb2JzZXJ2ZXJzCisK
Ky0gKHZvaWQpdG91Y2hCYXJEaWRFeGl0Q3VzdG9taXphdGlvbjooTlNOb3RpZmljYXRpb24gKilu
b3RpZmljYXRpb24KK3sKKyAgICBpZiAoIV93ZWJWaWV3SW1wbCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgX3dlYlZpZXdJbXBsLT5zZXRJc0N1c3RvbWl6aW5nVG91Y2hCYXIoZmFsc2UpOworICAg
IF93ZWJWaWV3SW1wbC0+dXBkYXRlVG91Y2hCYXIoKTsKK30KKworLSAodm9pZCl0b3VjaEJhcldp
bGxFbnRlckN1c3RvbWl6YXRpb246KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7Cisg
ICAgaWYgKCFfd2ViVmlld0ltcGwpCisgICAgICAgIHJldHVybjsKKworICAgIF93ZWJWaWV3SW1w
bC0+c2V0SXNDdXN0b21pemluZ1RvdWNoQmFyKHRydWUpOworfQorCistICh2b2lkKWRpZENoYW5n
ZUF1dG9tYXRpY1RleHRDb21wbGV0aW9uOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgor
eworICAgIGlmICghX3dlYlZpZXdJbXBsKQorICAgICAgICByZXR1cm47CisKKyAgICBfd2ViVmll
d0ltcGwtPnVwZGF0ZVRvdWNoQmFyQW5kUmVmcmVzaFRleHRCYXJJZGVudGlmaWVycygpOworfQor
CisKKyNwcmFnbWEgbWFyayBOU1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyCisKKy0gKFdLVGV4
dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyICopdGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9s
bGVyCit7CisgICAgcmV0dXJuIChXS1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciAqKVtz
ZWxmIHRleHRMaXN0Vmlld0NvbnRyb2xsZXJdOworfQorCistICh2b2lkKXNldFRleHRJc0JvbGQ6
KEJPT0wpYm9sZAoreworICAgIF90ZXh0SXNCb2xkID0gYm9sZDsKKyAgICBpZiAoW3NlbGYudGV4
dFN0eWxlIGlzU2VsZWN0ZWRGb3JTZWdtZW50OjBdICE9IF90ZXh0SXNCb2xkKQorICAgICAgICBb
c2VsZi50ZXh0U3R5bGUgc2V0U2VsZWN0ZWQ6X3RleHRJc0JvbGQgZm9yU2VnbWVudDowXTsKK30K
KworLSAodm9pZClzZXRUZXh0SXNJdGFsaWM6KEJPT0wpaXRhbGljCit7CisgICAgX3RleHRJc0l0
YWxpYyA9IGl0YWxpYzsKKyAgICBpZiAoW3NlbGYudGV4dFN0eWxlIGlzU2VsZWN0ZWRGb3JTZWdt
ZW50OjFdICE9IF90ZXh0SXNJdGFsaWMpCisgICAgICAgIFtzZWxmLnRleHRTdHlsZSBzZXRTZWxl
Y3RlZDpfdGV4dElzSXRhbGljIGZvclNlZ21lbnQ6MV07Cit9CisKKy0gKHZvaWQpc2V0VGV4dElz
VW5kZXJsaW5lZDooQk9PTCl1bmRlcmxpbmVkCit7CisgICAgX3RleHRJc1VuZGVybGluZWQgPSB1
bmRlcmxpbmVkOworICAgIGlmIChbc2VsZi50ZXh0U3R5bGUgaXNTZWxlY3RlZEZvclNlZ21lbnQ6
Ml0gIT0gX3RleHRJc1VuZGVybGluZWQpCisgICAgICAgIFtzZWxmLnRleHRTdHlsZSBzZXRTZWxl
Y3RlZDpfdGV4dElzVW5kZXJsaW5lZCBmb3JTZWdtZW50OjJdOworfQorCistICh2b2lkKV93a0No
YW5nZVRleHRTdHlsZTooaWQpc2VuZGVyCit7CisgICAgaWYgKCFfd2ViVmlld0ltcGwpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChbc2VsZi50ZXh0U3R5bGUgaXNTZWxlY3RlZEZvclNlZ21l
bnQ6MF0gIT0gX3RleHRJc0JvbGQpIHsKKyAgICAgICAgX3RleHRJc0JvbGQgPSAhX3RleHRJc0Jv
bGQ7CisgICAgICAgIF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZChAIlRv
Z2dsZUJvbGQiLCBAIiIpOworICAgIH0KKworICAgIGlmIChbc2VsZi50ZXh0U3R5bGUgaXNTZWxl
Y3RlZEZvclNlZ21lbnQ6MV0gIT0gX3RleHRJc0l0YWxpYykgeworICAgICAgICBfdGV4dElzSXRh
bGljID0gIV90ZXh0SXNJdGFsaWM7CisgICAgICAgIF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1
dGVFZGl0Q29tbWFuZCgiVG9nZ2xlSXRhbGljIiwgQCIiKTsKKyAgICB9CisKKyAgICBpZiAoW3Nl
bGYudGV4dFN0eWxlIGlzU2VsZWN0ZWRGb3JTZWdtZW50OjJdICE9IF90ZXh0SXNVbmRlcmxpbmVk
KSB7CisgICAgICAgIF90ZXh0SXNVbmRlcmxpbmVkID0gIV90ZXh0SXNVbmRlcmxpbmVkOworICAg
ICAgICBfd2ViVmlld0ltcGwtPnBhZ2UoKS5leGVjdXRlRWRpdENvbW1hbmQoIlRvZ2dsZVVuZGVy
bGluZSIsIEAiIik7CisgICAgfQorfQorCistICh2b2lkKXNldEN1cnJlbnRUZXh0QWxpZ25tZW50
OihOU1RleHRBbGlnbm1lbnQpYWxpZ25tZW50Cit7CisgICAgX2N1cnJlbnRUZXh0QWxpZ25tZW50
ID0gYWxpZ25tZW50OworICAgIFtzZWxmLnRleHRBbGlnbm1lbnRzIHNlbGVjdFNlZ21lbnRXaXRo
VGFnOl9jdXJyZW50VGV4dEFsaWdubWVudF07Cit9CisKKy0gKHZvaWQpX3drQ2hhbmdlVGV4dEFs
aWdubWVudDooaWQpc2VuZGVyCit7CisgICAgaWYgKCFfd2ViVmlld0ltcGwpCisgICAgICAgIHJl
dHVybjsKKworICAgIE5TVGV4dEFsaWdubWVudCBhbGlnbm1lbnQgPSAoTlNUZXh0QWxpZ25tZW50
KVtzZWxmLnRleHRBbGlnbm1lbnRzLmNlbGwgdGFnRm9yU2VnbWVudDpbc2VsZi50ZXh0QWxpZ25t
ZW50cyBzZWxlY3RlZFNlZ21lbnRdXTsKKyAgICBzd2l0Y2ggKGFsaWdubWVudCkgeworICAgIGNh
c2UgTlNUZXh0QWxpZ25tZW50TGVmdDogeworICAgICAgICBfY3VycmVudFRleHRBbGlnbm1lbnQg
PSBOU1RleHRBbGlnbm1lbnRMZWZ0OworICAgICAgICBfd2ViVmlld0ltcGwtPnBhZ2UoKS5leGVj
dXRlRWRpdENvbW1hbmQoIkFsaWduTGVmdCIsIEAiIik7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIE5TVGV4dEFsaWdubWVudFJpZ2h0OiB7CisgICAgICAgIF9jdXJyZW50VGV4dEFs
aWdubWVudCA9IE5TVGV4dEFsaWdubWVudFJpZ2h0OworICAgICAgICBfd2ViVmlld0ltcGwtPnBh
Z2UoKS5leGVjdXRlRWRpdENvbW1hbmQoIkFsaWduUmlnaHQiLCBAIiIpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBOU1RleHRBbGlnbm1lbnRDZW50ZXI6IHsKKyAgICAgICAgX2N1
cnJlbnRUZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25tZW50Q2VudGVyOworICAgICAgICBfd2Vi
Vmlld0ltcGwtPnBhZ2UoKS5leGVjdXRlRWRpdENvbW1hbmQoIkFsaWduQ2VudGVyIiwgQCIiKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgTlNUZXh0QWxpZ25tZW50SnVzdGlmaWVk
OiB7CisgICAgICAgIF9jdXJyZW50VGV4dEFsaWdubWVudCA9IE5TVGV4dEFsaWdubWVudEp1c3Rp
ZmllZDsKKyAgICAgICAgX3dlYlZpZXdJbXBsLT5wYWdlKCkuZXhlY3V0ZUVkaXRDb21tYW5kKCJB
bGlnbkp1c3RpZmllZCIsIEAiIik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0
OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBfd2ViVmlld0ltcGwtPmRpc21pc3NUZXh0
VG91Y2hCYXJQb3BvdmVySXRlbVdpdGhJZGVudGlmaWVyKE5TVG91Y2hCYXJJdGVtSWRlbnRpZmll
clRleHRBbGlnbm1lbnQpOworfQorCistIChOU0NvbG9yICopdGV4dENvbG9yCit7CisgICAgcmV0
dXJuIF90ZXh0Q29sb3IuZ2V0KCk7Cit9CisKKy0gKHZvaWQpc2V0VGV4dENvbG9yOihOU0NvbG9y
ICopY29sb3IKK3sKKyAgICBfdGV4dENvbG9yID0gY29sb3I7CisgICAgc2VsZi5jb2xvclBpY2tl
ckl0ZW0uY29sb3IgPSBfdGV4dENvbG9yLmdldCgpOworfQorCistICh2b2lkKV93a0NoYW5nZUNv
bG9yOihpZClzZW5kZXIKK3sKKyAgICBpZiAoIV93ZWJWaWV3SW1wbCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgX3RleHRDb2xvciA9IHNlbGYuY29sb3JQaWNrZXJJdGVtLmNvbG9yOworICAgIF93
ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZCgiRm9yZUNvbG9yIiwgV2ViQ29y
ZTo6Y29sb3JGcm9tTlNDb2xvcihfdGV4dENvbG9yLmdldCgpKS5zZXJpYWxpemVkKCkpOworfQor
CistIChOU1ZpZXdDb250cm9sbGVyICopdGV4dExpc3RWaWV3Q29udHJvbGxlcgoreworICAgIGlm
ICghX3drVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyKQorICAgICAgICBfd2tUZXh0TGlz
dFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgPSBhZG9wdE5TKFtbV0tUZXh0TGlzdFRvdWNoQmFyVmll
d0NvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoV2ViVmlld0ltcGw6X3dlYlZpZXdJbXBsXSk7Cisg
ICAgcmV0dXJuIF93a1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlci5nZXQoKTsKK30KKwor
QGVuZAorCituYW1lc3BhY2UgV2ViS2l0IHsKK05TVG91Y2hCYXIgKldlYlZpZXdJbXBsOjptYWtl
VG91Y2hCYXIoKQoreworICAgIGlmICghbV9jYW5DcmVhdGVUb3VjaEJhcnMpIHsKKyAgICAgICAg
bV9jYW5DcmVhdGVUb3VjaEJhcnMgPSB0cnVlOworICAgICAgICB1cGRhdGVUb3VjaEJhcigpOwor
ICAgIH0KKyAgICByZXR1cm4gbV9jdXJyZW50VG91Y2hCYXIuZ2V0KCk7Cit9CisKK05TQ2FuZGlk
YXRlTGlzdFRvdWNoQmFySXRlbSAqV2ViVmlld0ltcGw6OmNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0
ZW0oKSBjb25zdAoreworICAgIHJldHVybiBpc1JpY2hseUVkaXRhYmxlKCkgPyBtX3JpY2hUZXh0
Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbS5nZXQoKSA6IG1fcGxhaW5UZXh0Q2FuZGlkYXRlTGlz
dFRvdWNoQmFySXRlbS5nZXQoKTsKK30KKworQVZGdW5jdGlvbkJhclNjcnViYmVyICpXZWJWaWV3
SW1wbDo6bWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFdF
Ql9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIGlmIChtX3BhZ2UtPmhhc0FjdGl2ZVZp
ZGVvRm9yQ29udHJvbHNNYW5hZ2VyKCkpCisgICAgICAgIHJldHVybiBtX21lZGlhUGxheWJhY2tD
b250cm9sc1ZpZXcuZ2V0KCk7CisjZW5kaWYKKyAgICByZXR1cm4gbmlsOworfQorCitib29sIFdl
YlZpZXdJbXBsOjp1c2VNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCkgY29uc3QKK3sKKyNpZiBF
TkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgaWYgKGhhc0Z1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVyKCkpCisgICAgICAgIHJldHVybiAhW21fZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgaXNG
dWxsU2NyZWVuXTsKKyNlbmRpZgorICAgIHJldHVybiBtX2NsaWVudFdhbnRzTWVkaWFQbGF5YmFj
a0NvbnRyb2xzVmlldzsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6ZGlzbWlzc1RleHRUb3VjaEJh
clBvcG92ZXJJdGVtV2l0aElkZW50aWZpZXIoTlNTdHJpbmcgKmlkZW50aWZpZXIpCit7CisgICAg
TlNUb3VjaEJhckl0ZW0gKmZvdW5kSXRlbSA9IG5pbDsKKyAgICBmb3IgKE5TVG91Y2hCYXJJdGVt
ICppdGVtIGluIHRleHRUb3VjaEJhcigpLml0ZW1zKSB7CisgICAgICAgIGlmIChbaXRlbS5pZGVu
dGlmaWVyIGlzRXF1YWxUb1N0cmluZzppZGVudGlmaWVyXSkgeworICAgICAgICAgICAgZm91bmRJ
dGVtID0gaXRlbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KFtbaXRlbSBpZGVudGlmaWVyXSBpc0VxdWFsVG9TdHJpbmc6TlNUb3VjaEJhckl0ZW1JZGVudGlm
aWVyVGV4dEZvcm1hdF0pIHsKKyAgICAgICAgICAgIGZvciAoTlNUb3VjaEJhckl0ZW0gKmNoaWxk
SXRlbSBpbiBbKE5TR3JvdXBUb3VjaEJhckl0ZW0gKilpdGVtIGdyb3VwVG91Y2hCYXJdLml0ZW1z
KSB7CisgICAgICAgICAgICAgICAgaWYgKFtjaGlsZEl0ZW0uaWRlbnRpZmllciBpc0VxdWFsVG9T
dHJpbmc6aWRlbnRpZmllcl0pIHsKKyAgICAgICAgICAgICAgICAgICAgZm91bmRJdGVtID0gY2hp
bGRJdGVtOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmIChbZm91bmRJdGVtIGlzS2luZE9mQ2xhc3M6W05TUG9wb3ZlclRvdWNoQmFySXRlbSBjbGFz
c11dKQorICAgICAgICBbKE5TUG9wb3ZlclRvdWNoQmFySXRlbSAqKWZvdW5kSXRlbSBkaXNtaXNz
UG9wb3ZlcjpuaWxdOworfQorCitzdGF0aWMgTlNBcnJheTxOU1N0cmluZyAqPiAqdGV4dFRvdWNo
QmFyQ3VzdG9taXphdGlvbkFsbG93ZWRJZGVudGlmaWVycygpCit7CisgICAgcmV0dXJuIEBbIE5T
VG91Y2hCYXJJdGVtSWRlbnRpZmllckNoYXJhY3RlclBpY2tlciwgTlNUb3VjaEJhckl0ZW1JZGVu
dGlmaWVyVGV4dENvbG9yUGlja2VyLCBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0U3R5bGUs
IE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRBbGlnbm1lbnQsIE5TVG91Y2hCYXJJdGVtSWRl
bnRpZmllclRleHRMaXN0LCBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJGbGV4aWJsZVNwYWNlIF07
Cit9CisKK3N0YXRpYyBOU0FycmF5PE5TU3RyaW5nICo+ICpwbGFpblRleHRUb3VjaEJhckN1c3Rv
bWl6YXRpb25EZWZhdWx0SXRlbUlkZW50aWZpZXJzKCkKK3sKKyAgICByZXR1cm4gQFsgTlNUb3Vj
aEJhckl0ZW1JZGVudGlmaWVyQ2hhcmFjdGVyUGlja2VyLCBOU1RvdWNoQmFySXRlbUlkZW50aWZp
ZXJDYW5kaWRhdGVMaXN0IF07Cit9CisKK3N0YXRpYyBOU0FycmF5PE5TU3RyaW5nICo+ICpyaWNo
VGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkRlZmF1bHRJdGVtSWRlbnRpZmllcnMoKQoreworICAg
IHJldHVybiBAWyBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJDaGFyYWN0ZXJQaWNrZXIsIE5TVG91
Y2hCYXJJdGVtSWRlbnRpZmllclRleHRGb3JtYXQsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckNh
bmRpZGF0ZUxpc3QgXTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlVG91Y2hCYXJBbmRS
ZWZyZXNoVGV4dEJhcklkZW50aWZpZXJzKCkKK3sKKyAgICBpZiAobV9yaWNoVGV4dFRvdWNoQmFy
KQorICAgICAgICBzZXRVcFRleHRUb3VjaEJhcihtX3JpY2hUZXh0VG91Y2hCYXIuZ2V0KCkpOwor
CisgICAgaWYgKG1fcGxhaW5UZXh0VG91Y2hCYXIpCisgICAgICAgIHNldFVwVGV4dFRvdWNoQmFy
KG1fcGxhaW5UZXh0VG91Y2hCYXIuZ2V0KCkpOworCisgICAgdXBkYXRlVG91Y2hCYXIoKTsKK30K
Kwordm9pZCBXZWJWaWV3SW1wbDo6c2V0VXBUZXh0VG91Y2hCYXIoTlNUb3VjaEJhciAqdG91Y2hC
YXIpCit7CisgICAgYm9vbCBpc1JpY2hUZXh0VG91Y2hCYXIgPSB0b3VjaEJhciA9PSBtX3JpY2hU
ZXh0VG91Y2hCYXIuZ2V0KCk7CisgICAgW3RvdWNoQmFyIHNldERlbGVnYXRlOm1fdGV4dFRvdWNo
QmFySXRlbUNvbnRyb2xsZXIuZ2V0KCldOworICAgIFt0b3VjaEJhciBzZXREZWZhdWx0SXRlbXM6
W05TTXV0YWJsZVNldCBzZXRXaXRoT2JqZWN0czppc1JpY2hUZXh0VG91Y2hCYXIgPyBtX3JpY2hU
ZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbS5nZXQoKSA6IG1fcGxhaW5UZXh0Q2FuZGlkYXRl
TGlzdFRvdWNoQmFySXRlbS5nZXQoKSwgbmlsXV07CisgICAgW3RvdWNoQmFyIHNldEN1c3RvbWl6
YXRpb25BbGxvd2VkSXRlbUlkZW50aWZpZXJzOnRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25BbGxv
d2VkSWRlbnRpZmllcnMoKV07CisgICAgW3RvdWNoQmFyIHNldEN1c3RvbWl6YXRpb25EZWZhdWx0
SXRlbUlkZW50aWZpZXJzOmlzUmljaFRleHRUb3VjaEJhciA/IHJpY2hUZXh0VG91Y2hCYXJDdXN0
b21pemF0aW9uRGVmYXVsdEl0ZW1JZGVudGlmaWVycygpIDogcGxhaW5UZXh0VG91Y2hCYXJDdXN0
b21pemF0aW9uRGVmYXVsdEl0ZW1JZGVudGlmaWVycygpXTsKKworICAgIGlmIChOU0dyb3VwVG91
Y2hCYXJJdGVtICp0ZXh0Rm9ybWF0SXRlbSA9IChOU0dyb3VwVG91Y2hCYXJJdGVtICopW3RvdWNo
QmFyIGl0ZW1Gb3JJZGVudGlmaWVyOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRGb3JtYXRd
KQorICAgICAgICB0ZXh0Rm9ybWF0SXRlbS5ncm91cFRvdWNoQmFyLmN1c3RvbWl6YXRpb25JZGVu
dGlmaWVyID0gQCJXS1RleHRGb3JtYXRUb3VjaEJhciI7Cit9CisKK2Jvb2wgV2ViVmlld0ltcGw6
OmlzUmljaGx5RWRpdGFibGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3BhZ2UtPmVkaXRvclN0
YXRlKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUgJiYgIW1fcGFnZS0+bmVlZHNQbGFpblRleHRR
dWlyaygpOworfQorCitOU1RvdWNoQmFyICpXZWJWaWV3SW1wbDo6dGV4dFRvdWNoQmFyKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gaXNSaWNobHlFZGl0YWJsZSgpID8gbV9yaWNoVGV4dFRvdWNoQmFy
LmdldCgpIDogbV9wbGFpblRleHRUb3VjaEJhci5nZXQoKTsKK30KKwordm9pZCBXZWJWaWV3SW1w
bDo6dXBkYXRlVGV4dFRvdWNoQmFyKCkKK3sKKyAgICBpZiAoIW1fcGFnZS0+ZWRpdG9yU3RhdGUo
KS5pc0NvbnRlbnRFZGl0YWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1faXNVcGRh
dGluZ1RleHRUb3VjaEJhcikKKyAgICAgICAgcmV0dXJuOworCisgICAgVGVtcG9yYXJ5Q2hhbmdl
PGJvb2w+IGlzVXBkYXRpbmdUZXh0RnVuY3Rpb25CYXIobV9pc1VwZGF0aW5nVGV4dFRvdWNoQmFy
LCB0cnVlKTsKKworICAgIGlmICghbV90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlcikKKyAgICAg
ICAgbV90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciA9IGFkb3B0TlMoW1tXS1RleHRUb3VjaEJh
ckl0ZW1Db250cm9sbGVyIGFsbG9jXSBpbml0V2l0aFdlYlZpZXdJbXBsOnRoaXNdKTsKKworICAg
IGlmICghbV9zdGFydGVkTGlzdGVuaW5nVG9DdXN0b21pemF0aW9uRXZlbnRzKSB7CisgICAgICAg
IFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6bV90ZXh0
VG91Y2hCYXJJdGVtQ29udHJvbGxlci5nZXQoKSBzZWxlY3RvcjpAc2VsZWN0b3IodG91Y2hCYXJE
aWRFeGl0Q3VzdG9taXphdGlvbjopIG5hbWU6TlNUb3VjaEJhckRpZEV4aXRDdXN0b21pemF0aW9u
IG9iamVjdDpuaWxdOworICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50
ZXJdIGFkZE9ic2VydmVyOm1fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIuZ2V0KCkgc2VsZWN0
b3I6QHNlbGVjdG9yKHRvdWNoQmFyV2lsbEVudGVyQ3VzdG9taXphdGlvbjopIG5hbWU6TlNUb3Vj
aEJhcldpbGxFbnRlckN1c3RvbWl6YXRpb24gb2JqZWN0Om5pbF07CisgICAgICAgIFtbTlNOb3Rp
ZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6bV90ZXh0VG91Y2hCYXJJ
dGVtQ29udHJvbGxlci5nZXQoKSBzZWxlY3RvcjpAc2VsZWN0b3IoZGlkQ2hhbmdlQXV0b21hdGlj
VGV4dENvbXBsZXRpb246KSBuYW1lOk5TU3BlbGxDaGVja2VyRGlkQ2hhbmdlQXV0b21hdGljVGV4
dENvbXBsZXRpb25Ob3RpZmljYXRpb24gb2JqZWN0Om5pbF07CisKKyAgICAgICAgbV9zdGFydGVk
TGlzdGVuaW5nVG9DdXN0b21pemF0aW9uRXZlbnRzID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAo
IW1fcmljaFRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtIHx8ICFtX3BsYWluVGV4dENhbmRp
ZGF0ZUxpc3RUb3VjaEJhckl0ZW0pIHsKKyAgICAgICAgbV9yaWNoVGV4dENhbmRpZGF0ZUxpc3RU
b3VjaEJhckl0ZW0gPSBhZG9wdE5TKFtbTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtIGFsbG9j
XSBpbml0V2l0aElkZW50aWZpZXI6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyQ2FuZGlkYXRlTGlz
dF0pOworICAgICAgICBbbV9yaWNoVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gc2V0RGVs
ZWdhdGU6bV90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlci5nZXQoKV07CisgICAgICAgIG1fcGxh
aW5UZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSA9IGFkb3B0TlMoW1tOU0NhbmRpZGF0ZUxp
c3RUb3VjaEJhckl0ZW0gYWxsb2NdIGluaXRXaXRoSWRlbnRpZmllcjpOU1RvdWNoQmFySXRlbUlk
ZW50aWZpZXJDYW5kaWRhdGVMaXN0XSk7CisgICAgICAgIFttX3BsYWluVGV4dENhbmRpZGF0ZUxp
c3RUb3VjaEJhckl0ZW0gc2V0RGVsZWdhdGU6bV90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlci5n
ZXQoKV07CisgICAgICAgIHJlcXVlc3RDYW5kaWRhdGVzRm9yU2VsZWN0aW9uSWZOZWVkZWQoKTsK
KyAgICB9CisKKyAgICBpZiAoIW1fcmljaFRleHRUb3VjaEJhcikgeworICAgICAgICBtX3JpY2hU
ZXh0VG91Y2hCYXIgPSBhZG9wdE5TKFtbTlNUb3VjaEJhciBhbGxvY10gaW5pdF0pOworICAgICAg
ICBzZXRVcFRleHRUb3VjaEJhcihtX3JpY2hUZXh0VG91Y2hCYXIuZ2V0KCkpOworICAgICAgICBb
bV9yaWNoVGV4dFRvdWNoQmFyIHNldEN1c3RvbWl6YXRpb25JZGVudGlmaWVyOkAiV0tSaWNoVGV4
dFRvdWNoQmFyIl07CisgICAgfQorCisgICAgaWYgKCFtX3BsYWluVGV4dFRvdWNoQmFyKSB7Cisg
ICAgICAgIG1fcGxhaW5UZXh0VG91Y2hCYXIgPSBhZG9wdE5TKFtbTlNUb3VjaEJhciBhbGxvY10g
aW5pdF0pOworICAgICAgICBzZXRVcFRleHRUb3VjaEJhcihtX3BsYWluVGV4dFRvdWNoQmFyLmdl
dCgpKTsKKyAgICAgICAgW21fcGxhaW5UZXh0VG91Y2hCYXIgc2V0Q3VzdG9taXphdGlvbklkZW50
aWZpZXI6QCJXS1BsYWluVGV4dFRvdWNoQmFyIl07CisgICAgfQorCisgICAgaWYgKFtOU1NwZWxs
Q2hlY2tlciBpc0F1dG9tYXRpY1RleHRDb21wbGV0aW9uRW5hYmxlZF0gJiYgIW1faXNDdXN0b21p
emluZ1RvdWNoQmFyKSB7CisgICAgICAgIEJPT0wgc2hvd0NhbmRpZGF0ZXNMaXN0ID0gIW1fcGFn
ZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25Jc1JhbmdlIHx8IG1faXNIYW5kbGluZ0FjY2VwdGVk
Q2FuZGlkYXRlOworICAgICAgICBbY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSgpIHVwZGF0ZVdp
dGhJbnNlcnRpb25Qb2ludFZpc2liaWxpdHk6c2hvd0NhbmRpZGF0ZXNMaXN0XTsKKyAgICAgICAg
W21fdmlldyBfZGlkVXBkYXRlQ2FuZGlkYXRlTGlzdFZpc2liaWxpdHk6c2hvd0NhbmRpZGF0ZXNM
aXN0XTsKKyAgICB9CisKKyAgICBpZiAobV9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzSW5QYXNzd29y
ZEZpZWxkKSB7CisgICAgICAgIC8vIFdlIGRvbid0IHJlcXVlc3QgY2FuZGlkYXRlcyBmb3IgcGFz
c3dvcmQgZmllbGRzLiBJZiB0aGUgdXNlciB3YXMgcHJldmlvdXNseSBpbiBhIG5vbi1wYXNzd29y
ZCBmaWVsZCwgdGhlbiB0aGUKKyAgICAgICAgLy8gb2xkIGNhbmRpZGF0ZXMgd2lsbCBzdGlsbCBz
aG93IGJ5IGRlZmF1bHQsIHNvIHdlIGNsZWFyIHRoZW0gaGVyZSBieSBzZXR0aW5nIGFuIGVtcHR5
IGFycmF5IG9mIGNhbmRpZGF0ZXMuCisgICAgICAgIGlmICghbV9lbXB0eUNhbmRpZGF0ZXNBcnJh
eSkKKyAgICAgICAgICAgIG1fZW1wdHlDYW5kaWRhdGVzQXJyYXkgPSBhZG9wdE5TKFtbTlNBcnJh
eSBhbGxvY10gaW5pdF0pOworICAgICAgICBbY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSgpIHNl
dENhbmRpZGF0ZXM6bV9lbXB0eUNhbmRpZGF0ZXNBcnJheS5nZXQoKSBmb3JTZWxlY3RlZFJhbmdl
Ok5TTWFrZVJhbmdlKDAsIDApIGluU3RyaW5nOm5pbF07CisgICAgfQorCisgICAgTlNUb3VjaEJh
ciAqdGV4dFRvdWNoQmFyID0gdGhpcy0+dGV4dFRvdWNoQmFyKCk7CisgICAgQk9PTCBpc1Nob3dp
bmdDb21iaW5lZFRleHRGb3JtYXRJdGVtID0gW3RleHRUb3VjaEJhci5pdGVtSWRlbnRpZmllcnMg
Y29udGFpbnNPYmplY3Q6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEZvcm1hdF07CisgICAg
W3RleHRUb3VjaEJhciBzZXRQcmluY2lwYWxJdGVtSWRlbnRpZmllcjppc1Nob3dpbmdDb21iaW5l
ZFRleHRGb3JtYXRJdGVtID8gTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEZvcm1hdCA6IG5p
bF07CisKKyAgICAvLyBTZXQgY3VycmVudCB0eXBpbmcgYXR0cmlidXRlcyBmb3IgcmljaCB0ZXh0
LiBUaGlzIHdpbGwgZW5zdXJlIHRoYXQgdGhlIGJ1dHRvbnMgcmVmbGVjdCB0aGUgc3RhdGUgb2YK
KyAgICAvLyB0aGUgdGV4dCB3aGVuIGNoYW5naW5nIHNlbGVjdGlvbiB0aHJvdWdob3V0IHRoZSBk
b2N1bWVudC4KKyAgICBpZiAoaXNSaWNobHlFZGl0YWJsZSgpKSB7CisgICAgICAgIGNvbnN0IEVk
aXRvclN0YXRlJiBlZGl0b3JTdGF0ZSA9IG1fcGFnZS0+ZWRpdG9yU3RhdGUoKTsKKyAgICAgICAg
aWYgKCFlZGl0b3JTdGF0ZS5pc01pc3NpbmdQb3N0TGF5b3V0RGF0YSkgeworICAgICAgICAgICAg
W21fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzQm9sZDooYm9vbCkobV9wYWdl
LT5lZGl0b3JTdGF0ZSgpLnBvc3RMYXlvdXREYXRhKCkudHlwaW5nQXR0cmlidXRlcyAmIEF0dHJp
YnV0ZUJvbGQpXTsKKyAgICAgICAgICAgIFttX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNl
dFRleHRJc0l0YWxpYzooYm9vbCkobV9wYWdlLT5lZGl0b3JTdGF0ZSgpLnBvc3RMYXlvdXREYXRh
KCkudHlwaW5nQXR0cmlidXRlcyAmIEF0dHJpYnV0ZUl0YWxpY3MpXTsKKyAgICAgICAgICAgIFtt
X3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFRleHRJc1VuZGVybGluZWQ6KGJvb2wpKG1f
cGFnZS0+ZWRpdG9yU3RhdGUoKS5wb3N0TGF5b3V0RGF0YSgpLnR5cGluZ0F0dHJpYnV0ZXMgJiBB
dHRyaWJ1dGVVbmRlcmxpbmUpXTsKKyAgICAgICAgICAgIFttX3RleHRUb3VjaEJhckl0ZW1Db250
cm9sbGVyIHNldFRleHRDb2xvcjpuc0NvbG9yKGVkaXRvclN0YXRlLnBvc3RMYXlvdXREYXRhKCku
dGV4dENvbG9yKV07CisgICAgICAgICAgICBbW21fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIg
dGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyXSBzZXRDdXJyZW50TGlzdFR5cGU6KExpc3RU
eXBlKW1fcGFnZS0+ZWRpdG9yU3RhdGUoKS5wb3N0TGF5b3V0RGF0YSgpLmVuY2xvc2luZ0xpc3RU
eXBlXTsKKworICAgICAgICAgICAgTlNUZXh0QWxpZ25tZW50IHRleHRBbGlnbm1lbnQ7CisgICAg
ICAgICAgICBzd2l0Y2ggKGVkaXRvclN0YXRlLnBvc3RMYXlvdXREYXRhKCkudGV4dEFsaWdubWVu
dCkgeworICAgICAgICAgICAgY2FzZSBOb0FsaWdubWVudDoKKyAgICAgICAgICAgICAgICB0ZXh0
QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25tZW50TmF0dXJhbDsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgTGVmdEFsaWdubWVudDoKKyAgICAgICAgICAgICAgICB0ZXh0
QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25tZW50TGVmdDsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgUmlnaHRBbGlnbm1lbnQ6CisgICAgICAgICAgICAgICAgdGV4dEFs
aWdubWVudCA9IE5TVGV4dEFsaWdubWVudFJpZ2h0OworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBDZW50ZXJBbGlnbm1lbnQ6CisgICAgICAgICAgICAgICAgdGV4dEFs
aWdubWVudCA9IE5TVGV4dEFsaWdubWVudENlbnRlcjsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgSnVzdGlmaWVkQWxpZ25tZW50OgorICAgICAgICAgICAgICAgIHRl
eHRBbGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRKdXN0aWZpZWQ7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBbbV90ZXh0VG91Y2hCYXJJdGVtQ29u
dHJvbGxlciBzZXRDdXJyZW50VGV4dEFsaWdubWVudDp0ZXh0QWxpZ25tZW50XTsKKyAgICAgICAg
fQorICAgICAgICBCT09MIGlzU2hvd2luZ0NhbmRpZGF0ZUxpc3RJdGVtID0gW3RleHRUb3VjaEJh
ci5pdGVtSWRlbnRpZmllcnMgY29udGFpbnNPYmplY3Q6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVy
Q2FuZGlkYXRlTGlzdF0gJiYgW05TU3BlbGxDaGVja2VyIGlzQXV0b21hdGljVGV4dFJlcGxhY2Vt
ZW50RW5hYmxlZF07CisgICAgICAgIFttX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFVz
ZXNOYXJyb3dUZXh0U3R5bGVJdGVtOmlzU2hvd2luZ0NvbWJpbmVkVGV4dEZvcm1hdEl0ZW0gJiYg
aXNTaG93aW5nQ2FuZGlkYXRlTGlzdEl0ZW1dOworICAgIH0KK30KKwordm9pZCBXZWJWaWV3SW1w
bDo6dXBkYXRlTWVkaWFUb3VjaEJhcigpCit7CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05U
Uk9MU19NQU5BR0VSKQorICAgIGlmICghbV9tZWRpYVRvdWNoQmFyUHJvdmlkZXIpCisgICAgICAg
IG1fbWVkaWFUb3VjaEJhclByb3ZpZGVyID0gYWRvcHROUyhbYWxsb2NBVkZ1bmN0aW9uQmFyUGxh
eWJhY2tDb250cm9sc1Byb3ZpZGVySW5zdGFuY2UoKSBpbml0XSk7CisKKyAgICBpZiAoIW1fbWVk
aWFQbGF5YmFja0NvbnRyb2xzVmlldykKKyAgICAgICAgbV9tZWRpYVBsYXliYWNrQ29udHJvbHNW
aWV3ID0gYWRvcHROUyhbYWxsb2NBVkZ1bmN0aW9uQmFyU2NydWJiZXJJbnN0YW5jZSgpIGluaXRd
KTsKKworICAgIGlmICghbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlcikKKyAgICAgICAgbV9wbGF5
YmFja0NvbnRyb2xzTWFuYWdlciA9IGFkb3B0TlMoW1tXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdl
ciBhbGxvY10gaW5pdF0pOworCisgICAgaWYgKFBsYXRmb3JtV2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlKiBpbnRlcmZhY2UgPSBtX3BhZ2UtPnBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKS0+Y29u
dHJvbHNNYW5hZ2VySW50ZXJmYWNlKCkpCisgICAgICAgIFttX3BsYXliYWNrQ29udHJvbHNNYW5h
Z2VyIHNldFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzppbnRlcmZhY2VdOworCisgICAg
W21fbWVkaWFUb3VjaEJhclByb3ZpZGVyIHNldFBsYXliYWNrQ29udHJvbHNDb250cm9sbGVyOm1f
cGxheWJhY2tDb250cm9sc01hbmFnZXIuZ2V0KCldOworICAgIFttX21lZGlhUGxheWJhY2tDb250
cm9sc1ZpZXcgc2V0UGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXI6bV9wbGF5YmFja0NvbnRyb2xz
TWFuYWdlci5nZXQoKV07CisKKyAgICBpZiAoIXVzZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXco
KSkgeworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICAgICAgLy8gSWYgd2UgY2FuJ3Qg
aGF2ZSBhIG1lZGlhIHBvcG92ZXIgZnVuY3Rpb24gYmFyIGl0ZW0sIGl0IG1pZ2h0IGJlIGJlY2F1
c2Ugd2UgYXJlIGluIGZ1bGwgc2NyZWVuLgorICAgICAgICAvLyBJZiBzbywgY3VzdG9taXplIHRo
ZSBlc2NhcGUga2V5LgorICAgICAgICBOU1RvdWNoQmFyICp0b3VjaEJhciA9IFttX21lZGlhVG91
Y2hCYXJQcm92aWRlciByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHRvdWNoQmFyKV0gPyBb
KGlkKW1fbWVkaWFUb3VjaEJhclByb3ZpZGVyLmdldCgpIHRvdWNoQmFyXSA6IFsoaWQpbV9tZWRp
YVRvdWNoQmFyUHJvdmlkZXIuZ2V0KCkgdG91Y2hCYXJdOworICAgICAgICBpZiAoaGFzRnVsbFNj
cmVlbldpbmRvd0NvbnRyb2xsZXIoKSAmJiBbbV9mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBp
c0Z1bGxTY3JlZW5dKSB7CisgICAgICAgICAgICBpZiAoIW1fZXhpdEZ1bGxTY3JlZW5CdXR0b24p
IHsKKyAgICAgICAgICAgICAgICBtX2V4aXRGdWxsU2NyZWVuQnV0dG9uID0gYWRvcHROUyhbW05T
Q3VzdG9tVG91Y2hCYXJJdGVtIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6V0tNZWRpYUV4aXRG
dWxsU2NyZWVuSXRlbV0pOworCisgICAgICAgICAgICAgICAgTlNJbWFnZSAqaW1hZ2UgPSBbTlNJ
bWFnZSBpbWFnZU5hbWVkOk5TSW1hZ2VOYW1lVG91Y2hCYXJFeGl0RnVsbFNjcmVlblRlbXBsYXRl
XTsKKyAgICAgICAgICAgICAgICBbaW1hZ2Ugc2V0VGVtcGxhdGU6WUVTXTsKKworICAgICAgICAg
ICAgICAgIE5TQnV0dG9uICpleGl0RnVsbFNjcmVlbkJ1dHRvbiA9IFtOU0J1dHRvbiBidXR0b25X
aXRoVGl0bGU6aW1hZ2UgPyBAIiIgOiBAIkV4aXQiIGltYWdlOmltYWdlIHRhcmdldDptX2Z1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVyLmdldCgpIGFjdGlvbjpAc2VsZWN0b3IocmVxdWVzdEV4aXRG
dWxsU2NyZWVuKV07CisgICAgICAgICAgICAgICAgW2V4aXRGdWxsU2NyZWVuQnV0dG9uIHNldEFj
Y2Vzc2liaWxpdHlUaXRsZTpXZWJDb3JlOjpleGl0RnVsbFNjcmVlbkJ1dHRvbkFjY2Vzc2liaWxp
dHlUaXRsZSgpXTsKKworICAgICAgICAgICAgICAgIFtbZXhpdEZ1bGxTY3JlZW5CdXR0b24ud2lk
dGhBbmNob3IgY29uc3RyYWludExlc3NUaGFuT3JFcXVhbFRvQ29uc3RhbnQ6ZXhpdEZ1bGxTY3Jl
ZW5CdXR0b25XaWR0aF0gc2V0QWN0aXZlOllFU107CisgICAgICAgICAgICAgICAgW21fZXhpdEZ1
bGxTY3JlZW5CdXR0b24gc2V0VmlldzpleGl0RnVsbFNjcmVlbkJ1dHRvbl07CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0b3VjaEJhci5lc2NhcGVLZXlSZXBsYWNlbWVudEl0ZW0gPSBtX2V4
aXRGdWxsU2NyZWVuQnV0dG9uLmdldCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHRv
dWNoQmFyLmVzY2FwZUtleVJlcGxhY2VtZW50SXRlbSA9IG5pbDsKKyNlbmRpZgorICAgICAgICAv
LyBUaGUgcmVzdCBvZiB0aGUgd29yayB0byB1cGRhdGUgdGhlIG1lZGlhIGZ1bmN0aW9uIGJhciBv
bmx5IGFwcGxpZXMgdG8gdGhlIHBvcG92ZXIgdmVyc2lvbiwgc28gcmV0dXJuIGVhcmx5LgorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fcGxheWJhY2tDb250cm9sc01hbmFnZXIg
JiYgbV92aWV3ID09IG1fdmlldy53aW5kb3cuZmlyc3RSZXNwb25kZXIgJiYgW21fdmlldyByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJfZGlkQWRkTWVkaWFDb250cm9sc01hbmFnZXI6
KV0pCisgICAgICAgIFttX3ZpZXcgX3dlYl9kaWRBZGRNZWRpYUNvbnRyb2xzTWFuYWdlcjptX21l
ZGlhUGxheWJhY2tDb250cm9sc1ZpZXcuZ2V0KCldOworI2VuZGlmCit9CisKK3ZvaWQgV2ViVmll
d0ltcGw6OmZvcmNlUmVxdWVzdENhbmRpZGF0ZXNGb3JUZXN0aW5nKCkKK3sKKyAgICBtX2NhbkNy
ZWF0ZVRvdWNoQmFycyA9IHRydWU7CisgICAgdXBkYXRlVG91Y2hCYXIoKTsKK30KKwordm9pZCBX
ZWJWaWV3SW1wbDo6dXBkYXRlVG91Y2hCYXIoKQoreworICAgIGlmICghbV9jYW5DcmVhdGVUb3Vj
aEJhcnMpCisgICAgICAgIHJldHVybjsKKworICAgIE5TVG91Y2hCYXIgKnRvdWNoQmFyID0gbmls
OworICAgIGJvb2wgdXNlckFjdGlvblJlcXVpcmVtZW50c0hhdmVCZWVuTWV0ID0gbV9yZXF1aXJl
c1VzZXJBY3Rpb25Gb3JFZGl0aW5nQ29udHJvbHNNYW5hZ2VyID8gbV9wYWdlLT5oYXNIYWRTZWxl
Y3Rpb25DaGFuZ2VzRnJvbVVzZXJJbnRlcmFjdGlvbigpIDogdHJ1ZTsKKyAgICBpZiAobV9wYWdl
LT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlICYmICFtX3BhZ2UtPm5lZWRzSGlkZGVu
Q29udGVudEVkaXRhYmxlUXVpcmsoKSkgeworICAgICAgICB1cGRhdGVUZXh0VG91Y2hCYXIoKTsK
KyAgICAgICAgaWYgKHVzZXJBY3Rpb25SZXF1aXJlbWVudHNIYXZlQmVlbk1ldCkKKyAgICAgICAg
ICAgIHRvdWNoQmFyID0gdGV4dFRvdWNoQmFyKCk7CisgICAgfQorI2lmIEVOQUJMRShXRUJfUExB
WUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBlbHNlIGlmIChtX3BhZ2UtPmhhc0FjdGl2ZVZp
ZGVvRm9yQ29udHJvbHNNYW5hZ2VyKCkpIHsKKyAgICAgICAgdXBkYXRlTWVkaWFUb3VjaEJhcigp
OworICAgICAgICAvLyBJZiB1c2VNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCkgaXMgdHJ1ZSwg
dGhlbiB3ZSBhcmUgcmVseWluZyBvbiB0aGUgQVBJIGNsaWVudCB0byBkaXNwbGF5IGEgcG9wb3Zl
ciB2ZXJzaW9uCisgICAgICAgIC8vIG9mIHRoZSBtZWRpYSB0aW1lbGluZSBpbiB0aGVpciBvd24g
ZnVuY3Rpb24gYmFyLiBJZiBpdCBpcyBmYWxzZSwgdGhlbiB3ZSB3aWxsIGRpc3BsYXkgdGhlIG1l
ZGlhIHRpbWVsaW5lIGluIG91cgorICAgICAgICAvLyBmdW5jdGlvbiBiYXIuCisgICAgICAgIGlm
ICghdXNlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpKQorICAgICAgICAgICAgdG91Y2hCYXIg
PSBbbV9tZWRpYVRvdWNoQmFyUHJvdmlkZXIgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih0
b3VjaEJhcildID8gWyhpZCltX21lZGlhVG91Y2hCYXJQcm92aWRlci5nZXQoKSB0b3VjaEJhcl0g
OiBbKGlkKW1fbWVkaWFUb3VjaEJhclByb3ZpZGVyLmdldCgpIHRvdWNoQmFyXTsKKyAgICB9IGVs
c2UgaWYgKFttX21lZGlhVG91Y2hCYXJQcm92aWRlciBwbGF5YmFja0NvbnRyb2xzQ29udHJvbGxl
cl0pIHsKKyAgICAgICAgaWYgKG1fY2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3
KSB7CisgICAgICAgICAgICBpZiAoW21fdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9y
KF93ZWJfZGlkUmVtb3ZlTWVkaWFDb250cm9sc01hbmFnZXIpXSAmJiBtX3ZpZXcgPT0gbV92aWV3
LndpbmRvdy5maXJzdFJlc3BvbmRlcikKKyAgICAgICAgICAgICAgICBbbV92aWV3IF93ZWJfZGlk
UmVtb3ZlTWVkaWFDb250cm9sc01hbmFnZXJdOworICAgICAgICB9CisgICAgICAgIFttX21lZGlh
VG91Y2hCYXJQcm92aWRlciBzZXRQbGF5YmFja0NvbnRyb2xzQ29udHJvbGxlcjpuaWxdOworICAg
ICAgICBbbV9tZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3IHNldFBsYXliYWNrQ29udHJvbHNDb250
cm9sbGVyOm5pbF07CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAodG91Y2hCYXIgPT0gbV9jdXJy
ZW50VG91Y2hCYXIpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElmIG1fZWRpdGFibGVFbGVt
ZW50SXNGb2N1c2VkIGlzIHRydWUsIHRoZW4gd2UgbWF5IGhhdmUgYSBub24tZWRpdGFibGUgc2Vs
ZWN0aW9uIHJpZ2h0IG5vdyBqdXN0IGJlY2F1c2UKKyAgICAvLyB0aGUgdXNlciBpcyBjbGlja2lu
ZyBvciB0YWJiaW5nIGJldHdlZW4gZWRpdGFibGUgZmllbGRzLgorICAgIGlmIChtX2VkaXRhYmxl
RWxlbWVudElzRm9jdXNlZCAmJiB0b3VjaEJhciAhPSB0ZXh0VG91Y2hCYXIoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9jdXJyZW50VG91Y2hCYXIgPSB0b3VjaEJhcjsKKyAgICBbbV92aWV3
IHdpbGxDaGFuZ2VWYWx1ZUZvcktleTpAInRvdWNoQmFyIl07CisgICAgW21fdmlldyBzZXRUb3Vj
aEJhcjptX2N1cnJlbnRUb3VjaEJhci5nZXQoKV07CisgICAgW21fdmlldyBkaWRDaGFuZ2VWYWx1
ZUZvcktleTpAInRvdWNoQmFyIl07Cit9CisKK2Jvb2wgV2ViVmlld0ltcGw6OnNob3VsZFJlcXVl
c3RDYW5kaWRhdGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fcGFnZS0+ZWRpdG9yU3RhdGUo
KS5pc0luUGFzc3dvcmRGaWVsZCAmJiBjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtKCkuY2FuZGlk
YXRlTGlzdFZpc2libGU7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnNob3dDYW5kaWRhdGVzKE5T
QXJyYXkgKmNhbmRpZGF0ZXMsIE5TU3RyaW5nICpzdHJpbmcsIE5TUmVjdCByZWN0T2ZUeXBlZFN0
cmluZywgTlNSYW5nZSBzZWxlY3RlZFJhbmdlLCBOU1ZpZXcgKnZpZXcsIHZvaWQgKF5jb21wbGV0
aW9uSGFuZGxlcikoTlNUZXh0Q2hlY2tpbmdSZXN1bHQgKmFjY2VwdGVkQ2FuZGlkYXRlKSkKK3sK
KyAgICBbY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSgpIHNldENhbmRpZGF0ZXM6Y2FuZGlkYXRl
cyBmb3JTZWxlY3RlZFJhbmdlOnNlbGVjdGVkUmFuZ2UgaW5TdHJpbmc6c3RyaW5nXTsKK30KKwor
dm9pZCBXZWJWaWV3SW1wbDo6d2ViVmlld0ltcGxBZGRpdGlvbnNXaWxsRGVzdHJveVZpZXcoKQor
eworICAgIFttX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIGRpZERlc3Ryb3lWaWV3XTsKKwor
I2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBbbV9tZWRpYVRv
dWNoQmFyUHJvdmlkZXIgc2V0UGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXI6bmlsXTsKKyAgICBb
bV9tZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3IHNldFBsYXliYWNrQ29udHJvbHNDb250cm9sbGVy
Om5pbF07CisjZW5kaWYKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6c2V0RWRpdGFibGVFbGVtZW50
SXNGb2N1c2VkKGJvb2wgZWRpdGFibGVFbGVtZW50SXNGb2N1c2VkKQoreworICAgIG1fZWRpdGFi
bGVFbGVtZW50SXNGb2N1c2VkID0gZWRpdGFibGVFbGVtZW50SXNGb2N1c2VkOworCisgICAgLy8g
SWYgdGhlIGVkaXRhYmxlIGVsZW1lbnRzIGhhdmUgYmx1cnJlZCwgdGhlbiB3ZSBtaWdodCBuZWVk
IHRvIGdldCByaWQgb2YgdGhlIGVkaXRpbmcgZnVuY3Rpb24gYmFyLgorICAgIGlmICghbV9lZGl0
YWJsZUVsZW1lbnRJc0ZvY3VzZWQpCisgICAgICAgIHVwZGF0ZVRvdWNoQmFyKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAogI2Vsc2UKIG5hbWVzcGFjZSBXZWJLaXQgewogCi12b2lkIFdl
YlZpZXdJbXBsOjp1cGRhdGVXZWJWaWV3SW1wbEFkZGl0aW9ucygpCit2b2lkIFdlYlZpZXdJbXBs
Ojp1cGRhdGVUb3VjaEJhcigpCiB7CiB9CiAKQEAgLTQ2NSw3ICsxMTU4LDcgQEAgdm9pZCBXZWJW
aWV3SW1wbDo6c2V0RWRpdGFibGVFbGVtZW50SXNGbwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKLSNlbmRpZiAvLyBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMCAm
JiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQorI2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFSKQogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNjE1LDcgKzEzMDgsNyBAQCBib29sIFdlYlZpZXdJbXBs
OjpiZWNvbWVGaXJzdFJlc3BvbmRlcigpCiAKICAgICBtX2luQmVjb21lRmlyc3RSZXNwb25kZXIg
PSBmYWxzZTsKIAotICAgIHVwZGF0ZVdlYlZpZXdJbXBsQWRkaXRpb25zKCk7CisgICAgdXBkYXRl
VG91Y2hCYXIoKTsKIAogICAgIGlmIChkaXJlY3Rpb24gIT0gTlNEaXJlY3RTZWxlY3Rpb24pIHsK
ICAgICAgICAgTlNFdmVudCAqZXZlbnQgPSBbTlNBcHAgY3VycmVudEV2ZW50XTsKQEAgLTE4MDgs
NyArMjUwMSw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNlbGVjdGlvbkRpZENoYW5nZSgpCiAgICAg
aWYgKCFtX2lzSGFuZGxpbmdBY2NlcHRlZENhbmRpZGF0ZSkKICAgICAgICAgbV9zb2Z0U3BhY2VS
YW5nZSA9IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwogI2lmIF9fTUFDX09TX1hfVkVSU0lP
Tl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwCi0gICAgdXBkYXRlV2ViVmlld0ltcGxBZGRpdGlvbnMo
KTsKKyAgICB1cGRhdGVUb3VjaEJhcigpOwogICAgIGlmICghbV9wYWdlLT5lZGl0b3JTdGF0ZSgp
LmlzTWlzc2luZ1Bvc3RMYXlvdXREYXRhKQogICAgICAgICByZXF1ZXN0Q2FuZGlkYXRlc0ZvclNl
bGVjdGlvbklmTmVlZGVkKCk7CiAjZW5kaWYKQEAgLTI0NDgsNyArMzE0MSw3IEBAIHZvaWQgV2Vi
Vmlld0ltcGw6OmRpZEhhbmRsZUFjY2VwdGVkQ2FuZGkKIHZvaWQgV2ViVmlld0ltcGw6OnZpZGVv
Q29udHJvbHNNYW5hZ2VyRGlkQ2hhbmdlKCkKIHsKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID49IDEwMTIwMAotICAgIHVwZGF0ZVdlYlZpZXdJbXBsQWRkaXRpb25zKCk7Cisg
ICAgdXBkYXRlVG91Y2hCYXIoKTsKICNlbmRpZgogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21h
Yy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSw2NyBAQAorMjAxNi0xMS0wNCAgQmV0aCBEYWtpbiAgPGJkYWtpbkBh
cHBsZS5jb20+CisKKyAgICAgICAgU3VwcG9ydCBUb3VjaEJhciBpbiBXZWJLaXQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDQzNworICAgICAgICAt
YW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzI4ODc2NTI0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQubW06CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OnJlc3Bv
bmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50Ojp1cGRhdGVF
ZGl0b3JTdGF0ZUFmdGVyTGF5b3V0SWZFZGl0YWJpbGl0eUNoYW5nZWQpOgorICAgICAgICAqIFdl
YlZpZXcvV2ViSFRNTFZpZXcubW06CisgICAgICAgICgtW1dlYkhUTUxWaWV3IGNhbmRpZGF0ZUxp
c3RUb3VjaEJhckl0ZW1dKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAg
ICgtW19XZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgaW5pdFdpdGhXZWJWaWV3Ol0p
OgorICAgICAgICAoLVtfV2ViVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyIF9zZWxlY3RM
aXN0Ol0pOgorICAgICAgICAoLVtfV2ViVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyIHNl
dEN1cnJlbnRMaXN0VHlwZTpdKToKKyAgICAgICAgKC1bV2ViVGV4dFRvdWNoQmFySXRlbUNvbnRy
b2xsZXIgaW5pdFdpdGhXZWJWaWV3Ol0pOgorICAgICAgICAoLVtXZWJUZXh0VG91Y2hCYXJJdGVt
Q29udHJvbGxlciBpdGVtRm9ySWRlbnRpZmllcjpdKToKKyAgICAgICAgKC1bV2ViVGV4dFRvdWNo
QmFySXRlbUNvbnRyb2xsZXIgd2ViVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyXSk6Cisg
ICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFRleHRJc0JvbGQ6XSk6
CisgICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFRleHRJc0l0YWxp
YzpdKToKKyAgICAgICAgKC1bV2ViVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElz
VW5kZXJsaW5lZDpdKToKKyAgICAgICAgKC1bV2ViVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIg
X3dlYkNoYW5nZVRleHRTdHlsZTpdKToKKyAgICAgICAgKC1bV2ViVGV4dFRvdWNoQmFySXRlbUNv
bnRyb2xsZXIgc2V0Q3VycmVudFRleHRBbGlnbm1lbnQ6XSk6CisgICAgICAgICgtW1dlYlRleHRU
b3VjaEJhckl0ZW1Db250cm9sbGVyIF93ZWJDaGFuZ2VUZXh0QWxpZ25tZW50Ol0pOgorICAgICAg
ICAoLVtXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciB0ZXh0Q29sb3JdKToKKyAgICAgICAg
KC1bV2ViVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dENvbG9yOl0pOgorICAgICAg
ICAoLVtXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBfd2ViQ2hhbmdlQ29sb3I6XSk6Cisg
ICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHRleHRMaXN0Vmlld0NvbnRy
b2xsZXJdKToKKyAgICAgICAgKC1bV2ViVmlldyBfY29tbW9uSW5pdGlhbGl6YXRpb25XaXRoRnJh
bWVOYW1lOmdyb3VwTmFtZTpdKToKKyAgICAgICAgKC1bV2ViVmlldyBzaG93Q2FuZGlkYXRlczpm
b3JTdHJpbmc6aW5SZWN0OmZvclNlbGVjdGVkUmFuZ2U6dmlldzpjb21wbGV0aW9uSGFuZGxlcjpd
KToKKyAgICAgICAgKC1bV2ViVmlldyBzaG91bGRSZXF1ZXN0Q2FuZGlkYXRlc10pOgorICAgICAg
ICAoLVtXZWJWaWV3IGZvcmNlUmVxdWVzdENhbmRpZGF0ZXNGb3JUZXN0aW5nXSk6CisgICAgICAg
ICgtW1dlYlZpZXcgbWFrZVRvdWNoQmFyXSk6CisgICAgICAgICgtW1dlYlZpZXcgdG91Y2hCYXI6
bWFrZUl0ZW1Gb3JJZGVudGlmaWVyOl0pOgorICAgICAgICAodGV4dENoZWNraW5nUmVzdWx0RnJv
bU5TVGV4dENoZWNraW5nUmVzdWx0KToKKyAgICAgICAgKC1bV2ViVmlldyBjYW5kaWRhdGVMaXN0
VG91Y2hCYXJJdGVtOmVuZFNlbGVjdGluZ0NhbmRpZGF0ZUF0SW5kZXg6XSk6CisgICAgICAgICgt
W1dlYlZpZXcgY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTpjaGFuZ2VkQ2FuZGlkYXRlTGlzdFZp
c2liaWxpdHk6XSk6CisgICAgICAgICgtW1dlYlZpZXcgX3NldFVwUGxheWJhY2tDb250cm9sc01h
bmFnZXJGb3JNZWRpYUVsZW1lbnQ6XSk6CisgICAgICAgICgtW1dlYlZpZXcgX2NsZWFyUGxheWJh
Y2tDb250cm9sc01hbmFnZXJdKToKKyAgICAgICAgKC1bV2ViVmlldyBfZGlzbWlzc1RleHRUb3Vj
aEJhclBvcG92ZXJJdGVtV2l0aElkZW50aWZpZXI6XSk6CisgICAgICAgICgtW1dlYlZpZXcgX3Rl
eHRUb3VjaEJhckN1c3RvbWl6YXRpb25BbGxvd2VkSWRlbnRpZmllcnNdKToKKyAgICAgICAgKC1b
V2ViVmlldyBfcGxhaW5UZXh0VG91Y2hCYXJDdXN0b21pemF0aW9uRGVmYXVsdEl0ZW1JZGVudGlm
aWVyc10pOgorICAgICAgICAoLVtXZWJWaWV3IF9yaWNoVGV4dFRvdWNoQmFyQ3VzdG9taXphdGlv
bkRlZmF1bHRJdGVtSWRlbnRpZmllcnNdKToKKyAgICAgICAgKC1bV2ViVmlldyB0b3VjaEJhckRp
ZEV4aXRDdXN0b21pemF0aW9uOl0pOgorICAgICAgICAoLVtXZWJWaWV3IHRvdWNoQmFyV2lsbEVu
dGVyQ3VzdG9taXphdGlvbjpdKToKKyAgICAgICAgKC1bV2ViVmlldyBkaWRDaGFuZ2VBdXRvbWF0
aWNUZXh0Q29tcGxldGlvbjpdKToKKyAgICAgICAgKC1bV2ViVmlldyBzZXRVcFRleHRUb3VjaEJh
cjpdKToKKyAgICAgICAgKC1bV2ViVmlldyBfaXNSaWNobHlFZGl0YWJsZV0pOgorICAgICAgICAo
LVtXZWJWaWV3IHRleHRUb3VjaEJhcl0pOgorICAgICAgICAoLVtXZWJWaWV3IHVwZGF0ZVRleHRU
b3VjaEJhcl0pOgorICAgICAgICAoLVtXZWJWaWV3IHVwZGF0ZU1lZGlhVG91Y2hCYXJdKToKKyAg
ICAgICAgKC1bV2ViVmlldyB1cGRhdGVUb3VjaEJhcl0pOgorICAgICAgICAoLVtXZWJWaWV3IHBy
ZXBhcmVGb3JNb3VzZURvd25dKToKKyAgICAgICAgKC1bV2ViVmlldyBwcmVwYXJlRm9yTW91c2VV
cF0pOgorICAgICAgICAoLVtXZWJWaWV3IHdlYlZpZXdBZGRpdGlvbnNXaWxsRGVzdHJveVZpZXdd
KToKKyAgICAgICAgKC1bV2ViVmlldyBjYW5kaWRhdGVMaXN0XSk6CisgICAgICAgICgtW1dlYlZp
ZXcgdXBkYXRlV2ViVmlld0FkZGl0aW9uc10pOiBEZWxldGVkLgorICAgICAgICAqIFdlYlZpZXcv
V2ViVmlld0RhdGEuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oOgorICAg
ICAgICAqIFdlYlZpZXcvV2ViVmlld1ByaXZhdGUuaDoKKwogMjAxNi0xMS0wNCAgU2FpZCBBYm91
LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhIHNldHRp
bmcgYW5kIHByZWZlcmVuY2VzIHRvIGVuYWJsZS9kaXNhYmxlIGFzeW5jIGltYWdlIGRlY29kaW5n
CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50Lm1tCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTM0Nyw3ICsz
NDcsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVzcG9uZFRvQ2hhbmdlZFNlCiAgICAgTlNW
aWV3PFdlYkRvY3VtZW50Vmlldz4gKmRvY3VtZW50VmlldyA9IFtba2l0KGZyYW1lKSBmcmFtZVZp
ZXddIGRvY3VtZW50Vmlld107CiAgICAgaWYgKFtkb2N1bWVudFZpZXcgaXNLaW5kT2ZDbGFzczpb
V2ViSFRNTFZpZXcgY2xhc3NdXSkgewogICAgICAgICBbKFdlYkhUTUxWaWV3ICopZG9jdW1lbnRW
aWV3IF9zZWxlY3Rpb25DaGFuZ2VkXTsKLSAgICAgICAgW21fd2ViVmlldyB1cGRhdGVXZWJWaWV3
QWRkaXRpb25zXTsKKyAgICAgICAgW21fd2ViVmlldyB1cGRhdGVUb3VjaEJhcl07CiAgICAgICAg
IG1fbGFzdEVkaXRvclN0YXRlV2FzQ29udGVudEVkaXRhYmxlID0gWyhXZWJIVE1MVmlldyAqKWRv
Y3VtZW50VmlldyBfaXNFZGl0YWJsZV0gPyBFZGl0b3JTdGF0ZUlzQ29udGVudEVkaXRhYmxlOjpZ
ZXMgOiBFZGl0b3JTdGF0ZUlzQ29udGVudEVkaXRhYmxlOjpObzsKICAgICB9CiAKQEAgLTY2Nyw3
ICs2NjcsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6dXBkYXRlRWRpdG9yU3RhdGVBCiAKICAg
ICBFZGl0b3JTdGF0ZUlzQ29udGVudEVkaXRhYmxlIGVkaXRvclN0YXRlSXNDb250ZW50RWRpdGFi
bGUgPSBbKFdlYkhUTUxWaWV3ICopZG9jdW1lbnRWaWV3IF9pc0VkaXRhYmxlXSA/IEVkaXRvclN0
YXRlSXNDb250ZW50RWRpdGFibGU6OlllcyA6IEVkaXRvclN0YXRlSXNDb250ZW50RWRpdGFibGU6
Ok5vOwogICAgIGlmIChtX2xhc3RFZGl0b3JTdGF0ZVdhc0NvbnRlbnRFZGl0YWJsZSAhPSBlZGl0
b3JTdGF0ZUlzQ29udGVudEVkaXRhYmxlKQotICAgICAgICBbbV93ZWJWaWV3IHVwZGF0ZVdlYlZp
ZXdBZGRpdGlvbnNdOworICAgICAgICBbbV93ZWJWaWV3IHVwZGF0ZVRvdWNoQmFyXTsKIH0KIAog
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlZ2lzdGVyVW5kb1N0ZXAoUGFzc1JlZlB0cjxVbmRvU3Rl
cD4gY21kKQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCShy
ZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC03MjMwLDggKzcyMzAsMTEgQEAgLSAodm9pZClfdXBkYXRl
U2VsZWN0aW9uRm9ySW5wdXRNYW5hZ2VyCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogfQogCi0j
aWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEw
MTIwMCAmJiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2ltcG9ydCA8V2ViS2l0QWRkaXRpb25z
L1dlYkhUTUxWaWV3V2ViTlNUZXh0SW5wdXRTdXBwb3J0QWRkaXRpb25zLm1tPgorI2lmIEhBVkUo
VE9VQ0hfQkFSKQorLSAoTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtICopY2FuZGlkYXRlTGlz
dFRvdWNoQmFySXRlbQoreworICAgIHJldHVybiBbW3NlbGYgX3dlYlZpZXddIGNhbmRpZGF0ZUxp
c3RdOworfQogI2VuZGlmCiAKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZp
ZXcubW0JKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
Vmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCw3IEBACiAjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BUElDYXN0Lmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9FeGNlcHRpb24u
aD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWVSZWYuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvQVZLaXRTUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9s
bGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0FuaW1hdGlvbkNvbnRyb2xsZXIuaD4KICNpbXBvcnQg
PFdlYkNvcmUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaD4KQEAgLTE0NCw2ICsxNDUsOCBAQAog
I2ltcG9ydCA8V2ViQ29yZS9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNv
cmUvR2VvbG9jYXRpb25FcnJvci5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvSFRNTE9MaXN0RWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1M
VUxpc3RFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxWaWRlb0VsZW1lbnQuaD4KICNp
bXBvcnQgPFdlYkNvcmUvSGlzdG9yeUNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvSGlz
dG9yeUl0ZW0uaD4KQEAgLTE1MywxMSArMTU2LDE0IEBACiAjaW1wb3J0IDxXZWJDb3JlL0pTRWxl
bWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9KU05vZGVMaXN0Lmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0pTTm90aWZpY2F0aW9uLmg+CisjaW1wb3J0IDxXZWJDb3JlL0xvY2FsaXplZFN0cmluZ3MuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvTG9nSW5pdGlhbGl6YXRpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUv
TUlNRVR5cGVSZWdpc3RyeS5oPgogI2ltcG9ydCA8V2ViQ29yZS9NYWluRnJhbWUuaD4KICNpbXBv
cnQgPFdlYkNvcmUvTWVtb3J5Q2FjaGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvTWVtb3J5UHJlc3N1
cmVIYW5kbGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL05TU3BlbGxDaGVja2VyU1BJLmg+CisjaW1w
b3J0IDxXZWJDb3JlL05TVG91Y2hCYXJTUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvTlNVUkxGaWxl
VHlwZU1hcHBpbmdzU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lv
bi5oPgogI2ltcG9ydCA8V2ViQ29yZS9Ob2RlTGlzdC5oPgpAQCAtMTkyLDYgKzE5OCw3IEBACiAj
aW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVPYmpDRXh0cmFzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dl
YkNvcmVWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dpZGdldC5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9odG1sZWRpdGluZy5oPgogI2ltcG9ydCA8V2ViS2l0TGVnYWN5L0RPTS5oPgogI2ltcG9ydCA8
V2ViS2l0TGVnYWN5L0RPTUV4dGVuc2lvbnMuaD4KICNpbXBvcnQgPFdlYktpdExlZ2FjeS9ET01Q
cml2YXRlLmg+CkBAIC0yMTMsNiArMjIwLDcgQEAKICNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KICNp
bXBvcnQgPHd0Zi9SdW5Mb29wLmg+CiAjaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW1w
b3J0IDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CiAjaW1wb3J0IDx3dGYvc3BpL2Rhcndpbi9keWxk
U1BJLmg+CiAKICNpZiAhUExBVEZPUk0oSU9TKQpAQCAtMzA3LDYgKzMxNSwxMiBAQAogI2ltcG9y
dCA8V2ViQ29yZS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5oPgogI2VuZGlm
CiAKKyNpZiBIQVZFKFRPVUNIX0JBUikgJiYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19N
QU5BR0VSKQorU09GVF9MSU5LX0ZSQU1FV09SSyhBVktpdCkKK1NPRlRfTElOS19DTEFTUyhBVktp
dCwgQVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNQcm92aWRlcikKK1NPRlRfTElOS19DTEFT
UyhBVktpdCwgQVZGdW5jdGlvbkJhclNjcnViYmVyKQorI2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFS
KSAmJiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisKICNpZiBQTEFURk9S
TShNQUMpCiBTT0ZUX0xJTktfQ09OU1RBTlRfTUFZX0ZBSUwoTG9va3VwLCBMVU5vdGlmaWNhdGlv
blBvcG92ZXJXaWxsQ2xvc2UsIE5TU3RyaW5nICopCiAjZW5kaWYKQEAgLTY2Miw2ICs2NzYsMjgx
IEBAIHN0YXRpYyBCT09MIGF1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWIKIHN0YXRpYyBCT09M
IGF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQ7CiAjZW5kaWYKIAorI2lmIEhBVkUo
VE9VQ0hfQkFSKQorCitlbnVtIGNsYXNzIFdlYkxpc3RUeXBlIHsKKyAgICBOb25lID0gMCwKKyAg
ICBPcmRlcmVkLAorICAgIFVub3JkZXJlZAorfTsKKworQGludGVyZmFjZSBfV2ViVGV4dExpc3RU
b3VjaEJhclZpZXdDb250cm9sbGVyIDogTlNWaWV3Q29udHJvbGxlciB7CisgICAgV2ViTGlzdFR5
cGUgX2N1cnJlbnRMaXN0VHlwZTsKKworQHByaXZhdGUKKyAgICBXZWJWaWV3ICpfd2ViVmlldzsK
K30KKworQHByb3BlcnR5IChub25hdG9taWMpIFdlYkxpc3RUeXBlIGN1cnJlbnRMaXN0VHlwZTsK
KworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXc7CisK
K0BlbmQKKworQGltcGxlbWVudGF0aW9uIF9XZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xs
ZXIKKworQHN5bnRoZXNpemUgY3VycmVudExpc3RUeXBlPV9jdXJyZW50TGlzdFR5cGU7CisKK3N0
YXRpYyBjb25zdCBkb3VibGUgbGlzdENvbnRyb2xTZWdtZW50V2lkdGggPSA2Ny4wOworCitzdGF0
aWMgY29uc3QgdW5zaWduZWQgbm9MaXN0U2VnbWVudCA9IDA7CitzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgdW5vcmRlcmVkTGlzdFNlZ21lbnQgPSAxOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIG9yZGVy
ZWRMaXN0U2VnbWVudCA9IDI7CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZpZXc6KFdl
YlZpZXcgKil3ZWJWaWV3Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAg
ICAgIHJldHVybiBuaWw7CisKKyAgICBfd2ViVmlldyA9IHdlYlZpZXc7CisKKyAgICBOU1NlZ21l
bnRlZENvbnRyb2wgKmluc2VydExpc3RDb250cm9sID0gW05TU2VnbWVudGVkQ29udHJvbCBzZWdt
ZW50ZWRDb250cm9sV2l0aExhYmVsczpAWyBXZWJDb3JlOjppbnNlcnRMaXN0VHlwZU5vbmUoKSwg
V2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVCdWxsZXRlZCgpLCBXZWJDb3JlOjppbnNlcnRMaXN0VHlw
ZU51bWJlcmVkKCkgXSB0cmFja2luZ01vZGU6TlNTZWdtZW50U3dpdGNoVHJhY2tpbmdTZWxlY3RP
bmUgdGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3Rvcihfc2VsZWN0TGlzdDopXTsKKyAgICBbaW5z
ZXJ0TGlzdENvbnRyb2wgc2V0V2lkdGg6bGlzdENvbnRyb2xTZWdtZW50V2lkdGggZm9yU2VnbWVu
dDpub0xpc3RTZWdtZW50XTsKKyAgICBbaW5zZXJ0TGlzdENvbnRyb2wgc2V0V2lkdGg6bGlzdENv
bnRyb2xTZWdtZW50V2lkdGggZm9yU2VnbWVudDp1bm9yZGVyZWRMaXN0U2VnbWVudF07CisgICAg
W2luc2VydExpc3RDb250cm9sIHNldFdpZHRoOmxpc3RDb250cm9sU2VnbWVudFdpZHRoIGZvclNl
Z21lbnQ6b3JkZXJlZExpc3RTZWdtZW50XTsKKyAgICBpbnNlcnRMaXN0Q29udHJvbC5mb250ID0g
W05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOjE1XTsKKworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGlj
IHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVj
bGFyYXRpb25zIgorICAgIGlkIHNlZ21lbnRFbGVtZW50ID0gTlNBY2Nlc3NpYmlsaXR5VW5pZ25v
cmVkRGVzY2VuZGFudChpbnNlcnRMaXN0Q29udHJvbCk7CisgICAgTlNBcnJheSAqc2VnbWVudHMg
PSBbc2VnbWVudEVsZW1lbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNzaWJp
bGl0eUNoaWxkcmVuQXR0cmlidXRlXTsKKyAgICBBU1NFUlQoc2VnbWVudHMuY291bnQgPT0gMyk7
CisgICAgW1tzZWdtZW50cyBvYmplY3RBdEluZGV4Om5vTGlzdFNlZ21lbnRdIGFjY2Vzc2liaWxp
dHlTZXRPdmVycmlkZVZhbHVlOldlYkNvcmU6Omluc2VydExpc3RUeXBlTm9uZSgpIGZvckF0dHJp
YnV0ZTpOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkF0dHJpYnV0ZV07CisgICAgW1tzZWdtZW50
cyBvYmplY3RBdEluZGV4OnVub3JkZXJlZExpc3RTZWdtZW50XSBhY2Nlc3NpYmlsaXR5U2V0T3Zl
cnJpZGVWYWx1ZTpXZWJDb3JlOjppbnNlcnRMaXN0VHlwZUJ1bGxldGVkQWNjZXNzaWJpbGl0eVRp
dGxlKCkgZm9yQXR0cmlidXRlOk5TQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uQXR0cmlidXRlXTsK
KyAgICBbW3NlZ21lbnRzIG9iamVjdEF0SW5kZXg6b3JkZXJlZExpc3RTZWdtZW50XSBhY2Nlc3Np
YmlsaXR5U2V0T3ZlcnJpZGVWYWx1ZTpXZWJDb3JlOjppbnNlcnRMaXN0VHlwZU51bWJlcmVkQWNj
ZXNzaWJpbGl0eVRpdGxlKCkgZm9yQXR0cmlidXRlOk5TQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9u
QXR0cmlidXRlXTsKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKKworICAgIHNlbGYudmll
dyA9IGluc2VydExpc3RDb250cm9sOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQp
X3NlbGVjdExpc3Q6KGlkKXNlbmRlcgoreworICAgIE5TVmlldyAqZG9jdW1lbnRWaWV3ID0gW1tb
X3dlYlZpZXcgX3NlbGVjdGVkT3JNYWluRnJhbWVdIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsK
KyAgICBpZiAoIVtkb2N1bWVudFZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3Nd
XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViSFRNTFZpZXcgKndlYkhUTUxWaWV3ID0gKFdl
YkhUTUxWaWV3ICopZG9jdW1lbnRWaWV3OworICAgIE5TU2VnbWVudGVkQ29udHJvbCAqaW5zZXJ0
TGlzdENvbnRyb2wgPSAoTlNTZWdtZW50ZWRDb250cm9sICopc2VsZi52aWV3OworICAgIGlmIChp
bnNlcnRMaXN0Q29udHJvbC5zZWxlY3RlZFNlZ21lbnQgPT0gbm9MaXN0U2VnbWVudCkgeworICAg
ICAgICAvLyBUaGVyZSBpcyBubyAicmVtb3ZlIGxpc3QiIGVkaXQgY29tbWFuZCwgYnV0IF9pbnNl
cnRPcmRlcmVkTGlzdCBhbmQgX2luc2VydFVub3JkZXJlZExpc3QgYm90aAorICAgICAgICAvLyBi
ZWhhdmUgYXMgdG9nZ2xlcywgc28gd2UgY2FuIGludm9rZSB0aGUgYXBwcm9wcmlhdGUgbWV0aG9k
IGRlcGVuZGluZyBvbiBvdXIgX2N1cnJlbnRMaXN0VHlwZQorICAgICAgICAvLyB0byByZW1vdmUg
YW4gZXhpc3RpbmcgbGlzdC4gV2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZyBpZiBfY3VycmVu
dExpc3RUeXBlIGlzIFdlYkxpc3RUeXBlOjpOb25lLgorICAgICAgICBpZiAoX2N1cnJlbnRMaXN0
VHlwZSA9PSBXZWJMaXN0VHlwZTo6T3JkZXJlZCkKKyAgICAgICAgICAgIFt3ZWJIVE1MVmlldyBf
aW5zZXJ0T3JkZXJlZExpc3RdOworICAgICAgICBlbHNlIGlmIChfY3VycmVudExpc3RUeXBlID09
IFdlYkxpc3RUeXBlOjpVbm9yZGVyZWQpCisgICAgICAgICAgICBbd2ViSFRNTFZpZXcgX2luc2Vy
dFVub3JkZXJlZExpc3RdOworICAgIH0gZWxzZSBpZiAoaW5zZXJ0TGlzdENvbnRyb2wuc2VsZWN0
ZWRTZWdtZW50ID09IHVub3JkZXJlZExpc3RTZWdtZW50KQorICAgICAgICBbd2ViSFRNTFZpZXcg
X2luc2VydFVub3JkZXJlZExpc3RdOworICAgIGVsc2UgaWYgKGluc2VydExpc3RDb250cm9sLnNl
bGVjdGVkU2VnbWVudCA9PSBvcmRlcmVkTGlzdFNlZ21lbnQpCisgICAgICAgIFt3ZWJIVE1MVmll
dyBfaW5zZXJ0T3JkZXJlZExpc3RdOworCisgICAgW193ZWJWaWV3IF9kaXNtaXNzVGV4dFRvdWNo
QmFyUG9wb3Zlckl0ZW1XaXRoSWRlbnRpZmllcjpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0
TGlzdF07Cit9CisKKy0gKHZvaWQpc2V0Q3VycmVudExpc3RUeXBlOihXZWJMaXN0VHlwZSlsaXN0
VHlwZQoreworICAgIE5TU2VnbWVudGVkQ29udHJvbCAqaW5zZXJ0TGlzdENvbnRyb2wgPSAoTlNT
ZWdtZW50ZWRDb250cm9sICopc2VsZi52aWV3OworICAgIHN3aXRjaCAobGlzdFR5cGUpIHsKKyAg
ICBjYXNlIFdlYkxpc3RUeXBlOjpOb25lOgorICAgICAgICBbaW5zZXJ0TGlzdENvbnRyb2wgc2V0
U2VsZWN0ZWQ6WUVTIGZvclNlZ21lbnQ6bm9MaXN0U2VnbWVudF07CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgV2ViTGlzdFR5cGU6Ok9yZGVyZWQ6CisgICAgICAgIFtpbnNlcnRMaXN0Q29udHJv
bCBzZXRTZWxlY3RlZDpZRVMgZm9yU2VnbWVudDpvcmRlcmVkTGlzdFNlZ21lbnRdOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFdlYkxpc3RUeXBlOjpVbm9yZGVyZWQ6CisgICAgICAgIFtpbnNl
cnRMaXN0Q29udHJvbCBzZXRTZWxlY3RlZDpZRVMgZm9yU2VnbWVudDp1bm9yZGVyZWRMaXN0U2Vn
bWVudF07CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIF9jdXJyZW50TGlzdFR5cGUgPSBs
aXN0VHlwZTsKK30KKworQGVuZAorCitAaW50ZXJmYWNlIFdlYlRleHRUb3VjaEJhckl0ZW1Db250
cm9sbGVyIDogTlNUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciB7CisgICAgQk9PTCBfdGV4dElz
Qm9sZDsKKyAgICBCT09MIF90ZXh0SXNJdGFsaWM7CisgICAgQk9PTCBfdGV4dElzVW5kZXJsaW5l
ZDsKKyAgICBOU1RleHRBbGlnbm1lbnQgX2N1cnJlbnRUZXh0QWxpZ25tZW50OworICAgIFJldGFp
blB0cjxOU0NvbG9yPiBfdGV4dENvbG9yOworICAgIFJldGFpblB0cjxfV2ViVGV4dExpc3RUb3Vj
aEJhclZpZXdDb250cm9sbGVyPiBfd2ViVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyOwor
CitAcHJpdmF0ZQorICAgIFdlYlZpZXcgKl93ZWJWaWV3OworfQorCitAcHJvcGVydHkgKG5vbmF0
b21pYykgQk9PTCB0ZXh0SXNCb2xkOworQHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgdGV4dElz
SXRhbGljOworQHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgdGV4dElzVW5kZXJsaW5lZDsKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljKSBOU1RleHRBbGlnbm1lbnQgY3VycmVudFRleHRBbGlnbm1lbnQ7
CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCByZWFkd3JpdGUpIE5TQ29sb3IgKnRleHRD
b2xvcjsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViVmlldzooV2ViVmlldyAqKXdlYlZp
ZXc7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxl
cgorCitAc3ludGhlc2l6ZSB0ZXh0SXNCb2xkPV90ZXh0SXNCb2xkOworQHN5bnRoZXNpemUgdGV4
dElzSXRhbGljPV90ZXh0SXNJdGFsaWM7CitAc3ludGhlc2l6ZSB0ZXh0SXNVbmRlcmxpbmVkPV90
ZXh0SXNVbmRlcmxpbmVkOworQHN5bnRoZXNpemUgY3VycmVudFRleHRBbGlnbm1lbnQ9X2N1cnJl
bnRUZXh0QWxpZ25tZW50OworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWV3OihXZWJW
aWV3ICopd2ViVmlldworeworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAg
ICByZXR1cm4gbmlsOworCisgICAgX3dlYlZpZXcgPSB3ZWJWaWV3OworCisgICAgcmV0dXJuIHNl
bGY7Cit9CisKKy0gKE5TVG91Y2hCYXJJdGVtICopaXRlbUZvcklkZW50aWZpZXI6KE5TU3RyaW5n
ICopaWRlbnRpZmllcgoreworICAgIE5TVG91Y2hCYXJJdGVtICppdGVtID0gW3N1cGVyIGl0ZW1G
b3JJZGVudGlmaWVyOmlkZW50aWZpZXJdOworICAgIEJPT0wgaXNUZXh0Rm9ybWF0SXRlbSA9IFtp
ZGVudGlmaWVyIGlzRXF1YWxUb1N0cmluZzpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Rm9y
bWF0XTsKKworICAgIGlmIChpc1RleHRGb3JtYXRJdGVtIHx8IFtpZGVudGlmaWVyIGlzRXF1YWxU
b1N0cmluZzpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0U3R5bGVdKQorICAgICAgICBzZWxm
LnRleHRTdHlsZS5hY3Rpb24gPSBAc2VsZWN0b3IoX3dlYkNoYW5nZVRleHRTdHlsZTopOworCisg
ICAgaWYgKGlzVGV4dEZvcm1hdEl0ZW0gfHwgW2lkZW50aWZpZXIgaXNFcXVhbFRvU3RyaW5nOk5T
VG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRBbGlnbm1lbnRdKQorICAgICAgICBzZWxmLnRleHRB
bGlnbm1lbnRzLmFjdGlvbiA9IEBzZWxlY3Rvcihfd2ViQ2hhbmdlVGV4dEFsaWdubWVudDopOwor
CisgICAgTlNDb2xvclBpY2tlclRvdWNoQmFySXRlbSAqY29sb3JQaWNrZXJJdGVtID0gbmlsOwor
ICAgIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9TdHJpbmc6TlNUb3VjaEJhckl0ZW1JZGVudGlm
aWVyVGV4dENvbG9yUGlja2VyXSAmJiBbaXRlbSBpc0tpbmRPZkNsYXNzOltOU0NvbG9yUGlja2Vy
VG91Y2hCYXJJdGVtIGNsYXNzXV0pCisgICAgICAgIGNvbG9yUGlja2VySXRlbSA9IChOU0NvbG9y
UGlja2VyVG91Y2hCYXJJdGVtICopaXRlbTsKKyAgICBpZiAoaXNUZXh0Rm9ybWF0SXRlbSkKKyAg
ICAgICAgY29sb3JQaWNrZXJJdGVtID0gc2VsZi5jb2xvclBpY2tlckl0ZW07CisgICAgaWYgKGNv
bG9yUGlja2VySXRlbSkgeworICAgICAgICBjb2xvclBpY2tlckl0ZW0udGFyZ2V0ID0gc2VsZjsK
KyAgICAgICAgY29sb3JQaWNrZXJJdGVtLmFjdGlvbiA9IEBzZWxlY3Rvcihfd2ViQ2hhbmdlQ29s
b3I6KTsKKyAgICAgICAgY29sb3JQaWNrZXJJdGVtLnNob3dzQWxwaGEgPSBOTzsKKyAgICB9CisK
KyAgICByZXR1cm4gaXRlbTsKK30KKworLSAoX1dlYlRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJv
bGxlciAqKXdlYlRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlcgoreworICAgIHJldHVybiAo
X1dlYlRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciAqKVtzZWxmIHRleHRMaXN0Vmlld0Nv
bnRyb2xsZXJdOworfQorCistICh2b2lkKXNldFRleHRJc0JvbGQ6KEJPT0wpYm9sZAoreworICAg
IF90ZXh0SXNCb2xkID0gYm9sZDsKKyAgICBpZiAoW3NlbGYudGV4dFN0eWxlIGlzU2VsZWN0ZWRG
b3JTZWdtZW50OjBdICE9IF90ZXh0SXNCb2xkKQorICAgICAgICBbc2VsZi50ZXh0U3R5bGUgc2V0
U2VsZWN0ZWQ6X3RleHRJc0JvbGQgZm9yU2VnbWVudDowXTsKK30KKworLSAodm9pZClzZXRUZXh0
SXNJdGFsaWM6KEJPT0wpaXRhbGljCit7CisgICAgX3RleHRJc0l0YWxpYyA9IGl0YWxpYzsKKyAg
ICBpZiAoW3NlbGYudGV4dFN0eWxlIGlzU2VsZWN0ZWRGb3JTZWdtZW50OjFdICE9IF90ZXh0SXNJ
dGFsaWMpCisgICAgICAgIFtzZWxmLnRleHRTdHlsZSBzZXRTZWxlY3RlZDpfdGV4dElzSXRhbGlj
IGZvclNlZ21lbnQ6MV07Cit9CisKKy0gKHZvaWQpc2V0VGV4dElzVW5kZXJsaW5lZDooQk9PTCl1
bmRlcmxpbmVkCit7CisgICAgX3RleHRJc1VuZGVybGluZWQgPSB1bmRlcmxpbmVkOworICAgIGlm
IChbc2VsZi50ZXh0U3R5bGUgaXNTZWxlY3RlZEZvclNlZ21lbnQ6Ml0gIT0gX3RleHRJc1VuZGVy
bGluZWQpCisgICAgICAgIFtzZWxmLnRleHRTdHlsZSBzZXRTZWxlY3RlZDpfdGV4dElzVW5kZXJs
aW5lZCBmb3JTZWdtZW50OjJdOworfQorCistICh2b2lkKV93ZWJDaGFuZ2VUZXh0U3R5bGU6KGlk
KXNlbmRlcgoreworICAgIGlmIChbc2VsZi50ZXh0U3R5bGUgaXNTZWxlY3RlZEZvclNlZ21lbnQ6
MF0gIT0gX3RleHRJc0JvbGQpIHsKKyAgICAgICAgX3RleHRJc0JvbGQgPSAhX3RleHRJc0JvbGQ7
CisgICAgICAgIFtfd2ViVmlldyBfZXhlY3V0ZUNvcmVDb21tYW5kQnlOYW1lOkAiVG9nZ2xlQm9s
ZCIgdmFsdWU6QCIiXTsKKyAgICB9CisKKyAgICBpZiAoW3NlbGYudGV4dFN0eWxlIGlzU2VsZWN0
ZWRGb3JTZWdtZW50OjFdICE9IF90ZXh0SXNJdGFsaWMpIHsKKyAgICAgICAgX3RleHRJc0l0YWxp
YyA9ICFfdGV4dElzSXRhbGljOworICAgICAgICBbX3dlYlZpZXcgX2V4ZWN1dGVDb3JlQ29tbWFu
ZEJ5TmFtZTpAIlRvZ2dsZUl0YWxpYyIgdmFsdWU6QCIiXTsKKyAgICB9CisKKyAgICBpZiAoW3Nl
bGYudGV4dFN0eWxlIGlzU2VsZWN0ZWRGb3JTZWdtZW50OjJdICE9IF90ZXh0SXNVbmRlcmxpbmVk
KSB7CisgICAgICAgIF90ZXh0SXNVbmRlcmxpbmVkID0gIV90ZXh0SXNVbmRlcmxpbmVkOworICAg
ICAgICBbX3dlYlZpZXcgX2V4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZTpAIlRvZ2dsZVVuZGVybGlu
ZSIgdmFsdWU6QCIiXTsKKyAgICB9Cit9CisKKy0gKHZvaWQpc2V0Q3VycmVudFRleHRBbGlnbm1l
bnQ6KE5TVGV4dEFsaWdubWVudClhbGlnbm1lbnQKK3sKKyAgICBfY3VycmVudFRleHRBbGlnbm1l
bnQgPSBhbGlnbm1lbnQ7CisgICAgW3NlbGYudGV4dEFsaWdubWVudHMgc2VsZWN0U2VnbWVudFdp
dGhUYWc6X2N1cnJlbnRUZXh0QWxpZ25tZW50XTsKK30KKworLSAodm9pZClfd2ViQ2hhbmdlVGV4
dEFsaWdubWVudDooaWQpc2VuZGVyCit7CisgICAgTlNUZXh0QWxpZ25tZW50IGFsaWdubWVudCA9
IChOU1RleHRBbGlnbm1lbnQpW3NlbGYudGV4dEFsaWdubWVudHMuY2VsbCB0YWdGb3JTZWdtZW50
OltzZWxmLnRleHRBbGlnbm1lbnRzIHNlbGVjdGVkU2VnbWVudF1dOworICAgIHN3aXRjaCAoYWxp
Z25tZW50KSB7CisgICAgY2FzZSBOU1RleHRBbGlnbm1lbnRMZWZ0OiB7CisgICAgICAgIF9jdXJy
ZW50VGV4dEFsaWdubWVudCA9IE5TVGV4dEFsaWdubWVudExlZnQ7CisgICAgICAgIFtfd2ViVmll
dyBhbGlnbkxlZnQ6c2VuZGVyXTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgTlNU
ZXh0QWxpZ25tZW50UmlnaHQ6IHsKKyAgICAgICAgX2N1cnJlbnRUZXh0QWxpZ25tZW50ID0gTlNU
ZXh0QWxpZ25tZW50UmlnaHQ7CisgICAgICAgIFtfd2ViVmlldyBhbGlnblJpZ2h0OnNlbmRlcl07
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIE5TVGV4dEFsaWdubWVudENlbnRlcjog
eworICAgICAgICBfY3VycmVudFRleHRBbGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRDZW50ZXI7
CisgICAgICAgIFtfd2ViVmlldyBhbGlnbkNlbnRlcjpzZW5kZXJdOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBOU1RleHRBbGlnbm1lbnRKdXN0aWZpZWQ6IHsKKyAgICAgICAgX2N1
cnJlbnRUZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25tZW50SnVzdGlmaWVkOworICAgICAgICBb
X3dlYlZpZXcgYWxpZ25KdXN0aWZpZWQ6c2VuZGVyXTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIFtfd2ViVmlldyBfZGlz
bWlzc1RleHRUb3VjaEJhclBvcG92ZXJJdGVtV2l0aElkZW50aWZpZXI6TlNUb3VjaEJhckl0ZW1J
ZGVudGlmaWVyVGV4dEFsaWdubWVudF07Cit9CisKKy0gKE5TQ29sb3IgKil0ZXh0Q29sb3IKK3sK
KyAgICByZXR1cm4gX3RleHRDb2xvci5nZXQoKTsKK30KKworLSAodm9pZClzZXRUZXh0Q29sb3I6
KE5TQ29sb3IgKiljb2xvcgoreworICAgIF90ZXh0Q29sb3IgPSBjb2xvcjsKKyAgICBzZWxmLmNv
bG9yUGlja2VySXRlbS5jb2xvciA9IF90ZXh0Q29sb3IuZ2V0KCk7Cit9CisKKy0gKHZvaWQpX3dl
YkNoYW5nZUNvbG9yOihpZClzZW5kZXIKK3sKKyAgICBfdGV4dENvbG9yID0gc2VsZi5jb2xvclBp
Y2tlckl0ZW0uY29sb3I7CisgICAgW193ZWJWaWV3IF9leGVjdXRlQ29yZUNvbW1hbmRCeU5hbWU6
QCJGb3JlQ29sb3IiIHZhbHVlOiBXZWJDb3JlOjpjb2xvckZyb21OU0NvbG9yKF90ZXh0Q29sb3Iu
Z2V0KCkpLnNlcmlhbGl6ZWQoKV07Cit9CisKKy0gKE5TVmlld0NvbnRyb2xsZXIgKil0ZXh0TGlz
dFZpZXdDb250cm9sbGVyCit7CisgICAgaWYgKCFfd2ViVGV4dExpc3RUb3VjaEJhclZpZXdDb250
cm9sbGVyKQorICAgICAgICBfd2ViVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyID0gYWRv
cHROUyhbW19XZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRo
V2ViVmlldzpfd2ViVmlld10pOworICAgIHJldHVybiBfd2ViVGV4dExpc3RUb3VjaEJhclZpZXdD
b250cm9sbGVyLmdldCgpOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikK
KwogQGltcGxlbWVudGF0aW9uIFdlYlZpZXcgKEFsbFdlYlZpZXdzKQogCiBzdGF0aWMgQ0ZTZXRD
YWxsQmFja3MgTm9uUmV0YWluaW5nU2V0Q2FsbGJhY2tzID0gewpAQCAtOTcwLDcgKzEyNTksNyBA
QCAtICh2b2lkKV9jb21tb25Jbml0aWFsaXphdGlvbldpdGhGcmFtZU5hCiAgICAgfQogI2VuZGlm
CiAKLSAgICBbc2VsZiB1cGRhdGVXZWJWaWV3QWRkaXRpb25zXTsKKyAgICBbc2VsZiB1cGRhdGVU
b3VjaEJhcl07CiAKICNpZiAhUExBVEZPUk0oSU9TKQogICAgIHN0YXRpYyBib29sIGRpZE9uZVRp
bWVJbml0aWFsaXphdGlvbiA9IGZhbHNlOwpAQCAtNDY5Miw2ICs0OTgxLDQ1IEBAIC0gKHZvaWQp
X3NldEZvbnRGYWxsYmFja1ByZWZlcnNQaWN0b2dyYXAKICAgICAgICAgX3ByaXZhdGUtPnBhZ2Ut
PnNldHRpbmdzKCkuc2V0Rm9udEZhbGxiYWNrUHJlZmVyc1BpY3RvZ3JhcGhzKGZsYWcpOwogfQog
CisjaWYgSEFWRShUT1VDSF9CQVIpCisKKy0gKHZvaWQpc2hvd0NhbmRpZGF0ZXM6KE5TQXJyYXk8
TlNUZXh0Q2hlY2tpbmdSZXN1bHQgKj4gKiljYW5kaWRhdGVzIGZvclN0cmluZzooTlNTdHJpbmcg
KilzdHJpbmcgaW5SZWN0OihOU1JlY3QpcmVjdE9mVHlwZWRTdHJpbmcgZm9yU2VsZWN0ZWRSYW5n
ZTooTlNSYW5nZSlyYW5nZSB2aWV3OihOU1ZpZXcgKil2aWV3IGNvbXBsZXRpb25IYW5kbGVyOih2
b2lkICheKShOU1RleHRDaGVja2luZ1Jlc3VsdCAqYWNjZXB0ZWRDYW5kaWRhdGUpKWNvbXBsZXRp
b25CbG9jaworeworICAgIFtzZWxmLmNhbmRpZGF0ZUxpc3Qgc2V0Q2FuZGlkYXRlczpjYW5kaWRh
dGVzIGZvclNlbGVjdGVkUmFuZ2U6cmFuZ2UgaW5TdHJpbmc6c3RyaW5nXTsKK30KKworLSAoQk9P
TClzaG91bGRSZXF1ZXN0Q2FuZGlkYXRlcworeworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3Jl
KFtzZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAg
ICAgIHJldHVybiBOTzsKKworICAgIHJldHVybiAhY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpICYmIHNlbGYuY2FuZGlkYXRlTGlzdC5jYW5kaWRh
dGVMaXN0VmlzaWJsZTsKK30KKworLSAodm9pZClmb3JjZVJlcXVlc3RDYW5kaWRhdGVzRm9yVGVz
dGluZworeworICAgIF9wcml2YXRlLT5fY2FuQ3JlYXRlVG91Y2hCYXJzID0gWUVTOworICAgIFtz
ZWxmIHVwZGF0ZVRvdWNoQmFyXTsKK30KKworI2Vsc2UKKworLSAodm9pZClzaG93Q2FuZGlkYXRl
czooTlNBcnJheSAqKWNhbmRpZGF0ZXMgZm9yU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBpblJl
Y3Q6KE5TUmVjdClyZWN0T2ZUeXBlZFN0cmluZyBmb3JTZWxlY3RlZFJhbmdlOihOU1JhbmdlKXJh
bmdlIHZpZXc6KE5TVmlldyAqKXZpZXcgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TVGV4
dENoZWNraW5nUmVzdWx0ICphY2NlcHRlZENhbmRpZGF0ZSkpY29tcGxldGlvbkJsb2NrCit7Cit9
CisKKy0gKHZvaWQpZm9yY2VSZXF1ZXN0Q2FuZGlkYXRlc0ZvclRlc3RpbmcKK3sKK30KKworLSAo
Qk9PTClzaG91bGRSZXF1ZXN0Q2FuZGlkYXRlcworeworICAgIHJldHVybiBOTzsKK30KKworI2Vu
ZGlmIC8vIEhBVkUoVE9VQ0hfQkFSKQorCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBfV2ViU2Fm
ZUZvcndhcmRlcgpAQCAtNDgwNCw2ICs1MTMyLDExIEBAIC0gKE5TTWV0aG9kU2lnbmF0dXJlICop
bWV0aG9kU2lnbmF0dXJlRm8KIEBlbmQKICNlbmRpZgogCisjaWYgSEFWRShUT1VDSF9CQVIpCitA
aW50ZXJmYWNlIFdlYlZpZXcgKCkgPE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbURlbGVnYXRl
LCBOU1RvdWNoQmFyRGVsZWdhdGUsIE5TVG91Y2hCYXJQcm92aWRlcj4KK0BlbmQKKyNlbmRpZgor
CiBAaW1wbGVtZW50YXRpb24gV2ViVmlldwogCiArICh2b2lkKWluaXRpYWxpemUKQEAgLTY0ODgs
NiArNjgyMSw4NyBAQCAtIChOU1ZpZXcgKilwcmV2aW91c1ZhbGlkS2V5VmlldwogICAgIHJldHVy
biBbcHJldmlvdXNWaWV3IHByZXZpb3VzVmFsaWRLZXlWaWV3XTsKIH0KIAorI2lmIEhBVkUoVE9V
Q0hfQkFSKQorCitAZHluYW1pYyB0b3VjaEJhcjsKKworLSAoTlNUb3VjaEJhciAqKW1ha2VUb3Vj
aEJhcgoreworICAgIGlmICghX3ByaXZhdGUtPl9jYW5DcmVhdGVUb3VjaEJhcnMpIHsKKyAgICAg
ICAgX3ByaXZhdGUtPl9jYW5DcmVhdGVUb3VjaEJhcnMgPSBZRVM7CisgICAgICAgIFtzZWxmIHVw
ZGF0ZVRvdWNoQmFyXTsKKyAgICB9CisgICAgcmV0dXJuIF9wcml2YXRlLT5fY3VycmVudFRvdWNo
QmFyLmdldCgpOworfQorCistIChOU1RvdWNoQmFySXRlbSAqKXRvdWNoQmFyOihOU1RvdWNoQmFy
ICopdG91Y2hCYXIgbWFrZUl0ZW1Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIK
K3sKKyAgICBpZiAodG91Y2hCYXIgPT0gX3ByaXZhdGUtPl9yaWNoVGV4dFRvdWNoQmFyIHx8IHRv
dWNoQmFyID09IF9wcml2YXRlLT5fcGxhaW5UZXh0VG91Y2hCYXIpCisgICAgICAgIHJldHVybiBb
X3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBpdGVtRm9ySWRlbnRpZmllcjpp
ZGVudGlmaWVyXTsKKworICAgIHJldHVybiBuaWw7Cit9CisKK3N0YXRpYyBUZXh0Q2hlY2tpbmdS
ZXN1bHQgdGV4dENoZWNraW5nUmVzdWx0RnJvbU5TVGV4dENoZWNraW5nUmVzdWx0KE5TVGV4dENo
ZWNraW5nUmVzdWx0ICpuc1Jlc3VsdCkKK3sKKyAgICBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1
bHQgcmVzdWx0OworCisgICAgc3dpdGNoIChbbnNSZXN1bHQgcmVzdWx0VHlwZV0pIHsKKyAgICBj
YXNlIE5TVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nOgorICAgICAgICByZXN1bHQudHlwZSA9IFdl
YkNvcmU6OlRleHRDaGVja2luZ1R5cGVTcGVsbGluZzsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBOU1RleHRDaGVja2luZ1R5cGVSZXBsYWNlbWVudDoKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBX
ZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlUmVwbGFjZW1lbnQ7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgTlNUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbjoKKyAgICAgICAgcmVzdWx0LnR5cGUg
PSBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdU
eXBlTm9uZTsKKyAgICB9CisKKyAgICBOU1JhbmdlIHJlc3VsdFJhbmdlID0gbnNSZXN1bHQucmFu
Z2U7CisgICAgcmVzdWx0LmxvY2F0aW9uID0gcmVzdWx0UmFuZ2UubG9jYXRpb247CisgICAgcmVz
dWx0Lmxlbmd0aCA9IHJlc3VsdFJhbmdlLmxlbmd0aDsKKyAgICByZXN1bHQucmVwbGFjZW1lbnQg
PSBuc1Jlc3VsdC5yZXBsYWNlbWVudFN0cmluZzsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
Ky0gKHZvaWQpY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTooTlNDYW5kaWRhdGVMaXN0VG91Y2hC
YXJJdGVtICopYW5JdGVtIGVuZFNlbGVjdGluZ0NhbmRpZGF0ZUF0SW5kZXg6KE5TSW50ZWdlcilp
bmRleAoreworICAgIGlmIChpbmRleCA9PSBOU05vdEZvdW5kKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoYW5JdGVtICE9IHNlbGYuY2FuZGlkYXRlTGlzdCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgTlNBcnJheSAqY2FuZGlkYXRlcyA9IGFuSXRlbS5jYW5kaWRhdGVzOworICAgIGlmICgo
TlNVSW50ZWdlcilpbmRleCA+PSBjYW5kaWRhdGVzLmNvdW50KQorICAgICAgICByZXR1cm47CisK
KyAgICBpZCBjYW5kaWRhdGUgPSBjYW5kaWRhdGVzW2luZGV4XTsKKyAgICBBU1NFUlQoW2NhbmRp
ZGF0ZSBpc0tpbmRPZkNsYXNzOltOU1RleHRDaGVja2luZ1Jlc3VsdCBjbGFzc11dKTsKKworICAg
IGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShzZWxmLl9zZWxlY3RlZE9yTWFpbkZyYW1lKSkK
KyAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+aGFuZGxlQWNjZXB0ZWRDYW5k
aWRhdGVXaXRoU29mdFNwYWNlcyh0ZXh0Q2hlY2tpbmdSZXN1bHRGcm9tTlNUZXh0Q2hlY2tpbmdS
ZXN1bHQoKE5TVGV4dENoZWNraW5nUmVzdWx0ICopY2FuZGlkYXRlKSk7Cit9CisKKy0gKHZvaWQp
Y2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTooTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtICop
YW5JdGVtIGNoYW5nZWRDYW5kaWRhdGVMaXN0VmlzaWJpbGl0eTooQk9PTClpc1Zpc2libGUKK3sK
KyAgICBpZiAoYW5JdGVtICE9IHNlbGYuY2FuZGlkYXRlTGlzdCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKGlzVmlzaWJsZSkgeworICAgICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNv
cmUoW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVdKSkKKyAgICAgICAgICAgIGNvcmVGcmFtZS0+
ZWRpdG9yKCkuY2xpZW50KCktPnJlcXVlc3RDYW5kaWRhdGVzRm9yU2VsZWN0aW9uKGNvcmVGcmFt
ZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIH0KKworICAgIFtzZWxmIHVwZGF0ZVRv
dWNoQmFyXTsKK30KKworI2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFSKQorCiBAZW5kCiAKIEBpbXBs
ZW1lbnRhdGlvbiBXZWJWaWV3IChXZWJJQkFjdGlvbnMpCkBAIC02NzQ2LDQ4ICs3MTYwLDYgQEAg
LSAoQk9PTCl2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtOihpZCA8TgogCiBAZW5kCiAKLSNpZiBQ
TEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAw
ICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0jaW1wb3J0IDxXZWJLaXRBZGRpdGlvbnMvV2Vi
Vmlld0FkZGl0aW9ucy5tbT4KLSNlbHNlCi1AaW1wbGVtZW50YXRpb24gV2ViVmlldyAoV2ViVXBk
YXRlV2ViVmlld0FkZGl0aW9ucykKLQotLSAodm9pZCl1cGRhdGVXZWJWaWV3QWRkaXRpb25zCi17
Ci19Ci0KLS0gKHZvaWQpcHJlcGFyZUZvck1vdXNlRG93bgotewotfQotCi0tICh2b2lkKXByZXBh
cmVGb3JNb3VzZVVwCi17Ci19Ci0KLS0gKHZvaWQpc2hvd0NhbmRpZGF0ZXM6KE5TQXJyYXkgKilj
YW5kaWRhdGVzIGZvclN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgaW5SZWN0OihOU1JlY3QpcmVj
dE9mVHlwZWRTdHJpbmcgZm9yU2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlyYW5nZSB2aWV3OihOU1Zp
ZXcgKil2aWV3IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU1RleHRDaGVja2luZ1Jlc3Vs
dCAqYWNjZXB0ZWRDYW5kaWRhdGUpKWNvbXBsZXRpb25CbG9jawotewotfQotCi0tICh2b2lkKWZv
cmNlUmVxdWVzdENhbmRpZGF0ZXNGb3JUZXN0aW5nCi17Ci19Ci0KLS0gKEJPT0wpc2hvdWxkUmVx
dWVzdENhbmRpZGF0ZXMKLXsKLSAgICByZXR1cm4gTk87Ci19Ci0KLS0gKHZvaWQpd2ViVmlld0Fk
ZGl0aW9uc1dpbGxEZXN0cm95VmlldwotewotfQotCi0tIChpZCljYW5kaWRhdGVMaXN0Ci17Ci0g
ICAgcmV0dXJuIG5pbDsKLX0KLQotQGVuZAotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykgJiYgX19N
QUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAgJiYgVVNFKEFQUExFX0lOVEVS
TkFMX1NESykKLQogQGltcGxlbWVudGF0aW9uIFdlYlZpZXcgKFdlYlBlbmRpbmdQdWJsaWMpCiAK
IC0gKHZvaWQpc2NoZWR1bGVJblJ1bkxvb3A6KE5TUnVuTG9vcCAqKXJ1bkxvb3AgZm9yTW9kZToo
TlNTdHJpbmcgKiltb2RlCkBAIC04NjU2LDcgKzkwMjgsNyBAQCAtICh2b2lkKV9zZXRVcFBsYXli
YWNrQ29udHJvbHNNYW5hZ2VyRm9yCiAgICAgaWYgKCFfcHJpdmF0ZS0+cGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlKQogICAgICAgICBfcHJpdmF0ZS0+cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlID0g
V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpjcmVhdGUoKl9wcml2YXRlLT5wbGF5YmFj
a1Nlc3Npb25Nb2RlbCk7CiAKLSAgICBbc2VsZiB1cGRhdGVXZWJWaWV3QWRkaXRpb25zXTsKKyAg
ICBbc2VsZiB1cGRhdGVUb3VjaEJhcl07CiB9CiAKIC0gKHZvaWQpX2NsZWFyUGxheWJhY2tDb250
cm9sc01hbmFnZXIKQEAgLTg2NjksNyArOTA0MSw3IEBAIC0gKHZvaWQpX2NsZWFyUGxheWJhY2tD
b250cm9sc01hbmFnZXIKIAogICAgIF9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCA9IG51
bGxwdHI7CiAgICAgX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSA9IG51bGxwdHI7
Ci0gICAgW3NlbGYgdXBkYXRlV2ViVmlld0FkZGl0aW9uc107CisgICAgW3NlbGYgdXBkYXRlVG91
Y2hCYXJdOwogfQogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNF
TlRBVElPTl9NT0RFKQogI2VuZGlmIC8vIEVOQUJMRShWSURFTykKQEAgLTg4OTgsNiArOTI3MCwz
NDIgQEAgLSAodm9pZClfc2V0TW9ja01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZQogfQogI2VuZGlm
CiAKKyNpZiBIQVZFKFRPVUNIX0JBUikKKy0gKHZvaWQpX2Rpc21pc3NUZXh0VG91Y2hCYXJQb3Bv
dmVySXRlbVdpdGhJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIKK3sKKyAgICBOU1Rv
dWNoQmFySXRlbSAqZm91bmRJdGVtID0gbmlsOworICAgIGZvciAoTlNUb3VjaEJhckl0ZW0gKml0
ZW0gaW4gc2VsZi50ZXh0VG91Y2hCYXIuaXRlbXMpIHsKKyAgICAgICAgaWYgKFtpdGVtLmlkZW50
aWZpZXIgaXNFcXVhbFRvU3RyaW5nOmlkZW50aWZpZXJdKSB7CisgICAgICAgICAgICBmb3VuZEl0
ZW0gPSBpdGVtOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
W2l0ZW0uaWRlbnRpZmllciBpc0VxdWFsVG9TdHJpbmc6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVy
VGV4dEZvcm1hdF0pIHsKKyAgICAgICAgICAgIGZvciAoTlNUb3VjaEJhckl0ZW0gKmNoaWxkSXRl
bSBpbiBbKE5TR3JvdXBUb3VjaEJhckl0ZW0gKilpdGVtIGdyb3VwVG91Y2hCYXJdLml0ZW1zKSB7
CisgICAgICAgICAgICAgICAgaWYgKFtjaGlsZEl0ZW0uaWRlbnRpZmllciBpc0VxdWFsVG9TdHJp
bmc6aWRlbnRpZmllcl0pIHsKKyAgICAgICAgICAgICAgICAgICAgZm91bmRJdGVtID0gY2hpbGRJ
dGVtOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChbZm91bmRJdGVtIGlzS2luZE9mQ2xhc3M6W05TUG9wb3ZlclRvdWNoQmFySXRlbSBjbGFzc11d
KQorICAgICAgICBbKE5TUG9wb3ZlclRvdWNoQmFySXRlbSAqKWZvdW5kSXRlbSBkaXNtaXNzUG9w
b3ZlcjpuaWxdOworfQorCistIChOU0FycmF5PE5TU3RyaW5nICo+ICopX3RleHRUb3VjaEJhckN1
c3RvbWl6YXRpb25BbGxvd2VkSWRlbnRpZmllcnMKK3sKKyAgICByZXR1cm4gQFsgTlNUb3VjaEJh
ckl0ZW1JZGVudGlmaWVyQ2hhcmFjdGVyUGlja2VyLCBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJU
ZXh0Q29sb3JQaWNrZXIsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRTdHlsZSwgTlNUb3Vj
aEJhckl0ZW1JZGVudGlmaWVyVGV4dEFsaWdubWVudCwgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVy
VGV4dExpc3QsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckZsZXhpYmxlU3BhY2UgXTsKK30KKwor
LSAoTlNBcnJheTxOU1N0cmluZyAqPiAqKV9wbGFpblRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25E
ZWZhdWx0SXRlbUlkZW50aWZpZXJzCit7CisgICAgcmV0dXJuIEBbIE5TVG91Y2hCYXJJdGVtSWRl
bnRpZmllckNoYXJhY3RlclBpY2tlciwgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyQ2FuZGlkYXRl
TGlzdCBdOworfQorCistIChOU0FycmF5PE5TU3RyaW5nICo+ICopX3JpY2hUZXh0VG91Y2hCYXJD
dXN0b21pemF0aW9uRGVmYXVsdEl0ZW1JZGVudGlmaWVycworeworICAgIHJldHVybiBAWyBOU1Rv
dWNoQmFySXRlbUlkZW50aWZpZXJDaGFyYWN0ZXJQaWNrZXIsIE5TVG91Y2hCYXJJdGVtSWRlbnRp
ZmllclRleHRGb3JtYXQsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckNhbmRpZGF0ZUxpc3QgXTsK
K30KKworLSAodm9pZCl0b3VjaEJhckRpZEV4aXRDdXN0b21pemF0aW9uOihOU05vdGlmaWNhdGlv
biAqKW5vdGlmaWNhdGlvbgoreworICAgIF9wcml2YXRlLT5faXNDdXN0b21pemluZ1RvdWNoQmFy
ID0gTk87CisgICAgW3NlbGYgdXBkYXRlVG91Y2hCYXJdOworfQorCistICh2b2lkKXRvdWNoQmFy
V2lsbEVudGVyQ3VzdG9taXphdGlvbjooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sK
KyAgICBfcHJpdmF0ZS0+X2lzQ3VzdG9taXppbmdUb3VjaEJhciA9IFlFUzsKK30KKworLSAodm9p
ZClkaWRDaGFuZ2VBdXRvbWF0aWNUZXh0Q29tcGxldGlvbjooTlNOb3RpZmljYXRpb24gKilub3Rp
ZmljYXRpb24KK3sKKyAgICBpZiAoX3ByaXZhdGUtPl9yaWNoVGV4dFRvdWNoQmFyKQorICAgICAg
ICBbc2VsZiBzZXRVcFRleHRUb3VjaEJhcjpfcHJpdmF0ZS0+X3JpY2hUZXh0VG91Y2hCYXIuZ2V0
KCldOworCisgICAgaWYgKF9wcml2YXRlLT5fcGxhaW5UZXh0VG91Y2hCYXIpCisgICAgICAgIFtz
ZWxmIHNldFVwVGV4dFRvdWNoQmFyOl9wcml2YXRlLT5fcGxhaW5UZXh0VG91Y2hCYXIuZ2V0KCld
OworCisgICAgW3NlbGYgdXBkYXRlVG91Y2hCYXJdOworfQorCistICh2b2lkKXNldFVwVGV4dFRv
dWNoQmFyOihOU1RvdWNoQmFyICopdGV4dFRvdWNoQmFyCit7CisgICAgQk9PTCBpc1JpY2hUZXh0
VG91Y2hCYXIgPSB0ZXh0VG91Y2hCYXIgPT0gX3ByaXZhdGUtPl9yaWNoVGV4dFRvdWNoQmFyOwor
ICAgIFt0ZXh0VG91Y2hCYXIgc2V0RGVsZWdhdGU6c2VsZl07CisgICAgW3RleHRUb3VjaEJhciBz
ZXREZWZhdWx0SXRlbXM6W05TTXV0YWJsZVNldCBzZXRXaXRoT2JqZWN0czppc1JpY2hUZXh0VG91
Y2hCYXIgPyBfcHJpdmF0ZS0+X3JpY2hUZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbS5nZXQo
KSA6IF9wcml2YXRlLT5fcGxhaW5UZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbS5nZXQoKSwg
bmlsXV07CisgICAgW3RleHRUb3VjaEJhciBzZXRDdXN0b21pemF0aW9uQWxsb3dlZEl0ZW1JZGVu
dGlmaWVyczpbc2VsZiBfdGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkFsbG93ZWRJZGVudGlmaWVy
c11dOworCisgICAgTlNBcnJheTxOU1N0cmluZyAqPiAqZGVmYXVsdElkZW50aWZpZXJzID0gaXNS
aWNoVGV4dFRvdWNoQmFyID8gW3NlbGYgX3JpY2hUZXh0VG91Y2hCYXJDdXN0b21pemF0aW9uRGVm
YXVsdEl0ZW1JZGVudGlmaWVyc10gOiBbc2VsZiBfcGxhaW5UZXh0VG91Y2hCYXJDdXN0b21pemF0
aW9uRGVmYXVsdEl0ZW1JZGVudGlmaWVyc107CisgICAgW3RleHRUb3VjaEJhciBzZXRDdXN0b21p
emF0aW9uRGVmYXVsdEl0ZW1JZGVudGlmaWVyczpkZWZhdWx0SWRlbnRpZmllcnNdOworCisgICAg
aWYgKE5TR3JvdXBUb3VjaEJhckl0ZW0gKnRleHRGb3JtYXRJdGVtID0gKE5TR3JvdXBUb3VjaEJh
ckl0ZW0gKilbdGV4dFRvdWNoQmFyIGl0ZW1Gb3JJZGVudGlmaWVyOk5TVG91Y2hCYXJJdGVtSWRl
bnRpZmllclRleHRGb3JtYXRdKQorICAgICAgICB0ZXh0Rm9ybWF0SXRlbS5ncm91cFRvdWNoQmFy
LmN1c3RvbWl6YXRpb25JZGVudGlmaWVyID0gQCJXZWJUZXh0Rm9ybWF0VG91Y2hCYXIiOworfQor
CistIChCT09MKV9pc1JpY2hseUVkaXRhYmxlCit7CisgICAgTlNWaWV3ICpkb2N1bWVudFZpZXcg
PSBzZWxmLl9zZWxlY3RlZE9yTWFpbkZyYW1lLmZyYW1lVmlldy5kb2N1bWVudFZpZXc7CisgICAg
aWYgKCFbZG9jdW1lbnRWaWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pCisg
ICAgICAgIHJldHVybiBOTzsKKworICAgIFdlYkhUTUxWaWV3ICp3ZWJIVE1MVmlldyA9IChXZWJI
VE1MVmlldyAqKWRvY3VtZW50VmlldzsKKyAgICByZXR1cm4gd2ViSFRNTFZpZXcuX2lzRWRpdGFi
bGUgJiYgd2ViSFRNTFZpZXcuX2NhbkVkaXRSaWNobHk7Cit9CisKKy0gKE5TVG91Y2hCYXIgKil0
ZXh0VG91Y2hCYXIKK3sKKyAgICBpZiAoc2VsZi5faXNSaWNobHlFZGl0YWJsZSkKKyAgICAgICAg
cmV0dXJuIF9wcml2YXRlLT5fcmljaFRleHRUb3VjaEJhci5nZXQoKTsKKworICAgIHJldHVybiBf
cHJpdmF0ZS0+X3BsYWluVGV4dFRvdWNoQmFyLmdldCgpOworfQorCistICh2b2lkKXVwZGF0ZVRl
eHRUb3VjaEJhcgoreworICAgIGlmIChfcHJpdmF0ZS0+X2lzRGVmZXJyaW5nVGV4dFRvdWNoQmFy
VXBkYXRlcykgeworICAgICAgICBfcHJpdmF0ZS0+X25lZWRzRGVmZXJyZWRUZXh0VG91Y2hCYXJV
cGRhdGUgPSBZRVM7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBOU1ZpZXcgKmRvY3Vt
ZW50VmlldyA9IFtbW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVdIGZyYW1lVmlld10gZG9jdW1l
bnRWaWV3XTsKKyAgICBpZiAoIVtkb2N1bWVudFZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZp
ZXcgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFdlYkhUTUxWaWV3ICp3ZWJI
VE1MVmlldyA9IChXZWJIVE1MVmlldyAqKWRvY3VtZW50VmlldzsKKyAgICBpZiAoIVt3ZWJIVE1M
VmlldyBfaXNFZGl0YWJsZV0pCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lKiBjb3JlRnJh
bWUgPSBjb3JlKFtzZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJh
bWUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChfcHJpdmF0ZS0+X2lzVXBkYXRpbmdUZXh0
VG91Y2hCYXIpCisgICAgICAgIHJldHVybjsKKworICAgIFRlbXBvcmFyeUNoYW5nZTxCT09MPiBp
c1VwZGF0aW5nVGV4dFRvdWNoQmFyKF9wcml2YXRlLT5faXNVcGRhdGluZ1RleHRUb3VjaEJhciwg
WUVTKTsKKworICAgIGlmICghX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlcikK
KyAgICAgICAgX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciA9IGFkb3B0TlMo
W1tXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OnNl
bGZdKTsKKworICAgIGlmICghX3ByaXZhdGUtPl9zdGFydGVkTGlzdGVuaW5nVG9DdXN0b21pemF0
aW9uRXZlbnRzKSB7CisgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRl
cl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IodG91Y2hCYXJEaWRFeGl0Q3Vz
dG9taXphdGlvbjopIG5hbWU6TlNUb3VjaEJhckRpZEV4aXRDdXN0b21pemF0aW9uIG9iamVjdDpu
aWxdOworICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9i
c2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHRvdWNoQmFyV2lsbEVudGVyQ3VzdG9taXph
dGlvbjopIG5hbWU6TlNUb3VjaEJhcldpbGxFbnRlckN1c3RvbWl6YXRpb24gb2JqZWN0Om5pbF07
CisgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2
ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoZGlkQ2hhbmdlQXV0b21hdGljVGV4dENvbXBsZXRp
b246KSBuYW1lOk5TU3BlbGxDaGVja2VyRGlkQ2hhbmdlQXV0b21hdGljVGV4dENvbXBsZXRpb25O
b3RpZmljYXRpb24gb2JqZWN0Om5pbF07CisgICAgICAgIF9wcml2YXRlLT5fc3RhcnRlZExpc3Rl
bmluZ1RvQ3VzdG9taXphdGlvbkV2ZW50cyA9IFlFUzsKKyAgICB9CisKKyAgICBpZiAoIV9wcml2
YXRlLT5fcGxhaW5UZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSB8fCAhX3ByaXZhdGUtPl9y
aWNoVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0pIHsKKyAgICAgICAgX3ByaXZhdGUtPl9w
bGFpblRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtID0gYWRvcHROUyhbW05TQ2FuZGlkYXRl
TGlzdFRvdWNoQmFySXRlbSBhbGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOk5TVG91Y2hCYXJJdGVt
SWRlbnRpZmllckNhbmRpZGF0ZUxpc3RdKTsKKyAgICAgICAgW19wcml2YXRlLT5fcGxhaW5UZXh0
Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICAgICAgX3By
aXZhdGUtPl9yaWNoVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gPSBhZG9wdE5TKFtbTlND
YW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6TlNUb3Vj
aEJhckl0ZW1JZGVudGlmaWVyQ2FuZGlkYXRlTGlzdF0pOworICAgICAgICBbX3ByaXZhdGUtPl9y
aWNoVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gc2V0RGVsZWdhdGU6c2VsZl07CisgICAg
ICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPnJlcXVlc3RDYW5kaWRhdGVzRm9yU2Vs
ZWN0aW9uKGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIH0KKworICAg
IGlmICghX3ByaXZhdGUtPl9yaWNoVGV4dFRvdWNoQmFyKSB7CisgICAgICAgIF9wcml2YXRlLT5f
cmljaFRleHRUb3VjaEJhciA9IGFkb3B0TlMoW1tOU1RvdWNoQmFyIGFsbG9jXSBpbml0XSk7Cisg
ICAgICAgIFtzZWxmIHNldFVwVGV4dFRvdWNoQmFyOl9wcml2YXRlLT5fcmljaFRleHRUb3VjaEJh
ci5nZXQoKV07CisgICAgICAgIFtfcHJpdmF0ZS0+X3JpY2hUZXh0VG91Y2hCYXIgc2V0Q3VzdG9t
aXphdGlvbklkZW50aWZpZXI6QCJXZWJSaWNoVGV4dFRvdWNoQmFyIl07CisgICAgfQorCisgICAg
aWYgKCFfcHJpdmF0ZS0+X3BsYWluVGV4dFRvdWNoQmFyKSB7CisgICAgICAgIF9wcml2YXRlLT5f
cGxhaW5UZXh0VG91Y2hCYXIgPSBhZG9wdE5TKFtbTlNUb3VjaEJhciBhbGxvY10gaW5pdF0pOwor
ICAgICAgICBbc2VsZiBzZXRVcFRleHRUb3VjaEJhcjpfcHJpdmF0ZS0+X3BsYWluVGV4dFRvdWNo
QmFyLmdldCgpXTsKKyAgICAgICAgW19wcml2YXRlLT5fcGxhaW5UZXh0VG91Y2hCYXIgc2V0Q3Vz
dG9taXphdGlvbklkZW50aWZpZXI6QCJXZWJQbGFpblRleHRUb3VjaEJhciJdOworICAgIH0KKwor
ICAgIGlmIChbTlNTcGVsbENoZWNrZXIgaXNBdXRvbWF0aWNUZXh0Q29tcGxldGlvbkVuYWJsZWRd
ICYmICFfcHJpdmF0ZS0+X2lzQ3VzdG9taXppbmdUb3VjaEJhcikgeworICAgICAgICBCT09MIHNo
b3VsZFNob3dDYW5kaWRhdGVMaXN0ID0gIWNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuaXNSYW5nZSgpIHx8IGNvcmVGcmFtZS0+ZWRpdG9yKCkuaWdub3JlQ29tcG9zaXRpb25TZWxl
Y3Rpb25DaGFuZ2UoKTsKKyAgICAgICAgW3NlbGYuY2FuZGlkYXRlTGlzdCB1cGRhdGVXaXRoSW5z
ZXJ0aW9uUG9pbnRWaXNpYmlsaXR5OnNob3VsZFNob3dDYW5kaWRhdGVMaXN0XTsKKyAgICB9CisK
KyAgICBpZiAoY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRG
aWVsZCgpKSB7CisgICAgICAgIC8vIFdlIGRvbid0IHJlcXVlc3QgY2FuZGlkYXRlcyBmb3IgcGFz
c3dvcmQgZmllbGRzLiBJZiB0aGUgdXNlciB3YXMgcHJldmlvdXNseSBpbiBhIG5vbi1wYXNzd29y
ZCBmaWVsZCwgdGhlbiB0aGUKKyAgICAgICAgLy8gb2xkIGNhbmRpZGF0ZXMgd2lsbCBzdGlsbCBz
aG93IGJ5IGRlZmF1bHQsIHNvIHdlIGNsZWFyIHRoZW0gaGVyZSBieSBzZXR0aW5nIGFuIGVtcHR5
IGFycmF5IG9mIGNhbmRpZGF0ZXMuCisgICAgICAgIGlmICghX3ByaXZhdGUtPl9lbXB0eUNhbmRp
ZGF0ZXNBcnJheSkKKyAgICAgICAgICAgIF9wcml2YXRlLT5fZW1wdHlDYW5kaWRhdGVzQXJyYXkg
PSBhZG9wdE5TKFtbTlNBcnJheSBhbGxvY10gaW5pdF0pOworICAgICAgICBbc2VsZi5jYW5kaWRh
dGVMaXN0IHNldENhbmRpZGF0ZXM6X3ByaXZhdGUtPl9lbXB0eUNhbmRpZGF0ZXNBcnJheS5nZXQo
KSBmb3JTZWxlY3RlZFJhbmdlOk5TTWFrZVJhbmdlKDAsIDApIGluU3RyaW5nOm5pbF07CisgICAg
fQorCisgICAgTlNUb3VjaEJhciAqdGV4dFRvdWNoQmFyID0gc2VsZi50ZXh0VG91Y2hCYXI7Cisg
ICAgTlNBcnJheTxOU1N0cmluZyAqPiAqaXRlbUlkZW50aWZpZXJzID0gdGV4dFRvdWNoQmFyLml0
ZW1JZGVudGlmaWVyczsKKyAgICBCT09MIGlzU2hvd2luZ0NvbWJpbmVkVGV4dEZvcm1hdEl0ZW0g
PSBbaXRlbUlkZW50aWZpZXJzIGNvbnRhaW5zT2JqZWN0Ok5TVG91Y2hCYXJJdGVtSWRlbnRpZmll
clRleHRGb3JtYXRdOworICAgIFt0ZXh0VG91Y2hCYXIgc2V0UHJpbmNpcGFsSXRlbUlkZW50aWZp
ZXI6aXNTaG93aW5nQ29tYmluZWRUZXh0Rm9ybWF0SXRlbSA/IE5TVG91Y2hCYXJJdGVtSWRlbnRp
ZmllclRleHRGb3JtYXQgOiBuaWxdOworCisgICAgLy8gU2V0IGN1cnJlbnQgdHlwaW5nIGF0dHJp
YnV0ZXMgZm9yIHJpY2ggdGV4dC4gVGhpcyB3aWxsIGVuc3VyZSB0aGF0IHRoZSBidXR0b25zIHJl
ZmxlY3QgdGhlIHN0YXRlIG9mCisgICAgLy8gdGhlIHRleHQgd2hlbiBjaGFuZ2luZyBzZWxlY3Rp
b24gdGhyb3VnaG91dCB0aGUgZG9jdW1lbnQuCisgICAgaWYgKHdlYkhUTUxWaWV3Ll9jYW5FZGl0
UmljaGx5KSB7CisgICAgICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGNv
cmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAgIGlmICghc2VsZWN0aW9u
LmlzTm9uZSgpKSB7CisgICAgICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmU7CisgICAgICAgICAg
ICBpZiAoYXV0byogc3R5bGUgPSBFZGl0b3I6OnN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoY29yZUZy
YW1lLCBub2RlVG9SZW1vdmUpKSB7CisgICAgICAgICAgICAgICAgW19wcml2YXRlLT5fdGV4dFRv
dWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzQm9sZDooc3R5bGUtPmZvbnRDYXNjYWRlKCku
d2VpZ2h0KCkgPj0gRm9udFdlaWdodEJvbGQpXTsKKyAgICAgICAgICAgICAgICBbX3ByaXZhdGUt
Pl90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRUZXh0SXNJdGFsaWM6KHN0eWxlLT5mb250
Q2FzY2FkZSgpLml0YWxpYygpID09IEZvbnRJdGFsaWNPbildOworCisgICAgICAgICAgICAgICAg
UmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBjb3JlRnJhbWUtPnNlbGVjdGlvbigp
LnR5cGluZ1N0eWxlKCk7CisgICAgICAgICAgICAgICAgaWYgKHR5cGluZ1N0eWxlICYmIHR5cGlu
Z1N0eWxlLT5zdHlsZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHR5
cGluZ1N0eWxlLT5zdHlsZSgpLT5nZXRQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5V2Via2l0VGV4
dERlY29yYXRpb25zSW5FZmZlY3QpOworICAgICAgICAgICAgICAgICAgICBbX3ByaXZhdGUtPl90
ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRUZXh0SXNVbmRlcmxpbmVkOnZhbHVlLmNvbnRh
aW5zKCJ1bmRlcmxpbmUiKV07CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIFtfcHJpdmF0ZS0+X3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFRleHRJc1Vu
ZGVybGluZWQ6KHN0eWxlLT50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpICYgVGV4dERlY29yYXRp
b25VbmRlcmxpbmUpXTsKKworICAgICAgICAgICAgICAgIGlmIChzdHlsZS0+dmlzaXRlZERlcGVu
ZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgW19wcml2YXRlLT5fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dENvbG9yOm5z
Q29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSldOwor
CisgICAgICAgICAgICAgICAgTlNUZXh0QWxpZ25tZW50IHRleHRBbGlnbm1lbnQ7CisgICAgICAg
ICAgICAgICAgc3dpdGNoIChzdHlsZS0+dGV4dEFsaWduKCkpIHsKKyAgICAgICAgICAgICAgICBj
YXNlIFJJR0hUOgorICAgICAgICAgICAgICAgIGNhc2UgV0VCS0lUX1JJR0hUOgorICAgICAgICAg
ICAgICAgICAgICB0ZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25tZW50UmlnaHQ7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTEVGVDoKKyAgICAgICAg
ICAgICAgICBjYXNlIFdFQktJVF9MRUZUOgorICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ25t
ZW50ID0gTlNUZXh0QWxpZ25tZW50TGVmdDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSBDRU5URVI6CisgICAgICAgICAgICAgICAgY2FzZSBXRUJLSVRf
Q0VOVEVSOgorICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25t
ZW50Q2VudGVyOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlIEpVU1RJRlk6CisgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbm1lbnQgPSBOU1RleHRB
bGlnbm1lbnRKdXN0aWZpZWQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgVEFTVEFSVDoKKyAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWdubWVudCA9
IHN0eWxlLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBOU1RleHRBbGlnbm1lbnRMZWZ0IDog
TlNUZXh0QWxpZ25tZW50UmlnaHQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgVEFFTkQ6CisgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbm1lbnQg
PSBzdHlsZS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gTlNUZXh0QWxpZ25tZW50UmlnaHQg
OiBOU1RleHRBbGlnbm1lbnRMZWZ0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgW19wcml2YXRlLT5fdGV4dFRvdWNoQmFySXRl
bUNvbnRyb2xsZXIgc2V0Q3VycmVudFRleHRBbGlnbm1lbnQ6dGV4dEFsaWdubWVudF07CisKKyAg
ICAgICAgICAgICAgICBIVE1MRWxlbWVudCogZW5jbG9zaW5nTGlzdEVsZW1lbnQgPSBlbmNsb3Np
bmdMaXN0KHNlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpOworICAgICAgICAgICAg
ICAgIGlmIChlbmNsb3NpbmdMaXN0RWxlbWVudCkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
aXM8SFRNTFVMaXN0RWxlbWVudD4oKmVuY2xvc2luZ0xpc3RFbGVtZW50KSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFtbX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciB3ZWJU
ZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXJdIHNldEN1cnJlbnRMaXN0VHlwZTpXZWJMaXN0
VHlwZTo6VW5vcmRlcmVkXTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXM8SFRNTE9M
aXN0RWxlbWVudD4oKmVuY2xvc2luZ0xpc3RFbGVtZW50KSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFtbX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciB3ZWJUZXh0TGlzdFRv
dWNoQmFyVmlld0NvbnRyb2xsZXJdIHNldEN1cnJlbnRMaXN0VHlwZTpXZWJMaXN0VHlwZTo6T3Jk
ZXJlZF07CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgICAgICBbW19wcml2YXRlLT5fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgd2ViVGV4
dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyXSBzZXRDdXJyZW50TGlzdFR5cGU6V2ViTGlzdFR5
cGU6Ok5vbmVdOworCisgICAgICAgICAgICAgICAgaWYgKG5vZGVUb1JlbW92ZSkKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZVRvUmVtb3ZlLT5yZW1vdmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBCT09MIGlzU2hvd2luZ0NhbmRpZGF0ZUxpc3RJdGVtID0gW2l0ZW1JZGVu
dGlmaWVycyBjb250YWluc09iamVjdDpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJDYW5kaWRhdGVM
aXN0XSAmJiBbTlNTcGVsbENoZWNrZXIgaXNBdXRvbWF0aWNUZXh0Q29tcGxldGlvbkVuYWJsZWRd
OworICAgICAgICBbX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRVc2Vz
TmFycm93VGV4dFN0eWxlSXRlbTppc1Nob3dpbmdDb21iaW5lZFRleHRGb3JtYXRJdGVtICYmIGlz
U2hvd2luZ0NhbmRpZGF0ZUxpc3RJdGVtXTsKKyAgICB9Cit9CisKKy0gKHZvaWQpdXBkYXRlTWVk
aWFUb3VjaEJhcgoreworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikK
KyAgICBpZiAoIV9wcml2YXRlLT5tZWRpYVRvdWNoQmFyUHJvdmlkZXIpCisgICAgICAgIF9wcml2
YXRlLT5tZWRpYVRvdWNoQmFyUHJvdmlkZXIgPSBhZG9wdE5TKFthbGxvY0FWRnVuY3Rpb25CYXJQ
bGF5YmFja0NvbnRyb2xzUHJvdmlkZXJJbnN0YW5jZSgpIGluaXRdKTsKKworICAgIGlmICghW19w
cml2YXRlLT5tZWRpYVRvdWNoQmFyUHJvdmlkZXIgcGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXJd
KSB7CisgICAgICAgIEFTU0VSVChfcHJpdmF0ZS0+cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKTsK
KyAgICAgICAgV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgKm1hbmFnZXIgPSBfcHJpdmF0ZS0+
cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOworICAg
ICAgICBbX3ByaXZhdGUtPm1lZGlhVG91Y2hCYXJQcm92aWRlciBzZXRQbGF5YmFja0NvbnRyb2xz
Q29udHJvbGxlcjooaWQgPEFWRnVuY3Rpb25CYXJQbGF5YmFja0NvbnRyb2xzQ29udHJvbGxpbmc+
KW1hbmFnZXJdOworICAgICAgICBbX3ByaXZhdGUtPm1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcg
c2V0UGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXI6KGlkIDxBVkZ1bmN0aW9uQmFyUGxheWJhY2tD
b250cm9sc0NvbnRyb2xsaW5nPiltYW5hZ2VyXTsKKyAgICB9CisjZW5kaWYKK30KKworLSAodm9p
ZCl1cGRhdGVUb3VjaEJhcgoreworICAgIGlmICghX3ByaXZhdGUtPl9jYW5DcmVhdGVUb3VjaEJh
cnMpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxm
IF9zZWxlY3RlZE9yTWFpbkZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJl
dHVybjsKKworICAgIE5TVG91Y2hCYXIgKnRvdWNoQmFyID0gbmlsOworICAgIE5TVmlldyAqZG9j
dW1lbnRWaWV3ID0gW1tbc2VsZiBfc2VsZWN0ZWRPck1haW5GcmFtZV0gZnJhbWVWaWV3XSBkb2N1
bWVudFZpZXddOworICAgIGlmIChbZG9jdW1lbnRWaWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxW
aWV3IGNsYXNzXV0pIHsKKyAgICAgICAgV2ViSFRNTFZpZXcgKndlYkhUTUxWaWV3ID0gKFdlYkhU
TUxWaWV3ICopZG9jdW1lbnRWaWV3OworICAgICAgICBpZiAoW3dlYkhUTUxWaWV3IF9pc0VkaXRh
YmxlXSkgeworICAgICAgICAgICAgW3NlbGYgdXBkYXRlVGV4dFRvdWNoQmFyXTsKKyAgICAgICAg
ICAgIHRvdWNoQmFyID0gW3NlbGYgdGV4dFRvdWNoQmFyXTsKKyAgICAgICAgfQorI2lmIEVOQUJM
RShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICAgICAgZWxzZSBpZiAoW3NlbGYg
X2hhc0FjdGl2ZVZpZGVvRm9yQ29udHJvbHNJbnRlcmZhY2VdKSB7CisgICAgICAgICAgICBbc2Vs
ZiB1cGRhdGVNZWRpYVRvdWNoQmFyXTsKKyAgICAgICAgICAgIHRvdWNoQmFyID0gW19wcml2YXRl
LT5tZWRpYVRvdWNoQmFyUHJvdmlkZXIgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih0b3Vj
aEJhcildID8gWyhpZClfcHJpdmF0ZS0+bWVkaWFUb3VjaEJhclByb3ZpZGVyIHRvdWNoQmFyXSA6
IFsoaWQpX3ByaXZhdGUtPm1lZGlhVG91Y2hCYXJQcm92aWRlciB0b3VjaEJhcl07CisgICAgICAg
IH0gZWxzZSBpZiAoW19wcml2YXRlLT5tZWRpYVRvdWNoQmFyUHJvdmlkZXIgcGxheWJhY2tDb250
cm9sc0NvbnRyb2xsZXJdKSB7CisgICAgICAgICAgICBbX3ByaXZhdGUtPm1lZGlhVG91Y2hCYXJQ
cm92aWRlciBzZXRQbGF5YmFja0NvbnRyb2xzQ29udHJvbGxlcjpuaWxdOworICAgICAgICAgICAg
W19wcml2YXRlLT5tZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3IHNldFBsYXliYWNrQ29udHJvbHND
b250cm9sbGVyOm5pbF07CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKworICAgIGlmICh0b3Vj
aEJhciA9PSBfcHJpdmF0ZS0+X2N1cnJlbnRUb3VjaEJhcikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgX3ByaXZhdGUtPl9jdXJyZW50VG91Y2hCYXIgPSB0b3VjaEJhcjsKKyAgICBbc2VsZiB3aWxs
Q2hhbmdlVmFsdWVGb3JLZXk6QCJ0b3VjaEJhciJdOworICAgIFtzZWxmIHNldFRvdWNoQmFyOl9w
cml2YXRlLT5fY3VycmVudFRvdWNoQmFyLmdldCgpXTsKKyAgICBbc2VsZiBkaWRDaGFuZ2VWYWx1
ZUZvcktleTpAInRvdWNoQmFyIl07Cit9CisKKy0gKHZvaWQpcHJlcGFyZUZvck1vdXNlRG93bgor
eworICAgIF9wcml2YXRlLT5fbmVlZHNEZWZlcnJlZFRleHRUb3VjaEJhclVwZGF0ZSA9IE5POwor
ICAgIF9wcml2YXRlLT5faXNEZWZlcnJpbmdUZXh0VG91Y2hCYXJVcGRhdGVzID0gWUVTOworfQor
CistICh2b2lkKXByZXBhcmVGb3JNb3VzZVVwCit7CisgICAgaWYgKCFfcHJpdmF0ZS0+X2lzRGVm
ZXJyaW5nVGV4dFRvdWNoQmFyVXBkYXRlcykKKyAgICAgICAgcmV0dXJuOworCisgICAgX3ByaXZh
dGUtPl9pc0RlZmVycmluZ1RleHRUb3VjaEJhclVwZGF0ZXMgPSBOTzsKKyAgICBpZiAoX3ByaXZh
dGUtPl9uZWVkc0RlZmVycmVkVGV4dFRvdWNoQmFyVXBkYXRlKSB7CisgICAgICAgIC8vIE9ubHkg
dHJpZ2dlciBhbm90aGVyIHVwZGF0ZSBpZiB3ZSBhdHRlbXB0ZWQgYW5kIGJhaWxlZCBmcm9tIGFu
IHVwZGF0ZSBkdXJpbmcgdGhlIGRlZmVycmFsLgorICAgICAgICBbc2VsZiB1cGRhdGVUb3VjaEJh
cl07CisgICAgfQorfQorCistICh2b2lkKXdlYlZpZXdBZGRpdGlvbnNXaWxsRGVzdHJveVZpZXcK
K3sKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2Vy
dmVyOnNlbGZdOworfQorCistIChOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gKiljYW5kaWRh
dGVMaXN0Cit7CisgICAgcmV0dXJuIHNlbGYuX2lzUmljaGx5RWRpdGFibGUgPyBfcHJpdmF0ZS0+
X3JpY2hUZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbS5nZXQoKSA6IF9wcml2YXRlLT5fcGxh
aW5UZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbS5nZXQoKTsKK30KKyNlbHNlCisKKy0gKHZv
aWQpdXBkYXRlVG91Y2hCYXIKK3sKK30KKworLSAodm9pZClwcmVwYXJlRm9yTW91c2VEb3duCit7
Cit9CisKKy0gKHZvaWQpcHJlcGFyZUZvck1vdXNlVXAKK3sKK30KKworLSAodm9pZCl3ZWJWaWV3
QWRkaXRpb25zV2lsbERlc3Ryb3lWaWV3Cit7Cit9CisKKy0gKGlkKWNhbmRpZGF0ZUxpc3QKK3sK
KyAgICByZXR1cm4gbmlsOworfQorCisjZW5kaWYKKwogQGVuZAogCiBAaW1wbGVtZW50YXRpb24g
V2ViVmlldyAoV2ViVmlld0RldmljZU9yaWVudGF0aW9uKQpJbmRleDogU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJWaWV3RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlld0RhdGEuaAkocmV2aXNpb24gMjA4NDA1KQorKysgU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsOCArMTAx
LDEwIEBAIGNsYXNzIFdlYlZpZXdHcm91cDsKIGNsYXNzIFdlYlNlbGVjdGlvblNlcnZpY2VDb250
cm9sbGVyOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lP
Tl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0jaW1w
b3J0IDxXZWJLaXRBZGRpdGlvbnMvV2ViVmlld0RhdGFBZGRpdGlvbnNEZWNsYXJhdGlvbnMuaD4K
KyNpZiBIQVZFKFRPVUNIX0JBUikKK0BjbGFzcyBXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxl
cjsKK0BjbGFzcyBBVkZ1bmN0aW9uQmFyUGxheWJhY2tDb250cm9sc1Byb3ZpZGVyOworQGNsYXNz
IEFWRnVuY3Rpb25CYXJTY3J1YmJlcjsKICNlbmRpZgogCiBjbGFzcyBXZWJWaWV3TGF5ZXJGbHVz
aFNjaGVkdWxlciA6IHB1YmxpYyBXZWJDb3JlOjpMYXllckZsdXNoU2NoZWR1bGVyIHsKQEAgLTE3
OCw5ICsxODAsMjQgQEAgQGludGVyZmFjZSBXZWJWaWV3UHJpdmF0ZSA6IE5TT2JqZWN0IHsKICNp
ZiBQTEFURk9STShNQUMpCiAgICAgV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlciAqaW1tZWRp
YXRlQWN0aW9uQ29udHJvbGxlcjsKIAotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPj0gMTAxMjAwICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0jaW1wb3J0IDxXZWJLaXRB
ZGRpdGlvbnMvV2ViVmlld0RhdGFBZGRpdGlvbnMuaD4KLSNlbmRpZgorI2lmIEhBVkUoVE9VQ0hf
QkFSKQorICAgIFJldGFpblB0cjxOU1RvdWNoQmFyPiBfY3VycmVudFRvdWNoQmFyOworICAgIFJl
dGFpblB0cjxOU1RvdWNoQmFyPiBfcGxhaW5UZXh0VG91Y2hCYXI7CisgICAgUmV0YWluUHRyPE5T
VG91Y2hCYXI+IF9yaWNoVGV4dFRvdWNoQmFyOworICAgIFJldGFpblB0cjxXZWJUZXh0VG91Y2hC
YXJJdGVtQ29udHJvbGxlcj4gX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyOworICAgIFJldGFp
blB0cjxOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0+IF9yaWNoVGV4dENhbmRpZGF0ZUxpc3RU
b3VjaEJhckl0ZW07CisgICAgUmV0YWluUHRyPE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbT4g
X3BsYWluVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW07CisgICAgUmV0YWluUHRyPE5TQXJy
YXk+IF9lbXB0eUNhbmRpZGF0ZXNBcnJheTsKKyAgICBSZXRhaW5QdHI8QVZGdW5jdGlvbkJhclBs
YXliYWNrQ29udHJvbHNQcm92aWRlcj4gbWVkaWFUb3VjaEJhclByb3ZpZGVyOworICAgIFJldGFp
blB0cjxBVkZ1bmN0aW9uQmFyU2NydWJiZXI+IG1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc7CisK
KyAgICBCT09MIF9jYW5DcmVhdGVUb3VjaEJhcnM7CisgICAgQk9PTCBfaXNVcGRhdGluZ1RleHRU
b3VjaEJhcjsKKyAgICBCT09MIF9zdGFydGVkTGlzdGVuaW5nVG9DdXN0b21pemF0aW9uRXZlbnRz
OworICAgIEJPT0wgX2lzQ3VzdG9taXppbmdUb3VjaEJhcjsKKyAgICBCT09MIF9pc0RlZmVycmlu
Z1RleHRUb3VjaEJhclVwZGF0ZXM7CisgICAgQk9PTCBfbmVlZHNEZWZlcnJlZFRleHRUb3VjaEJh
clVwZGF0ZTsKKyNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikKIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxXZWJDb3JlOjpUZXh0SW5kaWNhdG9yV2luZG93PiB0ZXh0SW5kaWNhdG9yV2luZG93OwogICAg
IEJPT0wgaGFzSW5pdGlhbGl6ZWRMb29rdXBPYnNlcnZlcjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaAkocmV2aXNpb24gMjA4NDA1KQorKysgU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpA
QCAtNzIsNiArNzIsNyBAQCBjbGFzcyBXZWJTZWxlY3Rpb25TZXJ2aWNlQ29udHJvbGxlcjsKIAog
I2VuZGlmCiAKK0BjbGFzcyBOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW07CiBAY2xhc3MgV2Vi
QmFzZVBsdWdpblBhY2thZ2U7CiBAY2xhc3MgV2ViRG93bmxvYWQ7CiBAY2xhc3MgV2ViSW1tZWRp
YXRlQWN0aW9uQ29udHJvbGxlcjsKQEAgLTI5MywxMiArMjk0LDExIEBAIEBpbnRlcmZhY2UgV2Vi
VmlldyAoV2ViVmlld090aGVySW50ZXJuYWwKIC0gKHZvaWQpX3NldE1vY2tNZWRpYVBsYXliYWNr
VGFyZ2V0UGlja2VyTmFtZTooTlNTdHJpbmcgKiluYW1lIHN0YXRlOihXZWJDb3JlOjpNZWRpYVBs
YXliYWNrVGFyZ2V0Q29udGV4dDo6U3RhdGUpc3RhdGU7CiAjZW5kaWYKIAotQGVuZAotCi1AaW50
ZXJmYWNlIFdlYlZpZXcgKFdlYlVwZGF0ZVdlYlZpZXdBZGRpdGlvbnMpCiAtICh2b2lkKXByZXBh
cmVGb3JNb3VzZVVwOwogLSAodm9pZClwcmVwYXJlRm9yTW91c2VEb3duOwotLSAodm9pZCl1cGRh
dGVXZWJWaWV3QWRkaXRpb25zOworLSAodm9pZCl1cGRhdGVUb3VjaEJhcjsKIC0gKHZvaWQpd2Vi
Vmlld0FkZGl0aW9uc1dpbGxEZXN0cm95VmlldzsKLS0gKGlkKWNhbmRpZGF0ZUxpc3Q7CistICh2
b2lkKV9kaXNtaXNzVGV4dFRvdWNoQmFyUG9wb3Zlckl0ZW1XaXRoSWRlbnRpZmllcjooTlNTdHJp
bmcgKilpZGVudGlmaWVyOworLSAoTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtICopY2FuZGlk
YXRlTGlzdDsKKwogQGVuZApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3
UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmll
d1ByaXZhdGUuaAkocmV2aXNpb24gMjA4NDA1KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04ODksNiArODg5LDEwIEBAIENv
dWxkIGJlIHdvcnRoIGFkZGluZyB0byB0aGUgQVBJLgogCiAtICh2b2lkKV9zZXRGb250RmFsbGJh
Y2tQcmVmZXJzUGljdG9ncmFwaHM6KEJPT0wpZmxhZzsKIAorLSAodm9pZClzaG93Q2FuZGlkYXRl
czooTlNBcnJheSAqKWNhbmRpZGF0ZXMgZm9yU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBpblJl
Y3Q6KE5TUmVjdClyZWN0T2ZUeXBlZFN0cmluZyBmb3JTZWxlY3RlZFJhbmdlOihOU1JhbmdlKXJh
bmdlIHZpZXc6KE5TVmlldyAqKXZpZXcgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TVGV4
dENoZWNraW5nUmVzdWx0ICphY2NlcHRlZENhbmRpZGF0ZSkpY29tcGxldGlvbkJsb2NrOworLSAo
dm9pZClmb3JjZVJlcXVlc3RDYW5kaWRhdGVzRm9yVGVzdGluZzsKKy0gKEJPT0wpc2hvdWxkUmVx
dWVzdENhbmRpZGF0ZXM7CisKIEBlbmQKIAogI2lmICFUQVJHRVRfT1NfSVBIT05FCkBAIC0xMDYx
LDEyICsxMDY1LDYgQEAgQGludGVyZmFjZSBOU09iamVjdCAoV2ViVmlld1Jlc291cmNlTG9hZAog
LSAoTlNDYWNoZWRVUkxSZXNwb25zZSAqKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgcmVzb3Vy
Y2U6KGlkKWlkZW50aWZpZXIgd2lsbENhY2hlUmVzcG9uc2U6KE5TQ2FjaGVkVVJMUmVzcG9uc2Ug
KilyZXNwb25zZSBmcm9tRGF0YVNvdXJjZTooV2ViRGF0YVNvdXJjZSAqKWRhdGFTb3VyY2U7CiBA
ZW5kCiAKLUBpbnRlcmZhY2UgV2ViVmlldyAoV2ViU2hvd0NhbmRpZGF0ZXMpCi0tICh2b2lkKXNo
b3dDYW5kaWRhdGVzOihOU0FycmF5ICopY2FuZGlkYXRlcyBmb3JTdHJpbmc6KE5TU3RyaW5nICop
c3RyaW5nIGluUmVjdDooTlNSZWN0KXJlY3RPZlR5cGVkU3RyaW5nIGZvclNlbGVjdGVkUmFuZ2U6
KE5TUmFuZ2UpcmFuZ2UgdmlldzooTlNWaWV3ICopdmlldyBjb21wbGV0aW9uSGFuZGxlcjoodm9p
ZCAoXikoTlNUZXh0Q2hlY2tpbmdSZXN1bHQgKmFjY2VwdGVkQ2FuZGlkYXRlKSljb21wbGV0aW9u
QmxvY2s7Ci0tICh2b2lkKWZvcmNlUmVxdWVzdENhbmRpZGF0ZXNGb3JUZXN0aW5nOwotLSAoQk9P
TClzaG91bGRSZXF1ZXN0Q2FuZGlkYXRlczsKLUBlbmQKLQogI2lmZGVmIF9fY3BsdXNwbHVzCiBl
eHRlcm4gIkMiIHsKICNlbmRpZgpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4NDA1KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTYtMTEtMDQgIEJldGggRGFraW4gIDxi
ZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIFN1cHBvcnQgVG91Y2hCYXIgaW4gV2ViS2l0Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ0MzcKKyAg
ICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAgICByZGFyOi8vcHJvYmxlbS8yODg3NjUy
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMg
bWFrZXMgTWluaUJyb3dzZXIgc3VwcG9ydCBUb3VjaEJhciBjdXN0b21pemF0aW9uLiAKKworICAg
ICAgICAqIE1pbmlCcm93c2VyL21hYy9BcHBEZWxlZ2F0ZS5tOgorICAgICAgICAoLVtCcm93c2Vy
QXBwRGVsZWdhdGUgYXdha2VGcm9tTmliXSk6CisKIDIwMTYtMTEtMDQgIEFsZXggQ2hyaXN0ZW5z
ZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xs
aW5nIG91dCByMjA4MjkzLgpJbmRleDogVG9vbHMvTWluaUJyb3dzZXIvbWFjL0FwcERlbGVnYXRl
Lm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvTWluaUJyb3dzZXIvbWFjL0FwcERlbGVnYXRlLm0JKHJl
dmlzaW9uIDIwODQwNSkKKysrIFRvb2xzL01pbmlCcm93c2VyL21hYy9BcHBEZWxlZ2F0ZS5tCSh3
b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw5IEBAIC0gKHZvaWQpYXdha2VGcm9tTmliCiAjZW5k
aWYKIAogICAgIFtbTlNBcHAgbWFpbk1lbnVdIGluc2VydEl0ZW06W2l0ZW0gYXV0b3JlbGVhc2Vd
IGF0SW5kZXg6W1tOU0FwcCBtYWluTWVudV0gaW5kZXhPZkl0ZW1XaXRoVGl0bGU6QCJEZWJ1ZyJd
XTsKKworICAgIGlmIChbTlNBcHAgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihzZXRBdXRv
bWF0aWNDdXN0b21pemVUb3VjaEJhck1lbnVJdGVtRW5hYmxlZDopXSkKKyAgICAgICAgW05TQXBw
IHNldEF1dG9tYXRpY0N1c3RvbWl6ZVRvdWNoQmFyTWVudUl0ZW1FbmFibGVkOllFU107CiB9CiAK
ICNpZiBXS19BUElfRU5BQkxFRAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293985</attachid>
            <date>2016-11-04 22:29:58 -0700</date>
            <delta_ts>2016-11-04 23:08:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-3.txt</filename>
            <type>text/plain</type>
            <size>117676</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE2LTExLTA0ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBTdXBwb3J0IFRvdWNoQmFyIGluIFdl
YktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0
NDM3CisgICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0v
Mjg4NzY1MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9y
bS9zcGkvY29jb2EvQVZLaXRTUEkuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcGkvY29jb2EvTlNU
b3VjaEJhclNQSS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxD
aGVja2VyU1BJLmg6CisKIDIwMTYtMTEtMDQgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgogCiAgICAgICAgIEluZGV4ZWREQiAyLjA6IENsZWFuIHVwIG1vcmUgdHJhbnNhY3Rpb24g
YWJvcnQgYW5kIGV4Y2VwdGlvbiB0aHJvd2luZyBiZWhhdmlvciBmcm9tIElEQk9iamVjdFN0b3Jl
LgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMjA4NDA1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNTY0LDEwICsxNTY0LDEw
IEBACiAJCTQxNjJBNDU3MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQxNjJBNDU1MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
LmNwcCAqLzsgfTsKIAkJNDE2MkE0NTgxMDExNDY0NzAwREZGM0VEIC8qIEpTRGVkaWNhdGVkV29y
a2VyR2xvYmFsU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQxNjJBNDU2MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlLmggKi87IH07CiAJCTQxNkUyOUE2MTAyRkE5NjIwMDdGQzE0RSAvKiBXb3JrZXJSZXBv
cnRpbmdQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDE2RTI5QTUxMDJGQTk2MjAwN0ZDMTRFIC8qIFdvcmtlclJlcG9ydGluZ1Byb3h5LmggKi87
IH07CisJCTQxNkU2RkU4MUJCRDEyREYwMDBBM0Y2NCAvKiBSZWFkYWJsZVN0cmVhbUludGVybmFs
c0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTQxNkU2RkU4MUJCRDEyREYwMDBBNjAyMyAvKiBGZXRjaEludGVybmFsc0J1aWx0aW5zLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMx
MTBEMDBCNzY0QjkgLyogRmV0Y2hJbnRlcm5hbHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjAz
MyAvKiBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEM5IC8qIFN0cmVhbUlu
dGVybmFsc0J1aWx0aW5zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJNDE2RTZGRTgxQkJEMTJERjAwMEEzRjY0IC8qIFJlYWRhYmxlQnl0ZVN0cmVh
bUludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVCeXRlU3RyZWFt
SW50ZXJuYWxzQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQk0MTZFNkZFODFCQkQxMkRGMDAwQTYwNDMgLyogUmVhZGFibGVTdHJlYW1J
bnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOUIwM0Q4MDYxQkIzMTEwRDAwQjczRjY0IC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJu
YWxzQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk0MTZFNkZFODFCQkQxMkRGMDAwQTYwNDMgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50
ZXJuYWxzQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRl
cm5hbHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjA1MyAvKiBXcml0YWJsZVN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RTkgLyogV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNC
dWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTQxNkU2RkU5MUJCRDEyRTUwMDBBNjA0MyAvKiBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFC
QjMxMTBEMDBCNzY0RDggLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxNkU2RkU5MUJCRDEyRTUwMDBB
NjA1MyAvKiBXcml0YWJsZVN0cmVhbUJ1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RTggLyogV3JpdGFi
bGVTdHJlYW1CdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0yNTkwLDggKzI1OTAsOCBAQAogCQk2QjY5M0EyRTFDNTFBODJFMDBCMDNC
RUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZCNjkzQTJEMUM1MUE4MkUwMEIwM0JFRiAvKiBSZXNvdXJjZUxv
YWRPYnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTZCNjkzQTM0MUM1MUE5NUQwMEIwM0JFRiAvKiBSZXNvdXJjZUxvYWRPYnNlcnZlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QjY5M0Ez
MzFDNTFBOTVEMDBCMDNCRUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwICovOyB9OwogCQk2
QzRDOTZERTFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNEM5
NkRBMUFENDQ4MzUwMDM2M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuY3Bw
ICovOyB9OwotCQk2QzRDOTZERjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJl
YW1Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2QzRDOTZEQjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250
cm9sbGVyLmggKi87IH07CiAJCTZDNEM5NkRFMUFENDQ4MzUwMDM2NUE1MCAvKiBKU1JlYWRhYmxl
U3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkM0Qzk2REExQUQ0NDgzNTAwMzY1QTUwIC8qIEpTUmVhZGFibGVT
dHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHAgKi87IH07CisJCTZDNEM5NkRGMUFENDQ4MzUwMDM2
M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNEM5NkRCMUFENDQ4MzUwMDM2M0Y2NCAv
KiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaCAqLzsgfTsKIAkJNkM0Qzk2REYxQUQ0
NDgzNTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0Qzk2REIxQUQ0NDgz
NTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5oICovOyB9Owog
CQk2QzYzODg5NUE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlh
dG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM2
Mzg4OTNBOTZDQ0VFNTBDOEM5NDZDIC8qIENhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2QzYz
ODg5NkE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzYzODg5
NEE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5jcHAg
Ki87IH07CkBAIC0zMjc0LDYgKzMyNzQsNyBAQAogCQk5MzMwOUVBMzA5OUVCNzhDMDA1NkU1ODEg
LyogU2hhcmVkVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzMzA5RUEwMDk5RUI3OEMwMDU2RTU4MSAvKiBTaGFyZWRUaW1lci5oICovOyB9Owog
CQk5MzMwOUVBNDA5OUVCNzhDMDA1NkU1ODEgLyogVGltZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlFQTEwOTlFQjc4QzAwNTZFNTgxIC8q
IFRpbWVyLmNwcCAqLzsgfTsKIAkJOTMzNTRBM0MwQjI0RjhDOTAwM0Y2REVBIC8qIFVJRXZlbnRX
aXRoS2V5U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTMzNTRBM0IwQjI0RjhDOTAwM0Y2REVBIC8qIFVJRXZlbnRXaXRoS2V5U3RhdGUuY3Bw
ICovOyB9OworCQk5MzM1QjQ5RDFEQ0JFRjdDMDBFRDQ2OEUgLyogTlNUb3VjaEJhclNQSS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzNUI0OUIxRENC
RUY3MTAwRUQ0NjhFIC8qIE5TVG91Y2hCYXJTUEkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5MzNBMTQyRTBCN0QxODg2MDBBNTNGRkQgLyogVGV4
dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzM0ExNDJCMEI3RDE4ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuY3BwICovOyB9OwogCQk5MzNB
MTQzMDBCN0QxODg2MDBBNTNGRkQgLyogVGV4dEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzNBMTQyRDBCN0QxODg2MDBBNTNGRkQgLyogVGV4
dEV2ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJOTMzQTE0QjgwQjdEMUQ1MjAwQTUzRkZEIC8qIEpTVGV4dEV2ZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzM0ExNEI2MEI3RDFENTIwMEE1
M0ZGRCAvKiBKU1RleHRFdmVudC5jcHAgKi87IH07CkBAIC05NzgyLDggKzk3ODMsOCBAQAogCQk2
QjY5M0EyRDFDNTFBODJFMDBCMDNCRUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkI2OTNBMzMxQzUxQTk1RDAwQjAzQkVGIC8qIFJlc291
cmNlTG9hZE9ic2VydmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlc291cmNlTG9hZE9ic2VydmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NkM0Qzk2REExQUQ0NDgzNTAwMzYzRjY0IC8qIEpTUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1JlYWRhYmxlQnl0
ZVN0cmVhbUNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzRD
OTZEQjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUmVhZGFibGVCeXRlU3RyZWFtQ29u
dHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QzRDOTZEQTFBRDQ0ODM1
MDAzNjVBNTAgLyogSlNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29u
dHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZDNEM5NkRCMUFENDQ4
MzUwMDM2M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZDNEM5NkRCMUFENDQ4MzUwMDM2NUE1MCAv
KiBKU1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZDNjM4ODkzQTk2Q0NFRTUwQzhDOTQ2QyAvKiBDYWNo
ZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTZDNjM4ODk0QTk2Q0NFRTUwQzhDOTQ2QyAvKiBDYWNoZWRSZXNvdXJj
ZVJlcXVlc3RJbml0aWF0b3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTEwNzIyLDYgKzEwNzIzLDcgQEAKIAkJOTMzMkFCOEIxNjUzQTk3OTAw
RDgyN0VDIC8qIEZFTGlnaHRpbmdORU9OLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZFTGlnaHRpbmdORU9OLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMzJB
QjhDMTY1M0E5NzkwMEQ4MjdFQyAvKiBORU9OSGVscGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBORU9OSGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5MzM1NEEzQjBCMjRGOEM5MDAzRjZERUEgLyogVUlFdmVudFdpdGhLZXlTdGF0ZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVSUV2ZW50V2l0aEtleVN0YXRlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTMzNUI0OUIxRENCRUY3MTAwRUQ0NjhF
IC8qIE5TVG91Y2hCYXJTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTlNU
b3VjaEJhclNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzNBMTQyQjBCN0Qx
ODg2MDBBNTNGRkQgLyogVGV4dEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFRleHRFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkz
M0ExNDJDMEI3RDE4ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFRleHRFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzM0Ex
NDJEMEI3RDE4ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGV4dEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MTE3NSw4ICsxMTE3Nyw4IEBACiAJCTk5MDhCMEYwMUJDQUNGOTEwMEVEM0Y2NCAvKiBSZWFkYWJs
ZUJ5dGVTdHJlYW1Db250cm9sbGVyLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0
OyBwYXRoID0gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlci5qczsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTkwOEIwRjExQkNBQ0Y5MTAwRUQwRjU1IC8qIFN0cmVhbUludGVybmFs
cy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFN0cmVhbUludGVy
bmFscy5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkwOEIwRjExQkNBQ0Y5MTAw
RUQwRjY1IC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzLmpzICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVhZGFibGVTdHJlYW1JbnRlcm5hbHMuanM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk5MDhCMEYxMUJDQUNGOTEwMEVEM0Y2NCAvKiBSZWFkYWJs
ZUJ5dGVTdHJlYW1JbnRlcm5hbHMuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7
IHBhdGggPSBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHMuanM7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTk5MDhCMEYxMUJDQUNGOTEwMEVEMEY3NSAvKiBXcml0YWJsZVN0cmVhbUlu
dGVybmFscy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFdyaXRh
YmxlU3RyZWFtSW50ZXJuYWxzLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OTA4
QjBGMTFCQ0FDRjkxMDBFRDNGNjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzLmpzICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVhZGFibGVCeXRlU3RyZWFt
SW50ZXJuYWxzLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGMjFCQ0FD
RjkxMDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyLmpzICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVy
LmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGMzFCQ0FDRkZFMDBFRDBG
NjUgLyogQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJ5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3lCdWlsdGlu
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5MDhCMEY1MUJDQUQwN0QwMEVE
MEY2NSAvKiBCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5QnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTE4NCwxNSArMTExODYsMTMgQEAKIAkJ
OTkwOEIwRjcxQkNBRDA3RDAwRUQwRjY1IC8qIENvdW50UXVldWluZ1N0cmF0ZWd5QnVpbHRpbnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ291bnRRdWV1aW5nU3RyYXRlZ3lC
dWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGOTFCQ0FEMDdE
MDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkwOEIwRjkxQkNBRDA3RDAwRUQwRjc1IC8qIFdyaXRhYmxl
U3RyZWFtQnVpbHRpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V3JpdGFibGVTdHJlYW1CdWlsdGlucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTk5MDhCMEZBMUJDQUQwN0QwMEVEM0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVy
QnVpbHRpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFi
bGVCeXRlU3RyZWFtQ29udHJvbGxlckJ1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJOTkwOEIwRkIxQkNBRDA3RDAwRUQzRjY0IC8qIFJlYWRhYmxlQnl0ZVN0cmVhbUNv
bnRyb2xsZXJCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFk
YWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQnVpbHRpbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTkwOEIwRkExQkNBRDA3RDAwRUQwRjY1IC8qIFJlYWRhYmxlU3RyZWFtRGVmYXVs
dENvbnRyb2xsZXJCdWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQnVpbHRpbnMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGQjFCQ0FEMDdEMDBFRDBGNjUgLyogUmVhZGFi
bGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckJ1aWx0aW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJCdWlsdGlucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGRDFCQ0FEMDdEMDBFRDBGNDUgLyog
RmV0Y2hJbnRlcm5hbHNCdWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGZXRjaEludGVybmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTkwOEIwRkQxQkNBRDA3RDAwRUQwRjU1IC8qIFN0cmVhbUludGVybmFsc0J1aWx0
aW5zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTkwOEIwRkQx
QkNBRDA3RDAwRUQzRjY0IC8qIFJlYWRhYmxlQnl0ZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlYWRhYmxlQnl0ZVN0cmVh
bUludGVybmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkw
OEIwRkQxQkNBRDA3RDAwRUQwRjY1IC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFibGVTdHJlYW1J
bnRlcm5hbHNCdWlsdGlucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5MDhC
MEZEMUJDQUQwN0QwMEVEMEY3NSAvKiBXcml0YWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdyaXRhYmxlU3RyZWFtSW50
ZXJuYWxzQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OTA4QjBG
RDFCQ0FEMDdEMDBFRDNGNjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFibGVCeXRlU3Ry
ZWFtSW50ZXJuYWxzQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
OTA4QjBGRTFCQ0FEMDdEMDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyQnVp
bHRpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFibGVT
dHJlYW1EZWZhdWx0UmVhZGVyQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5OTA4QjBGRjFCQ0FEMDdEMDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVh
ZGVyQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVhZGFibGVT
dHJlYW1EZWZhdWx0UmVhZGVyQnVpbHRpbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTkyMDM5ODAxOEI5NUJDNjAwQjM5QUY5IC8qIFVzZXJJbnB1dEJyaWRnZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVc2VySW5wdXRCcmlkZ2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEyMzAsMTAgKzExMjMwLDEwIEBACiAJCTlBNTI4
RTgyMTdEN0Y1MkYwMEFBOTUxOCAvKiBGbG9hdGluZ09iamVjdHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRmxvYXRpbmdPYmplY3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTlBQjFGMzdFMThFMjQ4OUEwMDUzNDc0MyAvKiBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUFCMUYzN0YxOEUy
NDg5QTAwNTM0NzQzIC8qIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAv
KiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0QjkgLyog
RmV0Y2hJbnRlcm5hbHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGZXRjaEludGVybmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTlCMDNEODA2MUJCMzExMEQwMEI3NjRDOSAvKiBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDgg
LyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5h
bHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZUJ5
dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZVN0cmVhbUlu
dGVybmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMDNEODA2
MUJCMzExMEQwMEI3NjRFOCAvKiBXcml0YWJsZVN0cmVhbUJ1aWx0aW5zLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyaXRhYmxlU3RyZWFtQnVpbHRpbnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEU5IC8qIFdyaXRhYmxl
U3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTcyNTcsNiArMTcyNTcsNyBAQAogCQkJCTJEREI5N0YzMTlGOUFFQ0EwMDIw
MjVEOCAvKiBOU0V4dGVuc2lvblNQSS5oICovLAogCQkJCUNFMTI1MjNBMUExNjcxMTAwMDg2NDQ4
MCAvKiBOU0ZpbGVNYW5hZ2VyU1BJLmggKi8sCiAJCQkJQ0UxMjUyNTIxQTFCRUMwNjAwODY0NDgw
IC8qIE5TU3RyaW5nU1BJLmggKi8sCisJCQkJOTMzNUI0OUIxRENCRUY3MTAwRUQ0NjhFIC8qIE5T
VG91Y2hCYXJTUEkuaCAqLywKIAkJCQkzMUIzMTNEQTFCNjk4NzE2MDBGMkFBQkMgLyogTlNVUkxD
b25uZWN0aW9uU1BJLmggKi8sCiAJCQkJQ0UxMjUyNTQxQTFCRUMwRTAwODY0NDgwIC8qIE5TVVJM
RG93bmxvYWRTUEkuaCAqLywKIAkJCQk2NTNFRjgzODE5QTA0M0FFMDA1MjIwMkMgLyogTlNVUkxG
aWxlVHlwZU1hcHBpbmdzU1BJLmggKi8sCkBAIC0xNzMzMyw4ICsxNzMzNCw2IEBACiAJCQkJNDRB
MjhBQUUxMkRGQjhCRjAwQUU5MjNCIC8qIE1hdGhNTE5hbWVzLmggKi8sCiAJCQkJNzFFMjE4Mzgx
NzM1OUZCODAwNkU2RTREIC8qIFBsdWdJbnNSZXNvdXJjZXMuaCAqLywKIAkJCQk3MUUyMTgzOTE3
MzU5RkI4MDA2RTZFNEQgLyogUGx1Z0luc1Jlc291cmNlc0RhdGEuY3BwICovLAotCQkJCTk5MDhC
MEZBMUJDQUQwN0QwMDc2M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQnVpbHRp
bnMuY3BwICovLAotCQkJCTk5MDhCMEZCMUJDQUQwN0QwMDc2M0Y2NCAvKiBSZWFkYWJsZUJ5dGVT
dHJlYW1Db250cm9sbGVyQnVpbHRpbnMuaCAqLywKIAkJCQk5OTA4QjBGRDFCQ0FEMDdEMDBFRDNG
NjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuY3BwICovLAogCQkJCTlC
MDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oICovLAogCQkJCTk5MDhCMEY5MUJDQUQwN0QwMEVEMEY2NSAvKiBSZWFkYWJsZVN0cmVh
bUJ1aWx0aW5zLmNwcCAqLywKQEAgLTI1MDc3LDcgKzI1MDc2LDYgQEAKIAkJCQlCQzFCREYyNTE1
NkMxOEM3MDAxQzEyNDMgLyogRE9NRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTJFRDYwOUJE
MTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgx
ODVGM0IwOTc2NTc2NjAwNTgyNkQ5IC8qIERPTUltcGxlbWVudGF0aW9uLmggaW4gSGVhZGVycyAq
LywKLQkJCQlFMzVDQTE0RTFEQkMzQTQyMDBGODM1MTYgLyogRE9NSklUQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMxNTBFQTcxREE3MjE5MzAwMTk0MDEyIC8q
IERPTUpJVEhlbHBlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE5QzZFNEU0MEQ3NDVFMDUwMDY0
NDJFOSAvKiBET01NaW1lVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTlDNkU0RTgwRDc0NUUx
ODAwNjQ0MkU5IC8qIERPTU1pbWVUeXBlQXJyYXkuaCBpbiBIZWFkZXJzICovLApAQCAtMjY3OTEs
OSArMjY3ODksOSBAQAogCQkJCUY1NUIzRENFMTI1MUYxMkQwMDNFRjI2OSAvKiBSYW5nZUlucHV0
VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU4NEU5RTExNzY2OEJGMTAwODE1QjY4IC8qIFJh
c3RlclNoYXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODREODI3QzExRDMzM0VEMDA5NzI5OTAg
LyogUmF3RGF0YURvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQk0MTZFNkZFODFC
QkQxMkRGMDAwQTNGNjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCBp
biBIZWFkZXJzICovLAorCQkJCTQxNkU2RkU4MUJCRDEyREYwMDBBM0Y2NCAvKiBSZWFkYWJsZVN0
cmVhbUludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTZFNkZFOTFCQkQx
MkU1MDAwQTYwNDMgLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJNDE2RTZGRTgxQkJEMTJERjAwMEE2MDQzIC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVp
bHRpbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjA0MyAvKiBS
ZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkQzMTYwM0MxMkIwMjY3NjAwQzFBMzU5IC8qIFJlYWx0aW1lQW5hbHlzZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTRBNEY2NTcxMUFBOTk3RjEwMEUzOENERCAvKiBSZWFsdGltZU1lZGlhU291cmNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0QTRGNjU3MjFBQTk5N0YxMDBFMzhDREQgLyogUmVhbHRp
bWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzg3NSw2ICsy
Nzg3Myw3IEBACiAJCQkJMUNBRjM0ODEwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVj
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUNBRjM0ODMwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNj
cmlwdE9iamVjdFByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNTY5RDFCMEQ3RTJCODIw
MDdDMzk4MyAvKiBXZWJTY3JpcHRPYmplY3RQcm90b2NvbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
OTMzNUI0OUQxRENCRUY3QzAwRUQ0NjhFIC8qIE5TVG91Y2hCYXJTUEkuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk3QUFCRDFCMTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk3QUFCRDFFMTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXRDaGFubmVsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5N0FBQkQxRjE0RkEwOUQ1MDA3NDU3QUUgLyogV2ViU29ja2V0
Q2hhbm5lbENsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODgzNCw3ICsyODgzMyw2IEBACiAJ
CQkJQkMxQkRGMjQxNTZDMTg4MzAwMUMxMjQzIC8qIERPTUVycm9yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTJFRDYwOUJDMTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBODE4NUYzRTA5NzY1NzY2MDA1ODI2RDkgLyogRE9NSW1wbGVtZW50YXRp
b24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRTM1Q0ExNEQxREJDM0EzRjAwRjgzNTE2IC8qIERP
TUpJVEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTlDNkU0
RTMwRDc0NUUwNTAwNjQ0MkU5IC8qIERPTU1pbWVUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE5QzZFNEU3MEQ3NDVFMTgwMDY0NDJFOSAvKiBET01NaW1lVHlwZUFycmF5LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTUyQjZDOUMyMTVFM0Y0REYwMDY5MEIwNSAvKiBET01OYW1lZEZsb3dDb2xs
ZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
c3BpL2NvY29hL0FWS2l0U1BJLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vc3BpL2NvY29hL0FWS2l0U1BJLmgJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3NwaS9jb2NvYS9BVktpdFNQSS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3
ICs2NCw3IEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIEFWUGxheWVyQ29udHIKIEBjbGFz
cyBBVlBsYXllckxheWVyOwogCiBAaW50ZXJmYWNlIEFWUGljdHVyZUluUGljdHVyZVBsYXllckxh
eWVyVmlldyA6IFVJVmlldwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBBVlBsYXll
ckxheWVyICpwbGF5ZXJMYXllcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgbnVs
bGFibGUpIEFWUGxheWVyTGF5ZXIgKnBsYXllckxheWVyOwogQGVuZAogCiBAaW50ZXJmYWNlIF9f
QVZQbGF5ZXJMYXllclZpZXcgOiBVSVZpZXcKQEAgLTEzNiw2ICsxMzYsMjcgQEAgTlNfQ0xBU1Nf
QVZBSUxBQkxFX01BQygxMF8xMSkKIEBlbmQKIAogQGludGVyZmFjZSBBVlZhbHVlVGltaW5nICgp
Ci0rIChBVlZhbHVlVGltaW5nICopdmFsdWVUaW1pbmdXaXRoQW5jaG9yVmFsdWU6KGRvdWJsZSlh
bmNob3JWYWx1ZSBhbmNob3JUaW1lU3RhbXA6KE5TVGltZUludGVydmFsKXRpbWVTdGFtcCByYXRl
Oihkb3VibGUpcmF0ZTsKKysgKG51bGxhYmxlIEFWVmFsdWVUaW1pbmcgKil2YWx1ZVRpbWluZ1dp
dGhBbmNob3JWYWx1ZTooZG91YmxlKWFuY2hvclZhbHVlIGFuY2hvclRpbWVTdGFtcDooTlNUaW1l
SW50ZXJ2YWwpdGltZVN0YW1wIHJhdGU6KGRvdWJsZSlyYXRlOwogQHByb3BlcnR5IChOU19OT05B
VE9NSUNfSU9TT05MWSwgcmVhZG9ubHkpIGRvdWJsZSBjdXJyZW50VmFsdWU7CiBAZW5kCisKKyNp
ZiBQTEFURk9STShNQUMpCisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VS
KQorI2ltcG9ydCA8QVZLaXQvQVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNQcm92aWRlci5o
PgorI2ltcG9ydCA8QVZLaXQvQVZGdW5jdGlvbkJhclNjcnViYmVyLmg+CisjZWxzZQorQHByb3Rv
Y29sIEFWRnVuY3Rpb25CYXJQbGF5YmFja0NvbnRyb2xzQ29udHJvbGxpbmcgPE5TT2JqZWN0Pgor
QHByb3BlcnR5IChyZWFkb25seSkgTlNUaW1lSW50ZXJ2YWwgY29udGVudER1cmF0aW9uOworQHBy
b3BlcnR5IChyZWFkb25seSwgbnVsbGFibGUpIEFWVmFsdWVUaW1pbmcgKnRpbWluZzsKK0Bwcm9w
ZXJ0eSAocmVhZG9ubHksIGdldHRlcj1pc1NlZWtpbmcpIEJPT0wgc2Vla2luZzsKK0Bwcm9wZXJ0
eSAocmVhZG9ubHkpIE5TVGltZUludGVydmFsIHNlZWtUb1RpbWU7CistICh2b2lkKXNlZWtUb1Rp
bWU6KE5TVGltZUludGVydmFsKXRpbWUgdG9sZXJhbmNlQmVmb3JlOihOU1RpbWVJbnRlcnZhbCl0
b2xlcmFuY2VCZWZvcmUgdG9sZXJhbmNlQWZ0ZXI6KE5TVGltZUludGVydmFsKXRvbGVyYW5jZUFm
dGVyOworQHByb3BlcnR5IChyZWFkb25seSkgQk9PTCBoYXNFbmFibGVkQXVkaW87CitAcHJvcGVy
dHkgKHJlYWRvbmx5KSBCT09MIGhhc0VuYWJsZWRWaWRlbzsKK0BlbmQKKworQGludGVyZmFjZSBB
VkZ1bmN0aW9uQmFyU2NydWJiZXIgOiBOU1ZpZXcKK0Bwcm9wZXJ0eSAoYXNzaWduLCBudWxsYWJs
ZSkgaWQ8QVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNDb250cm9sbGluZz4gcGxheWJhY2tD
b250cm9sc0NvbnRyb2xsZXI7CitAZW5kCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9QTEFZQkFDS19D
T05UUk9MU19NQU5BR0VSKQorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3NwaS9jb2NvYS9OU1RvdWNoQmFyU1BJLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL2NvY29hL05TVG91Y2hCYXJTUEkuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvY29jb2EvTlNUb3VjaEJhclNQ
SS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgVVNF
KEFQUExFX0lOVEVSTkFMX1NESykgJiYgSEFWRShUT1VDSF9CQVIpCisKKyNpbXBvcnQgPEFwcEtp
dC9OU0Z1bmN0aW9uQmFyX1ByaXZhdGUuaD4KKyNpbXBvcnQgPEFwcEtpdC9OU1RleHRUb3VjaEJh
ckl0ZW1Db250cm9sbGVyX1dlYktpdFNQSS5oPgorI2ltcG9ydCA8QXBwS2l0L05TVG91Y2hCYXJf
UHJpdmF0ZS5oPgorCisjZWxzZQorCitAaW50ZXJmYWNlIE5TVG91Y2hCYXIgOiBOU09iamVjdAor
QHByb3BlcnR5IChyZWFkb25seSwgY29weSwgbnVsbGFibGUpIE5TQXJyYXk8TlNUb3VjaEJhckl0
ZW0gKj4gKml0ZW1zOworQHByb3BlcnR5IChzdHJvbmcsIG51bGxhYmxlKSBOU1RvdWNoQmFySXRl
bSAqZXNjYXBlS2V5UmVwbGFjZW1lbnRJdGVtOworQGVuZAorCitAaW50ZXJmYWNlIE5TVGV4dFRv
dWNoQmFySXRlbUNvbnRyb2xsZXIgOiBOU09iamVjdAorCitAcHJvcGVydHkgKHJlYWRvbmx5LCBz
dHJvbmcsIG51bGxhYmxlKSBOU0NvbG9yUGlja2VyVG91Y2hCYXJJdGVtICpjb2xvclBpY2tlckl0
ZW07CitAcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcsIG51bGxhYmxlKSBOU1NlZ21lbnRlZENv
bnRyb2wgKnRleHRTdHlsZTsKK0Bwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZywgbnVsbGFibGUp
IE5TU2VnbWVudGVkQ29udHJvbCAqdGV4dEFsaWdubWVudHM7CitAcHJvcGVydHkgKG51bGxhYmxl
LCBzdHJvbmcpIE5TVmlld0NvbnRyb2xsZXIgKnRleHRMaXN0Vmlld0NvbnRyb2xsZXI7CitAcHJv
cGVydHkgQk9PTCB1c2VzTmFycm93VGV4dFN0eWxlSXRlbTsKKworLSAobnVsbGFibGUgTlNUb3Vj
aEJhckl0ZW0gKilpdGVtRm9ySWRlbnRpZmllcjoobnVsbGFibGUgTlNTdHJpbmcgKilpZGVudGlm
aWVyOworCitAZW5kCisKKyNkZWZpbmUgTlNUb3VjaEJhcldpbGxFbnRlckN1c3RvbWl6YXRpb24g
QCJOU1RvdWNoQmFyV2lsbEVudGVyQ3VzdG9taXphdGlvbiIKKyNkZWZpbmUgTlNUb3VjaEJhckRp
ZEV4aXRDdXN0b21pemF0aW9uIEAiTlNUb3VjaEJhckRpZEV4aXRDdXN0b21pemF0aW9uIgorCisj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9tYWMvTlNTcGVsbENoZWNr
ZXJTUEkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvbWFjL05T
U3BlbGxDaGVja2VyU1BJLmgJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3NwaS9tYWMvTlNTcGVsbENoZWNrZXJTUEkuaAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NiArMzAsNyBAQAogLy8gRklYTUU6IFRoaXMgaGVhZGVyIHNob3VsZCBpbmNsdWRlIHN5c3RlbSBo
ZWFkZXJzIHdoZW4gcG9zc2libGUuCiAKIGV4dGVybiBOU1N0cmluZyAqTlNUZXh0Q2hlY2tpbmdJ
bnNlcnRpb25Qb2ludEtleTsKK2V4dGVybiBOU05vdGlmaWNhdGlvbk5hbWUgY29uc3QgTlNTcGVs
bENoZWNrZXJEaWRDaGFuZ2VBdXRvbWF0aWNUZXh0Q29tcGxldGlvbk5vdGlmaWNhdGlvbjsKIAog
QGludGVyZmFjZSBOU1NwZWxsQ2hlY2tlciAoKQogLSAoTlNJbnRlZ2VyKXJlcXVlc3RDYW5kaWRh
dGVzRm9yU2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlzZWxlY3RlZFJhbmdlIGluU3RyaW5nOihOU1N0
cmluZyAqKXN0cmluZ1RvQ2hlY2sgdHlwZXM6KE5TVGV4dENoZWNraW5nVHlwZXMpY2hlY2tpbmdU
eXBlcyBvcHRpb25zOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopb3B0aW9ucyBpblNw
ZWxsRG9jdW1lbnRXaXRoVGFnOihOU0ludGVnZXIpdGFnIGNvbXBsZXRpb25IYW5kbGVyOih2b2lk
ICheKShOU0ludGVnZXIgc2VxdWVuY2VOdW1iZXIsIE5TQXJyYXk8TlNUZXh0Q2hlY2tpbmdSZXN1
bHQgKj4gKmNhbmRpZGF0ZXMpKWNvbXBsZXRpb25IYW5kbGVyOwpJbmRleDogU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2
aXNpb24gMjA4NDA1KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsOTAgQEAKKzIwMTYtMTEtMDQgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFN1cHBvcnQgVG91Y2hCYXIgaW4gV2ViS2l0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ0MzcKKyAgICAgICAgLWFuZCBj
b3JyZXNwb25kaW5nLQorICAgICAgICByZGFyOi8vcHJvYmxlbS8yODg3NjUyNAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1ZpZXdQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBtYWtlVG91Y2hCYXJdKToKKyAgICAgICAg
KC1bV0tXZWJWaWV3IGNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW1dKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF93ZWJfZGlkQWRkTWVkaWFDb250cm9sc01hbmFnZXI6XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfd2ViX2RpZFJlbW92ZU1lZGlhQ29udHJvbHNNYW5hZ2VyXSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfaW50ZXJhY3RXaXRoTWVkaWFDb250cm9sc0ZvclRlc3RpbmddKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF93YW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXddKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9zZXRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6XSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyBfbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlld10pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX2FkZE1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6XSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfcmVtb3ZlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlld10pOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToKKyAgICAgICAgKC1bV0tWaWV3IG1ha2VUb3VjaEJh
cl0pOgorICAgICAgICAoLVtXS1ZpZXcgY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbV0pOgorICAg
ICAgICAoLVtXS1ZpZXcgX3dlYl9kaWRBZGRNZWRpYUNvbnRyb2xzTWFuYWdlcjpdKToKKyAgICAg
ICAgKC1bV0tWaWV3IF93ZWJfZGlkUmVtb3ZlTWVkaWFDb250cm9sc01hbmFnZXJdKToKKyAgICAg
ICAgKC1bV0tWaWV3IF93YW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXddKToKKyAgICAgICAg
KC1bV0tWaWV3IF9zZXRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6XSk6CisgICAgICAg
ICgtW1dLVmlldyBfbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlld10pOgorICAgICAgICAoLVtXS1Zp
ZXcgX2FkZE1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6XSk6CisgICAgICAgICgtW1dLVmlldyBf
cmVtb3ZlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlld10pOgorICAgICAgICAqIFVJUHJvY2Vzcy9D
b2NvYS9XZWJWaWV3SW1wbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y3VycmVu
dFRvdWNoQmFyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNsaWVudFdhbnRzTWVk
aWFQbGF5YmFja0NvbnRyb2xzVmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpz
ZXRDbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3SW1wbDo6c2V0SXNDdXN0b21pemluZ1RvdWNoQmFyKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW06CisgICAgICAgICgtW1dLVGV4dExpc3RUb3VjaEJh
clZpZXdDb250cm9sbGVyIGluaXRXaXRoV2ViVmlld0ltcGw6XSk6CisgICAgICAgICgtW1dLVGV4
dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyIGRpZERlc3Ryb3lWaWV3XSk6CisgICAgICAgICgt
W1dLVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyIF9zZWxlY3RMaXN0Ol0pOgorICAgICAg
ICAoLVtXS1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciBzZXRDdXJyZW50TGlzdFR5cGU6
XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgaW5pdFdpdGhXZWJW
aWV3SW1wbDpdKToKKyAgICAgICAgKC1bV0tUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBkaWRE
ZXN0cm95Vmlld10pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHRv
dWNoQmFyOm1ha2VJdGVtRm9ySWRlbnRpZmllcjpdKToKKyAgICAgICAgKC1bV0tUZXh0VG91Y2hC
YXJJdGVtQ29udHJvbGxlciBpdGVtRm9ySWRlbnRpZmllcjpdKToKKyAgICAgICAgKC1bV0tUZXh0
VG91Y2hCYXJJdGVtQ29udHJvbGxlciBjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtOmVuZFNlbGVj
dGluZ0NhbmRpZGF0ZUF0SW5kZXg6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNv
bnRyb2xsZXIgY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTpjaGFuZ2VkQ2FuZGlkYXRlTGlzdFZp
c2liaWxpdHk6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgdGV4
dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyXSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFy
SXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzQm9sZDpdKToKKyAgICAgICAgKC1bV0tUZXh0VG91Y2hC
YXJJdGVtQ29udHJvbGxlciBzZXRUZXh0SXNJdGFsaWM6XSk6CisgICAgICAgICgtW1dLVGV4dFRv
dWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzVW5kZXJsaW5lZDpdKToKKyAgICAgICAgKC1b
V0tUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBfd2tDaGFuZ2VUZXh0U3R5bGU6XSk6CisgICAg
ICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0Q3VycmVudFRleHRBbGlnbm1l
bnQ6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgX3drQ2hhbmdl
VGV4dEFsaWdubWVudDpdKToKKyAgICAgICAgKC1bV0tUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxl
ciB0ZXh0Q29sb3JdKToKKyAgICAgICAgKC1bV0tUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBz
ZXRUZXh0Q29sb3I6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIg
X3drQ2hhbmdlQ29sb3I6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xs
ZXIgdGV4dExpc3RWaWV3Q29udHJvbGxlcl0pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1w
bDo6bWFrZVRvdWNoQmFyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNhbmRpZGF0
ZUxpc3RUb3VjaEJhckl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6bWVkaWFQ
bGF5YmFja0NvbnRyb2xzVmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1c2VN
ZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OmRpc21pc3NUZXh0VG91Y2hCYXJQb3BvdmVySXRlbVdpdGhJZGVudGlmaWVyKToKKyAgICAgICAg
KFdlYktpdDo6dGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkFsbG93ZWRJZGVudGlmaWVycyk6Cisg
ICAgICAgIChXZWJLaXQ6OnBsYWluVGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkRlZmF1bHRJdGVt
SWRlbnRpZmllcnMpOgorICAgICAgICAoV2ViS2l0OjpyaWNoVGV4dFRvdWNoQmFyQ3VzdG9taXph
dGlvbkRlZmF1bHRJdGVtSWRlbnRpZmllcnMpOgorICAgICAgICAoV2ViS2l0Ojp0b3VjaEJhckRp
ZEV4aXRDdXN0b21pemF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6dG91Y2hCYXJXaWxsRW50ZXJD
dXN0b21pemF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6ZGlkQ2hhbmdlQXV0b21hdGljVGV4dENv
bXBsZXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dXBkYXRlVG91Y2hCYXJB
bmRSZWZyZXNoVGV4dEJhcklkZW50aWZpZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0lt
cGw6OnNldFVwVGV4dFRvdWNoQmFyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6Omlz
UmljaGx5RWRpdGFibGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dGV4dFRvdWNo
QmFyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0ZVRleHRUb3VjaEJhcik6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVNZWRpYVRvdWNoQmFyKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmZvcmNlUmVxdWVzdENhbmRpZGF0ZXNGb3JUZXN0
aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0ZVRvdWNoQmFyKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNob3VsZFJlcXVlc3RDYW5kaWRhdGVzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNob3dDYW5kaWRhdGVzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OndlYlZpZXdJbXBsQWRkaXRpb25zV2lsbERlc3Ryb3lWaWV3KToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldEVkaXRhYmxlRWxlbWVudElzRm9jdXNl
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpiZWNvbWVGaXJzdFJlc3BvbmRlcik6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZWxlY3Rpb25EaWRDaGFuZ2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dmlkZW9Db250cm9sc01hbmFnZXJEaWRDaGFuZ2Up
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dXBkYXRlV2ViVmlld0ltcGxBZGRpdGlv
bnMpOiBEZWxldGVkLgorCiAyMDE2LTExLTA0ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVu
c2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIwODI5
My4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tWaWV3UHJpdmF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tW
aWV3UHJpdmF0ZS5oCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLVmlld1ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEs
OCBAQAogI2ltcG9ydCA8V2ViS2l0L1dLVmlldy5oPgogI2ltcG9ydCA8V2ViS2l0L19XS092ZXJs
YXlTY3JvbGxiYXJTdHlsZS5oPgogCitAY2xhc3MgQVZGdW5jdGlvbkJhclNjcnViYmVyOworCiBA
aW50ZXJmYWNlIFdLVmlldyAoUHJpdmF0ZSkKIAogLyogQyBTUEkgc3VwcG9ydC4gKi8KQEAgLTEz
Miw2ICsxMzQsMTEgQEAKIAogLSAodm9pZClfZ2VzdHVyZUV2ZW50V2FzTm90SGFuZGxlZEJ5V2Vi
Q29yZTooTlNFdmVudCAqKWV2ZW50OwogCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZHdyaXRl
LCBzZXR0ZXI9X3NldFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzopIEJPT0wgX3dhbnRz
TWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25s
eSkgQVZGdW5jdGlvbkJhclNjcnViYmVyICpfbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzsKKy0g
KHZvaWQpX2FkZE1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6KEFWRnVuY3Rpb25CYXJTY3J1YmJl
ciAqKW1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc7CistICh2b2lkKV9yZW1vdmVNZWRpYVBsYXli
YWNrQ29udHJvbHNWaWV3OworCiBAZW5kCiAKICNlbmRpZiAvLyAhVEFSR0VUX09TX0lQSE9ORQpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcu
bW0JKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsNyArMTc0LDEyIEBAIHN0YXRp
YyBjb25zdCB1aW50MzJfdCBmaXJzdFNES1ZlcnNpb25XaXQKIAogQGludGVyZmFjZSBXS1dlYlZp
ZXcgKCkgPFdlYlZpZXdJbXBsRGVsZWdhdGUsIE5TVGV4dElucHV0Q2xpZW50PgogQGVuZAotI2Vu
ZGlmCisKKyNpZiBIQVZFKFRPVUNIX0JBUikKK0BpbnRlcmZhY2UgV0tXZWJWaWV3ICgpIDxOU1Rv
dWNoQmFyUHJvdmlkZXI+CitAZW5kCisjZW5kaWYgLy8gSEFWRShUT1VDSF9CQVIpCisjZW5kaWYg
Ly8gUExBVEZPUk0oTUFDKQogCiBzdGF0aWMgSGFzaE1hcDxXZWJLaXQ6OldlYlBhZ2VQcm94eSos
IFdLV2ViVmlldyAqPiYgcGFnZVRvVmlld01hcCgpCiB7CkBAIC0zMTU1LDYgKzMxNjAsMzggQEAg
LSAodm9pZClfd2ViX2dlc3R1cmVFdmVudFdhc05vdEhhbmRsZWRCeQogCiAjZW5kaWYgLy8gUExB
VEZPUk0oTUFDKQogCisjaWYgSEFWRShUT1VDSF9CQVIpCisKK0BkeW5hbWljIHRvdWNoQmFyOwor
CistIChOU1RvdWNoQmFyICopbWFrZVRvdWNoQmFyCit7CisgICAgcmV0dXJuIF9pbXBsLT5tYWtl
VG91Y2hCYXIoKTsKK30KKworLSAoTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtICopY2FuZGlk
YXRlTGlzdFRvdWNoQmFySXRlbQoreworICAgIHJldHVybiBfaW1wbC0+Y2FuZGlkYXRlTGlzdFRv
dWNoQmFySXRlbSgpOworfQorCistICh2b2lkKV93ZWJfZGlkQWRkTWVkaWFDb250cm9sc01hbmFn
ZXI6KGlkKWNvbnRyb2xzTWFuYWdlcgoreworICAgIFtzZWxmIF9hZGRNZWRpYVBsYXliYWNrQ29u
dHJvbHNWaWV3OmNvbnRyb2xzTWFuYWdlcl07Cit9CisKKy0gKHZvaWQpX3dlYl9kaWRSZW1vdmVN
ZWRpYUNvbnRyb2xzTWFuYWdlcgoreworICAgIFtzZWxmIF9yZW1vdmVNZWRpYVBsYXliYWNrQ29u
dHJvbHNWaWV3XTsKK30KKworLSAodm9pZClfaW50ZXJhY3RXaXRoTWVkaWFDb250cm9sc0ZvclRl
c3RpbmcKK3sKKyAgICBbc2VsZiBfc2V0V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OllF
U107CisgICAgW3NlbGYgbWFrZVRvdWNoQmFyXTsKK30KKworI2VuZGlmIC8vIEhBVkUoVE9VQ0hf
QkFSKQorCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgKFdLUHJpdmF0ZSkKQEAg
LTQ1MjksNiArNDU2Niw0MSBAQCAtICh2b2lkKXNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rp
b246CiAgICAgX2ltcGwtPnNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24odXNlckludGVy
ZmFjZUxheW91dERpcmVjdGlvbik7CiB9CiAKKy0gKEJPT0wpX3dhbnRzTWVkaWFQbGF5YmFja0Nv
bnRyb2xzVmlldworeworI2lmIEhBVkUoVE9VQ0hfQkFSKQorICAgIHJldHVybiBfaW1wbC0+Y2xp
ZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCk7CisjZWxzZQorICAgIHJldHVybiBO
TzsKKyNlbmRpZgorfQorCistICh2b2lkKV9zZXRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1Zp
ZXc6KEJPT0wpd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Cit7CisjaWYgSEFWRShUT1VD
SF9CQVIpCisgICAgX2ltcGwtPnNldENsaWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmll
dyh3YW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcpOworI2VuZGlmCit9CisKKy0gKEFWRnVu
Y3Rpb25CYXJTY3J1YmJlciAqKV9tZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Cit7CisjaWYgSEFW
RShUT1VDSF9CQVIpCisgICAgaWYgKCFfaW1wbC0+Y2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29u
dHJvbHNWaWV3KCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIF9pbXBsLT5tZWRp
YVBsYXliYWNrQ29udHJvbHNWaWV3KCk7CisjZWxzZQorICAgIHJldHVybiBuaWw7CisjZW5kaWYK
K30KKworLSAodm9pZClfYWRkTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzooQVZGdW5jdGlvbkJh
clNjcnViYmVyICopbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldworeworfQorCistICh2b2lkKV9y
ZW1vdmVNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Cit7Cit9CisKICNlbmRpZgogCiBAZW5kCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vi
Vmlld1ByaXZhdGUuaAkocmV2aXNpb24gMjA4NDA1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYg
KzUyLDcgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dLSW1tZWRpYXRlQQogCiAjZW5k
aWYKIAorQGNsYXNzIEFWRnVuY3Rpb25CYXJTY3J1YmJlcjsKIEBjbGFzcyBXS0Jyb3dzaW5nQ29u
dGV4dEhhbmRsZTsKIEBjbGFzcyBfV0tGcmFtZUhhbmRsZTsKIEBjbGFzcyBfV0tIaXRUZXN0UmVz
dWx0OwpAQCAtMjAyLDYgKzIwMywxMiBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tJ
bW1lZGlhdGVBCiAtIChOU1ByaW50T3BlcmF0aW9uICopX3ByaW50T3BlcmF0aW9uV2l0aFByaW50
SW5mbzooTlNQcmludEluZm8gKilwcmludEluZm87CiAtIChOU1ByaW50T3BlcmF0aW9uICopX3By
aW50T3BlcmF0aW9uV2l0aFByaW50SW5mbzooTlNQcmludEluZm8gKilwcmludEluZm8gZm9yRnJh
bWU6KF9XS0ZyYW1lSGFuZGxlICopZnJhbWVIYW5kbGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3go
MTAuMTIpLCBpb3MoMTAuMCkpOwogCisvLyBGSVhNRTogVGhpcyBTUEkgc2hvdWxkIGJlY29tZSBh
IHBhcnQgb2YgdGhlIFdLVUlEZWxlZ2F0ZS4gcmRhcjovL3Byb2JsZW0vMjY1NjE1MzcKK0Bwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkd3JpdGUsIHNldHRlcj1fc2V0V2FudHNNZWRpYVBsYXliYWNr
Q29udHJvbHNWaWV3OikgQk9PTCBfd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3IFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpKTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBy
ZWFkb25seSkgQVZGdW5jdGlvbkJhclNjcnViYmVyICpfbWVkaWFQbGF5YmFja0NvbnRyb2xzVmll
dyBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSk7CistICh2b2lkKV9hZGRNZWRp
YVBsYXliYWNrQ29udHJvbHNWaWV3OihBVkZ1bmN0aW9uQmFyU2NydWJiZXIgKiltZWRpYVBsYXli
YWNrQ29udHJvbHNWaWV3IFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpKTsKKy0g
KHZvaWQpX3JlbW92ZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcgV0tfQVBJX0FWQUlMQUJMRSht
YWNvc3goV0tfTUFDX1RCQSkpOworCiAjZW5kaWYKIAogLSAoV0tOYXZpZ2F0aW9uICopX3JlbG9h
ZFdpdGhvdXRDb250ZW50QmxvY2tlcnMgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTIpLCBp
b3MoMTAuMCkpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmll
dy5tbQkocmV2aXNpb24gMjA4NDA1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9t
YWMvV0tWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSwxMSBAQCBAaW50ZXJmYWNl
IFdLVmlld0RhdGEgOiBOU09iamVjdCB7CiBAaW50ZXJmYWNlIFdLVmlldyAoKSA8V2ViVmlld0lt
cGxEZWxlZ2F0ZT4KIEBlbmQKIAorI2lmIEhBVkUoVE9VQ0hfQkFSKQorQGludGVyZmFjZSBXS1Zp
ZXcgKCkgPE5TVG91Y2hCYXJQcm92aWRlcj4KK0BlbmQKKyNlbmRpZgorCiBAaW1wbGVtZW50YXRp
b24gV0tWaWV3CiAKICNpZiBXS19BUElfRU5BQkxFRApAQCAtOTc3LDYgKzk4MiwzMiBAQCAtICh2
b2lkKV9kaWRVcGRhdGVDYW5kaWRhdGVMaXN0VmlzaWJpbGl0CiB7CiB9CiAKKyNpZiBIQVZFKFRP
VUNIX0JBUikKKworQGR5bmFtaWMgdG91Y2hCYXI7CisKKy0gKE5TVG91Y2hCYXIgKiltYWtlVG91
Y2hCYXIKK3sKKyAgICByZXR1cm4gX2RhdGEtPl9pbXBsLT5tYWtlVG91Y2hCYXIoKTsKK30KKwor
LSAoTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtICopY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRl
bQoreworICAgIHJldHVybiBfZGF0YS0+X2ltcGwtPmNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0o
KTsKK30KKworLSAodm9pZClfd2ViX2RpZEFkZE1lZGlhQ29udHJvbHNNYW5hZ2VyOihpZCljb250
cm9sc01hbmFnZXIKK3sKKyAgICBbc2VsZiBfYWRkTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzpj
b250cm9sc01hbmFnZXJdOworfQorCistICh2b2lkKV93ZWJfZGlkUmVtb3ZlTWVkaWFDb250cm9s
c01hbmFnZXIKK3sKKyAgICBbc2VsZiBfcmVtb3ZlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlld107
Cit9CisKKyNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikKKwogQGVuZAogCiBAaW1wbGVtZW50YXRp
b24gV0tWaWV3IChQcml2YXRlKQpAQCAtMTQ2NywxMCArMTQ5OCw0MSBAQCAtICh2b2lkKXNldFVz
ZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246CiAgICAgX2RhdGEtPl9pbXBsLT5zZXRVc2VySW50
ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24pOwogfQog
Ci1AZW5kCistIChCT09MKV93YW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcKK3sKKyNpZiBI
QVZFKFRPVUNIX0JBUikKKyAgICByZXR1cm4gX2RhdGEtPl9pbXBsLT5jbGllbnRXYW50c01lZGlh
UGxheWJhY2tDb250cm9sc1ZpZXcoKTsKKyNlbHNlCisgICAgcmV0dXJuIE5POworI2VuZGlmCit9
CisKKy0gKHZvaWQpX3NldFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzooQk9PTCl3YW50
c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcKK3sKKyNpZiBIQVZFKFRPVUNIX0JBUikKKyAgICBf
ZGF0YS0+X2ltcGwtPnNldENsaWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyh3YW50
c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcpOworI2VuZGlmCit9CiAKLSNpZiBQTEFURk9STShN
QUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwICYmIFVTRShB
UFBMRV9JTlRFUk5BTF9TREspCi0jaW1wb3J0IDxXZWJLaXRBZGRpdGlvbnMvV0tWaWV3QWRkaXRp
b25zLm1tPgorLSAoQVZGdW5jdGlvbkJhclNjcnViYmVyICopX21lZGlhUGxheWJhY2tDb250cm9s
c1ZpZXcKK3sKKyNpZiBIQVZFKFRPVUNIX0JBUikKKyAgICBpZiAoIV9kYXRhLT5faW1wbC0+Y2xp
ZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCkpCisgICAgICAgIHJldHVybiBuaWw7
CisgICAgcmV0dXJuIF9kYXRhLT5faW1wbC0+bWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpOwor
I2Vsc2UKKyAgICByZXR1cm4gbmlsOwogI2VuZGlmCit9CisKKy0gKHZvaWQpX2FkZE1lZGlhUGxh
eWJhY2tDb250cm9sc1ZpZXc6KEFWRnVuY3Rpb25CYXJTY3J1YmJlciAqKW1lZGlhUGxheWJhY2tD
b250cm9sc1ZpZXcKK3sKK30KKworLSAodm9pZClfcmVtb3ZlTWVkaWFQbGF5YmFja0NvbnRyb2xz
VmlldworeworfQorCitAZW5kCiAKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaAkocmV2aXNpb24gMjA4
NDA1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDE3IEBAIE9CSkNfQ0xBU1MgV0tXZWJWaWV3OwogT0JK
Q19DTEFTUyBXS1dpbmRvd1Zpc2liaWxpdHlPYnNlcnZlcjsKIE9CSkNfQ0xBU1MgX1dLVGh1bWJu
YWlsVmlldzsKIAotI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspICYmIF9fTUFDX09TX1hfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwCi0jaW1wb3J0IDxXZWJLaXRBZGRpdGlvbnMvV2Vi
Vmlld0ltcGxBZGRpdGlvbnNEZWNsYXJhdGlvbnMuaD4KLSNlbmRpZgorI2lmIEhBVkUoVE9VQ0hf
QkFSKQorT0JKQ19DTEFTUyBBVkZ1bmN0aW9uQmFyUGxheWJhY2tDb250cm9sc1Byb3ZpZGVyOwor
T0JKQ19DTEFTUyBBVkZ1bmN0aW9uQmFyU2NydWJiZXI7CitPQkpDX0NMQVNTIE5TQ2FuZGlkYXRl
TGlzdFRvdWNoQmFySXRlbTsKK09CSkNfQ0xBU1MgTlNDdXN0b21Ub3VjaEJhckl0ZW07CitPQkpD
X0NMQVNTIE5TVG91Y2hCYXI7CitPQkpDX0NMQVNTIE5TVG91Y2hCYXJJdGVtOworT0JKQ19DTEFT
UyBOU1BvcG92ZXJUb3VjaEJhckl0ZW07CitPQkpDX0NMQVNTIFdLVGV4dFRvdWNoQmFySXRlbUNv
bnRyb2xsZXI7CitPQkpDX0NMQVNTIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyOworI2VuZGlm
IC8vIEhBVkUoVE9VQ0hfQkFSKQogCiBAcHJvdG9jb2wgV2ViVmlld0ltcGxEZWxlZ2F0ZQogCkBA
IC00ODAsNyArNDg4LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmlnaHRNb3VzZURyYWdnZWQoTlNF
dmVudCAqKTsKICAgICB2b2lkIHJpZ2h0TW91c2VVcChOU0V2ZW50ICopOwogCi0gICAgdm9pZCB1
cGRhdGVXZWJWaWV3SW1wbEFkZGl0aW9ucygpOworICAgIHZvaWQgdXBkYXRlVG91Y2hCYXIoKTsK
ICAgICB2b2lkIGZvcmNlUmVxdWVzdENhbmRpZGF0ZXNGb3JUZXN0aW5nKCk7CiAgICAgYm9vbCBz
aG91bGRSZXF1ZXN0Q2FuZGlkYXRlcygpIGNvbnN0OwogICAgIHZvaWQgc2hvd0NhbmRpZGF0ZXMo
TlNBcnJheSAqY2FuZGlkYXRlcywgTlNTdHJpbmcgKiwgTlNSZWN0IHJlY3RPZlR5cGVkU3RyaW5n
LCBOU1JhbmdlIHNlbGVjdGVkUmFuZ2UsIE5TVmlldyAqLCB2b2lkICheY29tcGxldGlvbkhhbmRs
ZXIpKE5TVGV4dENoZWNraW5nUmVzdWx0ICphY2NlcHRlZENhbmRpZGF0ZSkpOwpAQCAtNDk2LDEy
ICs1MDQsNTQgQEAgcHVibGljOgogCiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJF
RCA+PSAxMDEyMDAgCiAgICAgdm9pZCBoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZShOU1RleHRDaGVj
a2luZ1Jlc3VsdCAqYWNjZXB0ZWRDYW5kaWRhdGUpOwotI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9T
REspCi0jaW1wb3J0IDxXZWJLaXRBZGRpdGlvbnMvV2ViVmlld0ltcGxBZGRpdGlvbnMuaD4KLSNl
bmRpZgogI2VuZGlmCiAKKyNpZiBIQVZFKFRPVUNIX0JBUikKKyAgICBOU1RvdWNoQmFyICptYWtl
VG91Y2hCYXIoKTsKKyAgICBOU1RvdWNoQmFyICpjdXJyZW50VG91Y2hCYXIoKSBjb25zdCB7IHJl
dHVybiBtX2N1cnJlbnRUb3VjaEJhci5nZXQoKTsgfQorICAgIE5TQ2FuZGlkYXRlTGlzdFRvdWNo
QmFySXRlbSAqY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSgpIGNvbnN0OworICAgIEFWRnVuY3Rp
b25CYXJTY3J1YmJlciAqbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpIGNvbnN0OworICAgIE5T
VG91Y2hCYXIgKnRleHRUb3VjaEJhcigpIGNvbnN0OworICAgIHZvaWQgZGlzbWlzc1RleHRUb3Vj
aEJhclBvcG92ZXJJdGVtV2l0aElkZW50aWZpZXIoTlNTdHJpbmcgKik7CisKKyAgICBib29sIGNs
aWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpIGNvbnN0IHsgcmV0dXJuIG1fY2xp
ZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OyB9CisgICAgdm9pZCBzZXRDbGllbnRX
YW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoYm9vbCBjbGllbnRXYW50c01lZGlhUGxheWJh
Y2tDb250cm9sc1ZpZXcpIHsgbV9jbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcg
PSBjbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc7IH0KKworICAgIHZvaWQgdXBk
YXRlVG91Y2hCYXJBbmRSZWZyZXNoVGV4dEJhcklkZW50aWZpZXJzKCk7CisgICAgdm9pZCBzZXRJ
c0N1c3RvbWl6aW5nVG91Y2hCYXIoYm9vbCBpc0N1c3RvbWl6aW5nVG91Y2hCYXIpIHsgbV9pc0N1
c3RvbWl6aW5nVG91Y2hCYXIgPSBpc0N1c3RvbWl6aW5nVG91Y2hCYXI7IH07CisjZW5kaWYgLy8g
SEFWRShUT1VDSF9CQVIpCisKIHByaXZhdGU6CisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgdm9p
ZCBzZXRVcFRleHRUb3VjaEJhcihOU1RvdWNoQmFyICopOworICAgIHZvaWQgdXBkYXRlVGV4dFRv
dWNoQmFyKCk7CisgICAgdm9pZCB1cGRhdGVNZWRpYVRvdWNoQmFyKCk7CisKKyAgICBib29sIHVz
ZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSBjb25zdDsKKyAgICBib29sIGlzUmljaGx5RWRp
dGFibGUoKSBjb25zdDsKKworICAgIGJvb2wgbV9jbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250
cm9sc1ZpZXcgeyBmYWxzZSB9OworICAgIGJvb2wgbV9jYW5DcmVhdGVUb3VjaEJhcnMgeyBmYWxz
ZSB9OworICAgIGJvb2wgbV9zdGFydGVkTGlzdGVuaW5nVG9DdXN0b21pemF0aW9uRXZlbnRzIHsg
ZmFsc2UgfTsKKyAgICBib29sIG1faXNVcGRhdGluZ1RleHRUb3VjaEJhciB7IGZhbHNlIH07Cisg
ICAgYm9vbCBtX2lzQ3VzdG9taXppbmdUb3VjaEJhciB7IGZhbHNlIH07CisKKyAgICBSZXRhaW5Q
dHI8TlNUb3VjaEJhcj4gbV9jdXJyZW50VG91Y2hCYXI7CisgICAgUmV0YWluUHRyPE5TVG91Y2hC
YXI+IG1fcmljaFRleHRUb3VjaEJhcjsKKyAgICBSZXRhaW5QdHI8TlNUb3VjaEJhcj4gbV9wbGFp
blRleHRUb3VjaEJhcjsKKyAgICBSZXRhaW5QdHI8V0tUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxl
cj4gbV90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlcjsKKyAgICBSZXRhaW5QdHI8TlNDYW5kaWRh
dGVMaXN0VG91Y2hCYXJJdGVtPiBtX3JpY2hUZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTsK
KyAgICBSZXRhaW5QdHI8TlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtPiBtX3BsYWluVGV4dENh
bmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW07CisgICAgUmV0YWluUHRyPE5TQXJyYXk+IG1fZW1wdHlD
YW5kaWRhdGVzQXJyYXk7CisgICAgUmV0YWluUHRyPFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2Vy
PiBtX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyOworICAgIFJldGFpblB0cjxOU0N1c3RvbVRvdWNo
QmFySXRlbT4gbV9leGl0RnVsbFNjcmVlbkJ1dHRvbjsKKworI2lmIEVOQUJMRShXRUJfUExBWUJB
Q0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBSZXRhaW5QdHI8QVZGdW5jdGlvbkJhclBsYXliYWNr
Q29udHJvbHNQcm92aWRlcj4gbV9tZWRpYVRvdWNoQmFyUHJvdmlkZXI7CisgICAgUmV0YWluUHRy
PEFWRnVuY3Rpb25CYXJTY3J1YmJlcj4gbV9tZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyNlbmRpZiAvLyBI
QVZFKFRPVUNIX0JBUikKKwogICAgIFdlYWtQdHI8V2ViVmlld0ltcGw+IGNyZWF0ZVdlYWtQdHIo
KSB7IHJldHVybiBtX3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKTsgfQogCiAgICAgYm9v
bCBzdXBwb3J0c0FyYml0cmFyeUxheW91dE1vZGVzKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCShyZXZpc2lvbiAyMDg0MDUp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0JKHdvcmtp
bmcgY29weSkKQEAgLTYwLDExICs2MCwxMyBAQAogI2ltcG9ydCAiV2ViRXZlbnRGYWN0b3J5Lmgi
CiAjaW1wb3J0ICJXZWJJbnNwZWN0b3JQcm94eS5oIgogI2ltcG9ydCAiV2ViUGFnZVByb3h5Lmgi
CisjaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCIKICNpbXBvcnQgIldl
YlByb2Nlc3NQb29sLmgiCiAjaW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQgIl9X
S1JlbW90ZU9iamVjdFJlZ2lzdHJ5SW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1RodW1ibmFpbFZp
ZXdJbnRlcm5hbC5oIgogI2ltcG9ydCA8SElUb29sYm94L0NhcmJvbkV2ZW50c0NvcmUuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvQVZLaXRTUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvQVhPYmplY3RDYWNo
ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9BY3Rpdml0eVN0YXRlLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0NvbG9yTWFjLmg+CkBAIC04MCw2ICs4Miw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL05TSW1tZWRp
YXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvTlNTcGVs
bENoZWNrZXJTUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvTlNUZXh0RmluZGVyU1BJLmg+CisjaW1w
b3J0IDxXZWJDb3JlL05TVG91Y2hCYXJTUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvTlNXaW5kb3dT
UEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaD4KICNpbXBv
cnQgPFdlYkNvcmUvU29mdExpbmtpbmcuaD4KQEAgLTkwLDE2ICs5MywyMiBAQAogI2ltcG9ydCA8
V2ViQ29yZS9XZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9XZWJDb3JlRnVsbFNjcmVlbldpbmRvdy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3Jl
TlNTdHJpbmdFeHRyYXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV2ViUGxheWJhY2tDb250cm9sc01h
bmFnZXIuaD4KICNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgogI2ltcG9ydCA8c3lz
L3N0YXQuaD4KICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2ltcG9ydCA8d3RmL1Rl
bXBvcmFyeUNoYW5nZS5oPgogCi0jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLSNpbXBvcnQg
PFdlYktpdEFkZGl0aW9ucy9XZWJWaWV3SW1wbEluY2x1ZGVzLmg+Ci0jZW5kaWYKKyNpZiBIQVZF
KFRPVUNIX0JBUikgJiYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorU09G
VF9MSU5LX0ZSQU1FV09SSyhBVktpdCkKK1NPRlRfTElOS19DTEFTUyhBVktpdCwgQVZGdW5jdGlv
bkJhclBsYXliYWNrQ29udHJvbHNQcm92aWRlcikKK1NPRlRfTElOS19DTEFTUyhBVktpdCwgQVZG
dW5jdGlvbkJhclNjcnViYmVyKQorI2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFSKSAmJiBFTkFCTEUo
V0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCiAKIFNPRlRfTElOS19DT05TVEFOVF9NQVlf
RkFJTChMb29rdXAsIExVTm90aWZpY2F0aW9uUG9wb3ZlcldpbGxDbG9zZSwgTlNTdHJpbmcgKikK
IAorTlNTdHJpbmcgKiBjb25zdCBXS01lZGlhRXhpdEZ1bGxTY3JlZW5JdGVtID0gQCJXS01lZGlh
RXhpdEZ1bGxTY3JlZW5JdGVtIjsKKwogQGludGVyZmFjZSBOU0FwcGxpY2F0aW9uICgpCiAtIChC
T09MKWlzU3BlYWtpbmc7CiAtICh2b2lkKXNwZWFrU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZzsK
QEAgLTQzMywxMiArNDQyLDY5NiBAQCAtIChCT09MKXRyeVRvUGVyZm9ybTooU0VMKWFjdGlvbiB3
aXRoOihpCiAKIEBlbmQKIAotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0g
MTAxMjAwICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0jaW1wb3J0IDxXZWJLaXRBZGRpdGlv
bnMvV2ViVmlld0ltcGxBZGRpdGlvbnMubW0+Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCisj
aWYgSEFWRShUT1VDSF9CQVIpCisKK0BpbnRlcmZhY2UgV0tUZXh0TGlzdFRvdWNoQmFyVmlld0Nv
bnRyb2xsZXIgOiBOU1ZpZXdDb250cm9sbGVyIHsKKyAgICBMaXN0VHlwZSBfY3VycmVudExpc3RU
eXBlOworCitAcHJpdmF0ZQorICAgIFdlYlZpZXdJbXBsKiBfd2ViVmlld0ltcGw7Cit9CisKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljKSBMaXN0VHlwZSBjdXJyZW50TGlzdFR5cGU7CisKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFdlYlZpZXdJbXBsOihXZWJWaWV3SW1wbCopd2ViVmlld0ltcGw7CisK
K0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVy
CisKK0BzeW50aGVzaXplIGN1cnJlbnRMaXN0VHlwZT1fY3VycmVudExpc3RUeXBlOworCitzdGF0
aWMgY29uc3QgZG91YmxlIGxpc3RDb250cm9sU2VnbWVudFdpZHRoID0gNjc7CitzdGF0aWMgY29u
c3QgZG91YmxlIGV4aXRGdWxsU2NyZWVuQnV0dG9uV2lkdGggPSA2NDsKKworc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG5vTGlzdFNlZ21lbnQgPSAwOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHVub3Jk
ZXJlZExpc3RTZWdtZW50ID0gMTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBvcmRlcmVkTGlzdFNl
Z21lbnQgPSAyOworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWV3SW1wbDooV2ViVmll
d0ltcGwqKXdlYlZpZXdJbXBsCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisg
ICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfd2ViVmlld0ltcGwgPSB3ZWJWaWV3SW1wbDsKKwor
ICAgIE5TU2VnbWVudGVkQ29udHJvbCAqaW5zZXJ0TGlzdENvbnRyb2wgPSBbTlNTZWdtZW50ZWRD
b250cm9sIHNlZ21lbnRlZENvbnRyb2xXaXRoTGFiZWxzOkBbIFdlYkNvcmU6Omluc2VydExpc3RU
eXBlTm9uZSgpLCBXZWJDb3JlOjppbnNlcnRMaXN0VHlwZUJ1bGxldGVkKCksIFdlYkNvcmU6Omlu
c2VydExpc3RUeXBlTnVtYmVyZWQoKSBdIHRyYWNraW5nTW9kZTpOU1NlZ21lbnRTd2l0Y2hUcmFj
a2luZ1NlbGVjdE9uZSB0YXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKF9zZWxlY3RMaXN0Oild
OworICAgIFtpbnNlcnRMaXN0Q29udHJvbCBzZXRXaWR0aDpsaXN0Q29udHJvbFNlZ21lbnRXaWR0
aCBmb3JTZWdtZW50Om5vTGlzdFNlZ21lbnRdOworICAgIFtpbnNlcnRMaXN0Q29udHJvbCBzZXRX
aWR0aDpsaXN0Q29udHJvbFNlZ21lbnRXaWR0aCBmb3JTZWdtZW50OnVub3JkZXJlZExpc3RTZWdt
ZW50XTsKKyAgICBbaW5zZXJ0TGlzdENvbnRyb2wgc2V0V2lkdGg6bGlzdENvbnRyb2xTZWdtZW50
V2lkdGggZm9yU2VnbWVudDpvcmRlcmVkTGlzdFNlZ21lbnRdOworICAgIGluc2VydExpc3RDb250
cm9sLmZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6MTVdOworCisjcHJhZ21hIGNsYW5n
IGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVw
cmVjYXRlZC1kZWNsYXJhdGlvbnMiCisgICAgaWQgc2VnbWVudEVsZW1lbnQgPSBOU0FjY2Vzc2li
aWxpdHlVbmlnbm9yZWREZXNjZW5kYW50KGluc2VydExpc3RDb250cm9sKTsKKyAgICBOU0FycmF5
ICpzZWdtZW50cyA9IFtzZWdtZW50RWxlbWVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6
TlNBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5BdHRyaWJ1dGVdOworICAgIEFTU0VSVChzZWdtZW50cy5j
b3VudCA9PSAzKTsKKyAgICBbW3NlZ21lbnRzIG9iamVjdEF0SW5kZXg6bm9MaXN0U2VnbWVudF0g
YWNjZXNzaWJpbGl0eVNldE92ZXJyaWRlVmFsdWU6V2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVOb25l
KCkgZm9yQXR0cmlidXRlOk5TQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uQXR0cmlidXRlXTsKKyAg
ICBbW3NlZ21lbnRzIG9iamVjdEF0SW5kZXg6dW5vcmRlcmVkTGlzdFNlZ21lbnRdIGFjY2Vzc2li
aWxpdHlTZXRPdmVycmlkZVZhbHVlOldlYkNvcmU6Omluc2VydExpc3RUeXBlQnVsbGV0ZWRBY2Nl
c3NpYmlsaXR5VGl0bGUoKSBmb3JBdHRyaWJ1dGU6TlNBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25B
dHRyaWJ1dGVdOworICAgIFtbc2VnbWVudHMgb2JqZWN0QXRJbmRleDpvcmRlcmVkTGlzdFNlZ21l
bnRdIGFjY2Vzc2liaWxpdHlTZXRPdmVycmlkZVZhbHVlOldlYkNvcmU6Omluc2VydExpc3RUeXBl
TnVtYmVyZWRBY2Nlc3NpYmlsaXR5VGl0bGUoKSBmb3JBdHRyaWJ1dGU6TlNBY2Nlc3NpYmlsaXR5
RGVzY3JpcHRpb25BdHRyaWJ1dGVdOworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorCisg
ICAgc2VsZi52aWV3ID0gaW5zZXJ0TGlzdENvbnRyb2w7CisKKyAgICByZXR1cm4gc2VsZjsKK30K
KworLSAodm9pZClkaWREZXN0cm95VmlldworeworICAgIF93ZWJWaWV3SW1wbCA9IG51bGxwdHI7
Cit9CisKKy0gKHZvaWQpX3NlbGVjdExpc3Q6KGlkKXNlbmRlcgoreworICAgIGlmICghX3dlYlZp
ZXdJbXBsKQorICAgICAgICByZXR1cm47CisKKyAgICBOU1NlZ21lbnRlZENvbnRyb2wgKmluc2Vy
dExpc3RDb250cm9sID0gKE5TU2VnbWVudGVkQ29udHJvbCAqKXNlbGYudmlldzsKKyAgICBpZiAo
aW5zZXJ0TGlzdENvbnRyb2wuc2VsZWN0ZWRTZWdtZW50ID09IG5vTGlzdFNlZ21lbnQpIHsKKyAg
ICAgICAgLy8gVGhlcmUgaXMgbm8gInJlbW92ZSBsaXN0IiBlZGl0IGNvbW1hbmQsIGJ1dCBJbnNl
cnRPcmRlcmVkTGlzdCBhbmQgSW5zZXJ0VW5vcmRlcmVkTGlzdCBib3RoCisgICAgICAgIC8vIGJl
aGF2ZSBhcyB0b2dnbGVzLCBzbyB3ZSBjYW4gaW52b2tlIHRoZSBhcHByb3ByaWF0ZSBlZGl0IGNv
bW1hbmQgZGVwZW5kaW5nIG9uIG91ciBfY3VycmVudExpc3RUeXBlCisgICAgICAgIC8vIHRvIHJl
bW92ZSBhbiBleGlzdGluZyBsaXN0LiBXZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIGlmIF9j
dXJyZW50TGlzdFR5cGUgaXMgTm9MaXN0LgorICAgICAgICBpZiAoX2N1cnJlbnRMaXN0VHlwZSA9
PSBPcmRlcmVkTGlzdCkKKyAgICAgICAgICAgIF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1dGVF
ZGl0Q29tbWFuZChAIkluc2VydE9yZGVyZWRMaXN0IiwgQCIiKTsKKyAgICAgICAgZWxzZSBpZiAo
X2N1cnJlbnRMaXN0VHlwZSA9PSBVbm9yZGVyZWRMaXN0KQorICAgICAgICAgICAgX3dlYlZpZXdJ
bXBsLT5wYWdlKCkuZXhlY3V0ZUVkaXRDb21tYW5kKEAiSW5zZXJ0VW5vcmRlcmVkTGlzdCIsIEAi
Iik7CisgICAgfSBlbHNlIGlmIChpbnNlcnRMaXN0Q29udHJvbC5zZWxlY3RlZFNlZ21lbnQgPT0g
dW5vcmRlcmVkTGlzdFNlZ21lbnQpCisgICAgICAgIF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1
dGVFZGl0Q29tbWFuZChAIkluc2VydFVub3JkZXJlZExpc3QiLCBAIiIpOworICAgIGVsc2UgaWYg
KGluc2VydExpc3RDb250cm9sLnNlbGVjdGVkU2VnbWVudCA9PSBvcmRlcmVkTGlzdFNlZ21lbnQp
CisgICAgICAgIF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZChAIkluc2Vy
dE9yZGVyZWRMaXN0IiwgQCIiKTsKKworICAgIF93ZWJWaWV3SW1wbC0+ZGlzbWlzc1RleHRUb3Vj
aEJhclBvcG92ZXJJdGVtV2l0aElkZW50aWZpZXIoTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4
dExpc3QpOworfQorCistICh2b2lkKXNldEN1cnJlbnRMaXN0VHlwZTooTGlzdFR5cGUpbGlzdFR5
cGUKK3sKKyAgICBOU1NlZ21lbnRlZENvbnRyb2wgKmluc2VydExpc3RDb250cm9sID0gKE5TU2Vn
bWVudGVkQ29udHJvbCAqKXNlbGYudmlldzsKKyAgICBzd2l0Y2ggKGxpc3RUeXBlKSB7CisgICAg
Y2FzZSBOb0xpc3Q6CisgICAgICAgIFtpbnNlcnRMaXN0Q29udHJvbCBzZXRTZWxlY3RlZDpZRVMg
Zm9yU2VnbWVudDpub0xpc3RTZWdtZW50XTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBPcmRl
cmVkTGlzdDoKKyAgICAgICAgW2luc2VydExpc3RDb250cm9sIHNldFNlbGVjdGVkOllFUyBmb3JT
ZWdtZW50Om9yZGVyZWRMaXN0U2VnbWVudF07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVW5v
cmRlcmVkTGlzdDoKKyAgICAgICAgW2luc2VydExpc3RDb250cm9sIHNldFNlbGVjdGVkOllFUyBm
b3JTZWdtZW50OnVub3JkZXJlZExpc3RTZWdtZW50XTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgX2N1cnJlbnRMaXN0VHlwZSA9IGxpc3RUeXBlOworfQorCitAZW5kCisKK0BpbnRlcmZh
Y2UgV0tUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciA6IE5TVGV4dFRvdWNoQmFySXRlbUNvbnRy
b2xsZXIgPE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbURlbGVnYXRlLCBOU1RvdWNoQmFyRGVs
ZWdhdGU+IHsKKyAgICBCT09MIF90ZXh0SXNCb2xkOworICAgIEJPT0wgX3RleHRJc0l0YWxpYzsK
KyAgICBCT09MIF90ZXh0SXNVbmRlcmxpbmVkOworICAgIE5TVGV4dEFsaWdubWVudCBfY3VycmVu
dFRleHRBbGlnbm1lbnQ7CisgICAgUmV0YWluUHRyPE5TQ29sb3I+IF90ZXh0Q29sb3I7CisgICAg
UmV0YWluUHRyPFdLVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyPiBfd2tUZXh0TGlzdFRv
dWNoQmFyVmlld0NvbnRyb2xsZXI7CisKK0Bwcml2YXRlCisgICAgV2ViVmlld0ltcGwqIF93ZWJW
aWV3SW1wbDsKK30KKworQHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgdGV4dElzQm9sZDsKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIHRleHRJc0l0YWxpYzsKK0Bwcm9wZXJ0eSAobm9uYXRv
bWljKSBCT09MIHRleHRJc1VuZGVybGluZWQ7CitAcHJvcGVydHkgKG5vbmF0b21pYykgTlNUZXh0
QWxpZ25tZW50IGN1cnJlbnRUZXh0QWxpZ25tZW50OworQHByb3BlcnR5IChub25hdG9taWMsIHJl
dGFpbiwgcmVhZHdyaXRlKSBOU0NvbG9yICp0ZXh0Q29sb3I7CisKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFdlYlZpZXdJbXBsOihXZWJWaWV3SW1wbCopd2ViVmlld0ltcGw7CitAZW5kCisKK0Bp
bXBsZW1lbnRhdGlvbiBXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyCisKK0BzeW50aGVzaXpl
IHRleHRJc0JvbGQ9X3RleHRJc0JvbGQ7CitAc3ludGhlc2l6ZSB0ZXh0SXNJdGFsaWM9X3RleHRJ
c0l0YWxpYzsKK0BzeW50aGVzaXplIHRleHRJc1VuZGVybGluZWQ9X3RleHRJc1VuZGVybGluZWQ7
CitAc3ludGhlc2l6ZSBjdXJyZW50VGV4dEFsaWdubWVudD1fY3VycmVudFRleHRBbGlnbm1lbnQ7
CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZpZXdJbXBsOihXZWJWaWV3SW1wbCopd2Vi
Vmlld0ltcGwKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKworICAgIF93ZWJWaWV3SW1wbCA9IHdlYlZpZXdJbXBsOworCisgICAgcmV0dXJu
IHNlbGY7Cit9CisKKy0gKHZvaWQpZGlkRGVzdHJveVZpZXcKK3sKKyAgICBbW05TTm90aWZpY2F0
aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGZdOworICAgIF93ZWJW
aWV3SW1wbCA9IG51bGxwdHI7CisgICAgW193a1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxl
ciBkaWREZXN0cm95Vmlld107Cit9CisKKyNwcmFnbWEgbWFyayBOU1RvdWNoQmFyRGVsZWdhdGUK
KworLSAoTlNUb3VjaEJhckl0ZW0gKil0b3VjaEJhcjooTlNUb3VjaEJhciAqKXRvdWNoQmFyIG1h
a2VJdGVtRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyCit7CisgICAgcmV0dXJu
IFtzZWxmIGl0ZW1Gb3JJZGVudGlmaWVyOmlkZW50aWZpZXJdOworfQorCistIChudWxsYWJsZSBO
U1RvdWNoQmFySXRlbSAqKWl0ZW1Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIK
K3sKKyAgICBOU1RvdWNoQmFySXRlbSAqaXRlbSA9IFtzdXBlciBpdGVtRm9ySWRlbnRpZmllcjpp
ZGVudGlmaWVyXTsKKyAgICBCT09MIGlzVGV4dEZvcm1hdEl0ZW0gPSBbaWRlbnRpZmllciBpc0Vx
dWFsVG9TdHJpbmc6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEZvcm1hdF07CisKKyAgICBp
ZiAoaXNUZXh0Rm9ybWF0SXRlbSB8fCBbaWRlbnRpZmllciBpc0VxdWFsVG9TdHJpbmc6TlNUb3Vj
aEJhckl0ZW1JZGVudGlmaWVyVGV4dFN0eWxlXSkKKyAgICAgICAgc2VsZi50ZXh0U3R5bGUuYWN0
aW9uID0gQHNlbGVjdG9yKF93a0NoYW5nZVRleHRTdHlsZTopOworCisgICAgaWYgKGlzVGV4dEZv
cm1hdEl0ZW0gfHwgW2lkZW50aWZpZXIgaXNFcXVhbFRvU3RyaW5nOk5TVG91Y2hCYXJJdGVtSWRl
bnRpZmllclRleHRBbGlnbm1lbnRdKQorICAgICAgICBzZWxmLnRleHRBbGlnbm1lbnRzLmFjdGlv
biA9IEBzZWxlY3Rvcihfd2tDaGFuZ2VUZXh0QWxpZ25tZW50Oik7CisKKyAgICBOU0NvbG9yUGlj
a2VyVG91Y2hCYXJJdGVtICpjb2xvclBpY2tlckl0ZW0gPSBuaWw7CisgICAgaWYgKFtpZGVudGlm
aWVyIGlzRXF1YWxUb1N0cmluZzpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Q29sb3JQaWNr
ZXJdICYmIFtpdGVtIGlzS2luZE9mQ2xhc3M6W05TQ29sb3JQaWNrZXJUb3VjaEJhckl0ZW0gY2xh
c3NdXSkKKyAgICAgICAgY29sb3JQaWNrZXJJdGVtID0gKE5TQ29sb3JQaWNrZXJUb3VjaEJhckl0
ZW0gKilpdGVtOworICAgIGlmIChpc1RleHRGb3JtYXRJdGVtKQorICAgICAgICBjb2xvclBpY2tl
ckl0ZW0gPSBzZWxmLmNvbG9yUGlja2VySXRlbTsKKyAgICBpZiAoY29sb3JQaWNrZXJJdGVtKSB7
CisgICAgICAgIGNvbG9yUGlja2VySXRlbS50YXJnZXQgPSBzZWxmOworICAgICAgICBjb2xvclBp
Y2tlckl0ZW0uYWN0aW9uID0gQHNlbGVjdG9yKF93a0NoYW5nZUNvbG9yOik7CisgICAgICAgIGNv
bG9yUGlja2VySXRlbS5zaG93c0FscGhhID0gTk87CisgICAgfQorCisgICAgcmV0dXJuIGl0ZW07
Cit9CisKKyNwcmFnbWEgbWFyayBOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW1EZWxlZ2F0ZQor
CistICh2b2lkKWNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW06KE5TQ2FuZGlkYXRlTGlzdFRvdWNo
QmFySXRlbSAqKWFuSXRlbSBlbmRTZWxlY3RpbmdDYW5kaWRhdGVBdEluZGV4OihOU0ludGVnZXIp
aW5kZXgKK3sKKyAgICBpZiAoaW5kZXggPT0gTlNOb3RGb3VuZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFfd2ViVmlld0ltcGwpCisgICAgICAgIHJldHVybjsKKworICAgIE5TQXJyYXkg
KmNhbmRpZGF0ZXMgPSBhbkl0ZW0uY2FuZGlkYXRlczsKKyAgICBpZiAoKE5TVUludGVnZXIpaW5k
ZXggPj0gY2FuZGlkYXRlcy5jb3VudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWQgY2FuZGlk
YXRlID0gY2FuZGlkYXRlc1tpbmRleF07CisgICAgQVNTRVJUKFtjYW5kaWRhdGUgaXNLaW5kT2ZD
bGFzczpbTlNUZXh0Q2hlY2tpbmdSZXN1bHQgY2xhc3NdXSk7CisKKyAgICBfd2ViVmlld0ltcGwt
PmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKChOU1RleHRDaGVja2luZ1Jlc3VsdCAqKWNhbmRpZGF0
ZSk7Cit9CisKKy0gKHZvaWQpY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTooTlNDYW5kaWRhdGVM
aXN0VG91Y2hCYXJJdGVtICopYW5JdGVtIGNoYW5nZWRDYW5kaWRhdGVMaXN0VmlzaWJpbGl0eToo
Qk9PTClpc1Zpc2libGUKK3sKKyAgICBpZiAoIV93ZWJWaWV3SW1wbCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKGlzVmlzaWJsZSkKKyAgICAgICAgX3dlYlZpZXdJbXBsLT5yZXF1ZXN0Q2Fu
ZGlkYXRlc0ZvclNlbGVjdGlvbklmTmVlZGVkKCk7CisKKyAgICBfd2ViVmlld0ltcGwtPnVwZGF0
ZVRvdWNoQmFyKCk7Cit9CisKKyNwcmFnbWEgbWFyayBOU05vdGlmaWNhdGlvbkNlbnRlciBvYnNl
cnZlcnMKKworLSAodm9pZCl0b3VjaEJhckRpZEV4aXRDdXN0b21pemF0aW9uOihOU05vdGlmaWNh
dGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIGlmICghX3dlYlZpZXdJbXBsKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBfd2ViVmlld0ltcGwtPnNldElzQ3VzdG9taXppbmdUb3VjaEJhcihmYWxz
ZSk7CisgICAgX3dlYlZpZXdJbXBsLT51cGRhdGVUb3VjaEJhcigpOworfQorCistICh2b2lkKXRv
dWNoQmFyV2lsbEVudGVyQ3VzdG9taXphdGlvbjooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRp
b24KK3sKKyAgICBpZiAoIV93ZWJWaWV3SW1wbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgX3dl
YlZpZXdJbXBsLT5zZXRJc0N1c3RvbWl6aW5nVG91Y2hCYXIodHJ1ZSk7Cit9CisKKy0gKHZvaWQp
ZGlkQ2hhbmdlQXV0b21hdGljVGV4dENvbXBsZXRpb246KE5TTm90aWZpY2F0aW9uICopbm90aWZp
Y2F0aW9uCit7CisgICAgaWYgKCFfd2ViVmlld0ltcGwpCisgICAgICAgIHJldHVybjsKKworICAg
IF93ZWJWaWV3SW1wbC0+dXBkYXRlVG91Y2hCYXJBbmRSZWZyZXNoVGV4dEJhcklkZW50aWZpZXJz
KCk7Cit9CisKKworI3ByYWdtYSBtYXJrIE5TVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIKKwor
LSAoV0tUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgKil0ZXh0TGlzdFRvdWNoQmFyVmll
d0NvbnRyb2xsZXIKK3sKKyAgICByZXR1cm4gKFdLVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9s
bGVyICopW3NlbGYgdGV4dExpc3RWaWV3Q29udHJvbGxlcl07Cit9CisKKy0gKHZvaWQpc2V0VGV4
dElzQm9sZDooQk9PTClib2xkCit7CisgICAgX3RleHRJc0JvbGQgPSBib2xkOworICAgIGlmIChb
c2VsZi50ZXh0U3R5bGUgaXNTZWxlY3RlZEZvclNlZ21lbnQ6MF0gIT0gX3RleHRJc0JvbGQpCisg
ICAgICAgIFtzZWxmLnRleHRTdHlsZSBzZXRTZWxlY3RlZDpfdGV4dElzQm9sZCBmb3JTZWdtZW50
OjBdOworfQorCistICh2b2lkKXNldFRleHRJc0l0YWxpYzooQk9PTClpdGFsaWMKK3sKKyAgICBf
dGV4dElzSXRhbGljID0gaXRhbGljOworICAgIGlmIChbc2VsZi50ZXh0U3R5bGUgaXNTZWxlY3Rl
ZEZvclNlZ21lbnQ6MV0gIT0gX3RleHRJc0l0YWxpYykKKyAgICAgICAgW3NlbGYudGV4dFN0eWxl
IHNldFNlbGVjdGVkOl90ZXh0SXNJdGFsaWMgZm9yU2VnbWVudDoxXTsKK30KKworLSAodm9pZClz
ZXRUZXh0SXNVbmRlcmxpbmVkOihCT09MKXVuZGVybGluZWQKK3sKKyAgICBfdGV4dElzVW5kZXJs
aW5lZCA9IHVuZGVybGluZWQ7CisgICAgaWYgKFtzZWxmLnRleHRTdHlsZSBpc1NlbGVjdGVkRm9y
U2VnbWVudDoyXSAhPSBfdGV4dElzVW5kZXJsaW5lZCkKKyAgICAgICAgW3NlbGYudGV4dFN0eWxl
IHNldFNlbGVjdGVkOl90ZXh0SXNVbmRlcmxpbmVkIGZvclNlZ21lbnQ6Ml07Cit9CisKKy0gKHZv
aWQpX3drQ2hhbmdlVGV4dFN0eWxlOihpZClzZW5kZXIKK3sKKyAgICBpZiAoIV93ZWJWaWV3SW1w
bCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKFtzZWxmLnRleHRTdHlsZSBpc1NlbGVjdGVk
Rm9yU2VnbWVudDowXSAhPSBfdGV4dElzQm9sZCkgeworICAgICAgICBfdGV4dElzQm9sZCA9ICFf
dGV4dElzQm9sZDsKKyAgICAgICAgX3dlYlZpZXdJbXBsLT5wYWdlKCkuZXhlY3V0ZUVkaXRDb21t
YW5kKEAiVG9nZ2xlQm9sZCIsIEAiIik7CisgICAgfQorCisgICAgaWYgKFtzZWxmLnRleHRTdHls
ZSBpc1NlbGVjdGVkRm9yU2VnbWVudDoxXSAhPSBfdGV4dElzSXRhbGljKSB7CisgICAgICAgIF90
ZXh0SXNJdGFsaWMgPSAhX3RleHRJc0l0YWxpYzsKKyAgICAgICAgX3dlYlZpZXdJbXBsLT5wYWdl
KCkuZXhlY3V0ZUVkaXRDb21tYW5kKCJUb2dnbGVJdGFsaWMiLCBAIiIpOworICAgIH0KKworICAg
IGlmIChbc2VsZi50ZXh0U3R5bGUgaXNTZWxlY3RlZEZvclNlZ21lbnQ6Ml0gIT0gX3RleHRJc1Vu
ZGVybGluZWQpIHsKKyAgICAgICAgX3RleHRJc1VuZGVybGluZWQgPSAhX3RleHRJc1VuZGVybGlu
ZWQ7CisgICAgICAgIF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZCgiVG9n
Z2xlVW5kZXJsaW5lIiwgQCIiKTsKKyAgICB9Cit9CisKKy0gKHZvaWQpc2V0Q3VycmVudFRleHRB
bGlnbm1lbnQ6KE5TVGV4dEFsaWdubWVudClhbGlnbm1lbnQKK3sKKyAgICBfY3VycmVudFRleHRB
bGlnbm1lbnQgPSBhbGlnbm1lbnQ7CisgICAgW3NlbGYudGV4dEFsaWdubWVudHMgc2VsZWN0U2Vn
bWVudFdpdGhUYWc6X2N1cnJlbnRUZXh0QWxpZ25tZW50XTsKK30KKworLSAodm9pZClfd2tDaGFu
Z2VUZXh0QWxpZ25tZW50OihpZClzZW5kZXIKK3sKKyAgICBpZiAoIV93ZWJWaWV3SW1wbCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgTlNUZXh0QWxpZ25tZW50IGFsaWdubWVudCA9IChOU1RleHRB
bGlnbm1lbnQpW3NlbGYudGV4dEFsaWdubWVudHMuY2VsbCB0YWdGb3JTZWdtZW50OltzZWxmLnRl
eHRBbGlnbm1lbnRzIHNlbGVjdGVkU2VnbWVudF1dOworICAgIHN3aXRjaCAoYWxpZ25tZW50KSB7
CisgICAgY2FzZSBOU1RleHRBbGlnbm1lbnRMZWZ0OiB7CisgICAgICAgIF9jdXJyZW50VGV4dEFs
aWdubWVudCA9IE5TVGV4dEFsaWdubWVudExlZnQ7CisgICAgICAgIF93ZWJWaWV3SW1wbC0+cGFn
ZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZCgiQWxpZ25MZWZ0IiwgQCIiKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgTlNUZXh0QWxpZ25tZW50UmlnaHQ6IHsKKyAgICAgICAgX2N1cnJl
bnRUZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25tZW50UmlnaHQ7CisgICAgICAgIF93ZWJWaWV3
SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZCgiQWxpZ25SaWdodCIsIEAiIik7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIE5TVGV4dEFsaWdubWVudENlbnRlcjogeworICAg
ICAgICBfY3VycmVudFRleHRBbGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRDZW50ZXI7CisgICAg
ICAgIF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZCgiQWxpZ25DZW50ZXIi
LCBAIiIpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBOU1RleHRBbGlnbm1lbnRK
dXN0aWZpZWQ6IHsKKyAgICAgICAgX2N1cnJlbnRUZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25t
ZW50SnVzdGlmaWVkOworICAgICAgICBfd2ViVmlld0ltcGwtPnBhZ2UoKS5leGVjdXRlRWRpdENv
bW1hbmQoIkFsaWduSnVzdGlmaWVkIiwgQCIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIF93ZWJWaWV3SW1wbC0+ZGlz
bWlzc1RleHRUb3VjaEJhclBvcG92ZXJJdGVtV2l0aElkZW50aWZpZXIoTlNUb3VjaEJhckl0ZW1J
ZGVudGlmaWVyVGV4dEFsaWdubWVudCk7Cit9CisKKy0gKE5TQ29sb3IgKil0ZXh0Q29sb3IKK3sK
KyAgICByZXR1cm4gX3RleHRDb2xvci5nZXQoKTsKK30KKworLSAodm9pZClzZXRUZXh0Q29sb3I6
KE5TQ29sb3IgKiljb2xvcgoreworICAgIF90ZXh0Q29sb3IgPSBjb2xvcjsKKyAgICBzZWxmLmNv
bG9yUGlja2VySXRlbS5jb2xvciA9IF90ZXh0Q29sb3IuZ2V0KCk7Cit9CisKKy0gKHZvaWQpX3dr
Q2hhbmdlQ29sb3I6KGlkKXNlbmRlcgoreworICAgIGlmICghX3dlYlZpZXdJbXBsKQorICAgICAg
ICByZXR1cm47CisKKyAgICBfdGV4dENvbG9yID0gc2VsZi5jb2xvclBpY2tlckl0ZW0uY29sb3I7
CisgICAgX3dlYlZpZXdJbXBsLT5wYWdlKCkuZXhlY3V0ZUVkaXRDb21tYW5kKCJGb3JlQ29sb3Ii
LCBXZWJDb3JlOjpjb2xvckZyb21OU0NvbG9yKF90ZXh0Q29sb3IuZ2V0KCkpLnNlcmlhbGl6ZWQo
KSk7Cit9CisKKy0gKE5TVmlld0NvbnRyb2xsZXIgKil0ZXh0TGlzdFZpZXdDb250cm9sbGVyCit7
CisgICAgaWYgKCFfd2tUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIpCisgICAgICAgIF93
a1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciA9IGFkb3B0TlMoW1tXS1RleHRMaXN0VG91
Y2hCYXJWaWV3Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3SW1wbDpfd2ViVmlld0lt
cGxdKTsKKyAgICByZXR1cm4gX3drVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyLmdldCgp
OworfQorCitAZW5kCisKK25hbWVzcGFjZSBXZWJLaXQgeworTlNUb3VjaEJhciAqV2ViVmlld0lt
cGw6Om1ha2VUb3VjaEJhcigpCit7CisgICAgaWYgKCFtX2NhbkNyZWF0ZVRvdWNoQmFycykgewor
ICAgICAgICBtX2NhbkNyZWF0ZVRvdWNoQmFycyA9IHRydWU7CisgICAgICAgIHVwZGF0ZVRvdWNo
QmFyKCk7CisgICAgfQorICAgIHJldHVybiBtX2N1cnJlbnRUb3VjaEJhci5nZXQoKTsKK30KKwor
TlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtICpXZWJWaWV3SW1wbDo6Y2FuZGlkYXRlTGlzdFRv
dWNoQmFySXRlbSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzUmljaGx5RWRpdGFibGUoKSA/IG1f
cmljaFRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtLmdldCgpIDogbV9wbGFpblRleHRDYW5k
aWRhdGVMaXN0VG91Y2hCYXJJdGVtLmdldCgpOworfQorCitBVkZ1bmN0aW9uQmFyU2NydWJiZXIg
KldlYlZpZXdJbXBsOjptZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCkgY29uc3QKK3sKKyNpZiBF
TkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgaWYgKG1fcGFnZS0+aGFz
QWN0aXZlVmlkZW9Gb3JDb250cm9sc01hbmFnZXIoKSkKKyAgICAgICAgcmV0dXJuIG1fbWVkaWFQ
bGF5YmFja0NvbnRyb2xzVmlldy5nZXQoKTsKKyNlbmRpZgorICAgIHJldHVybiBuaWw7Cit9CisK
K2Jvb2wgV2ViVmlld0ltcGw6OnVzZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSBjb25zdAor
eworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBpZiAoaGFzRnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXIoKSkKKyAgICAgICAgcmV0dXJuICFbbV9mdWxsU2NyZWVuV2luZG93Q29udHJv
bGxlciBpc0Z1bGxTY3JlZW5dOworI2VuZGlmCisgICAgcmV0dXJuIG1fY2xpZW50V2FudHNNZWRp
YVBsYXliYWNrQ29udHJvbHNWaWV3OworfQorCit2b2lkIFdlYlZpZXdJbXBsOjpkaXNtaXNzVGV4
dFRvdWNoQmFyUG9wb3Zlckl0ZW1XaXRoSWRlbnRpZmllcihOU1N0cmluZyAqaWRlbnRpZmllcikK
K3sKKyAgICBOU1RvdWNoQmFySXRlbSAqZm91bmRJdGVtID0gbmlsOworICAgIGZvciAoTlNUb3Vj
aEJhckl0ZW0gKml0ZW0gaW4gdGV4dFRvdWNoQmFyKCkuaXRlbXMpIHsKKyAgICAgICAgaWYgKFtp
dGVtLmlkZW50aWZpZXIgaXNFcXVhbFRvU3RyaW5nOmlkZW50aWZpZXJdKSB7CisgICAgICAgICAg
ICBmb3VuZEl0ZW0gPSBpdGVtOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoW1tpdGVtIGlkZW50aWZpZXJdIGlzRXF1YWxUb1N0cmluZzpOU1RvdWNoQmFySXRl
bUlkZW50aWZpZXJUZXh0Rm9ybWF0XSkgeworICAgICAgICAgICAgZm9yIChOU1RvdWNoQmFySXRl
bSAqY2hpbGRJdGVtIGluIFsoTlNHcm91cFRvdWNoQmFySXRlbSAqKWl0ZW0gZ3JvdXBUb3VjaEJh
cl0uaXRlbXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoW2NoaWxkSXRlbS5pZGVudGlmaWVyIGlz
RXF1YWxUb1N0cmluZzppZGVudGlmaWVyXSkgeworICAgICAgICAgICAgICAgICAgICBmb3VuZEl0
ZW0gPSBjaGlsZEl0ZW07CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKFtmb3VuZEl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNQb3BvdmVyVG91Y2hCYXJJ
dGVtIGNsYXNzXV0pCisgICAgICAgIFsoTlNQb3BvdmVyVG91Y2hCYXJJdGVtICopZm91bmRJdGVt
IGRpc21pc3NQb3BvdmVyOm5pbF07Cit9CisKK3N0YXRpYyBOU0FycmF5PE5TU3RyaW5nICo+ICp0
ZXh0VG91Y2hCYXJDdXN0b21pemF0aW9uQWxsb3dlZElkZW50aWZpZXJzKCkKK3sKKyAgICByZXR1
cm4gQFsgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyQ2hhcmFjdGVyUGlja2VyLCBOU1RvdWNoQmFy
SXRlbUlkZW50aWZpZXJUZXh0Q29sb3JQaWNrZXIsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRl
eHRTdHlsZSwgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEFsaWdubWVudCwgTlNUb3VjaEJh
ckl0ZW1JZGVudGlmaWVyVGV4dExpc3QsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckZsZXhpYmxl
U3BhY2UgXTsKK30KKworc3RhdGljIE5TQXJyYXk8TlNTdHJpbmcgKj4gKnBsYWluVGV4dFRvdWNo
QmFyQ3VzdG9taXphdGlvbkRlZmF1bHRJdGVtSWRlbnRpZmllcnMoKQoreworICAgIHJldHVybiBA
WyBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJDaGFyYWN0ZXJQaWNrZXIsIE5TVG91Y2hCYXJJdGVt
SWRlbnRpZmllckNhbmRpZGF0ZUxpc3QgXTsKK30KKworc3RhdGljIE5TQXJyYXk8TlNTdHJpbmcg
Kj4gKnJpY2hUZXh0VG91Y2hCYXJDdXN0b21pemF0aW9uRGVmYXVsdEl0ZW1JZGVudGlmaWVycygp
Cit7CisgICAgcmV0dXJuIEBbIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckNoYXJhY3RlclBpY2tl
ciwgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEZvcm1hdCwgTlNUb3VjaEJhckl0ZW1JZGVu
dGlmaWVyQ2FuZGlkYXRlTGlzdCBdOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVUb3Vj
aEJhckFuZFJlZnJlc2hUZXh0QmFySWRlbnRpZmllcnMoKQoreworICAgIGlmIChtX3JpY2hUZXh0
VG91Y2hCYXIpCisgICAgICAgIHNldFVwVGV4dFRvdWNoQmFyKG1fcmljaFRleHRUb3VjaEJhci5n
ZXQoKSk7CisKKyAgICBpZiAobV9wbGFpblRleHRUb3VjaEJhcikKKyAgICAgICAgc2V0VXBUZXh0
VG91Y2hCYXIobV9wbGFpblRleHRUb3VjaEJhci5nZXQoKSk7CisKKyAgICB1cGRhdGVUb3VjaEJh
cigpOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjpzZXRVcFRleHRUb3VjaEJhcihOU1RvdWNoQmFy
ICp0b3VjaEJhcikKK3sKKyAgICBib29sIGlzUmljaFRleHRUb3VjaEJhciA9IHRvdWNoQmFyID09
IG1fcmljaFRleHRUb3VjaEJhci5nZXQoKTsKKyAgICBbdG91Y2hCYXIgc2V0RGVsZWdhdGU6bV90
ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlci5nZXQoKV07CisgICAgW3RvdWNoQmFyIHNldERlZmF1
bHRJdGVtczpbTlNNdXRhYmxlU2V0IHNldFdpdGhPYmplY3RzOmlzUmljaFRleHRUb3VjaEJhciA/
IG1fcmljaFRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtLmdldCgpIDogbV9wbGFpblRleHRD
YW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtLmdldCgpLCBuaWxdXTsKKyAgICBbdG91Y2hCYXIgc2V0
Q3VzdG9taXphdGlvbkFsbG93ZWRJdGVtSWRlbnRpZmllcnM6dGV4dFRvdWNoQmFyQ3VzdG9taXph
dGlvbkFsbG93ZWRJZGVudGlmaWVycygpXTsKKyAgICBbdG91Y2hCYXIgc2V0Q3VzdG9taXphdGlv
bkRlZmF1bHRJdGVtSWRlbnRpZmllcnM6aXNSaWNoVGV4dFRvdWNoQmFyID8gcmljaFRleHRUb3Vj
aEJhckN1c3RvbWl6YXRpb25EZWZhdWx0SXRlbUlkZW50aWZpZXJzKCkgOiBwbGFpblRleHRUb3Vj
aEJhckN1c3RvbWl6YXRpb25EZWZhdWx0SXRlbUlkZW50aWZpZXJzKCldOworCisgICAgaWYgKE5T
R3JvdXBUb3VjaEJhckl0ZW0gKnRleHRGb3JtYXRJdGVtID0gKE5TR3JvdXBUb3VjaEJhckl0ZW0g
KilbdG91Y2hCYXIgaXRlbUZvcklkZW50aWZpZXI6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4
dEZvcm1hdF0pCisgICAgICAgIHRleHRGb3JtYXRJdGVtLmdyb3VwVG91Y2hCYXIuY3VzdG9taXph
dGlvbklkZW50aWZpZXIgPSBAIldLVGV4dEZvcm1hdFRvdWNoQmFyIjsKK30KKworYm9vbCBXZWJW
aWV3SW1wbDo6aXNSaWNobHlFZGl0YWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFnZS0+
ZWRpdG9yU3RhdGUoKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSAmJiAhbV9wYWdlLT5uZWVkc1Bs
YWluVGV4dFF1aXJrKCk7Cit9CisKK05TVG91Y2hCYXIgKldlYlZpZXdJbXBsOjp0ZXh0VG91Y2hC
YXIoKSBjb25zdAoreworICAgIHJldHVybiBpc1JpY2hseUVkaXRhYmxlKCkgPyBtX3JpY2hUZXh0
VG91Y2hCYXIuZ2V0KCkgOiBtX3BsYWluVGV4dFRvdWNoQmFyLmdldCgpOworfQorCit2b2lkIFdl
YlZpZXdJbXBsOjp1cGRhdGVUZXh0VG91Y2hCYXIoKQoreworICAgIGlmICghbV9wYWdlLT5lZGl0
b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
bV9pc1VwZGF0aW5nVGV4dFRvdWNoQmFyKQorICAgICAgICByZXR1cm47CisKKyAgICBUZW1wb3Jh
cnlDaGFuZ2U8Ym9vbD4gaXNVcGRhdGluZ1RleHRGdW5jdGlvbkJhcihtX2lzVXBkYXRpbmdUZXh0
VG91Y2hCYXIsIHRydWUpOworCisgICAgaWYgKCFtX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVy
KQorICAgICAgICBtX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyID0gYWRvcHROUyhbW1dLVGV4
dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoV2ViVmlld0ltcGw6dGhpc10p
OworCisgICAgaWYgKCFtX3N0YXJ0ZWRMaXN0ZW5pbmdUb0N1c3RvbWl6YXRpb25FdmVudHMpIHsK
KyAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZl
cjptX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyLmdldCgpIHNlbGVjdG9yOkBzZWxlY3Rvcih0
b3VjaEJhckRpZEV4aXRDdXN0b21pemF0aW9uOikgbmFtZTpOU1RvdWNoQmFyRGlkRXhpdEN1c3Rv
bWl6YXRpb24gb2JqZWN0Om5pbF07CisgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVm
YXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6bV90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlci5nZXQo
KSBzZWxlY3RvcjpAc2VsZWN0b3IodG91Y2hCYXJXaWxsRW50ZXJDdXN0b21pemF0aW9uOikgbmFt
ZTpOU1RvdWNoQmFyV2lsbEVudGVyQ3VzdG9taXphdGlvbiBvYmplY3Q6bmlsXTsKKyAgICAgICAg
W1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjptX3RleHRU
b3VjaEJhckl0ZW1Db250cm9sbGVyLmdldCgpIHNlbGVjdG9yOkBzZWxlY3RvcihkaWRDaGFuZ2VB
dXRvbWF0aWNUZXh0Q29tcGxldGlvbjopIG5hbWU6TlNTcGVsbENoZWNrZXJEaWRDaGFuZ2VBdXRv
bWF0aWNUZXh0Q29tcGxldGlvbk5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKKworICAgICAgICBt
X3N0YXJ0ZWRMaXN0ZW5pbmdUb0N1c3RvbWl6YXRpb25FdmVudHMgPSB0cnVlOworICAgIH0KKwor
ICAgIGlmICghbV9yaWNoVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gfHwgIW1fcGxhaW5U
ZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSkgeworICAgICAgICBtX3JpY2hUZXh0Q2FuZGlk
YXRlTGlzdFRvdWNoQmFySXRlbSA9IGFkb3B0TlMoW1tOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0
ZW0gYWxsb2NdIGluaXRXaXRoSWRlbnRpZmllcjpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJDYW5k
aWRhdGVMaXN0XSk7CisgICAgICAgIFttX3JpY2hUZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRl
bSBzZXREZWxlZ2F0ZTptX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyLmdldCgpXTsKKyAgICAg
ICAgbV9wbGFpblRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtID0gYWRvcHROUyhbW05TQ2Fu
ZGlkYXRlTGlzdFRvdWNoQmFySXRlbSBhbGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOk5TVG91Y2hC
YXJJdGVtSWRlbnRpZmllckNhbmRpZGF0ZUxpc3RdKTsKKyAgICAgICAgW21fcGxhaW5UZXh0Q2Fu
ZGlkYXRlTGlzdFRvdWNoQmFySXRlbSBzZXREZWxlZ2F0ZTptX3RleHRUb3VjaEJhckl0ZW1Db250
cm9sbGVyLmdldCgpXTsKKyAgICAgICAgcmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb25JZk5l
ZWRlZCgpOworICAgIH0KKworICAgIGlmICghbV9yaWNoVGV4dFRvdWNoQmFyKSB7CisgICAgICAg
IG1fcmljaFRleHRUb3VjaEJhciA9IGFkb3B0TlMoW1tOU1RvdWNoQmFyIGFsbG9jXSBpbml0XSk7
CisgICAgICAgIHNldFVwVGV4dFRvdWNoQmFyKG1fcmljaFRleHRUb3VjaEJhci5nZXQoKSk7Cisg
ICAgICAgIFttX3JpY2hUZXh0VG91Y2hCYXIgc2V0Q3VzdG9taXphdGlvbklkZW50aWZpZXI6QCJX
S1JpY2hUZXh0VG91Y2hCYXIiXTsKKyAgICB9CisKKyAgICBpZiAoIW1fcGxhaW5UZXh0VG91Y2hC
YXIpIHsKKyAgICAgICAgbV9wbGFpblRleHRUb3VjaEJhciA9IGFkb3B0TlMoW1tOU1RvdWNoQmFy
IGFsbG9jXSBpbml0XSk7CisgICAgICAgIHNldFVwVGV4dFRvdWNoQmFyKG1fcGxhaW5UZXh0VG91
Y2hCYXIuZ2V0KCkpOworICAgICAgICBbbV9wbGFpblRleHRUb3VjaEJhciBzZXRDdXN0b21pemF0
aW9uSWRlbnRpZmllcjpAIldLUGxhaW5UZXh0VG91Y2hCYXIiXTsKKyAgICB9CisKKyAgICBpZiAo
W05TU3BlbGxDaGVja2VyIGlzQXV0b21hdGljVGV4dENvbXBsZXRpb25FbmFibGVkXSAmJiAhbV9p
c0N1c3RvbWl6aW5nVG91Y2hCYXIpIHsKKyAgICAgICAgQk9PTCBzaG93Q2FuZGlkYXRlc0xpc3Qg
PSAhbV9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzUmFuZ2UgfHwgbV9pc0hhbmRsaW5n
QWNjZXB0ZWRDYW5kaWRhdGU7CisgICAgICAgIFtjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtKCkg
dXBkYXRlV2l0aEluc2VydGlvblBvaW50VmlzaWJpbGl0eTpzaG93Q2FuZGlkYXRlc0xpc3RdOwor
ICAgICAgICBbbV92aWV3IF9kaWRVcGRhdGVDYW5kaWRhdGVMaXN0VmlzaWJpbGl0eTpzaG93Q2Fu
ZGlkYXRlc0xpc3RdOworICAgIH0KKworICAgIGlmIChtX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNJ
blBhc3N3b3JkRmllbGQpIHsKKyAgICAgICAgLy8gV2UgZG9uJ3QgcmVxdWVzdCBjYW5kaWRhdGVz
IGZvciBwYXNzd29yZCBmaWVsZHMuIElmIHRoZSB1c2VyIHdhcyBwcmV2aW91c2x5IGluIGEgbm9u
LXBhc3N3b3JkIGZpZWxkLCB0aGVuIHRoZQorICAgICAgICAvLyBvbGQgY2FuZGlkYXRlcyB3aWxs
IHN0aWxsIHNob3cgYnkgZGVmYXVsdCwgc28gd2UgY2xlYXIgdGhlbSBoZXJlIGJ5IHNldHRpbmcg
YW4gZW1wdHkgYXJyYXkgb2YgY2FuZGlkYXRlcy4KKyAgICAgICAgaWYgKCFtX2VtcHR5Q2FuZGlk
YXRlc0FycmF5KQorICAgICAgICAgICAgbV9lbXB0eUNhbmRpZGF0ZXNBcnJheSA9IGFkb3B0TlMo
W1tOU0FycmF5IGFsbG9jXSBpbml0XSk7CisgICAgICAgIFtjYW5kaWRhdGVMaXN0VG91Y2hCYXJJ
dGVtKCkgc2V0Q2FuZGlkYXRlczptX2VtcHR5Q2FuZGlkYXRlc0FycmF5LmdldCgpIGZvclNlbGVj
dGVkUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgMCkgaW5TdHJpbmc6bmlsXTsKKyAgICB9CisKKyAgICBO
U1RvdWNoQmFyICp0ZXh0VG91Y2hCYXIgPSB0aGlzLT50ZXh0VG91Y2hCYXIoKTsKKyAgICBCT09M
IGlzU2hvd2luZ0NvbWJpbmVkVGV4dEZvcm1hdEl0ZW0gPSBbdGV4dFRvdWNoQmFyLml0ZW1JZGVu
dGlmaWVycyBjb250YWluc09iamVjdDpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Rm9ybWF0
XTsKKyAgICBbdGV4dFRvdWNoQmFyIHNldFByaW5jaXBhbEl0ZW1JZGVudGlmaWVyOmlzU2hvd2lu
Z0NvbWJpbmVkVGV4dEZvcm1hdEl0ZW0gPyBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Rm9y
bWF0IDogbmlsXTsKKworICAgIC8vIFNldCBjdXJyZW50IHR5cGluZyBhdHRyaWJ1dGVzIGZvciBy
aWNoIHRleHQuIFRoaXMgd2lsbCBlbnN1cmUgdGhhdCB0aGUgYnV0dG9ucyByZWZsZWN0IHRoZSBz
dGF0ZSBvZgorICAgIC8vIHRoZSB0ZXh0IHdoZW4gY2hhbmdpbmcgc2VsZWN0aW9uIHRocm91Z2hv
dXQgdGhlIGRvY3VtZW50LgorICAgIGlmIChpc1JpY2hseUVkaXRhYmxlKCkpIHsKKyAgICAgICAg
Y29uc3QgRWRpdG9yU3RhdGUmIGVkaXRvclN0YXRlID0gbV9wYWdlLT5lZGl0b3JTdGF0ZSgpOwor
ICAgICAgICBpZiAoIWVkaXRvclN0YXRlLmlzTWlzc2luZ1Bvc3RMYXlvdXREYXRhKSB7CisgICAg
ICAgICAgICBbbV90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRUZXh0SXNCb2xkOihib29s
KShtX3BhZ2UtPmVkaXRvclN0YXRlKCkucG9zdExheW91dERhdGEoKS50eXBpbmdBdHRyaWJ1dGVz
ICYgQXR0cmlidXRlQm9sZCldOworICAgICAgICAgICAgW21fdGV4dFRvdWNoQmFySXRlbUNvbnRy
b2xsZXIgc2V0VGV4dElzSXRhbGljOihib29sKShtX3BhZ2UtPmVkaXRvclN0YXRlKCkucG9zdExh
eW91dERhdGEoKS50eXBpbmdBdHRyaWJ1dGVzICYgQXR0cmlidXRlSXRhbGljcyldOworICAgICAg
ICAgICAgW21fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzVW5kZXJsaW5lZDoo
Ym9vbCkobV9wYWdlLT5lZGl0b3JTdGF0ZSgpLnBvc3RMYXlvdXREYXRhKCkudHlwaW5nQXR0cmli
dXRlcyAmIEF0dHJpYnV0ZVVuZGVybGluZSldOworICAgICAgICAgICAgW21fdGV4dFRvdWNoQmFy
SXRlbUNvbnRyb2xsZXIgc2V0VGV4dENvbG9yOm5zQ29sb3IoZWRpdG9yU3RhdGUucG9zdExheW91
dERhdGEoKS50ZXh0Q29sb3IpXTsKKyAgICAgICAgICAgIFtbbV90ZXh0VG91Y2hCYXJJdGVtQ29u
dHJvbGxlciB0ZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXJdIHNldEN1cnJlbnRMaXN0VHlw
ZTooTGlzdFR5cGUpbV9wYWdlLT5lZGl0b3JTdGF0ZSgpLnBvc3RMYXlvdXREYXRhKCkuZW5jbG9z
aW5nTGlzdFR5cGVdOworCisgICAgICAgICAgICBOU1RleHRBbGlnbm1lbnQgdGV4dEFsaWdubWVu
dDsKKyAgICAgICAgICAgIHN3aXRjaCAoZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEoKS50ZXh0
QWxpZ25tZW50KSB7CisgICAgICAgICAgICBjYXNlIE5vQWxpZ25tZW50OgorICAgICAgICAgICAg
ICAgIHRleHRBbGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnROYXR1cmFsOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBMZWZ0QWxpZ25tZW50OgorICAgICAgICAgICAg
ICAgIHRleHRBbGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRMZWZ0OworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBSaWdodEFsaWdubWVudDoKKyAgICAgICAgICAgICAg
ICB0ZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25tZW50UmlnaHQ7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIENlbnRlckFsaWdubWVudDoKKyAgICAgICAgICAgICAg
ICB0ZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25tZW50Q2VudGVyOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBKdXN0aWZpZWRBbGlnbm1lbnQ6CisgICAgICAgICAg
ICAgICAgdGV4dEFsaWdubWVudCA9IE5TVGV4dEFsaWdubWVudEp1c3RpZmllZDsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFttX3RleHRUb3VjaEJh
ckl0ZW1Db250cm9sbGVyIHNldEN1cnJlbnRUZXh0QWxpZ25tZW50OnRleHRBbGlnbm1lbnRdOwor
ICAgICAgICB9CisgICAgICAgIEJPT0wgaXNTaG93aW5nQ2FuZGlkYXRlTGlzdEl0ZW0gPSBbdGV4
dFRvdWNoQmFyLml0ZW1JZGVudGlmaWVycyBjb250YWluc09iamVjdDpOU1RvdWNoQmFySXRlbUlk
ZW50aWZpZXJDYW5kaWRhdGVMaXN0XSAmJiBbTlNTcGVsbENoZWNrZXIgaXNBdXRvbWF0aWNUZXh0
UmVwbGFjZW1lbnRFbmFibGVkXTsKKyAgICAgICAgW21fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xs
ZXIgc2V0VXNlc05hcnJvd1RleHRTdHlsZUl0ZW06aXNTaG93aW5nQ29tYmluZWRUZXh0Rm9ybWF0
SXRlbSAmJiBpc1Nob3dpbmdDYW5kaWRhdGVMaXN0SXRlbV07CisgICAgfQorfQorCit2b2lkIFdl
YlZpZXdJbXBsOjp1cGRhdGVNZWRpYVRvdWNoQmFyKCkKK3sKKyNpZiBFTkFCTEUoV0VCX1BMQVlC
QUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgaWYgKCFtX21lZGlhVG91Y2hCYXJQcm92aWRlcikK
KyAgICAgICAgbV9tZWRpYVRvdWNoQmFyUHJvdmlkZXIgPSBhZG9wdE5TKFthbGxvY0FWRnVuY3Rp
b25CYXJQbGF5YmFja0NvbnRyb2xzUHJvdmlkZXJJbnN0YW5jZSgpIGluaXRdKTsKKworICAgIGlm
ICghbV9tZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KQorICAgICAgICBtX21lZGlhUGxheWJhY2tD
b250cm9sc1ZpZXcgPSBhZG9wdE5TKFthbGxvY0FWRnVuY3Rpb25CYXJTY3J1YmJlckluc3RhbmNl
KCkgaW5pdF0pOworCisgICAgaWYgKCFtX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyKQorICAgICAg
ICBtX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyID0gYWRvcHROUyhbW1dlYlBsYXliYWNrQ29udHJv
bHNNYW5hZ2VyIGFsbG9jXSBpbml0XSk7CisKKyAgICBpZiAoUGxhdGZvcm1XZWJQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2UqIGludGVyZmFjZSA9IG1fcGFnZS0+cGxheWJhY2tTZXNzaW9uTWFuYWdl
cigpLT5jb250cm9sc01hbmFnZXJJbnRlcmZhY2UoKSkKKyAgICAgICAgW21fcGxheWJhY2tDb250
cm9sc01hbmFnZXIgc2V0V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOmludGVyZmFjZV07
CisKKyAgICBbbV9tZWRpYVRvdWNoQmFyUHJvdmlkZXIgc2V0UGxheWJhY2tDb250cm9sc0NvbnRy
b2xsZXI6bV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlci5nZXQoKV07CisgICAgW21fbWVkaWFQbGF5
YmFja0NvbnRyb2xzVmlldyBzZXRQbGF5YmFja0NvbnRyb2xzQ29udHJvbGxlcjptX3BsYXliYWNr
Q29udHJvbHNNYW5hZ2VyLmdldCgpXTsKKworICAgIGlmICghdXNlTWVkaWFQbGF5YmFja0NvbnRy
b2xzVmlldygpKSB7CisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgICAgICAvLyBJZiB3
ZSBjYW4ndCBoYXZlIGEgbWVkaWEgcG9wb3ZlciBmdW5jdGlvbiBiYXIgaXRlbSwgaXQgbWlnaHQg
YmUgYmVjYXVzZSB3ZSBhcmUgaW4gZnVsbCBzY3JlZW4uCisgICAgICAgIC8vIElmIHNvLCBjdXN0
b21pemUgdGhlIGVzY2FwZSBrZXkuCisgICAgICAgIE5TVG91Y2hCYXIgKnRvdWNoQmFyID0gW21f
bWVkaWFUb3VjaEJhclByb3ZpZGVyIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IodG91Y2hC
YXIpXSA/IFsoaWQpbV9tZWRpYVRvdWNoQmFyUHJvdmlkZXIuZ2V0KCkgdG91Y2hCYXJdIDogWyhp
ZCltX21lZGlhVG91Y2hCYXJQcm92aWRlci5nZXQoKSB0b3VjaEJhcl07CisgICAgICAgIGlmICho
YXNGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcigpICYmIFttX2Z1bGxTY3JlZW5XaW5kb3dDb250
cm9sbGVyIGlzRnVsbFNjcmVlbl0pIHsKKyAgICAgICAgICAgIGlmICghbV9leGl0RnVsbFNjcmVl
bkJ1dHRvbikgeworICAgICAgICAgICAgICAgIG1fZXhpdEZ1bGxTY3JlZW5CdXR0b24gPSBhZG9w
dE5TKFtbTlNDdXN0b21Ub3VjaEJhckl0ZW0gYWxsb2NdIGluaXRXaXRoSWRlbnRpZmllcjpXS01l
ZGlhRXhpdEZ1bGxTY3JlZW5JdGVtXSk7CisKKyAgICAgICAgICAgICAgICBOU0ltYWdlICppbWFn
ZSA9IFtOU0ltYWdlIGltYWdlTmFtZWQ6TlNJbWFnZU5hbWVUb3VjaEJhckV4aXRGdWxsU2NyZWVu
VGVtcGxhdGVdOworICAgICAgICAgICAgICAgIFtpbWFnZSBzZXRUZW1wbGF0ZTpZRVNdOworCisg
ICAgICAgICAgICAgICAgTlNCdXR0b24gKmV4aXRGdWxsU2NyZWVuQnV0dG9uID0gW05TQnV0dG9u
IGJ1dHRvbldpdGhUaXRsZTppbWFnZSA/IEAiIiA6IEAiRXhpdCIgaW1hZ2U6aW1hZ2UgdGFyZ2V0
Om1fZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgYWN0aW9uOkBzZWxlY3RvcihyZXF1
ZXN0RXhpdEZ1bGxTY3JlZW4pXTsKKyAgICAgICAgICAgICAgICBbZXhpdEZ1bGxTY3JlZW5CdXR0
b24gc2V0QWNjZXNzaWJpbGl0eVRpdGxlOldlYkNvcmU6OmV4aXRGdWxsU2NyZWVuQnV0dG9uQWNj
ZXNzaWJpbGl0eVRpdGxlKCldOworCisgICAgICAgICAgICAgICAgW1tleGl0RnVsbFNjcmVlbkJ1
dHRvbi53aWR0aEFuY2hvciBjb25zdHJhaW50TGVzc1RoYW5PckVxdWFsVG9Db25zdGFudDpleGl0
RnVsbFNjcmVlbkJ1dHRvbldpZHRoXSBzZXRBY3RpdmU6WUVTXTsKKyAgICAgICAgICAgICAgICBb
bV9leGl0RnVsbFNjcmVlbkJ1dHRvbiBzZXRWaWV3OmV4aXRGdWxsU2NyZWVuQnV0dG9uXTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHRvdWNoQmFyLmVzY2FwZUtleVJlcGxhY2VtZW50SXRl
bSA9IG1fZXhpdEZ1bGxTY3JlZW5CdXR0b24uZ2V0KCk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgdG91Y2hCYXIuZXNjYXBlS2V5UmVwbGFjZW1lbnRJdGVtID0gbmlsOworI2VuZGlmCisg
ICAgICAgIC8vIFRoZSByZXN0IG9mIHRoZSB3b3JrIHRvIHVwZGF0ZSB0aGUgbWVkaWEgZnVuY3Rp
b24gYmFyIG9ubHkgYXBwbGllcyB0byB0aGUgcG9wb3ZlciB2ZXJzaW9uLCBzbyByZXR1cm4gZWFy
bHkuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9wbGF5YmFja0NvbnRyb2xz
TWFuYWdlciAmJiBtX3ZpZXcgPT0gbV92aWV3LndpbmRvdy5maXJzdFJlc3BvbmRlciAmJiBbbV92
aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYl9kaWRBZGRNZWRpYUNvbnRyb2xz
TWFuYWdlcjopXSkKKyAgICAgICAgW21fdmlldyBfd2ViX2RpZEFkZE1lZGlhQ29udHJvbHNNYW5h
Z2VyOm1fbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldy5nZXQoKV07CisjZW5kaWYKK30KKwordm9p
ZCBXZWJWaWV3SW1wbDo6Zm9yY2VSZXF1ZXN0Q2FuZGlkYXRlc0ZvclRlc3RpbmcoKQoreworICAg
IG1fY2FuQ3JlYXRlVG91Y2hCYXJzID0gdHJ1ZTsKKyAgICB1cGRhdGVUb3VjaEJhcigpOworfQor
Cit2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVUb3VjaEJhcigpCit7CisgICAgaWYgKCFtX2NhbkNy
ZWF0ZVRvdWNoQmFycykKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNUb3VjaEJhciAqdG91Y2hC
YXIgPSBuaWw7CisgICAgYm9vbCB1c2VyQWN0aW9uUmVxdWlyZW1lbnRzSGF2ZUJlZW5NZXQgPSBt
X3JlcXVpcmVzVXNlckFjdGlvbkZvckVkaXRpbmdDb250cm9sc01hbmFnZXIgPyBtX3BhZ2UtPmhh
c0hhZFNlbGVjdGlvbkNoYW5nZXNGcm9tVXNlckludGVyYWN0aW9uKCkgOiB0cnVlOworICAgIGlm
IChtX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50RWRpdGFibGUgJiYgIW1fcGFnZS0+bmVl
ZHNIaWRkZW5Db250ZW50RWRpdGFibGVRdWlyaygpKSB7CisgICAgICAgIHVwZGF0ZVRleHRUb3Vj
aEJhcigpOworICAgICAgICBpZiAodXNlckFjdGlvblJlcXVpcmVtZW50c0hhdmVCZWVuTWV0KQor
ICAgICAgICAgICAgdG91Y2hCYXIgPSB0ZXh0VG91Y2hCYXIoKTsKKyAgICB9CisjaWYgRU5BQkxF
KFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIGVsc2UgaWYgKG1fcGFnZS0+aGFz
QWN0aXZlVmlkZW9Gb3JDb250cm9sc01hbmFnZXIoKSkgeworICAgICAgICB1cGRhdGVNZWRpYVRv
dWNoQmFyKCk7CisgICAgICAgIC8vIElmIHVzZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSBp
cyB0cnVlLCB0aGVuIHdlIGFyZSByZWx5aW5nIG9uIHRoZSBBUEkgY2xpZW50IHRvIGRpc3BsYXkg
YSBwb3BvdmVyIHZlcnNpb24KKyAgICAgICAgLy8gb2YgdGhlIG1lZGlhIHRpbWVsaW5lIGluIHRo
ZWlyIG93biBmdW5jdGlvbiBiYXIuIElmIGl0IGlzIGZhbHNlLCB0aGVuIHdlIHdpbGwgZGlzcGxh
eSB0aGUgbWVkaWEgdGltZWxpbmUgaW4gb3VyCisgICAgICAgIC8vIGZ1bmN0aW9uIGJhci4KKyAg
ICAgICAgaWYgKCF1c2VNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCkpCisgICAgICAgICAgICB0
b3VjaEJhciA9IFttX21lZGlhVG91Y2hCYXJQcm92aWRlciByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKHRvdWNoQmFyKV0gPyBbKGlkKW1fbWVkaWFUb3VjaEJhclByb3ZpZGVyLmdldCgpIHRv
dWNoQmFyXSA6IFsoaWQpbV9tZWRpYVRvdWNoQmFyUHJvdmlkZXIuZ2V0KCkgdG91Y2hCYXJdOwor
ICAgIH0gZWxzZSBpZiAoW21fbWVkaWFUb3VjaEJhclByb3ZpZGVyIHBsYXliYWNrQ29udHJvbHND
b250cm9sbGVyXSkgeworICAgICAgICBpZiAobV9jbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250
cm9sc1ZpZXcpIHsKKyAgICAgICAgICAgIGlmIChbbV92aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IoX3dlYl9kaWRSZW1vdmVNZWRpYUNvbnRyb2xzTWFuYWdlcildICYmIG1fdmlldyA9
PSBtX3ZpZXcud2luZG93LmZpcnN0UmVzcG9uZGVyKQorICAgICAgICAgICAgICAgIFttX3ZpZXcg
X3dlYl9kaWRSZW1vdmVNZWRpYUNvbnRyb2xzTWFuYWdlcl07CisgICAgICAgIH0KKyAgICAgICAg
W21fbWVkaWFUb3VjaEJhclByb3ZpZGVyIHNldFBsYXliYWNrQ29udHJvbHNDb250cm9sbGVyOm5p
bF07CisgICAgICAgIFttX21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcgc2V0UGxheWJhY2tDb250
cm9sc0NvbnRyb2xsZXI6bmlsXTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmICh0b3VjaEJhciA9
PSBtX2N1cnJlbnRUb3VjaEJhcikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWYgbV9lZGl0
YWJsZUVsZW1lbnRJc0ZvY3VzZWQgaXMgdHJ1ZSwgdGhlbiB3ZSBtYXkgaGF2ZSBhIG5vbi1lZGl0
YWJsZSBzZWxlY3Rpb24gcmlnaHQgbm93IGp1c3QgYmVjYXVzZQorICAgIC8vIHRoZSB1c2VyIGlz
IGNsaWNraW5nIG9yIHRhYmJpbmcgYmV0d2VlbiBlZGl0YWJsZSBmaWVsZHMuCisgICAgaWYgKG1f
ZWRpdGFibGVFbGVtZW50SXNGb2N1c2VkICYmIHRvdWNoQmFyICE9IHRleHRUb3VjaEJhcigpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2N1cnJlbnRUb3VjaEJhciA9IHRvdWNoQmFyOworICAg
IFttX3ZpZXcgd2lsbENoYW5nZVZhbHVlRm9yS2V5OkAidG91Y2hCYXIiXTsKKyAgICBbbV92aWV3
IHNldFRvdWNoQmFyOm1fY3VycmVudFRvdWNoQmFyLmdldCgpXTsKKyAgICBbbV92aWV3IGRpZENo
YW5nZVZhbHVlRm9yS2V5OkAidG91Y2hCYXIiXTsKK30KKworYm9vbCBXZWJWaWV3SW1wbDo6c2hv
dWxkUmVxdWVzdENhbmRpZGF0ZXMoKSBjb25zdAoreworICAgIHJldHVybiAhbV9wYWdlLT5lZGl0
b3JTdGF0ZSgpLmlzSW5QYXNzd29yZEZpZWxkICYmIGNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0o
KS5jYW5kaWRhdGVMaXN0VmlzaWJsZTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6c2hvd0NhbmRp
ZGF0ZXMoTlNBcnJheSAqY2FuZGlkYXRlcywgTlNTdHJpbmcgKnN0cmluZywgTlNSZWN0IHJlY3RP
ZlR5cGVkU3RyaW5nLCBOU1JhbmdlIHNlbGVjdGVkUmFuZ2UsIE5TVmlldyAqdmlldywgdm9pZCAo
XmNvbXBsZXRpb25IYW5kbGVyKShOU1RleHRDaGVja2luZ1Jlc3VsdCAqYWNjZXB0ZWRDYW5kaWRh
dGUpKQoreworICAgIFtjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtKCkgc2V0Q2FuZGlkYXRlczpj
YW5kaWRhdGVzIGZvclNlbGVjdGVkUmFuZ2U6c2VsZWN0ZWRSYW5nZSBpblN0cmluZzpzdHJpbmdd
OworfQorCit2b2lkIFdlYlZpZXdJbXBsOjp3ZWJWaWV3SW1wbEFkZGl0aW9uc1dpbGxEZXN0cm95
VmlldygpCit7CisgICAgW21fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgZGlkRGVzdHJveVZp
ZXddOworCisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIFtt
X21lZGlhVG91Y2hCYXJQcm92aWRlciBzZXRQbGF5YmFja0NvbnRyb2xzQ29udHJvbGxlcjpuaWxd
OworICAgIFttX21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcgc2V0UGxheWJhY2tDb250cm9sc0Nv
bnRyb2xsZXI6bmlsXTsKKyNlbmRpZgorfQorCit2b2lkIFdlYlZpZXdJbXBsOjpzZXRFZGl0YWJs
ZUVsZW1lbnRJc0ZvY3VzZWQoYm9vbCBlZGl0YWJsZUVsZW1lbnRJc0ZvY3VzZWQpCit7CisgICAg
bV9lZGl0YWJsZUVsZW1lbnRJc0ZvY3VzZWQgPSBlZGl0YWJsZUVsZW1lbnRJc0ZvY3VzZWQ7CisK
KyAgICAvLyBJZiB0aGUgZWRpdGFibGUgZWxlbWVudHMgaGF2ZSBibHVycmVkLCB0aGVuIHdlIG1p
Z2h0IG5lZWQgdG8gZ2V0IHJpZCBvZiB0aGUgZWRpdGluZyBmdW5jdGlvbiBiYXIuCisgICAgaWYg
KCFtX2VkaXRhYmxlRWxlbWVudElzRm9jdXNlZCkKKyAgICAgICAgdXBkYXRlVG91Y2hCYXIoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAjZWxzZQogbmFtZXNwYWNlIFdlYktpdCB7CiAK
LXZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZVdlYlZpZXdJbXBsQWRkaXRpb25zKCkKK3ZvaWQgV2Vi
Vmlld0ltcGw6OnVwZGF0ZVRvdWNoQmFyKCkKIHsKIH0KIApAQCAtNDY1LDcgKzExNTgsNyBAQCB2
b2lkIFdlYlZpZXdJbXBsOjpzZXRFZGl0YWJsZUVsZW1lbnRJc0ZvCiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdAotI2VuZGlmIC8vIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0g
MTAxMjAwICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCisjZW5kaWYgLy8gSEFWRShUT1VDSF9C
QVIpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC02MTUsNyArMTMwOCw3IEBAIGJvb2wgV2Vi
Vmlld0ltcGw6OmJlY29tZUZpcnN0UmVzcG9uZGVyKCkKIAogICAgIG1faW5CZWNvbWVGaXJzdFJl
c3BvbmRlciA9IGZhbHNlOwogCi0gICAgdXBkYXRlV2ViVmlld0ltcGxBZGRpdGlvbnMoKTsKKyAg
ICB1cGRhdGVUb3VjaEJhcigpOwogCiAgICAgaWYgKGRpcmVjdGlvbiAhPSBOU0RpcmVjdFNlbGVj
dGlvbikgewogICAgICAgICBOU0V2ZW50ICpldmVudCA9IFtOU0FwcCBjdXJyZW50RXZlbnRdOwpA
QCAtMTgwOCw3ICsyNTAxLDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2VsZWN0aW9uRGlkQ2hhbmdl
KCkKICAgICBpZiAoIW1faXNIYW5kbGluZ0FjY2VwdGVkQ2FuZGlkYXRlKQogICAgICAgICBtX3Nv
ZnRTcGFjZVJhbmdlID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CiAjaWYgX19NQUNfT1Nf
WF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAKLSAgICB1cGRhdGVXZWJWaWV3SW1wbEFk
ZGl0aW9ucygpOworICAgIHVwZGF0ZVRvdWNoQmFyKCk7CiAgICAgaWYgKCFtX3BhZ2UtPmVkaXRv
clN0YXRlKCkuaXNNaXNzaW5nUG9zdExheW91dERhdGEpCiAgICAgICAgIHJlcXVlc3RDYW5kaWRh
dGVzRm9yU2VsZWN0aW9uSWZOZWVkZWQoKTsKICNlbmRpZgpAQCAtMjQ0OCw3ICszMTQxLDcgQEAg
dm9pZCBXZWJWaWV3SW1wbDo6ZGlkSGFuZGxlQWNjZXB0ZWRDYW5kaQogdm9pZCBXZWJWaWV3SW1w
bDo6dmlkZW9Db250cm9sc01hbmFnZXJEaWRDaGFuZ2UoKQogewogI2lmIF9fTUFDX09TX1hfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwCi0gICAgdXBkYXRlV2ViVmlld0ltcGxBZGRpdGlv
bnMoKTsKKyAgICB1cGRhdGVUb3VjaEJhcigpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBACisyMDE2LTExLTA0ICBCZXRoIERha2luICA8
YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBTdXBwb3J0IFRvdWNoQmFyIGluIFdlYktpdAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NDM3Cisg
ICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjg4NzY1
MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVu
dDo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6
OnVwZGF0ZUVkaXRvclN0YXRlQWZ0ZXJMYXlvdXRJZkVkaXRhYmlsaXR5Q2hhbmdlZCk6CisgICAg
ICAgICogV2ViVmlldy9XZWJIVE1MVmlldy5tbToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgY2Fu
ZGlkYXRlTGlzdFRvdWNoQmFySXRlbV0pOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToK
KyAgICAgICAgKC1bX1dlYlRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciBpbml0V2l0aFdl
YlZpZXc6XSk6CisgICAgICAgICgtW19XZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIg
X3NlbGVjdExpc3Q6XSk6CisgICAgICAgICgtW19XZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRy
b2xsZXIgc2V0Q3VycmVudExpc3RUeXBlOl0pOgorICAgICAgICAoLVtXZWJUZXh0VG91Y2hCYXJJ
dGVtQ29udHJvbGxlciBpbml0V2l0aFdlYlZpZXc6XSk6CisgICAgICAgICgtW1dlYlRleHRUb3Vj
aEJhckl0ZW1Db250cm9sbGVyIGl0ZW1Gb3JJZGVudGlmaWVyOl0pOgorICAgICAgICAoLVtXZWJU
ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciB3ZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xs
ZXJdKToKKyAgICAgICAgKC1bV2ViVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElz
Qm9sZDpdKToKKyAgICAgICAgKC1bV2ViVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4
dElzSXRhbGljOl0pOgorICAgICAgICAoLVtXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBz
ZXRUZXh0SXNVbmRlcmxpbmVkOl0pOgorICAgICAgICAoLVtXZWJUZXh0VG91Y2hCYXJJdGVtQ29u
dHJvbGxlciBfd2ViQ2hhbmdlVGV4dFN0eWxlOl0pOgorICAgICAgICAoLVtXZWJUZXh0VG91Y2hC
YXJJdGVtQ29udHJvbGxlciBzZXRDdXJyZW50VGV4dEFsaWdubWVudDpdKToKKyAgICAgICAgKC1b
V2ViVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgX3dlYkNoYW5nZVRleHRBbGlnbm1lbnQ6XSk6
CisgICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHRleHRDb2xvcl0pOgor
ICAgICAgICAoLVtXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRUZXh0Q29sb3I6XSk6
CisgICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIF93ZWJDaGFuZ2VDb2xv
cjpdKToKKyAgICAgICAgKC1bV2ViVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgdGV4dExpc3RW
aWV3Q29udHJvbGxlcl0pOgorICAgICAgICAoLVtXZWJWaWV3IF9jb21tb25Jbml0aWFsaXphdGlv
bldpdGhGcmFtZU5hbWU6Z3JvdXBOYW1lOl0pOgorICAgICAgICAoLVtXZWJWaWV3IHNob3dDYW5k
aWRhdGVzOmZvclN0cmluZzppblJlY3Q6Zm9yU2VsZWN0ZWRSYW5nZTp2aWV3OmNvbXBsZXRpb25I
YW5kbGVyOl0pOgorICAgICAgICAoLVtXZWJWaWV3IHNob3VsZFJlcXVlc3RDYW5kaWRhdGVzXSk6
CisgICAgICAgICgtW1dlYlZpZXcgZm9yY2VSZXF1ZXN0Q2FuZGlkYXRlc0ZvclRlc3RpbmddKToK
KyAgICAgICAgKC1bV2ViVmlldyBtYWtlVG91Y2hCYXJdKToKKyAgICAgICAgKC1bV2ViVmlldyB0
b3VjaEJhcjptYWtlSXRlbUZvcklkZW50aWZpZXI6XSk6CisgICAgICAgICh0ZXh0Q2hlY2tpbmdS
ZXN1bHRGcm9tTlNUZXh0Q2hlY2tpbmdSZXN1bHQpOgorICAgICAgICAoLVtXZWJWaWV3IGNhbmRp
ZGF0ZUxpc3RUb3VjaEJhckl0ZW06ZW5kU2VsZWN0aW5nQ2FuZGlkYXRlQXRJbmRleDpdKToKKyAg
ICAgICAgKC1bV2ViVmlldyBjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtOmNoYW5nZWRDYW5kaWRh
dGVMaXN0VmlzaWJpbGl0eTpdKToKKyAgICAgICAgKC1bV2ViVmlldyBfc2V0VXBQbGF5YmFja0Nv
bnRyb2xzTWFuYWdlckZvck1lZGlhRWxlbWVudDpdKToKKyAgICAgICAgKC1bV2ViVmlldyBfY2xl
YXJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcl0pOgorICAgICAgICAoLVtXZWJWaWV3IF9kaXNtaXNz
VGV4dFRvdWNoQmFyUG9wb3Zlckl0ZW1XaXRoSWRlbnRpZmllcjpdKToKKyAgICAgICAgKC1bV2Vi
VmlldyBfdGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkFsbG93ZWRJZGVudGlmaWVyc10pOgorICAg
ICAgICAoLVtXZWJWaWV3IF9wbGFpblRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25EZWZhdWx0SXRl
bUlkZW50aWZpZXJzXSk6CisgICAgICAgICgtW1dlYlZpZXcgX3JpY2hUZXh0VG91Y2hCYXJDdXN0
b21pemF0aW9uRGVmYXVsdEl0ZW1JZGVudGlmaWVyc10pOgorICAgICAgICAoLVtXZWJWaWV3IHRv
dWNoQmFyRGlkRXhpdEN1c3RvbWl6YXRpb246XSk6CisgICAgICAgICgtW1dlYlZpZXcgdG91Y2hC
YXJXaWxsRW50ZXJDdXN0b21pemF0aW9uOl0pOgorICAgICAgICAoLVtXZWJWaWV3IGRpZENoYW5n
ZUF1dG9tYXRpY1RleHRDb21wbGV0aW9uOl0pOgorICAgICAgICAoLVtXZWJWaWV3IHNldFVwVGV4
dFRvdWNoQmFyOl0pOgorICAgICAgICAoLVtXZWJWaWV3IF9pc1JpY2hseUVkaXRhYmxlXSk6Cisg
ICAgICAgICgtW1dlYlZpZXcgdGV4dFRvdWNoQmFyXSk6CisgICAgICAgICgtW1dlYlZpZXcgdXBk
YXRlVGV4dFRvdWNoQmFyXSk6CisgICAgICAgICgtW1dlYlZpZXcgdXBkYXRlTWVkaWFUb3VjaEJh
cl0pOgorICAgICAgICAoLVtXZWJWaWV3IHVwZGF0ZVRvdWNoQmFyXSk6CisgICAgICAgICgtW1dl
YlZpZXcgcHJlcGFyZUZvck1vdXNlRG93bl0pOgorICAgICAgICAoLVtXZWJWaWV3IHByZXBhcmVG
b3JNb3VzZVVwXSk6CisgICAgICAgICgtW1dlYlZpZXcgd2ViVmlld0FkZGl0aW9uc1dpbGxEZXN0
cm95Vmlld10pOgorICAgICAgICAoLVtXZWJWaWV3IGNhbmRpZGF0ZUxpc3RdKToKKyAgICAgICAg
KC1bV2ViVmlldyB1cGRhdGVXZWJWaWV3QWRkaXRpb25zXSk6IERlbGV0ZWQuCisgICAgICAgICog
V2ViVmlldy9XZWJWaWV3RGF0YS5oOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlld0ludGVybmFs
Lmg6CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3UHJpdmF0ZS5oOgorCiAyMDE2LTExLTA0ICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRk
IGEgc2V0dGluZyBhbmQgcHJlZmVyZW5jZXMgdG8gZW5hYmxlL2Rpc2FibGUgYXN5bmMgaW1hZ2Ug
ZGVjb2RpbmcKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQubW0JKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAt
MzQ3LDcgKzM0Nyw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZXNwb25kVG9DaGFuZ2VkU2UK
ICAgICBOU1ZpZXc8V2ViRG9jdW1lbnRWaWV3PiAqZG9jdW1lbnRWaWV3ID0gW1traXQoZnJhbWUp
IGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsKICAgICBpZiAoW2RvY3VtZW50VmlldyBpc0tpbmRP
ZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKSB7CiAgICAgICAgIFsoV2ViSFRNTFZpZXcgKilk
b2N1bWVudFZpZXcgX3NlbGVjdGlvbkNoYW5nZWRdOwotICAgICAgICBbbV93ZWJWaWV3IHVwZGF0
ZVdlYlZpZXdBZGRpdGlvbnNdOworICAgICAgICBbbV93ZWJWaWV3IHVwZGF0ZVRvdWNoQmFyXTsK
ICAgICAgICAgbV9sYXN0RWRpdG9yU3RhdGVXYXNDb250ZW50RWRpdGFibGUgPSBbKFdlYkhUTUxW
aWV3ICopZG9jdW1lbnRWaWV3IF9pc0VkaXRhYmxlXSA/IEVkaXRvclN0YXRlSXNDb250ZW50RWRp
dGFibGU6OlllcyA6IEVkaXRvclN0YXRlSXNDb250ZW50RWRpdGFibGU6Ok5vOwogICAgIH0KIApA
QCAtNjY3LDcgKzY2Nyw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp1cGRhdGVFZGl0b3JTdGF0
ZUEKIAogICAgIEVkaXRvclN0YXRlSXNDb250ZW50RWRpdGFibGUgZWRpdG9yU3RhdGVJc0NvbnRl
bnRFZGl0YWJsZSA9IFsoV2ViSFRNTFZpZXcgKilkb2N1bWVudFZpZXcgX2lzRWRpdGFibGVdID8g
RWRpdG9yU3RhdGVJc0NvbnRlbnRFZGl0YWJsZTo6WWVzIDogRWRpdG9yU3RhdGVJc0NvbnRlbnRF
ZGl0YWJsZTo6Tm87CiAgICAgaWYgKG1fbGFzdEVkaXRvclN0YXRlV2FzQ29udGVudEVkaXRhYmxl
ICE9IGVkaXRvclN0YXRlSXNDb250ZW50RWRpdGFibGUpCi0gICAgICAgIFttX3dlYlZpZXcgdXBk
YXRlV2ViVmlld0FkZGl0aW9uc107CisgICAgICAgIFttX3dlYlZpZXcgdXBkYXRlVG91Y2hCYXJd
OwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVnaXN0ZXJVbmRvU3RlcChQYXNzUmVmUHRy
PFVuZG9TdGVwPiBjbWQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxW
aWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZp
ZXcubW0JKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
SFRNTFZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTcyMzAsOCArNzIzMCwxMSBAQCAtICh2b2lk
KV91cGRhdGVTZWxlY3Rpb25Gb3JJbnB1dE1hbmFnZXIKICNlbmRpZiAvLyBQTEFURk9STShJT1Mp
CiB9CiAKLSNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPj0gMTAxMjAwICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0jaW1wb3J0IDxXZWJLaXRB
ZGRpdGlvbnMvV2ViSFRNTFZpZXdXZWJOU1RleHRJbnB1dFN1cHBvcnRBZGRpdGlvbnMubW0+Cisj
aWYgSEFWRShUT1VDSF9CQVIpCistIChOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gKiljYW5k
aWRhdGVMaXN0VG91Y2hCYXJJdGVtCit7CisgICAgcmV0dXJuIFtbc2VsZiBfd2ViVmlld10gY2Fu
ZGlkYXRlTGlzdF07Cit9CiAjZW5kaWYKIAogQGVuZApJbmRleDogU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViVmlldy5tbQkocmV2aXNpb24gMjA4NDA1KQorKysgU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDcgQEAKICNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0V4
Y2VwdGlvbi5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZVJlZi5oPgorI2ltcG9y
dCA8V2ViQ29yZS9BVktpdFNQSS5oPgogI2ltcG9ydCA8V2ViQ29yZS9BbHRlcm5hdGl2ZVRleHRV
SUNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvQW5pbWF0aW9uQ29udHJvbGxlci5oPgog
I2ltcG9ydCA8V2ViQ29yZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oPgpAQCAtMTQ0LDYgKzE0
NSw4IEBACiAjaW1wb3J0IDxXZWJDb3JlL0dlb2xvY2F0aW9uQ29udHJvbGxlci5oPgogI2ltcG9y
dCA8V2ViQ29yZS9HZW9sb2NhdGlvbkVycm9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxOYW1l
cy5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MT0xpc3RFbGVtZW50Lmg+CisjaW1wb3J0IDxXZWJD
b3JlL0hUTUxVTGlzdEVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTFZpZGVvRWxlbWVu
dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IaXN0b3J5Q29udHJvbGxlci5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9IaXN0b3J5SXRlbS5oPgpAQCAtMTUzLDExICsxNTYsMTQgQEAKICNpbXBvcnQgPFdlYkNv
cmUvSlNFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0pTTm9kZUxpc3QuaD4KICNpbXBvcnQg
PFdlYkNvcmUvSlNOb3RpZmljYXRpb24uaD4KKyNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3Ry
aW5ncy5oPgogI2ltcG9ydCA8V2ViQ29yZS9Mb2dJbml0aWFsaXphdGlvbi5oPgogI2ltcG9ydCA8
V2ViQ29yZS9NSU1FVHlwZVJlZ2lzdHJ5Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL01haW5GcmFtZS5o
PgogI2ltcG9ydCA8V2ViQ29yZS9NZW1vcnlDYWNoZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9NZW1v
cnlQcmVzc3VyZUhhbmRsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTlNTcGVsbENoZWNrZXJTUEku
aD4KKyNpbXBvcnQgPFdlYkNvcmUvTlNUb3VjaEJhclNQSS5oPgogI2ltcG9ydCA8V2ViQ29yZS9O
U1VSTEZpbGVUeXBlTWFwcGluZ3NTUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05vZGVMaXN0Lmg+CkBAIC0xOTIsNiArMTk4
LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZU9iakNFeHRyYXMuaD4KICNpbXBvcnQgPFdl
YkNvcmUvV2ViQ29yZVZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2lkZ2V0Lmg+CisjaW1wb3J0
IDxXZWJDb3JlL2h0bWxlZGl0aW5nLmg+CiAjaW1wb3J0IDxXZWJLaXRMZWdhY3kvRE9NLmg+CiAj
aW1wb3J0IDxXZWJLaXRMZWdhY3kvRE9NRXh0ZW5zaW9ucy5oPgogI2ltcG9ydCA8V2ViS2l0TGVn
YWN5L0RPTVByaXZhdGUuaD4KQEAgLTIxMyw2ICsyMjAsNyBAQAogI2ltcG9ydCA8d3RmL1JlZlB0
ci5oPgogI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KICNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KKyNpbXBvcnQgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KICNpbXBvcnQgPHd0Zi9zcGkvZGFy
d2luL2R5bGRTUEkuaD4KIAogI2lmICFQTEFURk9STShJT1MpCkBAIC0zMDcsNiArMzE1LDEyIEBA
CiAjaW1wb3J0IDxXZWJDb3JlL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lmg+
CiAjZW5kaWYKIAorI2lmIEhBVkUoVE9VQ0hfQkFSKSAmJiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NP
TlRST0xTX01BTkFHRVIpCitTT0ZUX0xJTktfRlJBTUVXT1JLKEFWS2l0KQorU09GVF9MSU5LX0NM
QVNTKEFWS2l0LCBBVkZ1bmN0aW9uQmFyUGxheWJhY2tDb250cm9sc1Byb3ZpZGVyKQorU09GVF9M
SU5LX0NMQVNTKEFWS2l0LCBBVkZ1bmN0aW9uQmFyU2NydWJiZXIpCisjZW5kaWYgLy8gSEFWRShU
T1VDSF9CQVIpICYmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKwogI2lm
IFBMQVRGT1JNKE1BQykKIFNPRlRfTElOS19DT05TVEFOVF9NQVlfRkFJTChMb29rdXAsIExVTm90
aWZpY2F0aW9uUG9wb3ZlcldpbGxDbG9zZSwgTlNTdHJpbmcgKikKICNlbmRpZgpAQCAtNjYyLDYg
KzY3NiwyODEgQEAgc3RhdGljIEJPT0wgYXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYgogc3Rh
dGljIEJPT0wgYXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZDsKICNlbmRpZgogCisj
aWYgSEFWRShUT1VDSF9CQVIpCisKK2VudW0gY2xhc3MgV2ViTGlzdFR5cGUgeworICAgIE5vbmUg
PSAwLAorICAgIE9yZGVyZWQsCisgICAgVW5vcmRlcmVkCit9OworCitAaW50ZXJmYWNlIF9XZWJU
ZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgOiBOU1ZpZXdDb250cm9sbGVyIHsKKyAgICBX
ZWJMaXN0VHlwZSBfY3VycmVudExpc3RUeXBlOworCitAcHJpdmF0ZQorICAgIFdlYlZpZXcgKl93
ZWJWaWV3OworfQorCitAcHJvcGVydHkgKG5vbmF0b21pYykgV2ViTGlzdFR5cGUgY3VycmVudExp
c3RUeXBlOworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWV3OihXZWJWaWV3ICopd2Vi
VmlldzsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gX1dlYlRleHRMaXN0VG91Y2hCYXJWaWV3
Q29udHJvbGxlcgorCitAc3ludGhlc2l6ZSBjdXJyZW50TGlzdFR5cGU9X2N1cnJlbnRMaXN0VHlw
ZTsKKworc3RhdGljIGNvbnN0IGRvdWJsZSBsaXN0Q29udHJvbFNlZ21lbnRXaWR0aCA9IDY3LjA7
CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBub0xpc3RTZWdtZW50ID0gMDsKK3N0YXRpYyBjb25z
dCB1bnNpZ25lZCB1bm9yZGVyZWRMaXN0U2VnbWVudCA9IDE7CitzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgb3JkZXJlZExpc3RTZWdtZW50ID0gMjsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2Vi
VmlldzooV2ViVmlldyAqKXdlYlZpZXcKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRd
KSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF93ZWJWaWV3ID0gd2ViVmlldzsKKworICAg
IE5TU2VnbWVudGVkQ29udHJvbCAqaW5zZXJ0TGlzdENvbnRyb2wgPSBbTlNTZWdtZW50ZWRDb250
cm9sIHNlZ21lbnRlZENvbnRyb2xXaXRoTGFiZWxzOkBbIFdlYkNvcmU6Omluc2VydExpc3RUeXBl
Tm9uZSgpLCBXZWJDb3JlOjppbnNlcnRMaXN0VHlwZUJ1bGxldGVkKCksIFdlYkNvcmU6Omluc2Vy
dExpc3RUeXBlTnVtYmVyZWQoKSBdIHRyYWNraW5nTW9kZTpOU1NlZ21lbnRTd2l0Y2hUcmFja2lu
Z1NlbGVjdE9uZSB0YXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKF9zZWxlY3RMaXN0OildOwor
ICAgIFtpbnNlcnRMaXN0Q29udHJvbCBzZXRXaWR0aDpsaXN0Q29udHJvbFNlZ21lbnRXaWR0aCBm
b3JTZWdtZW50Om5vTGlzdFNlZ21lbnRdOworICAgIFtpbnNlcnRMaXN0Q29udHJvbCBzZXRXaWR0
aDpsaXN0Q29udHJvbFNlZ21lbnRXaWR0aCBmb3JTZWdtZW50OnVub3JkZXJlZExpc3RTZWdtZW50
XTsKKyAgICBbaW5zZXJ0TGlzdENvbnRyb2wgc2V0V2lkdGg6bGlzdENvbnRyb2xTZWdtZW50V2lk
dGggZm9yU2VnbWVudDpvcmRlcmVkTGlzdFNlZ21lbnRdOworICAgIGluc2VydExpc3RDb250cm9s
LmZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6MTVdOworCisjcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVj
YXRlZC1kZWNsYXJhdGlvbnMiCisgICAgaWQgc2VnbWVudEVsZW1lbnQgPSBOU0FjY2Vzc2liaWxp
dHlVbmlnbm9yZWREZXNjZW5kYW50KGluc2VydExpc3RDb250cm9sKTsKKyAgICBOU0FycmF5ICpz
ZWdtZW50cyA9IFtzZWdtZW50RWxlbWVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5BdHRyaWJ1dGVdOworICAgIEFTU0VSVChzZWdtZW50cy5jb3Vu
dCA9PSAzKTsKKyAgICBbW3NlZ21lbnRzIG9iamVjdEF0SW5kZXg6bm9MaXN0U2VnbWVudF0gYWNj
ZXNzaWJpbGl0eVNldE92ZXJyaWRlVmFsdWU6V2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVOb25lKCkg
Zm9yQXR0cmlidXRlOk5TQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uQXR0cmlidXRlXTsKKyAgICBb
W3NlZ21lbnRzIG9iamVjdEF0SW5kZXg6dW5vcmRlcmVkTGlzdFNlZ21lbnRdIGFjY2Vzc2liaWxp
dHlTZXRPdmVycmlkZVZhbHVlOldlYkNvcmU6Omluc2VydExpc3RUeXBlQnVsbGV0ZWRBY2Nlc3Np
YmlsaXR5VGl0bGUoKSBmb3JBdHRyaWJ1dGU6TlNBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25BdHRy
aWJ1dGVdOworICAgIFtbc2VnbWVudHMgb2JqZWN0QXRJbmRleDpvcmRlcmVkTGlzdFNlZ21lbnRd
IGFjY2Vzc2liaWxpdHlTZXRPdmVycmlkZVZhbHVlOldlYkNvcmU6Omluc2VydExpc3RUeXBlTnVt
YmVyZWRBY2Nlc3NpYmlsaXR5VGl0bGUoKSBmb3JBdHRyaWJ1dGU6TlNBY2Nlc3NpYmlsaXR5RGVz
Y3JpcHRpb25BdHRyaWJ1dGVdOworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorCisgICAg
c2VsZi52aWV3ID0gaW5zZXJ0TGlzdENvbnRyb2w7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKwor
LSAodm9pZClfc2VsZWN0TGlzdDooaWQpc2VuZGVyCit7CisgICAgTlNWaWV3ICpkb2N1bWVudFZp
ZXcgPSBbW1tfd2ViVmlldyBfc2VsZWN0ZWRPck1haW5GcmFtZV0gZnJhbWVWaWV3XSBkb2N1bWVu
dFZpZXddOworICAgIGlmICghW2RvY3VtZW50VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmll
dyBjbGFzc11dKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJIVE1MVmlldyAqd2ViSFRNTFZp
ZXcgPSAoV2ViSFRNTFZpZXcgKilkb2N1bWVudFZpZXc7CisgICAgTlNTZWdtZW50ZWRDb250cm9s
ICppbnNlcnRMaXN0Q29udHJvbCA9IChOU1NlZ21lbnRlZENvbnRyb2wgKilzZWxmLnZpZXc7Cisg
ICAgaWYgKGluc2VydExpc3RDb250cm9sLnNlbGVjdGVkU2VnbWVudCA9PSBub0xpc3RTZWdtZW50
KSB7CisgICAgICAgIC8vIFRoZXJlIGlzIG5vICJyZW1vdmUgbGlzdCIgZWRpdCBjb21tYW5kLCBi
dXQgX2luc2VydE9yZGVyZWRMaXN0IGFuZCBfaW5zZXJ0VW5vcmRlcmVkTGlzdCBib3RoCisgICAg
ICAgIC8vIGJlaGF2ZSBhcyB0b2dnbGVzLCBzbyB3ZSBjYW4gaW52b2tlIHRoZSBhcHByb3ByaWF0
ZSBtZXRob2QgZGVwZW5kaW5nIG9uIG91ciBfY3VycmVudExpc3RUeXBlCisgICAgICAgIC8vIHRv
IHJlbW92ZSBhbiBleGlzdGluZyBsaXN0LiBXZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIGlm
IF9jdXJyZW50TGlzdFR5cGUgaXMgV2ViTGlzdFR5cGU6Ok5vbmUuCisgICAgICAgIGlmIChfY3Vy
cmVudExpc3RUeXBlID09IFdlYkxpc3RUeXBlOjpPcmRlcmVkKQorICAgICAgICAgICAgW3dlYkhU
TUxWaWV3IF9pbnNlcnRPcmRlcmVkTGlzdF07CisgICAgICAgIGVsc2UgaWYgKF9jdXJyZW50TGlz
dFR5cGUgPT0gV2ViTGlzdFR5cGU6OlVub3JkZXJlZCkKKyAgICAgICAgICAgIFt3ZWJIVE1MVmll
dyBfaW5zZXJ0VW5vcmRlcmVkTGlzdF07CisgICAgfSBlbHNlIGlmIChpbnNlcnRMaXN0Q29udHJv
bC5zZWxlY3RlZFNlZ21lbnQgPT0gdW5vcmRlcmVkTGlzdFNlZ21lbnQpCisgICAgICAgIFt3ZWJI
VE1MVmlldyBfaW5zZXJ0VW5vcmRlcmVkTGlzdF07CisgICAgZWxzZSBpZiAoaW5zZXJ0TGlzdENv
bnRyb2wuc2VsZWN0ZWRTZWdtZW50ID09IG9yZGVyZWRMaXN0U2VnbWVudCkKKyAgICAgICAgW3dl
YkhUTUxWaWV3IF9pbnNlcnRPcmRlcmVkTGlzdF07CisKKyAgICBbX3dlYlZpZXcgX2Rpc21pc3NU
ZXh0VG91Y2hCYXJQb3BvdmVySXRlbVdpdGhJZGVudGlmaWVyOk5TVG91Y2hCYXJJdGVtSWRlbnRp
ZmllclRleHRMaXN0XTsKK30KKworLSAodm9pZClzZXRDdXJyZW50TGlzdFR5cGU6KFdlYkxpc3RU
eXBlKWxpc3RUeXBlCit7CisgICAgTlNTZWdtZW50ZWRDb250cm9sICppbnNlcnRMaXN0Q29udHJv
bCA9IChOU1NlZ21lbnRlZENvbnRyb2wgKilzZWxmLnZpZXc7CisgICAgc3dpdGNoIChsaXN0VHlw
ZSkgeworICAgIGNhc2UgV2ViTGlzdFR5cGU6Ok5vbmU6CisgICAgICAgIFtpbnNlcnRMaXN0Q29u
dHJvbCBzZXRTZWxlY3RlZDpZRVMgZm9yU2VnbWVudDpub0xpc3RTZWdtZW50XTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBXZWJMaXN0VHlwZTo6T3JkZXJlZDoKKyAgICAgICAgW2luc2VydExp
c3RDb250cm9sIHNldFNlbGVjdGVkOllFUyBmb3JTZWdtZW50Om9yZGVyZWRMaXN0U2VnbWVudF07
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViTGlzdFR5cGU6OlVub3JkZXJlZDoKKyAgICAg
ICAgW2luc2VydExpc3RDb250cm9sIHNldFNlbGVjdGVkOllFUyBmb3JTZWdtZW50OnVub3JkZXJl
ZExpc3RTZWdtZW50XTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgX2N1cnJlbnRMaXN0
VHlwZSA9IGxpc3RUeXBlOworfQorCitAZW5kCisKK0BpbnRlcmZhY2UgV2ViVGV4dFRvdWNoQmFy
SXRlbUNvbnRyb2xsZXIgOiBOU1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHsKKyAgICBCT09M
IF90ZXh0SXNCb2xkOworICAgIEJPT0wgX3RleHRJc0l0YWxpYzsKKyAgICBCT09MIF90ZXh0SXNV
bmRlcmxpbmVkOworICAgIE5TVGV4dEFsaWdubWVudCBfY3VycmVudFRleHRBbGlnbm1lbnQ7Cisg
ICAgUmV0YWluUHRyPE5TQ29sb3I+IF90ZXh0Q29sb3I7CisgICAgUmV0YWluUHRyPF9XZWJUZXh0
TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXI+IF93ZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRy
b2xsZXI7CisKK0Bwcml2YXRlCisgICAgV2ViVmlldyAqX3dlYlZpZXc7Cit9CisKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljKSBCT09MIHRleHRJc0JvbGQ7CitAcHJvcGVydHkgKG5vbmF0b21pYykgQk9P
TCB0ZXh0SXNJdGFsaWM7CitAcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCB0ZXh0SXNVbmRlcmxp
bmVkOworQHByb3BlcnR5IChub25hdG9taWMpIE5TVGV4dEFsaWdubWVudCBjdXJyZW50VGV4dEFs
aWdubWVudDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHJlYWR3cml0ZSkgTlNDb2xv
ciAqdGV4dENvbG9yOworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWV3OihXZWJWaWV3
ICopd2ViVmlldzsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYlRleHRUb3VjaEJhckl0ZW1D
b250cm9sbGVyCisKK0BzeW50aGVzaXplIHRleHRJc0JvbGQ9X3RleHRJc0JvbGQ7CitAc3ludGhl
c2l6ZSB0ZXh0SXNJdGFsaWM9X3RleHRJc0l0YWxpYzsKK0BzeW50aGVzaXplIHRleHRJc1VuZGVy
bGluZWQ9X3RleHRJc1VuZGVybGluZWQ7CitAc3ludGhlc2l6ZSBjdXJyZW50VGV4dEFsaWdubWVu
dD1fY3VycmVudFRleHRBbGlnbm1lbnQ7CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZp
ZXc6KFdlYlZpZXcgKil3ZWJWaWV3Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkp
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfd2ViVmlldyA9IHdlYlZpZXc7CisKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAoTlNUb3VjaEJhckl0ZW0gKilpdGVtRm9ySWRlbnRpZmllcjoo
TlNTdHJpbmcgKilpZGVudGlmaWVyCit7CisgICAgTlNUb3VjaEJhckl0ZW0gKml0ZW0gPSBbc3Vw
ZXIgaXRlbUZvcklkZW50aWZpZXI6aWRlbnRpZmllcl07CisgICAgQk9PTCBpc1RleHRGb3JtYXRJ
dGVtID0gW2lkZW50aWZpZXIgaXNFcXVhbFRvU3RyaW5nOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmll
clRleHRGb3JtYXRdOworCisgICAgaWYgKGlzVGV4dEZvcm1hdEl0ZW0gfHwgW2lkZW50aWZpZXIg
aXNFcXVhbFRvU3RyaW5nOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRTdHlsZV0pCisgICAg
ICAgIHNlbGYudGV4dFN0eWxlLmFjdGlvbiA9IEBzZWxlY3Rvcihfd2ViQ2hhbmdlVGV4dFN0eWxl
Oik7CisKKyAgICBpZiAoaXNUZXh0Rm9ybWF0SXRlbSB8fCBbaWRlbnRpZmllciBpc0VxdWFsVG9T
dHJpbmc6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEFsaWdubWVudF0pCisgICAgICAgIHNl
bGYudGV4dEFsaWdubWVudHMuYWN0aW9uID0gQHNlbGVjdG9yKF93ZWJDaGFuZ2VUZXh0QWxpZ25t
ZW50Oik7CisKKyAgICBOU0NvbG9yUGlja2VyVG91Y2hCYXJJdGVtICpjb2xvclBpY2tlckl0ZW0g
PSBuaWw7CisgICAgaWYgKFtpZGVudGlmaWVyIGlzRXF1YWxUb1N0cmluZzpOU1RvdWNoQmFySXRl
bUlkZW50aWZpZXJUZXh0Q29sb3JQaWNrZXJdICYmIFtpdGVtIGlzS2luZE9mQ2xhc3M6W05TQ29s
b3JQaWNrZXJUb3VjaEJhckl0ZW0gY2xhc3NdXSkKKyAgICAgICAgY29sb3JQaWNrZXJJdGVtID0g
KE5TQ29sb3JQaWNrZXJUb3VjaEJhckl0ZW0gKilpdGVtOworICAgIGlmIChpc1RleHRGb3JtYXRJ
dGVtKQorICAgICAgICBjb2xvclBpY2tlckl0ZW0gPSBzZWxmLmNvbG9yUGlja2VySXRlbTsKKyAg
ICBpZiAoY29sb3JQaWNrZXJJdGVtKSB7CisgICAgICAgIGNvbG9yUGlja2VySXRlbS50YXJnZXQg
PSBzZWxmOworICAgICAgICBjb2xvclBpY2tlckl0ZW0uYWN0aW9uID0gQHNlbGVjdG9yKF93ZWJD
aGFuZ2VDb2xvcjopOworICAgICAgICBjb2xvclBpY2tlckl0ZW0uc2hvd3NBbHBoYSA9IE5POwor
ICAgIH0KKworICAgIHJldHVybiBpdGVtOworfQorCistIChfV2ViVGV4dExpc3RUb3VjaEJhclZp
ZXdDb250cm9sbGVyICopd2ViVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyCit7CisgICAg
cmV0dXJuIChfV2ViVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyICopW3NlbGYgdGV4dExp
c3RWaWV3Q29udHJvbGxlcl07Cit9CisKKy0gKHZvaWQpc2V0VGV4dElzQm9sZDooQk9PTClib2xk
Cit7CisgICAgX3RleHRJc0JvbGQgPSBib2xkOworICAgIGlmIChbc2VsZi50ZXh0U3R5bGUgaXNT
ZWxlY3RlZEZvclNlZ21lbnQ6MF0gIT0gX3RleHRJc0JvbGQpCisgICAgICAgIFtzZWxmLnRleHRT
dHlsZSBzZXRTZWxlY3RlZDpfdGV4dElzQm9sZCBmb3JTZWdtZW50OjBdOworfQorCistICh2b2lk
KXNldFRleHRJc0l0YWxpYzooQk9PTClpdGFsaWMKK3sKKyAgICBfdGV4dElzSXRhbGljID0gaXRh
bGljOworICAgIGlmIChbc2VsZi50ZXh0U3R5bGUgaXNTZWxlY3RlZEZvclNlZ21lbnQ6MV0gIT0g
X3RleHRJc0l0YWxpYykKKyAgICAgICAgW3NlbGYudGV4dFN0eWxlIHNldFNlbGVjdGVkOl90ZXh0
SXNJdGFsaWMgZm9yU2VnbWVudDoxXTsKK30KKworLSAodm9pZClzZXRUZXh0SXNVbmRlcmxpbmVk
OihCT09MKXVuZGVybGluZWQKK3sKKyAgICBfdGV4dElzVW5kZXJsaW5lZCA9IHVuZGVybGluZWQ7
CisgICAgaWYgKFtzZWxmLnRleHRTdHlsZSBpc1NlbGVjdGVkRm9yU2VnbWVudDoyXSAhPSBfdGV4
dElzVW5kZXJsaW5lZCkKKyAgICAgICAgW3NlbGYudGV4dFN0eWxlIHNldFNlbGVjdGVkOl90ZXh0
SXNVbmRlcmxpbmVkIGZvclNlZ21lbnQ6Ml07Cit9CisKKy0gKHZvaWQpX3dlYkNoYW5nZVRleHRT
dHlsZTooaWQpc2VuZGVyCit7CisgICAgaWYgKFtzZWxmLnRleHRTdHlsZSBpc1NlbGVjdGVkRm9y
U2VnbWVudDowXSAhPSBfdGV4dElzQm9sZCkgeworICAgICAgICBfdGV4dElzQm9sZCA9ICFfdGV4
dElzQm9sZDsKKyAgICAgICAgW193ZWJWaWV3IF9leGVjdXRlQ29yZUNvbW1hbmRCeU5hbWU6QCJU
b2dnbGVCb2xkIiB2YWx1ZTpAIiJdOworICAgIH0KKworICAgIGlmIChbc2VsZi50ZXh0U3R5bGUg
aXNTZWxlY3RlZEZvclNlZ21lbnQ6MV0gIT0gX3RleHRJc0l0YWxpYykgeworICAgICAgICBfdGV4
dElzSXRhbGljID0gIV90ZXh0SXNJdGFsaWM7CisgICAgICAgIFtfd2ViVmlldyBfZXhlY3V0ZUNv
cmVDb21tYW5kQnlOYW1lOkAiVG9nZ2xlSXRhbGljIiB2YWx1ZTpAIiJdOworICAgIH0KKworICAg
IGlmIChbc2VsZi50ZXh0U3R5bGUgaXNTZWxlY3RlZEZvclNlZ21lbnQ6Ml0gIT0gX3RleHRJc1Vu
ZGVybGluZWQpIHsKKyAgICAgICAgX3RleHRJc1VuZGVybGluZWQgPSAhX3RleHRJc1VuZGVybGlu
ZWQ7CisgICAgICAgIFtfd2ViVmlldyBfZXhlY3V0ZUNvcmVDb21tYW5kQnlOYW1lOkAiVG9nZ2xl
VW5kZXJsaW5lIiB2YWx1ZTpAIiJdOworICAgIH0KK30KKworLSAodm9pZClzZXRDdXJyZW50VGV4
dEFsaWdubWVudDooTlNUZXh0QWxpZ25tZW50KWFsaWdubWVudAoreworICAgIF9jdXJyZW50VGV4
dEFsaWdubWVudCA9IGFsaWdubWVudDsKKyAgICBbc2VsZi50ZXh0QWxpZ25tZW50cyBzZWxlY3RT
ZWdtZW50V2l0aFRhZzpfY3VycmVudFRleHRBbGlnbm1lbnRdOworfQorCistICh2b2lkKV93ZWJD
aGFuZ2VUZXh0QWxpZ25tZW50OihpZClzZW5kZXIKK3sKKyAgICBOU1RleHRBbGlnbm1lbnQgYWxp
Z25tZW50ID0gKE5TVGV4dEFsaWdubWVudClbc2VsZi50ZXh0QWxpZ25tZW50cy5jZWxsIHRhZ0Zv
clNlZ21lbnQ6W3NlbGYudGV4dEFsaWdubWVudHMgc2VsZWN0ZWRTZWdtZW50XV07CisgICAgc3dp
dGNoIChhbGlnbm1lbnQpIHsKKyAgICBjYXNlIE5TVGV4dEFsaWdubWVudExlZnQ6IHsKKyAgICAg
ICAgX2N1cnJlbnRUZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25tZW50TGVmdDsKKyAgICAgICAg
W193ZWJWaWV3IGFsaWduTGVmdDpzZW5kZXJdOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBOU1RleHRBbGlnbm1lbnRSaWdodDogeworICAgICAgICBfY3VycmVudFRleHRBbGlnbm1l
bnQgPSBOU1RleHRBbGlnbm1lbnRSaWdodDsKKyAgICAgICAgW193ZWJWaWV3IGFsaWduUmlnaHQ6
c2VuZGVyXTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgTlNUZXh0QWxpZ25tZW50
Q2VudGVyOiB7CisgICAgICAgIF9jdXJyZW50VGV4dEFsaWdubWVudCA9IE5TVGV4dEFsaWdubWVu
dENlbnRlcjsKKyAgICAgICAgW193ZWJWaWV3IGFsaWduQ2VudGVyOnNlbmRlcl07CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIE5TVGV4dEFsaWdubWVudEp1c3RpZmllZDogeworICAg
ICAgICBfY3VycmVudFRleHRBbGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRKdXN0aWZpZWQ7Cisg
ICAgICAgIFtfd2ViVmlldyBhbGlnbkp1c3RpZmllZDpzZW5kZXJdOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgW193ZWJW
aWV3IF9kaXNtaXNzVGV4dFRvdWNoQmFyUG9wb3Zlckl0ZW1XaXRoSWRlbnRpZmllcjpOU1RvdWNo
QmFySXRlbUlkZW50aWZpZXJUZXh0QWxpZ25tZW50XTsKK30KKworLSAoTlNDb2xvciAqKXRleHRD
b2xvcgoreworICAgIHJldHVybiBfdGV4dENvbG9yLmdldCgpOworfQorCistICh2b2lkKXNldFRl
eHRDb2xvcjooTlNDb2xvciAqKWNvbG9yCit7CisgICAgX3RleHRDb2xvciA9IGNvbG9yOworICAg
IHNlbGYuY29sb3JQaWNrZXJJdGVtLmNvbG9yID0gX3RleHRDb2xvci5nZXQoKTsKK30KKworLSAo
dm9pZClfd2ViQ2hhbmdlQ29sb3I6KGlkKXNlbmRlcgoreworICAgIF90ZXh0Q29sb3IgPSBzZWxm
LmNvbG9yUGlja2VySXRlbS5jb2xvcjsKKyAgICBbX3dlYlZpZXcgX2V4ZWN1dGVDb3JlQ29tbWFu
ZEJ5TmFtZTpAIkZvcmVDb2xvciIgdmFsdWU6IFdlYkNvcmU6OmNvbG9yRnJvbU5TQ29sb3IoX3Rl
eHRDb2xvci5nZXQoKSkuc2VyaWFsaXplZCgpXTsKK30KKworLSAoTlNWaWV3Q29udHJvbGxlciAq
KXRleHRMaXN0Vmlld0NvbnRyb2xsZXIKK3sKKyAgICBpZiAoIV93ZWJUZXh0TGlzdFRvdWNoQmFy
Vmlld0NvbnRyb2xsZXIpCisgICAgICAgIF93ZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xs
ZXIgPSBhZG9wdE5TKFtbX1dlYlRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciBhbGxvY10g
aW5pdFdpdGhXZWJWaWV3Ol93ZWJWaWV3XSk7CisgICAgcmV0dXJuIF93ZWJUZXh0TGlzdFRvdWNo
QmFyVmlld0NvbnRyb2xsZXIuZ2V0KCk7Cit9CisKK0BlbmQKKworI2VuZGlmIC8vIEhBVkUoVE9V
Q0hfQkFSKQorCiBAaW1wbGVtZW50YXRpb24gV2ViVmlldyAoQWxsV2ViVmlld3MpCiAKIHN0YXRp
YyBDRlNldENhbGxCYWNrcyBOb25SZXRhaW5pbmdTZXRDYWxsYmFja3MgPSB7CkBAIC05NzAsNyAr
MTI1OSw3IEBAIC0gKHZvaWQpX2NvbW1vbkluaXRpYWxpemF0aW9uV2l0aEZyYW1lTmEKICAgICB9
CiAjZW5kaWYKIAotICAgIFtzZWxmIHVwZGF0ZVdlYlZpZXdBZGRpdGlvbnNdOworICAgIFtzZWxm
IHVwZGF0ZVRvdWNoQmFyXTsKIAogI2lmICFQTEFURk9STShJT1MpCiAgICAgc3RhdGljIGJvb2wg
ZGlkT25lVGltZUluaXRpYWxpemF0aW9uID0gZmFsc2U7CkBAIC00NjkyLDYgKzQ5ODEsNDUgQEAg
LSAodm9pZClfc2V0Rm9udEZhbGxiYWNrUHJlZmVyc1BpY3RvZ3JhcAogICAgICAgICBfcHJpdmF0
ZS0+cGFnZS0+c2V0dGluZ3MoKS5zZXRGb250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHMoZmxh
Zyk7CiB9CiAKKyNpZiBIQVZFKFRPVUNIX0JBUikKKworLSAodm9pZClzaG93Q2FuZGlkYXRlczoo
TlNBcnJheTxOU1RleHRDaGVja2luZ1Jlc3VsdCAqPiAqKWNhbmRpZGF0ZXMgZm9yU3RyaW5nOihO
U1N0cmluZyAqKXN0cmluZyBpblJlY3Q6KE5TUmVjdClyZWN0T2ZUeXBlZFN0cmluZyBmb3JTZWxl
Y3RlZFJhbmdlOihOU1JhbmdlKXJhbmdlIHZpZXc6KE5TVmlldyAqKXZpZXcgY29tcGxldGlvbkhh
bmRsZXI6KHZvaWQgKF4pKE5TVGV4dENoZWNraW5nUmVzdWx0ICphY2NlcHRlZENhbmRpZGF0ZSkp
Y29tcGxldGlvbkJsb2NrCit7CisgICAgW3NlbGYuY2FuZGlkYXRlTGlzdCBzZXRDYW5kaWRhdGVz
OmNhbmRpZGF0ZXMgZm9yU2VsZWN0ZWRSYW5nZTpyYW5nZSBpblN0cmluZzpzdHJpbmddOworfQor
CistIChCT09MKXNob3VsZFJlcXVlc3RDYW5kaWRhdGVzCit7CisgICAgRnJhbWUqIGNvcmVGcmFt
ZSA9IGNvcmUoW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVdKTsKKyAgICBpZiAoIWNvcmVGcmFt
ZSkKKyAgICAgICAgcmV0dXJuIE5POworCisgICAgcmV0dXJuICFjb3JlRnJhbWUtPnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkgJiYgc2VsZi5jYW5kaWRhdGVMaXN0
LmNhbmRpZGF0ZUxpc3RWaXNpYmxlOworfQorCistICh2b2lkKWZvcmNlUmVxdWVzdENhbmRpZGF0
ZXNGb3JUZXN0aW5nCit7CisgICAgX3ByaXZhdGUtPl9jYW5DcmVhdGVUb3VjaEJhcnMgPSBZRVM7
CisgICAgW3NlbGYgdXBkYXRlVG91Y2hCYXJdOworfQorCisjZWxzZQorCistICh2b2lkKXNob3dD
YW5kaWRhdGVzOihOU0FycmF5ICopY2FuZGlkYXRlcyBmb3JTdHJpbmc6KE5TU3RyaW5nICopc3Ry
aW5nIGluUmVjdDooTlNSZWN0KXJlY3RPZlR5cGVkU3RyaW5nIGZvclNlbGVjdGVkUmFuZ2U6KE5T
UmFuZ2UpcmFuZ2UgdmlldzooTlNWaWV3ICopdmlldyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAo
XikoTlNUZXh0Q2hlY2tpbmdSZXN1bHQgKmFjY2VwdGVkQ2FuZGlkYXRlKSljb21wbGV0aW9uQmxv
Y2sKK3sKK30KKworLSAodm9pZClmb3JjZVJlcXVlc3RDYW5kaWRhdGVzRm9yVGVzdGluZworewor
fQorCistIChCT09MKXNob3VsZFJlcXVlc3RDYW5kaWRhdGVzCit7CisgICAgcmV0dXJuIE5POwor
fQorCisjZW5kaWYgLy8gSEFWRShUT1VDSF9CQVIpCisKIEBlbmQKIAogQGltcGxlbWVudGF0aW9u
IF9XZWJTYWZlRm9yd2FyZGVyCkBAIC00ODA0LDYgKzUxMzIsMTEgQEAgLSAoTlNNZXRob2RTaWdu
YXR1cmUgKiltZXRob2RTaWduYXR1cmVGbwogQGVuZAogI2VuZGlmCiAKKyNpZiBIQVZFKFRPVUNI
X0JBUikKK0BpbnRlcmZhY2UgV2ViVmlldyAoKSA8TlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVt
RGVsZWdhdGUsIE5TVG91Y2hCYXJEZWxlZ2F0ZSwgTlNUb3VjaEJhclByb3ZpZGVyPgorQGVuZAor
I2VuZGlmCisKIEBpbXBsZW1lbnRhdGlvbiBXZWJWaWV3CiAKICsgKHZvaWQpaW5pdGlhbGl6ZQpA
QCAtNjQ4OCw2ICs2ODIxLDg3IEBAIC0gKE5TVmlldyAqKXByZXZpb3VzVmFsaWRLZXlWaWV3CiAg
ICAgcmV0dXJuIFtwcmV2aW91c1ZpZXcgcHJldmlvdXNWYWxpZEtleVZpZXddOwogfQogCisjaWYg
SEFWRShUT1VDSF9CQVIpCisKK0BkeW5hbWljIHRvdWNoQmFyOworCistIChOU1RvdWNoQmFyICop
bWFrZVRvdWNoQmFyCit7CisgICAgaWYgKCFfcHJpdmF0ZS0+X2NhbkNyZWF0ZVRvdWNoQmFycykg
eworICAgICAgICBfcHJpdmF0ZS0+X2NhbkNyZWF0ZVRvdWNoQmFycyA9IFlFUzsKKyAgICAgICAg
W3NlbGYgdXBkYXRlVG91Y2hCYXJdOworICAgIH0KKyAgICByZXR1cm4gX3ByaXZhdGUtPl9jdXJy
ZW50VG91Y2hCYXIuZ2V0KCk7Cit9CisKKy0gKE5TVG91Y2hCYXJJdGVtICopdG91Y2hCYXI6KE5T
VG91Y2hCYXIgKil0b3VjaEJhciBtYWtlSXRlbUZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRl
bnRpZmllcgoreworICAgIGlmICh0b3VjaEJhciA9PSBfcHJpdmF0ZS0+X3JpY2hUZXh0VG91Y2hC
YXIgfHwgdG91Y2hCYXIgPT0gX3ByaXZhdGUtPl9wbGFpblRleHRUb3VjaEJhcikKKyAgICAgICAg
cmV0dXJuIFtfcHJpdmF0ZS0+X3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIGl0ZW1Gb3JJZGVu
dGlmaWVyOmlkZW50aWZpZXJdOworCisgICAgcmV0dXJuIG5pbDsKK30KKworc3RhdGljIFRleHRD
aGVja2luZ1Jlc3VsdCB0ZXh0Q2hlY2tpbmdSZXN1bHRGcm9tTlNUZXh0Q2hlY2tpbmdSZXN1bHQo
TlNUZXh0Q2hlY2tpbmdSZXN1bHQgKm5zUmVzdWx0KQoreworICAgIFdlYkNvcmU6OlRleHRDaGVj
a2luZ1Jlc3VsdCByZXN1bHQ7CisKKyAgICBzd2l0Y2ggKFtuc1Jlc3VsdCByZXN1bHRUeXBlXSkg
eworICAgIGNhc2UgTlNUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmc6CisgICAgICAgIHJlc3VsdC50
eXBlID0gV2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZVNwZWxsaW5nOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIE5TVGV4dENoZWNraW5nVHlwZVJlcGxhY2VtZW50OgorICAgICAgICByZXN1bHQu
dHlwZSA9IFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGVSZXBsYWNlbWVudDsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBOU1RleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uOgorICAgICAgICByZXN1
bHQudHlwZSA9IFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXN1bHQudHlwZSA9IFdlYkNvcmU6OlRleHRD
aGVja2luZ1R5cGVOb25lOworICAgIH0KKworICAgIE5TUmFuZ2UgcmVzdWx0UmFuZ2UgPSBuc1Jl
c3VsdC5yYW5nZTsKKyAgICByZXN1bHQubG9jYXRpb24gPSByZXN1bHRSYW5nZS5sb2NhdGlvbjsK
KyAgICByZXN1bHQubGVuZ3RoID0gcmVzdWx0UmFuZ2UubGVuZ3RoOworICAgIHJlc3VsdC5yZXBs
YWNlbWVudCA9IG5zUmVzdWx0LnJlcGxhY2VtZW50U3RyaW5nOworCisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworLSAodm9pZCljYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtOihOU0NhbmRpZGF0ZUxp
c3RUb3VjaEJhckl0ZW0gKilhbkl0ZW0gZW5kU2VsZWN0aW5nQ2FuZGlkYXRlQXRJbmRleDooTlNJ
bnRlZ2VyKWluZGV4Cit7CisgICAgaWYgKGluZGV4ID09IE5TTm90Rm91bmQpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChhbkl0ZW0gIT0gc2VsZi5jYW5kaWRhdGVMaXN0KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBOU0FycmF5ICpjYW5kaWRhdGVzID0gYW5JdGVtLmNhbmRpZGF0ZXM7Cisg
ICAgaWYgKChOU1VJbnRlZ2VyKWluZGV4ID49IGNhbmRpZGF0ZXMuY291bnQpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlkIGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZXNbaW5kZXhdOworICAgIEFTU0VS
VChbY2FuZGlkYXRlIGlzS2luZE9mQ2xhc3M6W05TVGV4dENoZWNraW5nUmVzdWx0IGNsYXNzXV0p
OworCisgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKHNlbGYuX3NlbGVjdGVkT3JNYWlu
RnJhbWUpKQorICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT5oYW5kbGVBY2Nl
cHRlZENhbmRpZGF0ZVdpdGhTb2Z0U3BhY2VzKHRleHRDaGVja2luZ1Jlc3VsdEZyb21OU1RleHRD
aGVja2luZ1Jlc3VsdCgoTlNUZXh0Q2hlY2tpbmdSZXN1bHQgKiljYW5kaWRhdGUpKTsKK30KKwor
LSAodm9pZCljYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtOihOU0NhbmRpZGF0ZUxpc3RUb3VjaEJh
ckl0ZW0gKilhbkl0ZW0gY2hhbmdlZENhbmRpZGF0ZUxpc3RWaXNpYmlsaXR5OihCT09MKWlzVmlz
aWJsZQoreworICAgIGlmIChhbkl0ZW0gIT0gc2VsZi5jYW5kaWRhdGVMaXN0KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoaXNWaXNpYmxlKSB7CisgICAgICAgIGlmIChGcmFtZSogY29yZUZy
YW1lID0gY29yZShbc2VsZiBfc2VsZWN0ZWRPck1haW5GcmFtZV0pKQorICAgICAgICAgICAgY29y
ZUZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+cmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb24o
Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgfQorCisgICAgW3NlbGYg
dXBkYXRlVG91Y2hCYXJdOworfQorCisjZW5kaWYgLy8gSEFWRShUT1VDSF9CQVIpCisKIEBlbmQK
IAogQGltcGxlbWVudGF0aW9uIFdlYlZpZXcgKFdlYklCQWN0aW9ucykKQEAgLTY3NDYsNDggKzcx
NjAsNiBAQCAtIChCT09MKXZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW06KGlkIDxOCiAKIEBlbmQK
IAotI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+
PSAxMDEyMDAgJiYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLSNpbXBvcnQgPFdlYktpdEFkZGl0
aW9ucy9XZWJWaWV3QWRkaXRpb25zLm1tPgotI2Vsc2UKLUBpbXBsZW1lbnRhdGlvbiBXZWJWaWV3
IChXZWJVcGRhdGVXZWJWaWV3QWRkaXRpb25zKQotCi0tICh2b2lkKXVwZGF0ZVdlYlZpZXdBZGRp
dGlvbnMKLXsKLX0KLQotLSAodm9pZClwcmVwYXJlRm9yTW91c2VEb3duCi17Ci19Ci0KLS0gKHZv
aWQpcHJlcGFyZUZvck1vdXNlVXAKLXsKLX0KLQotLSAodm9pZClzaG93Q2FuZGlkYXRlczooTlNB
cnJheSAqKWNhbmRpZGF0ZXMgZm9yU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBpblJlY3Q6KE5T
UmVjdClyZWN0T2ZUeXBlZFN0cmluZyBmb3JTZWxlY3RlZFJhbmdlOihOU1JhbmdlKXJhbmdlIHZp
ZXc6KE5TVmlldyAqKXZpZXcgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TVGV4dENoZWNr
aW5nUmVzdWx0ICphY2NlcHRlZENhbmRpZGF0ZSkpY29tcGxldGlvbkJsb2NrCi17Ci19Ci0KLS0g
KHZvaWQpZm9yY2VSZXF1ZXN0Q2FuZGlkYXRlc0ZvclRlc3RpbmcKLXsKLX0KLQotLSAoQk9PTClz
aG91bGRSZXF1ZXN0Q2FuZGlkYXRlcwotewotICAgIHJldHVybiBOTzsKLX0KLQotLSAodm9pZCl3
ZWJWaWV3QWRkaXRpb25zV2lsbERlc3Ryb3lWaWV3Ci17Ci19Ci0KLS0gKGlkKWNhbmRpZGF0ZUxp
c3QKLXsKLSAgICByZXR1cm4gbmlsOwotfQotCi1AZW5kCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFD
KSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMCAmJiBVU0UoQVBQ
TEVfSU5URVJOQUxfU0RLKQotCiBAaW1wbGVtZW50YXRpb24gV2ViVmlldyAoV2ViUGVuZGluZ1B1
YmxpYykKIAogLSAodm9pZClzY2hlZHVsZUluUnVuTG9vcDooTlNSdW5Mb29wICopcnVuTG9vcCBm
b3JNb2RlOihOU1N0cmluZyAqKW1vZGUKQEAgLTg2NTYsNyArOTAyOCw3IEBAIC0gKHZvaWQpX3Nl
dFVwUGxheWJhY2tDb250cm9sc01hbmFnZXJGb3IKICAgICBpZiAoIV9wcml2YXRlLT5wbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2UpCiAgICAgICAgIF9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2UgPSBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmNyZWF0ZSgqX3ByaXZhdGUt
PnBsYXliYWNrU2Vzc2lvbk1vZGVsKTsKIAotICAgIFtzZWxmIHVwZGF0ZVdlYlZpZXdBZGRpdGlv
bnNdOworICAgIFtzZWxmIHVwZGF0ZVRvdWNoQmFyXTsKIH0KIAogLSAodm9pZClfY2xlYXJQbGF5
YmFja0NvbnRyb2xzTWFuYWdlcgpAQCAtODY2OSw3ICs5MDQxLDcgQEAgLSAodm9pZClfY2xlYXJQ
bGF5YmFja0NvbnRyb2xzTWFuYWdlcgogCiAgICAgX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbk1v
ZGVsID0gbnVsbHB0cjsKICAgICBfcHJpdmF0ZS0+cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlID0g
bnVsbHB0cjsKLSAgICBbc2VsZiB1cGRhdGVXZWJWaWV3QWRkaXRpb25zXTsKKyAgICBbc2VsZiB1
cGRhdGVUb3VjaEJhcl07CiB9CiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklE
RU9fUFJFU0VOVEFUSU9OX01PREUpCiAjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQpAQCAtODg5OCw2
ICs5MjcwLDM0MiBAQCAtICh2b2lkKV9zZXRNb2NrTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlCiB9
CiAjZW5kaWYKIAorI2lmIEhBVkUoVE9VQ0hfQkFSKQorLSAodm9pZClfZGlzbWlzc1RleHRUb3Vj
aEJhclBvcG92ZXJJdGVtV2l0aElkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcgorewor
ICAgIE5TVG91Y2hCYXJJdGVtICpmb3VuZEl0ZW0gPSBuaWw7CisgICAgZm9yIChOU1RvdWNoQmFy
SXRlbSAqaXRlbSBpbiBzZWxmLnRleHRUb3VjaEJhci5pdGVtcykgeworICAgICAgICBpZiAoW2l0
ZW0uaWRlbnRpZmllciBpc0VxdWFsVG9TdHJpbmc6aWRlbnRpZmllcl0pIHsKKyAgICAgICAgICAg
IGZvdW5kSXRlbSA9IGl0ZW07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChbaXRlbS5pZGVudGlmaWVyIGlzRXF1YWxUb1N0cmluZzpOU1RvdWNoQmFySXRlbUlk
ZW50aWZpZXJUZXh0Rm9ybWF0XSkgeworICAgICAgICAgICAgZm9yIChOU1RvdWNoQmFySXRlbSAq
Y2hpbGRJdGVtIGluIFsoTlNHcm91cFRvdWNoQmFySXRlbSAqKWl0ZW0gZ3JvdXBUb3VjaEJhcl0u
aXRlbXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoW2NoaWxkSXRlbS5pZGVudGlmaWVyIGlzRXF1
YWxUb1N0cmluZzppZGVudGlmaWVyXSkgeworICAgICAgICAgICAgICAgICAgICBmb3VuZEl0ZW0g
PSBjaGlsZEl0ZW07CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKFtmb3VuZEl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNQb3BvdmVyVG91Y2hCYXJJdGVt
IGNsYXNzXV0pCisgICAgICAgIFsoTlNQb3BvdmVyVG91Y2hCYXJJdGVtICopZm91bmRJdGVtIGRp
c21pc3NQb3BvdmVyOm5pbF07Cit9CisKKy0gKE5TQXJyYXk8TlNTdHJpbmcgKj4gKilfdGV4dFRv
dWNoQmFyQ3VzdG9taXphdGlvbkFsbG93ZWRJZGVudGlmaWVycworeworICAgIHJldHVybiBAWyBO
U1RvdWNoQmFySXRlbUlkZW50aWZpZXJDaGFyYWN0ZXJQaWNrZXIsIE5TVG91Y2hCYXJJdGVtSWRl
bnRpZmllclRleHRDb2xvclBpY2tlciwgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dFN0eWxl
LCBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0QWxpZ25tZW50LCBOU1RvdWNoQmFySXRlbUlk
ZW50aWZpZXJUZXh0TGlzdCwgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyRmxleGlibGVTcGFjZSBd
OworfQorCistIChOU0FycmF5PE5TU3RyaW5nICo+ICopX3BsYWluVGV4dFRvdWNoQmFyQ3VzdG9t
aXphdGlvbkRlZmF1bHRJdGVtSWRlbnRpZmllcnMKK3sKKyAgICByZXR1cm4gQFsgTlNUb3VjaEJh
ckl0ZW1JZGVudGlmaWVyQ2hhcmFjdGVyUGlja2VyLCBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJD
YW5kaWRhdGVMaXN0IF07Cit9CisKKy0gKE5TQXJyYXk8TlNTdHJpbmcgKj4gKilfcmljaFRleHRU
b3VjaEJhckN1c3RvbWl6YXRpb25EZWZhdWx0SXRlbUlkZW50aWZpZXJzCit7CisgICAgcmV0dXJu
IEBbIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckNoYXJhY3RlclBpY2tlciwgTlNUb3VjaEJhckl0
ZW1JZGVudGlmaWVyVGV4dEZvcm1hdCwgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyQ2FuZGlkYXRl
TGlzdCBdOworfQorCistICh2b2lkKXRvdWNoQmFyRGlkRXhpdEN1c3RvbWl6YXRpb246KE5TTm90
aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgX3ByaXZhdGUtPl9pc0N1c3RvbWl6aW5n
VG91Y2hCYXIgPSBOTzsKKyAgICBbc2VsZiB1cGRhdGVUb3VjaEJhcl07Cit9CisKKy0gKHZvaWQp
dG91Y2hCYXJXaWxsRW50ZXJDdXN0b21pemF0aW9uOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNh
dGlvbgoreworICAgIF9wcml2YXRlLT5faXNDdXN0b21pemluZ1RvdWNoQmFyID0gWUVTOworfQor
CistICh2b2lkKWRpZENoYW5nZUF1dG9tYXRpY1RleHRDb21wbGV0aW9uOihOU05vdGlmaWNhdGlv
biAqKW5vdGlmaWNhdGlvbgoreworICAgIGlmIChfcHJpdmF0ZS0+X3JpY2hUZXh0VG91Y2hCYXIp
CisgICAgICAgIFtzZWxmIHNldFVwVGV4dFRvdWNoQmFyOl9wcml2YXRlLT5fcmljaFRleHRUb3Vj
aEJhci5nZXQoKV07CisKKyAgICBpZiAoX3ByaXZhdGUtPl9wbGFpblRleHRUb3VjaEJhcikKKyAg
ICAgICAgW3NlbGYgc2V0VXBUZXh0VG91Y2hCYXI6X3ByaXZhdGUtPl9wbGFpblRleHRUb3VjaEJh
ci5nZXQoKV07CisKKyAgICBbc2VsZiB1cGRhdGVUb3VjaEJhcl07Cit9CisKKy0gKHZvaWQpc2V0
VXBUZXh0VG91Y2hCYXI6KE5TVG91Y2hCYXIgKil0ZXh0VG91Y2hCYXIKK3sKKyAgICBCT09MIGlz
UmljaFRleHRUb3VjaEJhciA9IHRleHRUb3VjaEJhciA9PSBfcHJpdmF0ZS0+X3JpY2hUZXh0VG91
Y2hCYXI7CisgICAgW3RleHRUb3VjaEJhciBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICBbdGV4dFRv
dWNoQmFyIHNldERlZmF1bHRJdGVtczpbTlNNdXRhYmxlU2V0IHNldFdpdGhPYmplY3RzOmlzUmlj
aFRleHRUb3VjaEJhciA/IF9wcml2YXRlLT5fcmljaFRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJ
dGVtLmdldCgpIDogX3ByaXZhdGUtPl9wbGFpblRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVt
LmdldCgpLCBuaWxdXTsKKyAgICBbdGV4dFRvdWNoQmFyIHNldEN1c3RvbWl6YXRpb25BbGxvd2Vk
SXRlbUlkZW50aWZpZXJzOltzZWxmIF90ZXh0VG91Y2hCYXJDdXN0b21pemF0aW9uQWxsb3dlZElk
ZW50aWZpZXJzXV07CisKKyAgICBOU0FycmF5PE5TU3RyaW5nICo+ICpkZWZhdWx0SWRlbnRpZmll
cnMgPSBpc1JpY2hUZXh0VG91Y2hCYXIgPyBbc2VsZiBfcmljaFRleHRUb3VjaEJhckN1c3RvbWl6
YXRpb25EZWZhdWx0SXRlbUlkZW50aWZpZXJzXSA6IFtzZWxmIF9wbGFpblRleHRUb3VjaEJhckN1
c3RvbWl6YXRpb25EZWZhdWx0SXRlbUlkZW50aWZpZXJzXTsKKyAgICBbdGV4dFRvdWNoQmFyIHNl
dEN1c3RvbWl6YXRpb25EZWZhdWx0SXRlbUlkZW50aWZpZXJzOmRlZmF1bHRJZGVudGlmaWVyc107
CisKKyAgICBpZiAoTlNHcm91cFRvdWNoQmFySXRlbSAqdGV4dEZvcm1hdEl0ZW0gPSAoTlNHcm91
cFRvdWNoQmFySXRlbSAqKVt0ZXh0VG91Y2hCYXIgaXRlbUZvcklkZW50aWZpZXI6TlNUb3VjaEJh
ckl0ZW1JZGVudGlmaWVyVGV4dEZvcm1hdF0pCisgICAgICAgIHRleHRGb3JtYXRJdGVtLmdyb3Vw
VG91Y2hCYXIuY3VzdG9taXphdGlvbklkZW50aWZpZXIgPSBAIldlYlRleHRGb3JtYXRUb3VjaEJh
ciI7Cit9CisKKy0gKEJPT0wpX2lzUmljaGx5RWRpdGFibGUKK3sKKyAgICBOU1ZpZXcgKmRvY3Vt
ZW50VmlldyA9IHNlbGYuX3NlbGVjdGVkT3JNYWluRnJhbWUuZnJhbWVWaWV3LmRvY3VtZW50Vmll
dzsKKyAgICBpZiAoIVtkb2N1bWVudFZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xh
c3NdXSkKKyAgICAgICAgcmV0dXJuIE5POworCisgICAgV2ViSFRNTFZpZXcgKndlYkhUTUxWaWV3
ID0gKFdlYkhUTUxWaWV3ICopZG9jdW1lbnRWaWV3OworICAgIHJldHVybiB3ZWJIVE1MVmlldy5f
aXNFZGl0YWJsZSAmJiB3ZWJIVE1MVmlldy5fY2FuRWRpdFJpY2hseTsKK30KKworLSAoTlNUb3Vj
aEJhciAqKXRleHRUb3VjaEJhcgoreworICAgIGlmIChzZWxmLl9pc1JpY2hseUVkaXRhYmxlKQor
ICAgICAgICByZXR1cm4gX3ByaXZhdGUtPl9yaWNoVGV4dFRvdWNoQmFyLmdldCgpOworCisgICAg
cmV0dXJuIF9wcml2YXRlLT5fcGxhaW5UZXh0VG91Y2hCYXIuZ2V0KCk7Cit9CisKKy0gKHZvaWQp
dXBkYXRlVGV4dFRvdWNoQmFyCit7CisgICAgaWYgKF9wcml2YXRlLT5faXNEZWZlcnJpbmdUZXh0
VG91Y2hCYXJVcGRhdGVzKSB7CisgICAgICAgIF9wcml2YXRlLT5fbmVlZHNEZWZlcnJlZFRleHRU
b3VjaEJhclVwZGF0ZSA9IFlFUzsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE5TVmll
dyAqZG9jdW1lbnRWaWV3ID0gW1tbc2VsZiBfc2VsZWN0ZWRPck1haW5GcmFtZV0gZnJhbWVWaWV3
XSBkb2N1bWVudFZpZXddOworICAgIGlmICghW2RvY3VtZW50VmlldyBpc0tpbmRPZkNsYXNzOltX
ZWJIVE1MVmlldyBjbGFzc11dKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgV2ViSFRNTFZp
ZXcgKndlYkhUTUxWaWV3ID0gKFdlYkhUTUxWaWV3ICopZG9jdW1lbnRWaWV3OworICAgIGlmICgh
W3dlYkhUTUxWaWV3IF9pc0VkaXRhYmxlXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRnJhbWUq
IGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVdKTsKKyAgICBpZiAo
IWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKF9wcml2YXRlLT5faXNVcGRh
dGluZ1RleHRUb3VjaEJhcikKKyAgICAgICAgcmV0dXJuOworCisgICAgVGVtcG9yYXJ5Q2hhbmdl
PEJPT0w+IGlzVXBkYXRpbmdUZXh0VG91Y2hCYXIoX3ByaXZhdGUtPl9pc1VwZGF0aW5nVGV4dFRv
dWNoQmFyLCBZRVMpOworCisgICAgaWYgKCFfcHJpdmF0ZS0+X3RleHRUb3VjaEJhckl0ZW1Db250
cm9sbGVyKQorICAgICAgICBfcHJpdmF0ZS0+X3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyID0g
YWRvcHROUyhbW1dlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIGFsbG9jXSBpbml0V2l0aFdl
YlZpZXc6c2VsZl0pOworCisgICAgaWYgKCFfcHJpdmF0ZS0+X3N0YXJ0ZWRMaXN0ZW5pbmdUb0N1
c3RvbWl6YXRpb25FdmVudHMpIHsKKyAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZh
dWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih0b3VjaEJhckRp
ZEV4aXRDdXN0b21pemF0aW9uOikgbmFtZTpOU1RvdWNoQmFyRGlkRXhpdEN1c3RvbWl6YXRpb24g
b2JqZWN0Om5pbF07CisgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRl
cl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IodG91Y2hCYXJXaWxsRW50ZXJD
dXN0b21pemF0aW9uOikgbmFtZTpOU1RvdWNoQmFyV2lsbEVudGVyQ3VzdG9taXphdGlvbiBvYmpl
Y3Q6bmlsXTsKKyAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBh
ZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihkaWRDaGFuZ2VBdXRvbWF0aWNUZXh0
Q29tcGxldGlvbjopIG5hbWU6TlNTcGVsbENoZWNrZXJEaWRDaGFuZ2VBdXRvbWF0aWNUZXh0Q29t
cGxldGlvbk5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKKyAgICAgICAgX3ByaXZhdGUtPl9zdGFy
dGVkTGlzdGVuaW5nVG9DdXN0b21pemF0aW9uRXZlbnRzID0gWUVTOworICAgIH0KKworICAgIGlm
ICghX3ByaXZhdGUtPl9wbGFpblRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtIHx8ICFfcHJp
dmF0ZS0+X3JpY2hUZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSkgeworICAgICAgICBfcHJp
dmF0ZS0+X3BsYWluVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gPSBhZG9wdE5TKFtbTlND
YW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6TlNUb3Vj
aEJhckl0ZW1JZGVudGlmaWVyQ2FuZGlkYXRlTGlzdF0pOworICAgICAgICBbX3ByaXZhdGUtPl9w
bGFpblRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtIHNldERlbGVnYXRlOnNlbGZdOworICAg
ICAgICBfcHJpdmF0ZS0+X3JpY2hUZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSA9IGFkb3B0
TlMoW1tOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gYWxsb2NdIGluaXRXaXRoSWRlbnRpZmll
cjpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJDYW5kaWRhdGVMaXN0XSk7CisgICAgICAgIFtfcHJp
dmF0ZS0+X3JpY2hUZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSBzZXREZWxlZ2F0ZTpzZWxm
XTsKKyAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+cmVxdWVzdENhbmRpZGF0
ZXNGb3JTZWxlY3Rpb24oY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAg
fQorCisgICAgaWYgKCFfcHJpdmF0ZS0+X3JpY2hUZXh0VG91Y2hCYXIpIHsKKyAgICAgICAgX3By
aXZhdGUtPl9yaWNoVGV4dFRvdWNoQmFyID0gYWRvcHROUyhbW05TVG91Y2hCYXIgYWxsb2NdIGlu
aXRdKTsKKyAgICAgICAgW3NlbGYgc2V0VXBUZXh0VG91Y2hCYXI6X3ByaXZhdGUtPl9yaWNoVGV4
dFRvdWNoQmFyLmdldCgpXTsKKyAgICAgICAgW19wcml2YXRlLT5fcmljaFRleHRUb3VjaEJhciBz
ZXRDdXN0b21pemF0aW9uSWRlbnRpZmllcjpAIldlYlJpY2hUZXh0VG91Y2hCYXIiXTsKKyAgICB9
CisKKyAgICBpZiAoIV9wcml2YXRlLT5fcGxhaW5UZXh0VG91Y2hCYXIpIHsKKyAgICAgICAgX3By
aXZhdGUtPl9wbGFpblRleHRUb3VjaEJhciA9IGFkb3B0TlMoW1tOU1RvdWNoQmFyIGFsbG9jXSBp
bml0XSk7CisgICAgICAgIFtzZWxmIHNldFVwVGV4dFRvdWNoQmFyOl9wcml2YXRlLT5fcGxhaW5U
ZXh0VG91Y2hCYXIuZ2V0KCldOworICAgICAgICBbX3ByaXZhdGUtPl9wbGFpblRleHRUb3VjaEJh
ciBzZXRDdXN0b21pemF0aW9uSWRlbnRpZmllcjpAIldlYlBsYWluVGV4dFRvdWNoQmFyIl07Cisg
ICAgfQorCisgICAgaWYgKFtOU1NwZWxsQ2hlY2tlciBpc0F1dG9tYXRpY1RleHRDb21wbGV0aW9u
RW5hYmxlZF0gJiYgIV9wcml2YXRlLT5faXNDdXN0b21pemluZ1RvdWNoQmFyKSB7CisgICAgICAg
IEJPT0wgc2hvdWxkU2hvd0NhbmRpZGF0ZUxpc3QgPSAhY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5pc1JhbmdlKCkgfHwgY29yZUZyYW1lLT5lZGl0b3IoKS5pZ25vcmVDb21wb3Np
dGlvblNlbGVjdGlvbkNoYW5nZSgpOworICAgICAgICBbc2VsZi5jYW5kaWRhdGVMaXN0IHVwZGF0
ZVdpdGhJbnNlcnRpb25Qb2ludFZpc2liaWxpdHk6c2hvdWxkU2hvd0NhbmRpZGF0ZUxpc3RdOwor
ICAgIH0KKworICAgIGlmIChjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5Q
YXNzd29yZEZpZWxkKCkpIHsKKyAgICAgICAgLy8gV2UgZG9uJ3QgcmVxdWVzdCBjYW5kaWRhdGVz
IGZvciBwYXNzd29yZCBmaWVsZHMuIElmIHRoZSB1c2VyIHdhcyBwcmV2aW91c2x5IGluIGEgbm9u
LXBhc3N3b3JkIGZpZWxkLCB0aGVuIHRoZQorICAgICAgICAvLyBvbGQgY2FuZGlkYXRlcyB3aWxs
IHN0aWxsIHNob3cgYnkgZGVmYXVsdCwgc28gd2UgY2xlYXIgdGhlbSBoZXJlIGJ5IHNldHRpbmcg
YW4gZW1wdHkgYXJyYXkgb2YgY2FuZGlkYXRlcy4KKyAgICAgICAgaWYgKCFfcHJpdmF0ZS0+X2Vt
cHR5Q2FuZGlkYXRlc0FycmF5KQorICAgICAgICAgICAgX3ByaXZhdGUtPl9lbXB0eUNhbmRpZGF0
ZXNBcnJheSA9IGFkb3B0TlMoW1tOU0FycmF5IGFsbG9jXSBpbml0XSk7CisgICAgICAgIFtzZWxm
LmNhbmRpZGF0ZUxpc3Qgc2V0Q2FuZGlkYXRlczpfcHJpdmF0ZS0+X2VtcHR5Q2FuZGlkYXRlc0Fy
cmF5LmdldCgpIGZvclNlbGVjdGVkUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgMCkgaW5TdHJpbmc6bmls
XTsKKyAgICB9CisKKyAgICBOU1RvdWNoQmFyICp0ZXh0VG91Y2hCYXIgPSBzZWxmLnRleHRUb3Vj
aEJhcjsKKyAgICBOU0FycmF5PE5TU3RyaW5nICo+ICppdGVtSWRlbnRpZmllcnMgPSB0ZXh0VG91
Y2hCYXIuaXRlbUlkZW50aWZpZXJzOworICAgIEJPT0wgaXNTaG93aW5nQ29tYmluZWRUZXh0Rm9y
bWF0SXRlbSA9IFtpdGVtSWRlbnRpZmllcnMgY29udGFpbnNPYmplY3Q6TlNUb3VjaEJhckl0ZW1J
ZGVudGlmaWVyVGV4dEZvcm1hdF07CisgICAgW3RleHRUb3VjaEJhciBzZXRQcmluY2lwYWxJdGVt
SWRlbnRpZmllcjppc1Nob3dpbmdDb21iaW5lZFRleHRGb3JtYXRJdGVtID8gTlNUb3VjaEJhckl0
ZW1JZGVudGlmaWVyVGV4dEZvcm1hdCA6IG5pbF07CisKKyAgICAvLyBTZXQgY3VycmVudCB0eXBp
bmcgYXR0cmlidXRlcyBmb3IgcmljaCB0ZXh0LiBUaGlzIHdpbGwgZW5zdXJlIHRoYXQgdGhlIGJ1
dHRvbnMgcmVmbGVjdCB0aGUgc3RhdGUgb2YKKyAgICAvLyB0aGUgdGV4dCB3aGVuIGNoYW5naW5n
IHNlbGVjdGlvbiB0aHJvdWdob3V0IHRoZSBkb2N1bWVudC4KKyAgICBpZiAod2ViSFRNTFZpZXcu
X2NhbkVkaXRSaWNobHkpIHsKKyAgICAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0
aW9uID0gY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICAgICAgaWYgKCFz
ZWxlY3Rpb24uaXNOb25lKCkpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsKKyAg
ICAgICAgICAgIGlmIChhdXRvKiBzdHlsZSA9IEVkaXRvcjo6c3R5bGVGb3JTZWxlY3Rpb25TdGFy
dChjb3JlRnJhbWUsIG5vZGVUb1JlbW92ZSkpIHsKKyAgICAgICAgICAgICAgICBbX3ByaXZhdGUt
Pl90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRUZXh0SXNCb2xkOihzdHlsZS0+Zm9udENh
c2NhZGUoKS53ZWlnaHQoKSA+PSBGb250V2VpZ2h0Qm9sZCldOworICAgICAgICAgICAgICAgIFtf
cHJpdmF0ZS0+X3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFRleHRJc0l0YWxpYzooc3R5
bGUtPmZvbnRDYXNjYWRlKCkuaXRhbGljKCkgPT0gRm9udEl0YWxpY09uKV07CisKKyAgICAgICAg
ICAgICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHlsZSA9IGNvcmVGcmFtZS0+c2Vs
ZWN0aW9uKCkudHlwaW5nU3R5bGUoKTsKKyAgICAgICAgICAgICAgICBpZiAodHlwaW5nU3R5bGUg
JiYgdHlwaW5nU3R5bGUtPnN0eWxlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHZh
bHVlID0gdHlwaW5nU3R5bGUtPnN0eWxlKCktPmdldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlX
ZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCk7CisgICAgICAgICAgICAgICAgICAgIFtfcHJp
dmF0ZS0+X3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFRleHRJc1VuZGVybGluZWQ6dmFs
dWUuY29udGFpbnMoInVuZGVybGluZSIpXTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgW19wcml2YXRlLT5fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0
VGV4dElzVW5kZXJsaW5lZDooc3R5bGUtPnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCkgJiBUZXh0
RGVjb3JhdGlvblVuZGVybGluZSldOworCisgICAgICAgICAgICAgICAgaWYgKHN0eWxlLT52aXNp
dGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikuaXNWYWxpZCgpKQorICAgICAgICAg
ICAgICAgICAgICBbX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRUZXh0
Q29sb3I6bnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29s
b3IpKV07CisKKyAgICAgICAgICAgICAgICBOU1RleHRBbGlnbm1lbnQgdGV4dEFsaWdubWVudDsK
KyAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0eWxlLT50ZXh0QWxpZ24oKSkgeworICAgICAgICAg
ICAgICAgIGNhc2UgUklHSFQ6CisgICAgICAgICAgICAgICAgY2FzZSBXRUJLSVRfUklHSFQ6Cisg
ICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRSaWdodDsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBMRUZUOgor
ICAgICAgICAgICAgICAgIGNhc2UgV0VCS0lUX0xFRlQ6CisgICAgICAgICAgICAgICAgICAgIHRl
eHRBbGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRMZWZ0OworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENFTlRFUjoKKyAgICAgICAgICAgICAgICBjYXNl
IFdFQktJVF9DRU5URVI6CisgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbm1lbnQgPSBOU1Rl
eHRBbGlnbm1lbnRDZW50ZXI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgSlVTVElGWToKKyAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWdubWVudCA9
IE5TVGV4dEFsaWdubWVudEp1c3RpZmllZDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSBUQVNUQVJUOgorICAgICAgICAgICAgICAgICAgICB0ZXh0QWxp
Z25tZW50ID0gc3R5bGUtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IE5TVGV4dEFsaWdubWVu
dExlZnQgOiBOU1RleHRBbGlnbm1lbnRSaWdodDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSBUQUVORDoKKyAgICAgICAgICAgICAgICAgICAgdGV4dEFs
aWdubWVudCA9IHN0eWxlLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBOU1RleHRBbGlnbm1l
bnRSaWdodCA6IE5TVGV4dEFsaWdubWVudExlZnQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBbX3ByaXZhdGUtPl90ZXh0VG91
Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRDdXJyZW50VGV4dEFsaWdubWVudDp0ZXh0QWxpZ25tZW50
XTsKKworICAgICAgICAgICAgICAgIEhUTUxFbGVtZW50KiBlbmNsb3NpbmdMaXN0RWxlbWVudCA9
IGVuY2xvc2luZ0xpc3Qoc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CisgICAg
ICAgICAgICAgICAgaWYgKGVuY2xvc2luZ0xpc3RFbGVtZW50KSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChpczxIVE1MVUxpc3RFbGVtZW50PigqZW5jbG9zaW5nTGlzdEVsZW1lbnQpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgW1tfcHJpdmF0ZS0+X3RleHRUb3VjaEJhckl0ZW1Db250cm9s
bGVyIHdlYlRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlcl0gc2V0Q3VycmVudExpc3RUeXBl
OldlYkxpc3RUeXBlOjpVbm9yZGVyZWRdOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChp
czxIVE1MT0xpc3RFbGVtZW50PigqZW5jbG9zaW5nTGlzdEVsZW1lbnQpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgW1tfcHJpdmF0ZS0+X3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHdlYlRl
eHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlcl0gc2V0Q3VycmVudExpc3RUeXBlOldlYkxpc3RU
eXBlOjpPcmRlcmVkXTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIFtbX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxl
ciB3ZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXJdIHNldEN1cnJlbnRMaXN0VHlwZTpX
ZWJMaXN0VHlwZTo6Tm9uZV07CisKKyAgICAgICAgICAgICAgICBpZiAobm9kZVRvUmVtb3ZlKQor
ICAgICAgICAgICAgICAgICAgICBub2RlVG9SZW1vdmUtPnJlbW92ZSgpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIEJPT0wgaXNTaG93aW5nQ2FuZGlkYXRlTGlzdEl0ZW0gPSBb
aXRlbUlkZW50aWZpZXJzIGNvbnRhaW5zT2JqZWN0Ok5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckNh
bmRpZGF0ZUxpc3RdICYmIFtOU1NwZWxsQ2hlY2tlciBpc0F1dG9tYXRpY1RleHRDb21wbGV0aW9u
RW5hYmxlZF07CisgICAgICAgIFtfcHJpdmF0ZS0+X3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVy
IHNldFVzZXNOYXJyb3dUZXh0U3R5bGVJdGVtOmlzU2hvd2luZ0NvbWJpbmVkVGV4dEZvcm1hdEl0
ZW0gJiYgaXNTaG93aW5nQ2FuZGlkYXRlTGlzdEl0ZW1dOworICAgIH0KK30KKworLSAodm9pZCl1
cGRhdGVNZWRpYVRvdWNoQmFyCit7CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19N
QU5BR0VSKQorICAgIGlmICghX3ByaXZhdGUtPm1lZGlhVG91Y2hCYXJQcm92aWRlcikKKyAgICAg
ICAgX3ByaXZhdGUtPm1lZGlhVG91Y2hCYXJQcm92aWRlciA9IGFkb3B0TlMoW2FsbG9jQVZGdW5j
dGlvbkJhclBsYXliYWNrQ29udHJvbHNQcm92aWRlckluc3RhbmNlKCkgaW5pdF0pOworCisgICAg
aWYgKCFbX3ByaXZhdGUtPm1lZGlhVG91Y2hCYXJQcm92aWRlciBwbGF5YmFja0NvbnRyb2xzQ29u
dHJvbGxlcl0pIHsKKyAgICAgICAgQVNTRVJUKF9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2UpOworICAgICAgICBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciAqbWFuYWdlciA9IF9w
cml2YXRlLT5wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBsYXlCYWNrQ29udHJvbHNNYW5hZ2Vy
KCk7CisgICAgICAgIFtfcHJpdmF0ZS0+bWVkaWFUb3VjaEJhclByb3ZpZGVyIHNldFBsYXliYWNr
Q29udHJvbHNDb250cm9sbGVyOihpZCA8QVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNDb250
cm9sbGluZz4pbWFuYWdlcl07CisgICAgICAgIFtfcHJpdmF0ZS0+bWVkaWFQbGF5YmFja0NvbnRy
b2xzVmlldyBzZXRQbGF5YmFja0NvbnRyb2xzQ29udHJvbGxlcjooaWQgPEFWRnVuY3Rpb25CYXJQ
bGF5YmFja0NvbnRyb2xzQ29udHJvbGxpbmc+KW1hbmFnZXJdOworICAgIH0KKyNlbmRpZgorfQor
CistICh2b2lkKXVwZGF0ZVRvdWNoQmFyCit7CisgICAgaWYgKCFfcHJpdmF0ZS0+X2NhbkNyZWF0
ZVRvdWNoQmFycykKKyAgICAgICAgcmV0dXJuOworCisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNv
cmUoW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVdKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgTlNUb3VjaEJhciAqdG91Y2hCYXIgPSBuaWw7CisgICAgTlNW
aWV3ICpkb2N1bWVudFZpZXcgPSBbW1tzZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXSBmcmFtZVZp
ZXddIGRvY3VtZW50Vmlld107CisgICAgaWYgKFtkb2N1bWVudFZpZXcgaXNLaW5kT2ZDbGFzczpb
V2ViSFRNTFZpZXcgY2xhc3NdXSkgeworICAgICAgICBXZWJIVE1MVmlldyAqd2ViSFRNTFZpZXcg
PSAoV2ViSFRNTFZpZXcgKilkb2N1bWVudFZpZXc7CisgICAgICAgIGlmIChbd2ViSFRNTFZpZXcg
X2lzRWRpdGFibGVdKSB7CisgICAgICAgICAgICBbc2VsZiB1cGRhdGVUZXh0VG91Y2hCYXJdOwor
ICAgICAgICAgICAgdG91Y2hCYXIgPSBbc2VsZiB0ZXh0VG91Y2hCYXJdOworICAgICAgICB9Cisj
aWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgICAgICBlbHNlIGlm
IChbc2VsZiBfaGFzQWN0aXZlVmlkZW9Gb3JDb250cm9sc0ludGVyZmFjZV0pIHsKKyAgICAgICAg
ICAgIFtzZWxmIHVwZGF0ZU1lZGlhVG91Y2hCYXJdOworICAgICAgICAgICAgdG91Y2hCYXIgPSBb
X3ByaXZhdGUtPm1lZGlhVG91Y2hCYXJQcm92aWRlciByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKHRvdWNoQmFyKV0gPyBbKGlkKV9wcml2YXRlLT5tZWRpYVRvdWNoQmFyUHJvdmlkZXIgdG91
Y2hCYXJdIDogWyhpZClfcHJpdmF0ZS0+bWVkaWFUb3VjaEJhclByb3ZpZGVyIHRvdWNoQmFyXTsK
KyAgICAgICAgfSBlbHNlIGlmIChbX3ByaXZhdGUtPm1lZGlhVG91Y2hCYXJQcm92aWRlciBwbGF5
YmFja0NvbnRyb2xzQ29udHJvbGxlcl0pIHsKKyAgICAgICAgICAgIFtfcHJpdmF0ZS0+bWVkaWFU
b3VjaEJhclByb3ZpZGVyIHNldFBsYXliYWNrQ29udHJvbHNDb250cm9sbGVyOm5pbF07CisgICAg
ICAgICAgICBbX3ByaXZhdGUtPm1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcgc2V0UGxheWJhY2tD
b250cm9sc0NvbnRyb2xsZXI6bmlsXTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorCisgICAg
aWYgKHRvdWNoQmFyID09IF9wcml2YXRlLT5fY3VycmVudFRvdWNoQmFyKQorICAgICAgICByZXR1
cm47CisKKyAgICBfcHJpdmF0ZS0+X2N1cnJlbnRUb3VjaEJhciA9IHRvdWNoQmFyOworICAgIFtz
ZWxmIHdpbGxDaGFuZ2VWYWx1ZUZvcktleTpAInRvdWNoQmFyIl07CisgICAgW3NlbGYgc2V0VG91
Y2hCYXI6X3ByaXZhdGUtPl9jdXJyZW50VG91Y2hCYXIuZ2V0KCldOworICAgIFtzZWxmIGRpZENo
YW5nZVZhbHVlRm9yS2V5OkAidG91Y2hCYXIiXTsKK30KKworLSAodm9pZClwcmVwYXJlRm9yTW91
c2VEb3duCit7CisgICAgX3ByaXZhdGUtPl9uZWVkc0RlZmVycmVkVGV4dFRvdWNoQmFyVXBkYXRl
ID0gTk87CisgICAgX3ByaXZhdGUtPl9pc0RlZmVycmluZ1RleHRUb3VjaEJhclVwZGF0ZXMgPSBZ
RVM7Cit9CisKKy0gKHZvaWQpcHJlcGFyZUZvck1vdXNlVXAKK3sKKyAgICBpZiAoIV9wcml2YXRl
LT5faXNEZWZlcnJpbmdUZXh0VG91Y2hCYXJVcGRhdGVzKQorICAgICAgICByZXR1cm47CisKKyAg
ICBfcHJpdmF0ZS0+X2lzRGVmZXJyaW5nVGV4dFRvdWNoQmFyVXBkYXRlcyA9IE5POworICAgIGlm
IChfcHJpdmF0ZS0+X25lZWRzRGVmZXJyZWRUZXh0VG91Y2hCYXJVcGRhdGUpIHsKKyAgICAgICAg
Ly8gT25seSB0cmlnZ2VyIGFub3RoZXIgdXBkYXRlIGlmIHdlIGF0dGVtcHRlZCBhbmQgYmFpbGVk
IGZyb20gYW4gdXBkYXRlIGR1cmluZyB0aGUgZGVmZXJyYWwuCisgICAgICAgIFtzZWxmIHVwZGF0
ZVRvdWNoQmFyXTsKKyAgICB9Cit9CisKKy0gKHZvaWQpd2ViVmlld0FkZGl0aW9uc1dpbGxEZXN0
cm95VmlldworeworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVt
b3ZlT2JzZXJ2ZXI6c2VsZl07Cit9CisKKy0gKE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSAq
KWNhbmRpZGF0ZUxpc3QKK3sKKyAgICByZXR1cm4gc2VsZi5faXNSaWNobHlFZGl0YWJsZSA/IF9w
cml2YXRlLT5fcmljaFRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtLmdldCgpIDogX3ByaXZh
dGUtPl9wbGFpblRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtLmdldCgpOworfQorI2Vsc2UK
KworLSAodm9pZCl1cGRhdGVUb3VjaEJhcgoreworfQorCistICh2b2lkKXByZXBhcmVGb3JNb3Vz
ZURvd24KK3sKK30KKworLSAodm9pZClwcmVwYXJlRm9yTW91c2VVcAoreworfQorCistICh2b2lk
KXdlYlZpZXdBZGRpdGlvbnNXaWxsRGVzdHJveVZpZXcKK3sKK30KKworLSAoaWQpY2FuZGlkYXRl
TGlzdAoreworICAgIHJldHVybiBuaWw7Cit9CisKKyNlbmRpZgorCiBAZW5kCiAKIEBpbXBsZW1l
bnRhdGlvbiBXZWJWaWV3IChXZWJWaWV3RGV2aWNlT3JpZW50YXRpb24pCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5oCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEw
MSw4ICsxMDEsMTAgQEAgY2xhc3MgV2ViVmlld0dyb3VwOwogY2xhc3MgV2ViU2VsZWN0aW9uU2Vy
dmljZUNvbnRyb2xsZXI7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1Nf
WF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAgJiYgVVNFKEFQUExFX0lOVEVSTkFMX1NE
SykKLSNpbXBvcnQgPFdlYktpdEFkZGl0aW9ucy9XZWJWaWV3RGF0YUFkZGl0aW9uc0RlY2xhcmF0
aW9ucy5oPgorI2lmIEhBVkUoVE9VQ0hfQkFSKQorQGNsYXNzIFdlYlRleHRUb3VjaEJhckl0ZW1D
b250cm9sbGVyOworQGNsYXNzIEFWRnVuY3Rpb25CYXJQbGF5YmFja0NvbnRyb2xzUHJvdmlkZXI7
CitAY2xhc3MgQVZGdW5jdGlvbkJhclNjcnViYmVyOwogI2VuZGlmCiAKIGNsYXNzIFdlYlZpZXdM
YXllckZsdXNoU2NoZWR1bGVyIDogcHVibGljIFdlYkNvcmU6OkxheWVyRmx1c2hTY2hlZHVsZXIg
ewpAQCAtMTc4LDkgKzE4MCwyNCBAQCBAaW50ZXJmYWNlIFdlYlZpZXdQcml2YXRlIDogTlNPYmpl
Y3QgewogI2lmIFBMQVRGT1JNKE1BQykKICAgICBXZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVy
ICppbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyOwogCi0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01J
Tl9SRVFVSVJFRCA+PSAxMDEyMDAgJiYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLSNpbXBvcnQg
PFdlYktpdEFkZGl0aW9ucy9XZWJWaWV3RGF0YUFkZGl0aW9ucy5oPgotI2VuZGlmCisjaWYgSEFW
RShUT1VDSF9CQVIpCisgICAgUmV0YWluUHRyPE5TVG91Y2hCYXI+IF9jdXJyZW50VG91Y2hCYXI7
CisgICAgUmV0YWluUHRyPE5TVG91Y2hCYXI+IF9wbGFpblRleHRUb3VjaEJhcjsKKyAgICBSZXRh
aW5QdHI8TlNUb3VjaEJhcj4gX3JpY2hUZXh0VG91Y2hCYXI7CisgICAgUmV0YWluUHRyPFdlYlRl
eHRUb3VjaEJhckl0ZW1Db250cm9sbGVyPiBfdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXI7Cisg
ICAgUmV0YWluUHRyPE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbT4gX3JpY2hUZXh0Q2FuZGlk
YXRlTGlzdFRvdWNoQmFySXRlbTsKKyAgICBSZXRhaW5QdHI8TlNDYW5kaWRhdGVMaXN0VG91Y2hC
YXJJdGVtPiBfcGxhaW5UZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTsKKyAgICBSZXRhaW5Q
dHI8TlNBcnJheT4gX2VtcHR5Q2FuZGlkYXRlc0FycmF5OworICAgIFJldGFpblB0cjxBVkZ1bmN0
aW9uQmFyUGxheWJhY2tDb250cm9sc1Byb3ZpZGVyPiBtZWRpYVRvdWNoQmFyUHJvdmlkZXI7Cisg
ICAgUmV0YWluUHRyPEFWRnVuY3Rpb25CYXJTY3J1YmJlcj4gbWVkaWFQbGF5YmFja0NvbnRyb2xz
VmlldzsKKworICAgIEJPT0wgX2NhbkNyZWF0ZVRvdWNoQmFyczsKKyAgICBCT09MIF9pc1VwZGF0
aW5nVGV4dFRvdWNoQmFyOworICAgIEJPT0wgX3N0YXJ0ZWRMaXN0ZW5pbmdUb0N1c3RvbWl6YXRp
b25FdmVudHM7CisgICAgQk9PTCBfaXNDdXN0b21pemluZ1RvdWNoQmFyOworICAgIEJPT0wgX2lz
RGVmZXJyaW5nVGV4dFRvdWNoQmFyVXBkYXRlczsKKyAgICBCT09MIF9uZWVkc0RlZmVycmVkVGV4
dFRvdWNoQmFyVXBkYXRlOworI2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFSKQogCiAgICAgc3RkOjp1
bmlxdWVfcHRyPFdlYkNvcmU6OlRleHRJbmRpY2F0b3JXaW5kb3c+IHRleHRJbmRpY2F0b3JXaW5k
b3c7CiAgICAgQk9PTCBoYXNJbml0aWFsaXplZExvb2t1cE9ic2VydmVyOwpJbmRleDogU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oCShyZXZpc2lvbiAyMDg0MDUp
CisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC03Miw2ICs3Miw3IEBAIGNsYXNzIFdlYlNlbGVjdGlvblNlcnZpY2VDb250cm9s
bGVyOwogCiAjZW5kaWYKIAorQGNsYXNzIE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTsKIEBj
bGFzcyBXZWJCYXNlUGx1Z2luUGFja2FnZTsKIEBjbGFzcyBXZWJEb3dubG9hZDsKIEBjbGFzcyBX
ZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyOwpAQCAtMjkzLDEyICsyOTQsMTEgQEAgQGludGVy
ZmFjZSBXZWJWaWV3IChXZWJWaWV3T3RoZXJJbnRlcm5hbAogLSAodm9pZClfc2V0TW9ja01lZGlh
UGxheWJhY2tUYXJnZXRQaWNrZXJOYW1lOihOU1N0cmluZyAqKW5hbWUgc3RhdGU6KFdlYkNvcmU6
Ok1lZGlhUGxheWJhY2tUYXJnZXRDb250ZXh0OjpTdGF0ZSlzdGF0ZTsKICNlbmRpZgogCi1AZW5k
Ci0KLUBpbnRlcmZhY2UgV2ViVmlldyAoV2ViVXBkYXRlV2ViVmlld0FkZGl0aW9ucykKIC0gKHZv
aWQpcHJlcGFyZUZvck1vdXNlVXA7CiAtICh2b2lkKXByZXBhcmVGb3JNb3VzZURvd247Ci0tICh2
b2lkKXVwZGF0ZVdlYlZpZXdBZGRpdGlvbnM7CistICh2b2lkKXVwZGF0ZVRvdWNoQmFyOwogLSAo
dm9pZCl3ZWJWaWV3QWRkaXRpb25zV2lsbERlc3Ryb3lWaWV3OwotLSAoaWQpY2FuZGlkYXRlTGlz
dDsKKy0gKHZvaWQpX2Rpc21pc3NUZXh0VG91Y2hCYXJQb3BvdmVySXRlbVdpdGhJZGVudGlmaWVy
OihOU1N0cmluZyAqKWlkZW50aWZpZXI7CistIChOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0g
KiljYW5kaWRhdGVMaXN0OworCiBAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlZpZXdQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3UHJpdmF0ZS5oCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXdQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTg4OSw2ICs4ODks
MTAgQEAgQ291bGQgYmUgd29ydGggYWRkaW5nIHRvIHRoZSBBUEkuCiAKIC0gKHZvaWQpX3NldEZv
bnRGYWxsYmFja1ByZWZlcnNQaWN0b2dyYXBoczooQk9PTClmbGFnOwogCistICh2b2lkKXNob3dD
YW5kaWRhdGVzOihOU0FycmF5ICopY2FuZGlkYXRlcyBmb3JTdHJpbmc6KE5TU3RyaW5nICopc3Ry
aW5nIGluUmVjdDooTlNSZWN0KXJlY3RPZlR5cGVkU3RyaW5nIGZvclNlbGVjdGVkUmFuZ2U6KE5T
UmFuZ2UpcmFuZ2UgdmlldzooTlNWaWV3ICopdmlldyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAo
XikoTlNUZXh0Q2hlY2tpbmdSZXN1bHQgKmFjY2VwdGVkQ2FuZGlkYXRlKSljb21wbGV0aW9uQmxv
Y2s7CistICh2b2lkKWZvcmNlUmVxdWVzdENhbmRpZGF0ZXNGb3JUZXN0aW5nOworLSAoQk9PTClz
aG91bGRSZXF1ZXN0Q2FuZGlkYXRlczsKKwogQGVuZAogCiAjaWYgIVRBUkdFVF9PU19JUEhPTkUK
QEAgLTEwNjEsMTIgKzEwNjUsNiBAQCBAaW50ZXJmYWNlIE5TT2JqZWN0IChXZWJWaWV3UmVzb3Vy
Y2VMb2FkCiAtIChOU0NhY2hlZFVSTFJlc3BvbnNlICopd2ViVmlldzooV2ViVmlldyAqKXNlbmRl
ciByZXNvdXJjZTooaWQpaWRlbnRpZmllciB3aWxsQ2FjaGVSZXNwb25zZTooTlNDYWNoZWRVUkxS
ZXNwb25zZSAqKXJlc3BvbnNlIGZyb21EYXRhU291cmNlOihXZWJEYXRhU291cmNlICopZGF0YVNv
dXJjZTsKIEBlbmQKIAotQGludGVyZmFjZSBXZWJWaWV3IChXZWJTaG93Q2FuZGlkYXRlcykKLS0g
KHZvaWQpc2hvd0NhbmRpZGF0ZXM6KE5TQXJyYXkgKiljYW5kaWRhdGVzIGZvclN0cmluZzooTlNT
dHJpbmcgKilzdHJpbmcgaW5SZWN0OihOU1JlY3QpcmVjdE9mVHlwZWRTdHJpbmcgZm9yU2VsZWN0
ZWRSYW5nZTooTlNSYW5nZSlyYW5nZSB2aWV3OihOU1ZpZXcgKil2aWV3IGNvbXBsZXRpb25IYW5k
bGVyOih2b2lkICheKShOU1RleHRDaGVja2luZ1Jlc3VsdCAqYWNjZXB0ZWRDYW5kaWRhdGUpKWNv
bXBsZXRpb25CbG9jazsKLS0gKHZvaWQpZm9yY2VSZXF1ZXN0Q2FuZGlkYXRlc0ZvclRlc3Rpbmc7
Ci0tIChCT09MKXNob3VsZFJlcXVlc3RDYW5kaWRhdGVzOwotQGVuZAotCiAjaWZkZWYgX19jcGx1
c3BsdXMKIGV4dGVybiAiQyIgewogI2VuZGlmCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDg0MDUpCisrKyBUb29scy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxNi0xMS0wNCAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3VwcG9ydCBUb3VjaEJhciBpbiBX
ZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NDQzNworICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIHJkYXI6Ly9wcm9ibGVt
LzI4ODc2NTI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBtYWtlcyBNaW5pQnJvd3NlciBzdXBwb3J0IFRvdWNoQmFyIGN1c3RvbWl6YXRpb24u
IAorCisgICAgICAgICogTWluaUJyb3dzZXIvbWFjL0FwcERlbGVnYXRlLm06CisgICAgICAgICgt
W0Jyb3dzZXJBcHBEZWxlZ2F0ZSBhd2FrZUZyb21OaWJdKToKKwogMjAxNi0xMS0wNCAgQWxleCBD
aHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3
ZWQsIHJvbGxpbmcgb3V0IHIyMDgyOTMuCkluZGV4OiBUb29scy9NaW5pQnJvd3Nlci9tYWMvQXBw
RGVsZWdhdGUubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9NaW5pQnJvd3Nlci9tYWMvQXBwRGVsZWdh
dGUubQkocmV2aXNpb24gMjA4NDA1KQorKysgVG9vbHMvTWluaUJyb3dzZXIvbWFjL0FwcERlbGVn
YXRlLm0JKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDkgQEAgLSAodm9pZClhd2FrZUZyb21O
aWIKICNlbmRpZgogCiAgICAgW1tOU0FwcCBtYWluTWVudV0gaW5zZXJ0SXRlbTpbaXRlbSBhdXRv
cmVsZWFzZV0gYXRJbmRleDpbW05TQXBwIG1haW5NZW51XSBpbmRleE9mSXRlbVdpdGhUaXRsZTpA
IkRlYnVnIl1dOworCisgICAgaWYgKFtOU0FwcCByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9y
KHNldEF1dG9tYXRpY0N1c3RvbWl6ZVRvdWNoQmFyTWVudUl0ZW1FbmFibGVkOildKQorICAgICAg
ICBbTlNBcHAgc2V0QXV0b21hdGljQ3VzdG9taXplVG91Y2hCYXJNZW51SXRlbUVuYWJsZWQ6WUVT
XTsKIH0KIAogI2lmIFdLX0FQSV9FTkFCTEVECg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293986</attachid>
            <date>2016-11-04 23:08:14 -0700</date>
            <delta_ts>2016-11-04 23:33:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-4.txt</filename>
            <type>text/plain</type>
            <size>117401</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE2LTExLTA0ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBTdXBwb3J0IFRvdWNoQmFyIGluIFdl
YktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0
NDM3CisgICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0v
Mjg4NzY1MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9y
bS9zcGkvY29jb2EvQVZLaXRTUEkuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcGkvY29jb2EvTlNU
b3VjaEJhclNQSS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxD
aGVja2VyU1BJLmg6CisKIDIwMTYtMTEtMDQgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgogCiAgICAgICAgIEluZGV4ZWREQiAyLjA6IENsZWFuIHVwIG1vcmUgdHJhbnNhY3Rpb24g
YWJvcnQgYW5kIGV4Y2VwdGlvbiB0aHJvd2luZyBiZWhhdmlvciBmcm9tIElEQk9iamVjdFN0b3Jl
LgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMjA4NDA1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNTY0LDEwICsxNTY0LDEw
IEBACiAJCTQxNjJBNDU3MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQxNjJBNDU1MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
LmNwcCAqLzsgfTsKIAkJNDE2MkE0NTgxMDExNDY0NzAwREZGM0VEIC8qIEpTRGVkaWNhdGVkV29y
a2VyR2xvYmFsU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQxNjJBNDU2MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlLmggKi87IH07CiAJCTQxNkUyOUE2MTAyRkE5NjIwMDdGQzE0RSAvKiBXb3JrZXJSZXBv
cnRpbmdQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDE2RTI5QTUxMDJGQTk2MjAwN0ZDMTRFIC8qIFdvcmtlclJlcG9ydGluZ1Byb3h5LmggKi87
IH07CisJCTQxNkU2RkU4MUJCRDEyREYwMDBBM0Y2NCAvKiBSZWFkYWJsZVN0cmVhbUludGVybmFs
c0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTQxNkU2RkU4MUJCRDEyREYwMDBBNjAyMyAvKiBGZXRjaEludGVybmFsc0J1aWx0aW5zLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMx
MTBEMDBCNzY0QjkgLyogRmV0Y2hJbnRlcm5hbHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjAz
MyAvKiBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEM5IC8qIFN0cmVhbUlu
dGVybmFsc0J1aWx0aW5zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJNDE2RTZGRTgxQkJEMTJERjAwMEEzRjY0IC8qIFJlYWRhYmxlQnl0ZVN0cmVh
bUludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVCeXRlU3RyZWFt
SW50ZXJuYWxzQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQk0MTZFNkZFODFCQkQxMkRGMDAwQTYwNDMgLyogUmVhZGFibGVTdHJlYW1J
bnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOUIwM0Q4MDYxQkIzMTEwRDAwQjczRjY0IC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJu
YWxzQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk0MTZFNkZFODFCQkQxMkRGMDAwQTYwNDMgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50
ZXJuYWxzQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRl
cm5hbHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjA1MyAvKiBXcml0YWJsZVN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RTkgLyogV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNC
dWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTQxNkU2RkU5MUJCRDEyRTUwMDBBNjA0MyAvKiBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFC
QjMxMTBEMDBCNzY0RDggLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxNkU2RkU5MUJCRDEyRTUwMDBB
NjA1MyAvKiBXcml0YWJsZVN0cmVhbUJ1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RTggLyogV3JpdGFi
bGVTdHJlYW1CdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0yNTkwLDggKzI1OTAsOCBAQAogCQk2QjY5M0EyRTFDNTFBODJFMDBCMDNC
RUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZCNjkzQTJEMUM1MUE4MkUwMEIwM0JFRiAvKiBSZXNvdXJjZUxv
YWRPYnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTZCNjkzQTM0MUM1MUE5NUQwMEIwM0JFRiAvKiBSZXNvdXJjZUxvYWRPYnNlcnZlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QjY5M0Ez
MzFDNTFBOTVEMDBCMDNCRUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwICovOyB9OwogCQk2
QzRDOTZERTFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNEM5
NkRBMUFENDQ4MzUwMDM2M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuY3Bw
ICovOyB9OwotCQk2QzRDOTZERjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJl
YW1Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2QzRDOTZEQjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250
cm9sbGVyLmggKi87IH07CiAJCTZDNEM5NkRFMUFENDQ4MzUwMDM2NUE1MCAvKiBKU1JlYWRhYmxl
U3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkM0Qzk2REExQUQ0NDgzNTAwMzY1QTUwIC8qIEpTUmVhZGFibGVT
dHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHAgKi87IH07CisJCTZDNEM5NkRGMUFENDQ4MzUwMDM2
M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNEM5NkRCMUFENDQ4MzUwMDM2M0Y2NCAv
KiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaCAqLzsgfTsKIAkJNkM0Qzk2REYxQUQ0
NDgzNTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0Qzk2REIxQUQ0NDgz
NTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5oICovOyB9Owog
CQk2QzYzODg5NUE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlh
dG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM2
Mzg4OTNBOTZDQ0VFNTBDOEM5NDZDIC8qIENhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2QzYz
ODg5NkE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzYzODg5
NEE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5jcHAg
Ki87IH07CkBAIC0zMjc0LDYgKzMyNzQsNyBAQAogCQk5MzMwOUVBMzA5OUVCNzhDMDA1NkU1ODEg
LyogU2hhcmVkVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzMzA5RUEwMDk5RUI3OEMwMDU2RTU4MSAvKiBTaGFyZWRUaW1lci5oICovOyB9Owog
CQk5MzMwOUVBNDA5OUVCNzhDMDA1NkU1ODEgLyogVGltZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlFQTEwOTlFQjc4QzAwNTZFNTgxIC8q
IFRpbWVyLmNwcCAqLzsgfTsKIAkJOTMzNTRBM0MwQjI0RjhDOTAwM0Y2REVBIC8qIFVJRXZlbnRX
aXRoS2V5U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTMzNTRBM0IwQjI0RjhDOTAwM0Y2REVBIC8qIFVJRXZlbnRXaXRoS2V5U3RhdGUuY3Bw
ICovOyB9OworCQk5MzM1QjQ5RDFEQ0JFRjdDMDBFRDQ2OEUgLyogTlNUb3VjaEJhclNQSS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzNUI0OUIxRENC
RUY3MTAwRUQ0NjhFIC8qIE5TVG91Y2hCYXJTUEkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5MzNBMTQyRTBCN0QxODg2MDBBNTNGRkQgLyogVGV4
dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzM0ExNDJCMEI3RDE4ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuY3BwICovOyB9OwogCQk5MzNB
MTQzMDBCN0QxODg2MDBBNTNGRkQgLyogVGV4dEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzNBMTQyRDBCN0QxODg2MDBBNTNGRkQgLyogVGV4
dEV2ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJOTMzQTE0QjgwQjdEMUQ1MjAwQTUzRkZEIC8qIEpTVGV4dEV2ZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzM0ExNEI2MEI3RDFENTIwMEE1
M0ZGRCAvKiBKU1RleHRFdmVudC5jcHAgKi87IH07CkBAIC05NzgyLDggKzk3ODMsOCBAQAogCQk2
QjY5M0EyRDFDNTFBODJFMDBCMDNCRUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkI2OTNBMzMxQzUxQTk1RDAwQjAzQkVGIC8qIFJlc291
cmNlTG9hZE9ic2VydmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlc291cmNlTG9hZE9ic2VydmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NkM0Qzk2REExQUQ0NDgzNTAwMzYzRjY0IC8qIEpTUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1JlYWRhYmxlQnl0
ZVN0cmVhbUNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzRD
OTZEQjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUmVhZGFibGVCeXRlU3RyZWFtQ29u
dHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QzRDOTZEQTFBRDQ0ODM1
MDAzNjVBNTAgLyogSlNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29u
dHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZDNEM5NkRCMUFENDQ4
MzUwMDM2M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZDNEM5NkRCMUFENDQ4MzUwMDM2NUE1MCAv
KiBKU1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZDNjM4ODkzQTk2Q0NFRTUwQzhDOTQ2QyAvKiBDYWNo
ZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTZDNjM4ODk0QTk2Q0NFRTUwQzhDOTQ2QyAvKiBDYWNoZWRSZXNvdXJj
ZVJlcXVlc3RJbml0aWF0b3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTEwNzIyLDYgKzEwNzIzLDcgQEAKIAkJOTMzMkFCOEIxNjUzQTk3OTAw
RDgyN0VDIC8qIEZFTGlnaHRpbmdORU9OLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZFTGlnaHRpbmdORU9OLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMzJB
QjhDMTY1M0E5NzkwMEQ4MjdFQyAvKiBORU9OSGVscGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBORU9OSGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5MzM1NEEzQjBCMjRGOEM5MDAzRjZERUEgLyogVUlFdmVudFdpdGhLZXlTdGF0ZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVSUV2ZW50V2l0aEtleVN0YXRlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTMzNUI0OUIxRENCRUY3MTAwRUQ0NjhF
IC8qIE5TVG91Y2hCYXJTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTlNU
b3VjaEJhclNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzNBMTQyQjBCN0Qx
ODg2MDBBNTNGRkQgLyogVGV4dEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFRleHRFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkz
M0ExNDJDMEI3RDE4ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFRleHRFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzM0Ex
NDJEMEI3RDE4ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGV4dEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MTE3NSw4ICsxMTE3Nyw4IEBACiAJCTk5MDhCMEYwMUJDQUNGOTEwMEVEM0Y2NCAvKiBSZWFkYWJs
ZUJ5dGVTdHJlYW1Db250cm9sbGVyLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0
OyBwYXRoID0gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlci5qczsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTkwOEIwRjExQkNBQ0Y5MTAwRUQwRjU1IC8qIFN0cmVhbUludGVybmFs
cy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFN0cmVhbUludGVy
bmFscy5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkwOEIwRjExQkNBQ0Y5MTAw
RUQwRjY1IC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzLmpzICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVhZGFibGVTdHJlYW1JbnRlcm5hbHMuanM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk5MDhCMEYxMUJDQUNGOTEwMEVEM0Y2NCAvKiBSZWFkYWJs
ZUJ5dGVTdHJlYW1JbnRlcm5hbHMuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7
IHBhdGggPSBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHMuanM7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTk5MDhCMEYxMUJDQUNGOTEwMEVEMEY3NSAvKiBXcml0YWJsZVN0cmVhbUlu
dGVybmFscy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFdyaXRh
YmxlU3RyZWFtSW50ZXJuYWxzLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OTA4
QjBGMTFCQ0FDRjkxMDBFRDNGNjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzLmpzICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVhZGFibGVCeXRlU3RyZWFt
SW50ZXJuYWxzLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGMjFCQ0FD
RjkxMDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyLmpzICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVy
LmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGMzFCQ0FDRkZFMDBFRDBG
NjUgLyogQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJ5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3lCdWlsdGlu
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5MDhCMEY1MUJDQUQwN0QwMEVE
MEY2NSAvKiBCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5QnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTE4NCwxNSArMTExODYsMTMgQEAKIAkJ
OTkwOEIwRjcxQkNBRDA3RDAwRUQwRjY1IC8qIENvdW50UXVldWluZ1N0cmF0ZWd5QnVpbHRpbnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ291bnRRdWV1aW5nU3RyYXRlZ3lC
dWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGOTFCQ0FEMDdE
MDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkwOEIwRjkxQkNBRDA3RDAwRUQwRjc1IC8qIFdyaXRhYmxl
U3RyZWFtQnVpbHRpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V3JpdGFibGVTdHJlYW1CdWlsdGlucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTk5MDhCMEZBMUJDQUQwN0QwMEVEM0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVy
QnVpbHRpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFi
bGVCeXRlU3RyZWFtQ29udHJvbGxlckJ1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJOTkwOEIwRkIxQkNBRDA3RDAwRUQzRjY0IC8qIFJlYWRhYmxlQnl0ZVN0cmVhbUNv
bnRyb2xsZXJCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFk
YWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQnVpbHRpbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTkwOEIwRkExQkNBRDA3RDAwRUQwRjY1IC8qIFJlYWRhYmxlU3RyZWFtRGVmYXVs
dENvbnRyb2xsZXJCdWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQnVpbHRpbnMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGQjFCQ0FEMDdEMDBFRDBGNjUgLyogUmVhZGFi
bGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckJ1aWx0aW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJCdWlsdGlucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGRDFCQ0FEMDdEMDBFRDBGNDUgLyog
RmV0Y2hJbnRlcm5hbHNCdWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGZXRjaEludGVybmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTkwOEIwRkQxQkNBRDA3RDAwRUQwRjU1IC8qIFN0cmVhbUludGVybmFsc0J1aWx0
aW5zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTkwOEIwRkQx
QkNBRDA3RDAwRUQzRjY0IC8qIFJlYWRhYmxlQnl0ZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlYWRhYmxlQnl0ZVN0cmVh
bUludGVybmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkw
OEIwRkQxQkNBRDA3RDAwRUQwRjY1IC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFibGVTdHJlYW1J
bnRlcm5hbHNCdWlsdGlucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5MDhC
MEZEMUJDQUQwN0QwMEVEMEY3NSAvKiBXcml0YWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdyaXRhYmxlU3RyZWFtSW50
ZXJuYWxzQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OTA4QjBG
RDFCQ0FEMDdEMDBFRDNGNjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFibGVCeXRlU3Ry
ZWFtSW50ZXJuYWxzQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
OTA4QjBGRTFCQ0FEMDdEMDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyQnVp
bHRpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFibGVT
dHJlYW1EZWZhdWx0UmVhZGVyQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5OTA4QjBGRjFCQ0FEMDdEMDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVh
ZGVyQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVhZGFibGVT
dHJlYW1EZWZhdWx0UmVhZGVyQnVpbHRpbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTkyMDM5ODAxOEI5NUJDNjAwQjM5QUY5IC8qIFVzZXJJbnB1dEJyaWRnZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVc2VySW5wdXRCcmlkZ2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEyMzAsMTAgKzExMjMwLDEwIEBACiAJCTlBNTI4
RTgyMTdEN0Y1MkYwMEFBOTUxOCAvKiBGbG9hdGluZ09iamVjdHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRmxvYXRpbmdPYmplY3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTlBQjFGMzdFMThFMjQ4OUEwMDUzNDc0MyAvKiBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUFCMUYzN0YxOEUy
NDg5QTAwNTM0NzQzIC8qIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAv
KiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0QjkgLyog
RmV0Y2hJbnRlcm5hbHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGZXRjaEludGVybmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTlCMDNEODA2MUJCMzExMEQwMEI3NjRDOSAvKiBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDgg
LyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5h
bHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZUJ5
dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZVN0cmVhbUlu
dGVybmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMDNEODA2
MUJCMzExMEQwMEI3NjRFOCAvKiBXcml0YWJsZVN0cmVhbUJ1aWx0aW5zLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyaXRhYmxlU3RyZWFtQnVpbHRpbnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEU5IC8qIFdyaXRhYmxl
U3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTcyNTcsNiArMTcyNTcsNyBAQAogCQkJCTJEREI5N0YzMTlGOUFFQ0EwMDIw
MjVEOCAvKiBOU0V4dGVuc2lvblNQSS5oICovLAogCQkJCUNFMTI1MjNBMUExNjcxMTAwMDg2NDQ4
MCAvKiBOU0ZpbGVNYW5hZ2VyU1BJLmggKi8sCiAJCQkJQ0UxMjUyNTIxQTFCRUMwNjAwODY0NDgw
IC8qIE5TU3RyaW5nU1BJLmggKi8sCisJCQkJOTMzNUI0OUIxRENCRUY3MTAwRUQ0NjhFIC8qIE5T
VG91Y2hCYXJTUEkuaCAqLywKIAkJCQkzMUIzMTNEQTFCNjk4NzE2MDBGMkFBQkMgLyogTlNVUkxD
b25uZWN0aW9uU1BJLmggKi8sCiAJCQkJQ0UxMjUyNTQxQTFCRUMwRTAwODY0NDgwIC8qIE5TVVJM
RG93bmxvYWRTUEkuaCAqLywKIAkJCQk2NTNFRjgzODE5QTA0M0FFMDA1MjIwMkMgLyogTlNVUkxG
aWxlVHlwZU1hcHBpbmdzU1BJLmggKi8sCkBAIC0xNzMzMyw4ICsxNzMzNCw2IEBACiAJCQkJNDRB
MjhBQUUxMkRGQjhCRjAwQUU5MjNCIC8qIE1hdGhNTE5hbWVzLmggKi8sCiAJCQkJNzFFMjE4Mzgx
NzM1OUZCODAwNkU2RTREIC8qIFBsdWdJbnNSZXNvdXJjZXMuaCAqLywKIAkJCQk3MUUyMTgzOTE3
MzU5RkI4MDA2RTZFNEQgLyogUGx1Z0luc1Jlc291cmNlc0RhdGEuY3BwICovLAotCQkJCTk5MDhC
MEZBMUJDQUQwN0QwMDc2M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQnVpbHRp
bnMuY3BwICovLAotCQkJCTk5MDhCMEZCMUJDQUQwN0QwMDc2M0Y2NCAvKiBSZWFkYWJsZUJ5dGVT
dHJlYW1Db250cm9sbGVyQnVpbHRpbnMuaCAqLywKIAkJCQk5OTA4QjBGRDFCQ0FEMDdEMDBFRDNG
NjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuY3BwICovLAogCQkJCTlC
MDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oICovLAogCQkJCTk5MDhCMEY5MUJDQUQwN0QwMEVEMEY2NSAvKiBSZWFkYWJsZVN0cmVh
bUJ1aWx0aW5zLmNwcCAqLywKQEAgLTI1MDc3LDcgKzI1MDc2LDYgQEAKIAkJCQlCQzFCREYyNTE1
NkMxOEM3MDAxQzEyNDMgLyogRE9NRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTJFRDYwOUJE
MTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgx
ODVGM0IwOTc2NTc2NjAwNTgyNkQ5IC8qIERPTUltcGxlbWVudGF0aW9uLmggaW4gSGVhZGVycyAq
LywKLQkJCQlFMzVDQTE0RTFEQkMzQTQyMDBGODM1MTYgLyogRE9NSklUQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMxNTBFQTcxREE3MjE5MzAwMTk0MDEyIC8q
IERPTUpJVEhlbHBlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE5QzZFNEU0MEQ3NDVFMDUwMDY0
NDJFOSAvKiBET01NaW1lVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTlDNkU0RTgwRDc0NUUx
ODAwNjQ0MkU5IC8qIERPTU1pbWVUeXBlQXJyYXkuaCBpbiBIZWFkZXJzICovLApAQCAtMjY3OTEs
OSArMjY3ODksOSBAQAogCQkJCUY1NUIzRENFMTI1MUYxMkQwMDNFRjI2OSAvKiBSYW5nZUlucHV0
VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU4NEU5RTExNzY2OEJGMTAwODE1QjY4IC8qIFJh
c3RlclNoYXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODREODI3QzExRDMzM0VEMDA5NzI5OTAg
LyogUmF3RGF0YURvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQk0MTZFNkZFODFC
QkQxMkRGMDAwQTNGNjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCBp
biBIZWFkZXJzICovLAorCQkJCTQxNkU2RkU4MUJCRDEyREYwMDBBM0Y2NCAvKiBSZWFkYWJsZVN0
cmVhbUludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTZFNkZFOTFCQkQx
MkU1MDAwQTYwNDMgLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJNDE2RTZGRTgxQkJEMTJERjAwMEE2MDQzIC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVp
bHRpbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjA0MyAvKiBS
ZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkQzMTYwM0MxMkIwMjY3NjAwQzFBMzU5IC8qIFJlYWx0aW1lQW5hbHlzZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTRBNEY2NTcxMUFBOTk3RjEwMEUzOENERCAvKiBSZWFsdGltZU1lZGlhU291cmNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0QTRGNjU3MjFBQTk5N0YxMDBFMzhDREQgLyogUmVhbHRp
bWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzg3NSw2ICsy
Nzg3Myw3IEBACiAJCQkJMUNBRjM0ODEwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVj
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUNBRjM0ODMwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNj
cmlwdE9iamVjdFByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNTY5RDFCMEQ3RTJCODIw
MDdDMzk4MyAvKiBXZWJTY3JpcHRPYmplY3RQcm90b2NvbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
OTMzNUI0OUQxRENCRUY3QzAwRUQ0NjhFIC8qIE5TVG91Y2hCYXJTUEkuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk3QUFCRDFCMTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk3QUFCRDFFMTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXRDaGFubmVsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5N0FBQkQxRjE0RkEwOUQ1MDA3NDU3QUUgLyogV2ViU29ja2V0
Q2hhbm5lbENsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODgzNCw3ICsyODgzMyw2IEBACiAJ
CQkJQkMxQkRGMjQxNTZDMTg4MzAwMUMxMjQzIC8qIERPTUVycm9yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTJFRDYwOUJDMTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBODE4NUYzRTA5NzY1NzY2MDA1ODI2RDkgLyogRE9NSW1wbGVtZW50YXRp
b24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRTM1Q0ExNEQxREJDM0EzRjAwRjgzNTE2IC8qIERP
TUpJVEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTlDNkU0
RTMwRDc0NUUwNTAwNjQ0MkU5IC8qIERPTU1pbWVUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE5QzZFNEU3MEQ3NDVFMTgwMDY0NDJFOSAvKiBET01NaW1lVHlwZUFycmF5LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTUyQjZDOUMyMTVFM0Y0REYwMDY5MEIwNSAvKiBET01OYW1lZEZsb3dDb2xs
ZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
c3BpL2NvY29hL0FWS2l0U1BJLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vc3BpL2NvY29hL0FWS2l0U1BJLmgJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3NwaS9jb2NvYS9BVktpdFNQSS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzks
MyArMTM5LDMxIEBAIE5TX0NMQVNTX0FWQUlMQUJMRV9NQUMoMTBfMTEpCiArIChBVlZhbHVlVGlt
aW5nICopdmFsdWVUaW1pbmdXaXRoQW5jaG9yVmFsdWU6KGRvdWJsZSlhbmNob3JWYWx1ZSBhbmNo
b3JUaW1lU3RhbXA6KE5TVGltZUludGVydmFsKXRpbWVTdGFtcCByYXRlOihkb3VibGUpcmF0ZTsK
IEBwcm9wZXJ0eSAoTlNfTk9OQVRPTUlDX0lPU09OTFksIHJlYWRvbmx5KSBkb3VibGUgY3VycmVu
dFZhbHVlOwogQGVuZAorCisKKyNpZiBQTEFURk9STShNQUMpCisjaWYgRU5BQkxFKFdFQl9QTEFZ
QkFDS19DT05UUk9MU19NQU5BR0VSKQorI2ltcG9ydCA8QVZLaXQvQVZGdW5jdGlvbkJhclBsYXli
YWNrQ29udHJvbHNQcm92aWRlci5oPgorI2ltcG9ydCA8QVZLaXQvQVZGdW5jdGlvbkJhclNjcnVi
YmVyLmg+CisjZWxzZQorCitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCitAcHJvdG9jb2wgQVZG
dW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNDb250cm9sbGluZyA8TlNPYmplY3Q+CitAcHJvcGVy
dHkgKHJlYWRvbmx5KSBOU1RpbWVJbnRlcnZhbCBjb250ZW50RHVyYXRpb247CitAcHJvcGVydHkg
KHJlYWRvbmx5LCBudWxsYWJsZSkgQVZWYWx1ZVRpbWluZyAqdGltaW5nOworQHByb3BlcnR5IChy
ZWFkb25seSwgZ2V0dGVyPWlzU2Vla2luZykgQk9PTCBzZWVraW5nOworQHByb3BlcnR5IChyZWFk
b25seSkgTlNUaW1lSW50ZXJ2YWwgc2Vla1RvVGltZTsKKy0gKHZvaWQpc2Vla1RvVGltZTooTlNU
aW1lSW50ZXJ2YWwpdGltZSB0b2xlcmFuY2VCZWZvcmU6KE5TVGltZUludGVydmFsKXRvbGVyYW5j
ZUJlZm9yZSB0b2xlcmFuY2VBZnRlcjooTlNUaW1lSW50ZXJ2YWwpdG9sZXJhbmNlQWZ0ZXI7CitA
cHJvcGVydHkgKHJlYWRvbmx5KSBCT09MIGhhc0VuYWJsZWRBdWRpbzsKK0Bwcm9wZXJ0eSAocmVh
ZG9ubHkpIEJPT0wgaGFzRW5hYmxlZFZpZGVvOworQGVuZAorCitAaW50ZXJmYWNlIEFWRnVuY3Rp
b25CYXJTY3J1YmJlciA6IE5TVmlldworQHByb3BlcnR5IChhc3NpZ24sIG51bGxhYmxlKSBpZDxB
VkZ1bmN0aW9uQmFyUGxheWJhY2tDb250cm9sc0NvbnRyb2xsaW5nPiBwbGF5YmFja0NvbnRyb2xz
Q29udHJvbGxlcjsKK0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECisKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisjZW5kaWYgLy8gUExBVEZPUk0o
TUFDKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL2NvY29hL05TVG91Y2hCYXJT
UEkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvY29jb2EvTlNU
b3VjaEJhclNQSS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Nw
aS9jb2NvYS9OU1RvdWNoQmFyU1BJLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKSAmJiBIQVZFKFRPVUNIX0JB
UikKKworI2ltcG9ydCA8QXBwS2l0L05TRnVuY3Rpb25CYXJfUHJpdmF0ZS5oPgorI2ltcG9ydCA8
QXBwS2l0L05TVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXJfV2ViS2l0U1BJLmg+CisjaW1wb3J0
IDxBcHBLaXQvTlNUb3VjaEJhcl9Qcml2YXRlLmg+CisKKyNlbHNlCisKK05TX0FTU1VNRV9OT05O
VUxMX0JFR0lOCisKK0BpbnRlcmZhY2UgTlNUb3VjaEJhckl0ZW0gOiBOU09iamVjdAorQGVuZAor
CitAaW50ZXJmYWNlIE5TQ29sb3JQaWNrZXJUb3VjaEJhckl0ZW0gOiBOU1RvdWNoQmFySXRlbQor
QGVuZAorCitAaW50ZXJmYWNlIE5TVG91Y2hCYXIgOiBOU09iamVjdAorQHByb3BlcnR5IChyZWFk
b25seSwgY29weSwgbnVsbGFibGUpIE5TQXJyYXk8TlNUb3VjaEJhckl0ZW0gKj4gKml0ZW1zOwor
QHByb3BlcnR5IChzdHJvbmcsIG51bGxhYmxlKSBOU1RvdWNoQmFySXRlbSAqZXNjYXBlS2V5UmVw
bGFjZW1lbnRJdGVtOworQGVuZAorCitAaW50ZXJmYWNlIE5TVGV4dFRvdWNoQmFySXRlbUNvbnRy
b2xsZXIgOiBOU09iamVjdAorCitAcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcsIG51bGxhYmxl
KSBOU0NvbG9yUGlja2VyVG91Y2hCYXJJdGVtICpjb2xvclBpY2tlckl0ZW07CitAcHJvcGVydHkg
KHJlYWRvbmx5LCBzdHJvbmcsIG51bGxhYmxlKSBOU1NlZ21lbnRlZENvbnRyb2wgKnRleHRTdHls
ZTsKK0Bwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZywgbnVsbGFibGUpIE5TU2VnbWVudGVkQ29u
dHJvbCAqdGV4dEFsaWdubWVudHM7CitAcHJvcGVydHkgKG51bGxhYmxlLCBzdHJvbmcpIE5TVmll
d0NvbnRyb2xsZXIgKnRleHRMaXN0Vmlld0NvbnRyb2xsZXI7CitAcHJvcGVydHkgQk9PTCB1c2Vz
TmFycm93VGV4dFN0eWxlSXRlbTsKKworLSAobnVsbGFibGUgTlNUb3VjaEJhckl0ZW0gKilpdGVt
Rm9ySWRlbnRpZmllcjoobnVsbGFibGUgTlNTdHJpbmcgKilpZGVudGlmaWVyOworCitAZW5kCisK
KyNkZWZpbmUgTlNUb3VjaEJhcldpbGxFbnRlckN1c3RvbWl6YXRpb24gQCJOU1RvdWNoQmFyV2ls
bEVudGVyQ3VzdG9taXphdGlvbiIKKyNkZWZpbmUgTlNUb3VjaEJhckRpZEV4aXRDdXN0b21pemF0
aW9uIEAiTlNUb3VjaEJhckRpZEV4aXRDdXN0b21pemF0aW9uIgorCitOU19BU1NVTUVfTk9OTlVM
TF9FTkQKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvbWFjL05T
U3BlbGxDaGVja2VyU1BJLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
c3BpL21hYy9OU1NwZWxsQ2hlY2tlclNQSS5oCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxDaGVja2VyU1BJLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDYgKzMwLDcgQEAKIC8vIEZJWE1FOiBUaGlzIGhlYWRlciBzaG91bGQgaW5jbHVk
ZSBzeXN0ZW0gaGVhZGVycyB3aGVuIHBvc3NpYmxlLgogCiBleHRlcm4gTlNTdHJpbmcgKk5TVGV4
dENoZWNraW5nSW5zZXJ0aW9uUG9pbnRLZXk7CitleHRlcm4gTlNOb3RpZmljYXRpb25OYW1lIGNv
bnN0IE5TU3BlbGxDaGVja2VyRGlkQ2hhbmdlQXV0b21hdGljVGV4dENvbXBsZXRpb25Ob3RpZmlj
YXRpb247CiAKIEBpbnRlcmZhY2UgTlNTcGVsbENoZWNrZXIgKCkKIC0gKE5TSW50ZWdlcilyZXF1
ZXN0Q2FuZGlkYXRlc0ZvclNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2Upc2VsZWN0ZWRSYW5nZSBpblN0
cmluZzooTlNTdHJpbmcgKilzdHJpbmdUb0NoZWNrIHR5cGVzOihOU1RleHRDaGVja2luZ1R5cGVz
KWNoZWNraW5nVHlwZXMgb3B0aW9uczooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKW9w
dGlvbnMgaW5TcGVsbERvY3VtZW50V2l0aFRhZzooTlNJbnRlZ2VyKXRhZyBjb21wbGV0aW9uSGFu
ZGxlcjoodm9pZCAoXikoTlNJbnRlZ2VyIHNlcXVlbmNlTnVtYmVyLCBOU0FycmF5PE5TVGV4dENo
ZWNraW5nUmVzdWx0ICo+ICpjYW5kaWRhdGVzKSljb21wbGV0aW9uSGFuZGxlcjsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDkwIEBACisyMDE2LTExLTA0ICBCZXRoIERha2luICA8YmRh
a2luQGFwcGxlLmNvbT4KKworICAgICAgICBTdXBwb3J0IFRvdWNoQmFyIGluIFdlYktpdAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NDM3CisgICAg
ICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjg4NzY1MjQK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tWaWV3UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJWaWV3Lm1tOgorICAgICAgICAoLVtXS1dlYlZpZXcgbWFrZVRvdWNoQmFyXSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtXSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfd2ViX2RpZEFkZE1lZGlhQ29udHJvbHNNYW5hZ2VyOl0pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX3dlYl9kaWRSZW1vdmVNZWRpYUNvbnRyb2xzTWFuYWdlcl0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX2ludGVyYWN0V2l0aE1lZGlhQ29udHJvbHNGb3JUZXN0aW5n
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNW
aWV3Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXdd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9hZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Ol0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX3JlbW92ZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXdd
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAgICgtW1dLVmlldyBt
YWtlVG91Y2hCYXJdKToKKyAgICAgICAgKC1bV0tWaWV3IGNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0
ZW1dKToKKyAgICAgICAgKC1bV0tWaWV3IF93ZWJfZGlkQWRkTWVkaWFDb250cm9sc01hbmFnZXI6
XSk6CisgICAgICAgICgtW1dLVmlldyBfd2ViX2RpZFJlbW92ZU1lZGlhQ29udHJvbHNNYW5hZ2Vy
XSk6CisgICAgICAgICgtW1dLVmlldyBfd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3XSk6
CisgICAgICAgICgtW1dLVmlldyBfc2V0V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Ol0p
OgorICAgICAgICAoLVtXS1ZpZXcgX21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXddKToKKyAgICAg
ICAgKC1bV0tWaWV3IF9hZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Ol0pOgorICAgICAgICAo
LVtXS1ZpZXcgX3JlbW92ZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXddKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0lt
cGw6OmN1cnJlbnRUb3VjaEJhcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjbGll
bnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3SW1wbDo6c2V0Q2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldElzQ3VzdG9taXppbmdUb3VjaEJhcik6CisgICAg
ICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tOgorICAgICAgICAoLVtXS1RleHRM
aXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciBpbml0V2l0aFdlYlZpZXdJbXBsOl0pOgorICAgICAg
ICAoLVtXS1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciBkaWREZXN0cm95Vmlld10pOgor
ICAgICAgICAoLVtXS1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciBfc2VsZWN0TGlzdDpd
KToKKyAgICAgICAgKC1bV0tUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgc2V0Q3VycmVu
dExpc3RUeXBlOl0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIGlu
aXRXaXRoV2ViVmlld0ltcGw6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRy
b2xsZXIgZGlkRGVzdHJveVZpZXddKToKKyAgICAgICAgKC1bV0tUZXh0VG91Y2hCYXJJdGVtQ29u
dHJvbGxlciB0b3VjaEJhcjptYWtlSXRlbUZvcklkZW50aWZpZXI6XSk6CisgICAgICAgICgtW1dL
VGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgaXRlbUZvcklkZW50aWZpZXI6XSk6CisgICAgICAg
ICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRl
bTplbmRTZWxlY3RpbmdDYW5kaWRhdGVBdEluZGV4Ol0pOgorICAgICAgICAoLVtXS1RleHRUb3Vj
aEJhckl0ZW1Db250cm9sbGVyIGNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW06Y2hhbmdlZENhbmRp
ZGF0ZUxpc3RWaXNpYmlsaXR5Ol0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250
cm9sbGVyIHRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlcl0pOgorICAgICAgICAoLVtXS1Rl
eHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFRleHRJc0JvbGQ6XSk6CisgICAgICAgICgtW1dL
VGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzSXRhbGljOl0pOgorICAgICAgICAo
LVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFRleHRJc1VuZGVybGluZWQ6XSk6Cisg
ICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgX3drQ2hhbmdlVGV4dFN0eWxl
Ol0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldEN1cnJlbnRU
ZXh0QWxpZ25tZW50Ol0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVy
IF93a0NoYW5nZVRleHRBbGlnbm1lbnQ6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRl
bUNvbnRyb2xsZXIgdGV4dENvbG9yXSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNv
bnRyb2xsZXIgc2V0VGV4dENvbG9yOl0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1D
b250cm9sbGVyIF93a0NoYW5nZUNvbG9yOl0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0
ZW1Db250cm9sbGVyIHRleHRMaXN0Vmlld0NvbnRyb2xsZXJdKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6Om1ha2VUb3VjaEJhcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBs
OjpjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0lt
cGw6Om1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6dXNlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjpkaXNtaXNzVGV4dFRvdWNoQmFyUG9wb3Zlckl0ZW1XaXRoSWRlbnRpZmllcik6
CisgICAgICAgIChXZWJLaXQ6OnRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25BbGxvd2VkSWRlbnRp
ZmllcnMpOgorICAgICAgICAoV2ViS2l0OjpwbGFpblRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25E
ZWZhdWx0SXRlbUlkZW50aWZpZXJzKToKKyAgICAgICAgKFdlYktpdDo6cmljaFRleHRUb3VjaEJh
ckN1c3RvbWl6YXRpb25EZWZhdWx0SXRlbUlkZW50aWZpZXJzKToKKyAgICAgICAgKFdlYktpdDo6
dG91Y2hCYXJEaWRFeGl0Q3VzdG9taXphdGlvbik6CisgICAgICAgIChXZWJLaXQ6OnRvdWNoQmFy
V2lsbEVudGVyQ3VzdG9taXphdGlvbik6CisgICAgICAgIChXZWJLaXQ6OmRpZENoYW5nZUF1dG9t
YXRpY1RleHRDb21wbGV0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0
ZVRvdWNoQmFyQW5kUmVmcmVzaFRleHRCYXJJZGVudGlmaWVycyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXdJbXBsOjpzZXRVcFRleHRUb3VjaEJhcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjppc1JpY2hseUVkaXRhYmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OnRleHRUb3VjaEJhcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVUZXh0
VG91Y2hCYXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dXBkYXRlTWVkaWFUb3Vj
aEJhcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpmb3JjZVJlcXVlc3RDYW5kaWRh
dGVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVUb3Vj
aEJhcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzaG91bGRSZXF1ZXN0Q2FuZGlk
YXRlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzaG93Q2FuZGlkYXRlcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp3ZWJWaWV3SW1wbEFkZGl0aW9uc1dpbGxEZXN0
cm95Vmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRFZGl0YWJsZUVsZW1l
bnRJc0ZvY3VzZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YmVjb21lRmlyc3RS
ZXNwb25kZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2VsZWN0aW9uRGlkQ2hh
bmdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnZpZGVvQ29udHJvbHNNYW5hZ2Vy
RGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0ZVdlYlZpZXdJ
bXBsQWRkaXRpb25zKTogRGVsZXRlZC4KKwogMjAxNi0xMS0wNCAgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcg
b3V0IHIyMDgyOTMuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
Vmlld1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLVmlld1ByaXZhdGUuaAkocmV2aXNpb24gMjA4NDA1KQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ZpZXdQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDYgKzMxLDggQEAKICNpbXBvcnQgPFdlYktpdC9XS1ZpZXcuaD4KICNpbXBvcnQgPFdlYktp
dC9fV0tPdmVybGF5U2Nyb2xsYmFyU3R5bGUuaD4KIAorQGNsYXNzIEFWRnVuY3Rpb25CYXJTY3J1
YmJlcjsKKwogQGludGVyZmFjZSBXS1ZpZXcgKFByaXZhdGUpCiAKIC8qIEMgU1BJIHN1cHBvcnQu
ICovCkBAIC0xMzIsNiArMTM0LDExIEBACiAKIC0gKHZvaWQpX2dlc3R1cmVFdmVudFdhc05vdEhh
bmRsZWRCeVdlYkNvcmU6KE5TRXZlbnQgKilldmVudDsKIAorQHByb3BlcnR5IChub25hdG9taWMs
IHJlYWR3cml0ZSwgc2V0dGVyPV9zZXRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6KSBC
T09MIF93YW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc7CitAcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIEFWRnVuY3Rpb25CYXJTY3J1YmJlciAqX21lZGlhUGxheWJhY2tDb250cm9s
c1ZpZXc7CistICh2b2lkKV9hZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OihBVkZ1bmN0aW9u
QmFyU2NydWJiZXIgKiltZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OworLSAodm9pZClfcmVtb3Zl
TWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzsKKwogQGVuZAogCiAjZW5kaWYgLy8gIVRBUkdFVF9P
U19JUEhPTkUKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJW
aWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJWaWV3Lm1tCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTc0LDcgKzE3NCwx
MiBAQCBzdGF0aWMgY29uc3QgdWludDMyX3QgZmlyc3RTREtWZXJzaW9uV2l0CiAKIEBpbnRlcmZh
Y2UgV0tXZWJWaWV3ICgpIDxXZWJWaWV3SW1wbERlbGVnYXRlLCBOU1RleHRJbnB1dENsaWVudD4K
IEBlbmQKLSNlbmRpZgorCisjaWYgSEFWRShUT1VDSF9CQVIpCitAaW50ZXJmYWNlIFdLV2ViVmll
dyAoKSA8TlNUb3VjaEJhclByb3ZpZGVyPgorQGVuZAorI2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFS
KQorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogc3RhdGljIEhhc2hNYXA8V2ViS2l0OjpXZWJQ
YWdlUHJveHkqLCBXS1dlYlZpZXcgKj4mIHBhZ2VUb1ZpZXdNYXAoKQogewpAQCAtMzE1NSw2ICsz
MTYwLDM4IEBAIC0gKHZvaWQpX3dlYl9nZXN0dXJlRXZlbnRXYXNOb3RIYW5kbGVkQnkKIAogI2Vu
ZGlmIC8vIFBMQVRGT1JNKE1BQykKIAorI2lmIEhBVkUoVE9VQ0hfQkFSKQorCitAZHluYW1pYyB0
b3VjaEJhcjsKKworLSAoTlNUb3VjaEJhciAqKW1ha2VUb3VjaEJhcgoreworICAgIHJldHVybiBf
aW1wbC0+bWFrZVRvdWNoQmFyKCk7Cit9CisKKy0gKE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRl
bSAqKWNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0KK3sKKyAgICByZXR1cm4gX2ltcGwtPmNhbmRp
ZGF0ZUxpc3RUb3VjaEJhckl0ZW0oKTsKK30KKworLSAodm9pZClfd2ViX2RpZEFkZE1lZGlhQ29u
dHJvbHNNYW5hZ2VyOihpZCljb250cm9sc01hbmFnZXIKK3sKKyAgICBbc2VsZiBfYWRkTWVkaWFQ
bGF5YmFja0NvbnRyb2xzVmlldzpjb250cm9sc01hbmFnZXJdOworfQorCistICh2b2lkKV93ZWJf
ZGlkUmVtb3ZlTWVkaWFDb250cm9sc01hbmFnZXIKK3sKKyAgICBbc2VsZiBfcmVtb3ZlTWVkaWFQ
bGF5YmFja0NvbnRyb2xzVmlld107Cit9CisKKy0gKHZvaWQpX2ludGVyYWN0V2l0aE1lZGlhQ29u
dHJvbHNGb3JUZXN0aW5nCit7CisgICAgW3NlbGYgX3NldFdhbnRzTWVkaWFQbGF5YmFja0NvbnRy
b2xzVmlldzpZRVNdOworICAgIFtzZWxmIG1ha2VUb3VjaEJhcl07Cit9CisKKyNlbmRpZiAvLyBI
QVZFKFRPVUNIX0JBUikKKwogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV0tXZWJWaWV3IChXS1By
aXZhdGUpCkBAIC00NTI5LDYgKzQ1NjYsNDEgQEAgLSAodm9pZClzZXRVc2VySW50ZXJmYWNlTGF5
b3V0RGlyZWN0aW9uOgogICAgIF9pbXBsLT5zZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9u
KHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24pOwogfQogCistIChCT09MKV93YW50c01lZGlh
UGxheWJhY2tDb250cm9sc1ZpZXcKK3sKKyNpZiBIQVZFKFRPVUNIX0JBUikKKyAgICByZXR1cm4g
X2ltcGwtPmNsaWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpOworI2Vsc2UKKyAg
ICByZXR1cm4gTk87CisjZW5kaWYKK30KKworLSAodm9pZClfc2V0V2FudHNNZWRpYVBsYXliYWNr
Q29udHJvbHNWaWV3OihCT09MKXdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldworeworI2lm
IEhBVkUoVE9VQ0hfQkFSKQorICAgIF9pbXBsLT5zZXRDbGllbnRXYW50c01lZGlhUGxheWJhY2tD
b250cm9sc1ZpZXcod2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KTsKKyNlbmRpZgorfQor
CistIChBVkZ1bmN0aW9uQmFyU2NydWJiZXIgKilfbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldwor
eworI2lmIEhBVkUoVE9VQ0hfQkFSKQorICAgIGlmICghX2ltcGwtPmNsaWVudFdhbnRzTWVkaWFQ
bGF5YmFja0NvbnRyb2xzVmlldygpKQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBf
aW1wbC0+bWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpOworI2Vsc2UKKyAgICByZXR1cm4gbmls
OworI2VuZGlmCit9CisKKy0gKHZvaWQpX2FkZE1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6KEFW
RnVuY3Rpb25CYXJTY3J1YmJlciAqKW1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcKK3sKK30KKwor
LSAodm9pZClfcmVtb3ZlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldworeworfQorCiAjZW5kaWYK
IAogQGVuZApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZp
ZXdQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYlZpZXdQcml2YXRlLmgJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Miw2ICs1Miw3IEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9XS0ltbWVkaWF0
ZUEKIAogI2VuZGlmCiAKK0BjbGFzcyBBVkZ1bmN0aW9uQmFyU2NydWJiZXI7CiBAY2xhc3MgV0tC
cm93c2luZ0NvbnRleHRIYW5kbGU7CiBAY2xhc3MgX1dLRnJhbWVIYW5kbGU7CiBAY2xhc3MgX1dL
SGl0VGVzdFJlc3VsdDsKQEAgLTIwMiw2ICsyMDMsMTIgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50
ZWdlciwgX1dLSW1tZWRpYXRlQQogLSAoTlNQcmludE9wZXJhdGlvbiAqKV9wcmludE9wZXJhdGlv
bldpdGhQcmludEluZm86KE5TUHJpbnRJbmZvICopcHJpbnRJbmZvOwogLSAoTlNQcmludE9wZXJh
dGlvbiAqKV9wcmludE9wZXJhdGlvbldpdGhQcmludEluZm86KE5TUHJpbnRJbmZvICopcHJpbnRJ
bmZvIGZvckZyYW1lOihfV0tGcmFtZUhhbmRsZSAqKWZyYW1lSGFuZGxlIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3N4KDEwLjEyKSwgaW9zKDEwLjApKTsKIAorLy8gRklYTUU6IFRoaXMgU1BJIHNob3Vs
ZCBiZWNvbWUgYSBwYXJ0IG9mIHRoZSBXS1VJRGVsZWdhdGUuIHJkYXI6Ly9wcm9ibGVtLzI2NTYx
NTM3CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZHdyaXRlLCBzZXR0ZXI9X3NldFdhbnRzTWVk
aWFQbGF5YmFja0NvbnRyb2xzVmlldzopIEJPT0wgX3dhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xz
VmlldyBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSk7CitAcHJvcGVydHkgKG5v
bmF0b21pYywgcmVhZG9ubHkpIEFWRnVuY3Rpb25CYXJTY3J1YmJlciAqX21lZGlhUGxheWJhY2tD
b250cm9sc1ZpZXcgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSkpOworLSAodm9p
ZClfYWRkTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzooQVZGdW5jdGlvbkJhclNjcnViYmVyICop
bWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNf
VEJBKSk7CistICh2b2lkKV9yZW1vdmVNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3IFdLX0FQSV9B
VkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpKTsKKwogI2VuZGlmCiAKIC0gKFdLTmF2aWdhdGlv
biAqKV9yZWxvYWRXaXRob3V0Q29udGVudEJsb2NrZXJzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4
KDEwLjEyKSwgaW9zKDEwLjApKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
bWFjL1dLVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L21hYy9XS1ZpZXcubW0JKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsMTEgQEAg
QGludGVyZmFjZSBXS1ZpZXdEYXRhIDogTlNPYmplY3QgewogQGludGVyZmFjZSBXS1ZpZXcgKCkg
PFdlYlZpZXdJbXBsRGVsZWdhdGU+CiBAZW5kCiAKKyNpZiBIQVZFKFRPVUNIX0JBUikKK0BpbnRl
cmZhY2UgV0tWaWV3ICgpIDxOU1RvdWNoQmFyUHJvdmlkZXI+CitAZW5kCisjZW5kaWYKKwogQGlt
cGxlbWVudGF0aW9uIFdLVmlldwogCiAjaWYgV0tfQVBJX0VOQUJMRUQKQEAgLTk3Nyw2ICs5ODIs
MzIgQEAgLSAodm9pZClfZGlkVXBkYXRlQ2FuZGlkYXRlTGlzdFZpc2liaWxpdAogewogfQogCisj
aWYgSEFWRShUT1VDSF9CQVIpCisKK0BkeW5hbWljIHRvdWNoQmFyOworCistIChOU1RvdWNoQmFy
ICopbWFrZVRvdWNoQmFyCit7CisgICAgcmV0dXJuIF9kYXRhLT5faW1wbC0+bWFrZVRvdWNoQmFy
KCk7Cit9CisKKy0gKE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSAqKWNhbmRpZGF0ZUxpc3RU
b3VjaEJhckl0ZW0KK3sKKyAgICByZXR1cm4gX2RhdGEtPl9pbXBsLT5jYW5kaWRhdGVMaXN0VG91
Y2hCYXJJdGVtKCk7Cit9CisKKy0gKHZvaWQpX3dlYl9kaWRBZGRNZWRpYUNvbnRyb2xzTWFuYWdl
cjooaWQpY29udHJvbHNNYW5hZ2VyCit7CisgICAgW3NlbGYgX2FkZE1lZGlhUGxheWJhY2tDb250
cm9sc1ZpZXc6Y29udHJvbHNNYW5hZ2VyXTsKK30KKworLSAodm9pZClfd2ViX2RpZFJlbW92ZU1l
ZGlhQ29udHJvbHNNYW5hZ2VyCit7CisgICAgW3NlbGYgX3JlbW92ZU1lZGlhUGxheWJhY2tDb250
cm9sc1ZpZXddOworfQorCisjZW5kaWYgLy8gSEFWRShUT1VDSF9CQVIpCisKIEBlbmQKIAogQGlt
cGxlbWVudGF0aW9uIFdLVmlldyAoUHJpdmF0ZSkKQEAgLTE0NjcsMTAgKzE0OTgsNDEgQEAgLSAo
dm9pZClzZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOgogICAgIF9kYXRhLT5faW1wbC0+
c2V0VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbih1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0
aW9uKTsKIH0KIAotQGVuZAorLSAoQk9PTClfd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3
Cit7CisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgcmV0dXJuIF9kYXRhLT5faW1wbC0+Y2xpZW50
V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCk7CisjZWxzZQorICAgIHJldHVybiBOTzsK
KyNlbmRpZgorfQorCistICh2b2lkKV9zZXRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6
KEJPT0wpd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Cit7CisjaWYgSEFWRShUT1VDSF9C
QVIpCisgICAgX2RhdGEtPl9pbXBsLT5zZXRDbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9s
c1ZpZXcod2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KTsKKyNlbmRpZgorfQogCi0jaWYg
UExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIw
MCAmJiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2ltcG9ydCA8V2ViS2l0QWRkaXRpb25zL1dL
Vmlld0FkZGl0aW9ucy5tbT4KKy0gKEFWRnVuY3Rpb25CYXJTY3J1YmJlciAqKV9tZWRpYVBsYXli
YWNrQ29udHJvbHNWaWV3Cit7CisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgaWYgKCFfZGF0YS0+
X2ltcGwtPmNsaWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpKQorICAgICAgICBy
ZXR1cm4gbmlsOworICAgIHJldHVybiBfZGF0YS0+X2ltcGwtPm1lZGlhUGxheWJhY2tDb250cm9s
c1ZpZXcoKTsKKyNlbHNlCisgICAgcmV0dXJuIG5pbDsKICNlbmRpZgorfQorCistICh2b2lkKV9h
ZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OihBVkZ1bmN0aW9uQmFyU2NydWJiZXIgKiltZWRp
YVBsYXliYWNrQ29udHJvbHNWaWV3Cit7Cit9CisKKy0gKHZvaWQpX3JlbW92ZU1lZGlhUGxheWJh
Y2tDb250cm9sc1ZpZXcKK3sKK30KKworQGVuZAogCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLmgJKHJl
dmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1MiwxNyBAQCBPQkpDX0NMQVNTIFdLV2Vi
VmlldzsKIE9CSkNfQ0xBU1MgV0tXaW5kb3dWaXNpYmlsaXR5T2JzZXJ2ZXI7CiBPQkpDX0NMQVNT
IF9XS1RodW1ibmFpbFZpZXc7CiAKLSNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKSAmJiBfX01B
Q19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMAotI2ltcG9ydCA8V2ViS2l0QWRk
aXRpb25zL1dlYlZpZXdJbXBsQWRkaXRpb25zRGVjbGFyYXRpb25zLmg+Ci0jZW5kaWYKKyNpZiBI
QVZFKFRPVUNIX0JBUikKK09CSkNfQ0xBU1MgQVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNQ
cm92aWRlcjsKK09CSkNfQ0xBU1MgQVZGdW5jdGlvbkJhclNjcnViYmVyOworT0JKQ19DTEFTUyBO
U0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW07CitPQkpDX0NMQVNTIE5TQ3VzdG9tVG91Y2hCYXJJ
dGVtOworT0JKQ19DTEFTUyBOU1RvdWNoQmFyOworT0JKQ19DTEFTUyBOU1RvdWNoQmFySXRlbTsK
K09CSkNfQ0xBU1MgTlNQb3BvdmVyVG91Y2hCYXJJdGVtOworT0JKQ19DTEFTUyBXS1RleHRUb3Vj
aEJhckl0ZW1Db250cm9sbGVyOworT0JKQ19DTEFTUyBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdl
cjsKKyNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikKIAogQHByb3RvY29sIFdlYlZpZXdJbXBsRGVs
ZWdhdGUKIApAQCAtNDgwLDcgKzQ4OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJpZ2h0TW91c2VE
cmFnZ2VkKE5TRXZlbnQgKik7CiAgICAgdm9pZCByaWdodE1vdXNlVXAoTlNFdmVudCAqKTsKIAot
ICAgIHZvaWQgdXBkYXRlV2ViVmlld0ltcGxBZGRpdGlvbnMoKTsKKyAgICB2b2lkIHVwZGF0ZVRv
dWNoQmFyKCk7CiAgICAgdm9pZCBmb3JjZVJlcXVlc3RDYW5kaWRhdGVzRm9yVGVzdGluZygpOwog
ICAgIGJvb2wgc2hvdWxkUmVxdWVzdENhbmRpZGF0ZXMoKSBjb25zdDsKICAgICB2b2lkIHNob3dD
YW5kaWRhdGVzKE5TQXJyYXkgKmNhbmRpZGF0ZXMsIE5TU3RyaW5nICosIE5TUmVjdCByZWN0T2ZU
eXBlZFN0cmluZywgTlNSYW5nZSBzZWxlY3RlZFJhbmdlLCBOU1ZpZXcgKiwgdm9pZCAoXmNvbXBs
ZXRpb25IYW5kbGVyKShOU1RleHRDaGVja2luZ1Jlc3VsdCAqYWNjZXB0ZWRDYW5kaWRhdGUpKTsK
QEAgLTQ5NiwxMiArNTA0LDU0IEBAIHB1YmxpYzoKIAogI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9N
SU5fUkVRVUlSRUQgPj0gMTAxMjAwIAogICAgIHZvaWQgaGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUo
TlNUZXh0Q2hlY2tpbmdSZXN1bHQgKmFjY2VwdGVkQ2FuZGlkYXRlKTsKLSNpZiBVU0UoQVBQTEVf
SU5URVJOQUxfU0RLKQotI2ltcG9ydCA8V2ViS2l0QWRkaXRpb25zL1dlYlZpZXdJbXBsQWRkaXRp
b25zLmg+Ci0jZW5kaWYKICNlbmRpZgogCisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgTlNUb3Vj
aEJhciAqbWFrZVRvdWNoQmFyKCk7CisgICAgTlNUb3VjaEJhciAqY3VycmVudFRvdWNoQmFyKCkg
Y29uc3QgeyByZXR1cm4gbV9jdXJyZW50VG91Y2hCYXIuZ2V0KCk7IH0KKyAgICBOU0NhbmRpZGF0
ZUxpc3RUb3VjaEJhckl0ZW0gKmNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0oKSBjb25zdDsKKyAg
ICBBVkZ1bmN0aW9uQmFyU2NydWJiZXIgKm1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSBjb25z
dDsKKyAgICBOU1RvdWNoQmFyICp0ZXh0VG91Y2hCYXIoKSBjb25zdDsKKyAgICB2b2lkIGRpc21p
c3NUZXh0VG91Y2hCYXJQb3BvdmVySXRlbVdpdGhJZGVudGlmaWVyKE5TU3RyaW5nICopOworCisg
ICAgYm9vbCBjbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSBjb25zdCB7IHJl
dHVybiBtX2NsaWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzsgfQorICAgIHZvaWQg
c2V0Q2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KGJvb2wgY2xpZW50V2FudHNN
ZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KSB7IG1fY2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29u
dHJvbHNWaWV3ID0gY2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OyB9CisKKyAg
ICB2b2lkIHVwZGF0ZVRvdWNoQmFyQW5kUmVmcmVzaFRleHRCYXJJZGVudGlmaWVycygpOworICAg
IHZvaWQgc2V0SXNDdXN0b21pemluZ1RvdWNoQmFyKGJvb2wgaXNDdXN0b21pemluZ1RvdWNoQmFy
KSB7IG1faXNDdXN0b21pemluZ1RvdWNoQmFyID0gaXNDdXN0b21pemluZ1RvdWNoQmFyOyB9Owor
I2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFSKQorCiBwcml2YXRlOgorI2lmIEhBVkUoVE9VQ0hfQkFS
KQorICAgIHZvaWQgc2V0VXBUZXh0VG91Y2hCYXIoTlNUb3VjaEJhciAqKTsKKyAgICB2b2lkIHVw
ZGF0ZVRleHRUb3VjaEJhcigpOworICAgIHZvaWQgdXBkYXRlTWVkaWFUb3VjaEJhcigpOworCisg
ICAgYm9vbCB1c2VNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCkgY29uc3Q7CisgICAgYm9vbCBp
c1JpY2hseUVkaXRhYmxlKCkgY29uc3Q7CisKKyAgICBib29sIG1fY2xpZW50V2FudHNNZWRpYVBs
YXliYWNrQ29udHJvbHNWaWV3IHsgZmFsc2UgfTsKKyAgICBib29sIG1fY2FuQ3JlYXRlVG91Y2hC
YXJzIHsgZmFsc2UgfTsKKyAgICBib29sIG1fc3RhcnRlZExpc3RlbmluZ1RvQ3VzdG9taXphdGlv
bkV2ZW50cyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzVXBkYXRpbmdUZXh0VG91Y2hCYXIgeyBm
YWxzZSB9OworICAgIGJvb2wgbV9pc0N1c3RvbWl6aW5nVG91Y2hCYXIgeyBmYWxzZSB9OworCisg
ICAgUmV0YWluUHRyPE5TVG91Y2hCYXI+IG1fY3VycmVudFRvdWNoQmFyOworICAgIFJldGFpblB0
cjxOU1RvdWNoQmFyPiBtX3JpY2hUZXh0VG91Y2hCYXI7CisgICAgUmV0YWluUHRyPE5TVG91Y2hC
YXI+IG1fcGxhaW5UZXh0VG91Y2hCYXI7CisgICAgUmV0YWluUHRyPFdLVGV4dFRvdWNoQmFySXRl
bUNvbnRyb2xsZXI+IG1fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXI7CisgICAgUmV0YWluUHRy
PE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbT4gbV9yaWNoVGV4dENhbmRpZGF0ZUxpc3RUb3Vj
aEJhckl0ZW07CisgICAgUmV0YWluUHRyPE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbT4gbV9w
bGFpblRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtOworICAgIFJldGFpblB0cjxOU0FycmF5
PiBtX2VtcHR5Q2FuZGlkYXRlc0FycmF5OworICAgIFJldGFpblB0cjxXZWJQbGF5YmFja0NvbnRy
b2xzTWFuYWdlcj4gbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlcjsKKyAgICBSZXRhaW5QdHI8TlND
dXN0b21Ub3VjaEJhckl0ZW0+IG1fZXhpdEZ1bGxTY3JlZW5CdXR0b247CisKKyNpZiBFTkFCTEUo
V0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgUmV0YWluUHRyPEFWRnVuY3Rpb25C
YXJQbGF5YmFja0NvbnRyb2xzUHJvdmlkZXI+IG1fbWVkaWFUb3VjaEJhclByb3ZpZGVyOworICAg
IFJldGFpblB0cjxBVkZ1bmN0aW9uQmFyU2NydWJiZXI+IG1fbWVkaWFQbGF5YmFja0NvbnRyb2xz
VmlldzsKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisj
ZW5kaWYgLy8gSEFWRShUT1VDSF9CQVIpCisKICAgICBXZWFrUHRyPFdlYlZpZXdJbXBsPiBjcmVh
dGVXZWFrUHRyKCkgeyByZXR1cm4gbV93ZWFrUHRyRmFjdG9yeS5jcmVhdGVXZWFrUHRyKCk7IH0K
IAogICAgIGJvb2wgc3VwcG9ydHNBcmJpdHJhcnlMYXlvdXRNb2RlcygpIGNvbnN0OwpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQkocmV2aXNp
b24gMjA4NDA1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBs
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxMSArNjAsMTMgQEAKICNpbXBvcnQgIldlYkV2ZW50
RmFjdG9yeS5oIgogI2ltcG9ydCAiV2ViSW5zcGVjdG9yUHJveHkuaCIKICNpbXBvcnQgIldlYlBh
Z2VQcm94eS5oIgorI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCiAj
aW1wb3J0ICJXZWJQcm9jZXNzUG9vbC5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAj
aW1wb3J0ICJfV0tSZW1vdGVPYmplY3RSZWdpc3RyeUludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tU
aHVtYm5haWxWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgPEhJVG9vbGJveC9DYXJib25FdmVudHND
b3JlLmg+CisjaW1wb3J0IDxXZWJDb3JlL0FWS2l0U1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0FY
T2JqZWN0Q2FjaGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvQWN0aXZpdHlTdGF0ZS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9Db2xvck1hYy5oPgpAQCAtODAsNiArODIsNyBAQAogI2ltcG9ydCA8V2ViQ29y
ZS9OU0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyU1BJLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL05TU3BlbGxDaGVja2VyU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05TVGV4dEZpbmRlclNQ
SS5oPgorI2ltcG9ydCA8V2ViQ29yZS9OU1RvdWNoQmFyU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L05TV2luZG93U1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtRXZlbnRGYWN0b3J5TWFj
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+CkBAIC05MCwxNiArOTMsMjIgQEAK
ICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcuaD4KICNp
bXBvcnQgPFdlYkNvcmUvV2ViQ29yZUZ1bGxTY3JlZW5XaW5kb3cuaD4KICNpbXBvcnQgPFdlYkNv
cmUvV2ViQ29yZU5TU3RyaW5nRXh0cmFzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1dlYlBsYXliYWNr
Q29udHJvbHNNYW5hZ2VyLmg+CiAjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KICNp
bXBvcnQgPHN5cy9zdGF0Lmg+CiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbXBv
cnQgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KIAotI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREsp
Ci0jaW1wb3J0IDxXZWJLaXRBZGRpdGlvbnMvV2ViVmlld0ltcGxJbmNsdWRlcy5oPgotI2VuZGlm
CisjaWYgSEFWRShUT1VDSF9CQVIpICYmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFO
QUdFUikKK1NPRlRfTElOS19GUkFNRVdPUksoQVZLaXQpCitTT0ZUX0xJTktfQ0xBU1MoQVZLaXQs
IEFWRnVuY3Rpb25CYXJQbGF5YmFja0NvbnRyb2xzUHJvdmlkZXIpCitTT0ZUX0xJTktfQ0xBU1Mo
QVZLaXQsIEFWRnVuY3Rpb25CYXJTY3J1YmJlcikKKyNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikg
JiYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQogCiBTT0ZUX0xJTktfQ09O
U1RBTlRfTUFZX0ZBSUwoTG9va3VwLCBMVU5vdGlmaWNhdGlvblBvcG92ZXJXaWxsQ2xvc2UsIE5T
U3RyaW5nICopCiAKK05TU3RyaW5nICogY29uc3QgV0tNZWRpYUV4aXRGdWxsU2NyZWVuSXRlbSA9
IEAiV0tNZWRpYUV4aXRGdWxsU2NyZWVuSXRlbSI7CisKIEBpbnRlcmZhY2UgTlNBcHBsaWNhdGlv
biAoKQogLSAoQk9PTClpc1NwZWFraW5nOwogLSAodm9pZClzcGVha1N0cmluZzooTlNTdHJpbmcg
KilzdHJpbmc7CkBAIC00MzMsMTIgKzQ0Miw2OTYgQEAgLSAoQk9PTCl0cnlUb1BlcmZvcm06KFNF
TClhY3Rpb24gd2l0aDooaQogCiBAZW5kCiAKLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID49IDEwMTIwMCAmJiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2ltcG9ydCA8V2Vi
S2l0QWRkaXRpb25zL1dlYlZpZXdJbXBsQWRkaXRpb25zLm1tPgordXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKKworI2lmIEhBVkUoVE9VQ0hfQkFSKQorCitAaW50ZXJmYWNlIFdLVGV4dExpc3RUb3Vj
aEJhclZpZXdDb250cm9sbGVyIDogTlNWaWV3Q29udHJvbGxlciB7CisgICAgTGlzdFR5cGUgX2N1
cnJlbnRMaXN0VHlwZTsKKworQHByaXZhdGUKKyAgICBXZWJWaWV3SW1wbCogX3dlYlZpZXdJbXBs
OworfQorCitAcHJvcGVydHkgKG5vbmF0b21pYykgTGlzdFR5cGUgY3VycmVudExpc3RUeXBlOwor
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWV3SW1wbDooV2ViVmlld0ltcGwqKXdlYlZp
ZXdJbXBsOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1RleHRMaXN0VG91Y2hCYXJWaWV3
Q29udHJvbGxlcgorCitAc3ludGhlc2l6ZSBjdXJyZW50TGlzdFR5cGU9X2N1cnJlbnRMaXN0VHlw
ZTsKKworc3RhdGljIGNvbnN0IGRvdWJsZSBsaXN0Q29udHJvbFNlZ21lbnRXaWR0aCA9IDY3Owor
c3RhdGljIGNvbnN0IGRvdWJsZSBleGl0RnVsbFNjcmVlbkJ1dHRvbldpZHRoID0gNjQ7CisKK3N0
YXRpYyBjb25zdCB1bnNpZ25lZCBub0xpc3RTZWdtZW50ID0gMDsKK3N0YXRpYyBjb25zdCB1bnNp
Z25lZCB1bm9yZGVyZWRMaXN0U2VnbWVudCA9IDE7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgb3Jk
ZXJlZExpc3RTZWdtZW50ID0gMjsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViVmlld0lt
cGw6KFdlYlZpZXdJbXBsKil3ZWJWaWV3SW1wbAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIg
aW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX3dlYlZpZXdJbXBsID0gd2ViVmll
d0ltcGw7CisKKyAgICBOU1NlZ21lbnRlZENvbnRyb2wgKmluc2VydExpc3RDb250cm9sID0gW05T
U2VnbWVudGVkQ29udHJvbCBzZWdtZW50ZWRDb250cm9sV2l0aExhYmVsczpAWyBXZWJDb3JlOjpp
bnNlcnRMaXN0VHlwZU5vbmUoKSwgV2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVCdWxsZXRlZCgpLCBX
ZWJDb3JlOjppbnNlcnRMaXN0VHlwZU51bWJlcmVkKCkgXSB0cmFja2luZ01vZGU6TlNTZWdtZW50
U3dpdGNoVHJhY2tpbmdTZWxlY3RPbmUgdGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3Rvcihfc2Vs
ZWN0TGlzdDopXTsKKyAgICBbaW5zZXJ0TGlzdENvbnRyb2wgc2V0V2lkdGg6bGlzdENvbnRyb2xT
ZWdtZW50V2lkdGggZm9yU2VnbWVudDpub0xpc3RTZWdtZW50XTsKKyAgICBbaW5zZXJ0TGlzdENv
bnRyb2wgc2V0V2lkdGg6bGlzdENvbnRyb2xTZWdtZW50V2lkdGggZm9yU2VnbWVudDp1bm9yZGVy
ZWRMaXN0U2VnbWVudF07CisgICAgW2luc2VydExpc3RDb250cm9sIHNldFdpZHRoOmxpc3RDb250
cm9sU2VnbWVudFdpZHRoIGZvclNlZ21lbnQ6b3JkZXJlZExpc3RTZWdtZW50XTsKKyAgICBpbnNl
cnRMaXN0Q29udHJvbC5mb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOjE1XTsKKworI3By
YWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25v
cmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorICAgIGlkIHNlZ21lbnRFbGVtZW50ID0g
TlNBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkRGVzY2VuZGFudChpbnNlcnRMaXN0Q29udHJvbCk7Cisg
ICAgTlNBcnJheSAqc2VnbWVudHMgPSBbc2VnbWVudEVsZW1lbnQgYWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlXTsKKyAgICBBU1NFUlQo
c2VnbWVudHMuY291bnQgPT0gMyk7CisgICAgW1tzZWdtZW50cyBvYmplY3RBdEluZGV4Om5vTGlz
dFNlZ21lbnRdIGFjY2Vzc2liaWxpdHlTZXRPdmVycmlkZVZhbHVlOldlYkNvcmU6Omluc2VydExp
c3RUeXBlTm9uZSgpIGZvckF0dHJpYnV0ZTpOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkF0dHJp
YnV0ZV07CisgICAgW1tzZWdtZW50cyBvYmplY3RBdEluZGV4OnVub3JkZXJlZExpc3RTZWdtZW50
XSBhY2Nlc3NpYmlsaXR5U2V0T3ZlcnJpZGVWYWx1ZTpXZWJDb3JlOjppbnNlcnRMaXN0VHlwZUJ1
bGxldGVkQWNjZXNzaWJpbGl0eVRpdGxlKCkgZm9yQXR0cmlidXRlOk5TQWNjZXNzaWJpbGl0eURl
c2NyaXB0aW9uQXR0cmlidXRlXTsKKyAgICBbW3NlZ21lbnRzIG9iamVjdEF0SW5kZXg6b3JkZXJl
ZExpc3RTZWdtZW50XSBhY2Nlc3NpYmlsaXR5U2V0T3ZlcnJpZGVWYWx1ZTpXZWJDb3JlOjppbnNl
cnRMaXN0VHlwZU51bWJlcmVkQWNjZXNzaWJpbGl0eVRpdGxlKCkgZm9yQXR0cmlidXRlOk5TQWNj
ZXNzaWJpbGl0eURlc2NyaXB0aW9uQXR0cmlidXRlXTsKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3Rp
YyBwb3AKKworICAgIHNlbGYudmlldyA9IGluc2VydExpc3RDb250cm9sOworCisgICAgcmV0dXJu
IHNlbGY7Cit9CisKKy0gKHZvaWQpZGlkRGVzdHJveVZpZXcKK3sKKyAgICBfd2ViVmlld0ltcGwg
PSBudWxscHRyOworfQorCistICh2b2lkKV9zZWxlY3RMaXN0OihpZClzZW5kZXIKK3sKKyAgICBp
ZiAoIV93ZWJWaWV3SW1wbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNTZWdtZW50ZWRDb250
cm9sICppbnNlcnRMaXN0Q29udHJvbCA9IChOU1NlZ21lbnRlZENvbnRyb2wgKilzZWxmLnZpZXc7
CisgICAgaWYgKGluc2VydExpc3RDb250cm9sLnNlbGVjdGVkU2VnbWVudCA9PSBub0xpc3RTZWdt
ZW50KSB7CisgICAgICAgIC8vIFRoZXJlIGlzIG5vICJyZW1vdmUgbGlzdCIgZWRpdCBjb21tYW5k
LCBidXQgSW5zZXJ0T3JkZXJlZExpc3QgYW5kIEluc2VydFVub3JkZXJlZExpc3QgYm90aAorICAg
ICAgICAvLyBiZWhhdmUgYXMgdG9nZ2xlcywgc28gd2UgY2FuIGludm9rZSB0aGUgYXBwcm9wcmlh
dGUgZWRpdCBjb21tYW5kIGRlcGVuZGluZyBvbiBvdXIgX2N1cnJlbnRMaXN0VHlwZQorICAgICAg
ICAvLyB0byByZW1vdmUgYW4gZXhpc3RpbmcgbGlzdC4gV2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0
aGluZyBpZiBfY3VycmVudExpc3RUeXBlIGlzIE5vTGlzdC4KKyAgICAgICAgaWYgKF9jdXJyZW50
TGlzdFR5cGUgPT0gT3JkZXJlZExpc3QpCisgICAgICAgICAgICBfd2ViVmlld0ltcGwtPnBhZ2Uo
KS5leGVjdXRlRWRpdENvbW1hbmQoQCJJbnNlcnRPcmRlcmVkTGlzdCIsIEAiIik7CisgICAgICAg
IGVsc2UgaWYgKF9jdXJyZW50TGlzdFR5cGUgPT0gVW5vcmRlcmVkTGlzdCkKKyAgICAgICAgICAg
IF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZChAIkluc2VydFVub3JkZXJl
ZExpc3QiLCBAIiIpOworICAgIH0gZWxzZSBpZiAoaW5zZXJ0TGlzdENvbnRyb2wuc2VsZWN0ZWRT
ZWdtZW50ID09IHVub3JkZXJlZExpc3RTZWdtZW50KQorICAgICAgICBfd2ViVmlld0ltcGwtPnBh
Z2UoKS5leGVjdXRlRWRpdENvbW1hbmQoQCJJbnNlcnRVbm9yZGVyZWRMaXN0IiwgQCIiKTsKKyAg
ICBlbHNlIGlmIChpbnNlcnRMaXN0Q29udHJvbC5zZWxlY3RlZFNlZ21lbnQgPT0gb3JkZXJlZExp
c3RTZWdtZW50KQorICAgICAgICBfd2ViVmlld0ltcGwtPnBhZ2UoKS5leGVjdXRlRWRpdENvbW1h
bmQoQCJJbnNlcnRPcmRlcmVkTGlzdCIsIEAiIik7CisKKyAgICBfd2ViVmlld0ltcGwtPmRpc21p
c3NUZXh0VG91Y2hCYXJQb3BvdmVySXRlbVdpdGhJZGVudGlmaWVyKE5TVG91Y2hCYXJJdGVtSWRl
bnRpZmllclRleHRMaXN0KTsKK30KKworLSAodm9pZClzZXRDdXJyZW50TGlzdFR5cGU6KExpc3RU
eXBlKWxpc3RUeXBlCit7CisgICAgTlNTZWdtZW50ZWRDb250cm9sICppbnNlcnRMaXN0Q29udHJv
bCA9IChOU1NlZ21lbnRlZENvbnRyb2wgKilzZWxmLnZpZXc7CisgICAgc3dpdGNoIChsaXN0VHlw
ZSkgeworICAgIGNhc2UgTm9MaXN0OgorICAgICAgICBbaW5zZXJ0TGlzdENvbnRyb2wgc2V0U2Vs
ZWN0ZWQ6WUVTIGZvclNlZ21lbnQ6bm9MaXN0U2VnbWVudF07CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgT3JkZXJlZExpc3Q6CisgICAgICAgIFtpbnNlcnRMaXN0Q29udHJvbCBzZXRTZWxlY3Rl
ZDpZRVMgZm9yU2VnbWVudDpvcmRlcmVkTGlzdFNlZ21lbnRdOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFVub3JkZXJlZExpc3Q6CisgICAgICAgIFtpbnNlcnRMaXN0Q29udHJvbCBzZXRTZWxl
Y3RlZDpZRVMgZm9yU2VnbWVudDp1bm9yZGVyZWRMaXN0U2VnbWVudF07CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIF9jdXJyZW50TGlzdFR5cGUgPSBsaXN0VHlwZTsKK30KKworQGVuZAor
CitAaW50ZXJmYWNlIFdLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgOiBOU1RleHRUb3VjaEJh
ckl0ZW1Db250cm9sbGVyIDxOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW1EZWxlZ2F0ZSwgTlNU
b3VjaEJhckRlbGVnYXRlPiB7CisgICAgQk9PTCBfdGV4dElzQm9sZDsKKyAgICBCT09MIF90ZXh0
SXNJdGFsaWM7CisgICAgQk9PTCBfdGV4dElzVW5kZXJsaW5lZDsKKyAgICBOU1RleHRBbGlnbm1l
bnQgX2N1cnJlbnRUZXh0QWxpZ25tZW50OworICAgIFJldGFpblB0cjxOU0NvbG9yPiBfdGV4dENv
bG9yOworICAgIFJldGFpblB0cjxXS1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlcj4gX3dr
VGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyOworCitAcHJpdmF0ZQorICAgIFdlYlZpZXdJ
bXBsKiBfd2ViVmlld0ltcGw7Cit9CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIHRleHRJ
c0JvbGQ7CitAcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCB0ZXh0SXNJdGFsaWM7CitAcHJvcGVy
dHkgKG5vbmF0b21pYykgQk9PTCB0ZXh0SXNVbmRlcmxpbmVkOworQHByb3BlcnR5IChub25hdG9t
aWMpIE5TVGV4dEFsaWdubWVudCBjdXJyZW50VGV4dEFsaWdubWVudDsKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCByZXRhaW4sIHJlYWR3cml0ZSkgTlNDb2xvciAqdGV4dENvbG9yOworCistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWV3SW1wbDooV2ViVmlld0ltcGwqKXdlYlZpZXdJbXBsOwor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlcgorCitA
c3ludGhlc2l6ZSB0ZXh0SXNCb2xkPV90ZXh0SXNCb2xkOworQHN5bnRoZXNpemUgdGV4dElzSXRh
bGljPV90ZXh0SXNJdGFsaWM7CitAc3ludGhlc2l6ZSB0ZXh0SXNVbmRlcmxpbmVkPV90ZXh0SXNV
bmRlcmxpbmVkOworQHN5bnRoZXNpemUgY3VycmVudFRleHRBbGlnbm1lbnQ9X2N1cnJlbnRUZXh0
QWxpZ25tZW50OworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWV3SW1wbDooV2ViVmll
d0ltcGwqKXdlYlZpZXdJbXBsCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisg
ICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfd2ViVmlld0ltcGwgPSB3ZWJWaWV3SW1wbDsKKwor
ICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRpZERlc3Ryb3lWaWV3Cit7CisgICAgW1tO
U05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmXTsK
KyAgICBfd2ViVmlld0ltcGwgPSBudWxscHRyOworICAgIFtfd2tUZXh0TGlzdFRvdWNoQmFyVmll
d0NvbnRyb2xsZXIgZGlkRGVzdHJveVZpZXddOworfQorCisjcHJhZ21hIG1hcmsgTlNUb3VjaEJh
ckRlbGVnYXRlCisKKy0gKE5TVG91Y2hCYXJJdGVtICopdG91Y2hCYXI6KE5TVG91Y2hCYXIgKil0
b3VjaEJhciBtYWtlSXRlbUZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcgorewor
ICAgIHJldHVybiBbc2VsZiBpdGVtRm9ySWRlbnRpZmllcjppZGVudGlmaWVyXTsKK30KKworLSAo
bnVsbGFibGUgTlNUb3VjaEJhckl0ZW0gKilpdGVtRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilp
ZGVudGlmaWVyCit7CisgICAgTlNUb3VjaEJhckl0ZW0gKml0ZW0gPSBbc3VwZXIgaXRlbUZvcklk
ZW50aWZpZXI6aWRlbnRpZmllcl07CisgICAgQk9PTCBpc1RleHRGb3JtYXRJdGVtID0gW2lkZW50
aWZpZXIgaXNFcXVhbFRvU3RyaW5nOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRGb3JtYXRd
OworCisgICAgaWYgKGlzVGV4dEZvcm1hdEl0ZW0gfHwgW2lkZW50aWZpZXIgaXNFcXVhbFRvU3Ry
aW5nOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRTdHlsZV0pCisgICAgICAgIHNlbGYudGV4
dFN0eWxlLmFjdGlvbiA9IEBzZWxlY3Rvcihfd2tDaGFuZ2VUZXh0U3R5bGU6KTsKKworICAgIGlm
IChpc1RleHRGb3JtYXRJdGVtIHx8IFtpZGVudGlmaWVyIGlzRXF1YWxUb1N0cmluZzpOU1RvdWNo
QmFySXRlbUlkZW50aWZpZXJUZXh0QWxpZ25tZW50XSkKKyAgICAgICAgc2VsZi50ZXh0QWxpZ25t
ZW50cy5hY3Rpb24gPSBAc2VsZWN0b3IoX3drQ2hhbmdlVGV4dEFsaWdubWVudDopOworCisgICAg
TlNDb2xvclBpY2tlclRvdWNoQmFySXRlbSAqY29sb3JQaWNrZXJJdGVtID0gbmlsOworICAgIGlm
IChbaWRlbnRpZmllciBpc0VxdWFsVG9TdHJpbmc6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4
dENvbG9yUGlja2VyXSAmJiBbaXRlbSBpc0tpbmRPZkNsYXNzOltOU0NvbG9yUGlja2VyVG91Y2hC
YXJJdGVtIGNsYXNzXV0pCisgICAgICAgIGNvbG9yUGlja2VySXRlbSA9IChOU0NvbG9yUGlja2Vy
VG91Y2hCYXJJdGVtICopaXRlbTsKKyAgICBpZiAoaXNUZXh0Rm9ybWF0SXRlbSkKKyAgICAgICAg
Y29sb3JQaWNrZXJJdGVtID0gc2VsZi5jb2xvclBpY2tlckl0ZW07CisgICAgaWYgKGNvbG9yUGlj
a2VySXRlbSkgeworICAgICAgICBjb2xvclBpY2tlckl0ZW0udGFyZ2V0ID0gc2VsZjsKKyAgICAg
ICAgY29sb3JQaWNrZXJJdGVtLmFjdGlvbiA9IEBzZWxlY3Rvcihfd2tDaGFuZ2VDb2xvcjopOwor
ICAgICAgICBjb2xvclBpY2tlckl0ZW0uc2hvd3NBbHBoYSA9IE5POworICAgIH0KKworICAgIHJl
dHVybiBpdGVtOworfQorCisjcHJhZ21hIG1hcmsgTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVt
RGVsZWdhdGUKKworLSAodm9pZCljYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtOihOU0NhbmRpZGF0
ZUxpc3RUb3VjaEJhckl0ZW0gKilhbkl0ZW0gZW5kU2VsZWN0aW5nQ2FuZGlkYXRlQXRJbmRleDoo
TlNJbnRlZ2VyKWluZGV4Cit7CisgICAgaWYgKGluZGV4ID09IE5TTm90Rm91bmQpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghX3dlYlZpZXdJbXBsKQorICAgICAgICByZXR1cm47CisKKyAg
ICBOU0FycmF5ICpjYW5kaWRhdGVzID0gYW5JdGVtLmNhbmRpZGF0ZXM7CisgICAgaWYgKChOU1VJ
bnRlZ2VyKWluZGV4ID49IGNhbmRpZGF0ZXMuY291bnQpCisgICAgICAgIHJldHVybjsKKworICAg
IGlkIGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZXNbaW5kZXhdOworICAgIEFTU0VSVChbY2FuZGlkYXRl
IGlzS2luZE9mQ2xhc3M6W05TVGV4dENoZWNraW5nUmVzdWx0IGNsYXNzXV0pOworCisgICAgX3dl
YlZpZXdJbXBsLT5oYW5kbGVBY2NlcHRlZENhbmRpZGF0ZSgoTlNUZXh0Q2hlY2tpbmdSZXN1bHQg
KiljYW5kaWRhdGUpOworfQorCistICh2b2lkKWNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW06KE5T
Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSAqKWFuSXRlbSBjaGFuZ2VkQ2FuZGlkYXRlTGlzdFZp
c2liaWxpdHk6KEJPT0wpaXNWaXNpYmxlCit7CisgICAgaWYgKCFfd2ViVmlld0ltcGwpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChpc1Zpc2libGUpCisgICAgICAgIF93ZWJWaWV3SW1wbC0+
cmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb25JZk5lZWRlZCgpOworCisgICAgX3dlYlZpZXdJ
bXBsLT51cGRhdGVUb3VjaEJhcigpOworfQorCisjcHJhZ21hIG1hcmsgTlNOb3RpZmljYXRpb25D
ZW50ZXIgb2JzZXJ2ZXJzCisKKy0gKHZvaWQpdG91Y2hCYXJEaWRFeGl0Q3VzdG9taXphdGlvbjoo
TlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBpZiAoIV93ZWJWaWV3SW1wbCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgX3dlYlZpZXdJbXBsLT5zZXRJc0N1c3RvbWl6aW5nVG91
Y2hCYXIoZmFsc2UpOworICAgIF93ZWJWaWV3SW1wbC0+dXBkYXRlVG91Y2hCYXIoKTsKK30KKwor
LSAodm9pZCl0b3VjaEJhcldpbGxFbnRlckN1c3RvbWl6YXRpb246KE5TTm90aWZpY2F0aW9uICop
bm90aWZpY2F0aW9uCit7CisgICAgaWYgKCFfd2ViVmlld0ltcGwpCisgICAgICAgIHJldHVybjsK
KworICAgIF93ZWJWaWV3SW1wbC0+c2V0SXNDdXN0b21pemluZ1RvdWNoQmFyKHRydWUpOworfQor
CistICh2b2lkKWRpZENoYW5nZUF1dG9tYXRpY1RleHRDb21wbGV0aW9uOihOU05vdGlmaWNhdGlv
biAqKW5vdGlmaWNhdGlvbgoreworICAgIGlmICghX3dlYlZpZXdJbXBsKQorICAgICAgICByZXR1
cm47CisKKyAgICBfd2ViVmlld0ltcGwtPnVwZGF0ZVRvdWNoQmFyQW5kUmVmcmVzaFRleHRCYXJJ
ZGVudGlmaWVycygpOworfQorCisKKyNwcmFnbWEgbWFyayBOU1RleHRUb3VjaEJhckl0ZW1Db250
cm9sbGVyCisKKy0gKFdLVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyICopdGV4dExpc3RU
b3VjaEJhclZpZXdDb250cm9sbGVyCit7CisgICAgcmV0dXJuIChXS1RleHRMaXN0VG91Y2hCYXJW
aWV3Q29udHJvbGxlciAqKVtzZWxmIHRleHRMaXN0Vmlld0NvbnRyb2xsZXJdOworfQorCistICh2
b2lkKXNldFRleHRJc0JvbGQ6KEJPT0wpYm9sZAoreworICAgIF90ZXh0SXNCb2xkID0gYm9sZDsK
KyAgICBpZiAoW3NlbGYudGV4dFN0eWxlIGlzU2VsZWN0ZWRGb3JTZWdtZW50OjBdICE9IF90ZXh0
SXNCb2xkKQorICAgICAgICBbc2VsZi50ZXh0U3R5bGUgc2V0U2VsZWN0ZWQ6X3RleHRJc0JvbGQg
Zm9yU2VnbWVudDowXTsKK30KKworLSAodm9pZClzZXRUZXh0SXNJdGFsaWM6KEJPT0wpaXRhbGlj
Cit7CisgICAgX3RleHRJc0l0YWxpYyA9IGl0YWxpYzsKKyAgICBpZiAoW3NlbGYudGV4dFN0eWxl
IGlzU2VsZWN0ZWRGb3JTZWdtZW50OjFdICE9IF90ZXh0SXNJdGFsaWMpCisgICAgICAgIFtzZWxm
LnRleHRTdHlsZSBzZXRTZWxlY3RlZDpfdGV4dElzSXRhbGljIGZvclNlZ21lbnQ6MV07Cit9CisK
Ky0gKHZvaWQpc2V0VGV4dElzVW5kZXJsaW5lZDooQk9PTCl1bmRlcmxpbmVkCit7CisgICAgX3Rl
eHRJc1VuZGVybGluZWQgPSB1bmRlcmxpbmVkOworICAgIGlmIChbc2VsZi50ZXh0U3R5bGUgaXNT
ZWxlY3RlZEZvclNlZ21lbnQ6Ml0gIT0gX3RleHRJc1VuZGVybGluZWQpCisgICAgICAgIFtzZWxm
LnRleHRTdHlsZSBzZXRTZWxlY3RlZDpfdGV4dElzVW5kZXJsaW5lZCBmb3JTZWdtZW50OjJdOwor
fQorCistICh2b2lkKV93a0NoYW5nZVRleHRTdHlsZTooaWQpc2VuZGVyCit7CisgICAgaWYgKCFf
d2ViVmlld0ltcGwpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChbc2VsZi50ZXh0U3R5bGUg
aXNTZWxlY3RlZEZvclNlZ21lbnQ6MF0gIT0gX3RleHRJc0JvbGQpIHsKKyAgICAgICAgX3RleHRJ
c0JvbGQgPSAhX3RleHRJc0JvbGQ7CisgICAgICAgIF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1
dGVFZGl0Q29tbWFuZChAIlRvZ2dsZUJvbGQiLCBAIiIpOworICAgIH0KKworICAgIGlmIChbc2Vs
Zi50ZXh0U3R5bGUgaXNTZWxlY3RlZEZvclNlZ21lbnQ6MV0gIT0gX3RleHRJc0l0YWxpYykgewor
ICAgICAgICBfdGV4dElzSXRhbGljID0gIV90ZXh0SXNJdGFsaWM7CisgICAgICAgIF93ZWJWaWV3
SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZCgiVG9nZ2xlSXRhbGljIiwgQCIiKTsKKyAg
ICB9CisKKyAgICBpZiAoW3NlbGYudGV4dFN0eWxlIGlzU2VsZWN0ZWRGb3JTZWdtZW50OjJdICE9
IF90ZXh0SXNVbmRlcmxpbmVkKSB7CisgICAgICAgIF90ZXh0SXNVbmRlcmxpbmVkID0gIV90ZXh0
SXNVbmRlcmxpbmVkOworICAgICAgICBfd2ViVmlld0ltcGwtPnBhZ2UoKS5leGVjdXRlRWRpdENv
bW1hbmQoIlRvZ2dsZVVuZGVybGluZSIsIEAiIik7CisgICAgfQorfQorCistICh2b2lkKXNldEN1
cnJlbnRUZXh0QWxpZ25tZW50OihOU1RleHRBbGlnbm1lbnQpYWxpZ25tZW50Cit7CisgICAgX2N1
cnJlbnRUZXh0QWxpZ25tZW50ID0gYWxpZ25tZW50OworICAgIFtzZWxmLnRleHRBbGlnbm1lbnRz
IHNlbGVjdFNlZ21lbnRXaXRoVGFnOl9jdXJyZW50VGV4dEFsaWdubWVudF07Cit9CisKKy0gKHZv
aWQpX3drQ2hhbmdlVGV4dEFsaWdubWVudDooaWQpc2VuZGVyCit7CisgICAgaWYgKCFfd2ViVmll
d0ltcGwpCisgICAgICAgIHJldHVybjsKKworICAgIE5TVGV4dEFsaWdubWVudCBhbGlnbm1lbnQg
PSAoTlNUZXh0QWxpZ25tZW50KVtzZWxmLnRleHRBbGlnbm1lbnRzLmNlbGwgdGFnRm9yU2VnbWVu
dDpbc2VsZi50ZXh0QWxpZ25tZW50cyBzZWxlY3RlZFNlZ21lbnRdXTsKKyAgICBzd2l0Y2ggKGFs
aWdubWVudCkgeworICAgIGNhc2UgTlNUZXh0QWxpZ25tZW50TGVmdDogeworICAgICAgICBfY3Vy
cmVudFRleHRBbGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRMZWZ0OworICAgICAgICBfd2ViVmll
d0ltcGwtPnBhZ2UoKS5leGVjdXRlRWRpdENvbW1hbmQoIkFsaWduTGVmdCIsIEAiIik7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIE5TVGV4dEFsaWdubWVudFJpZ2h0OiB7CisgICAg
ICAgIF9jdXJyZW50VGV4dEFsaWdubWVudCA9IE5TVGV4dEFsaWdubWVudFJpZ2h0OworICAgICAg
ICBfd2ViVmlld0ltcGwtPnBhZ2UoKS5leGVjdXRlRWRpdENvbW1hbmQoIkFsaWduUmlnaHQiLCBA
IiIpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBOU1RleHRBbGlnbm1lbnRDZW50
ZXI6IHsKKyAgICAgICAgX2N1cnJlbnRUZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25tZW50Q2Vu
dGVyOworICAgICAgICBfd2ViVmlld0ltcGwtPnBhZ2UoKS5leGVjdXRlRWRpdENvbW1hbmQoIkFs
aWduQ2VudGVyIiwgQCIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgTlNUZXh0
QWxpZ25tZW50SnVzdGlmaWVkOiB7CisgICAgICAgIF9jdXJyZW50VGV4dEFsaWdubWVudCA9IE5T
VGV4dEFsaWdubWVudEp1c3RpZmllZDsKKyAgICAgICAgX3dlYlZpZXdJbXBsLT5wYWdlKCkuZXhl
Y3V0ZUVkaXRDb21tYW5kKCJBbGlnbkp1c3RpZmllZCIsIEAiIik7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBfd2ViVmll
d0ltcGwtPmRpc21pc3NUZXh0VG91Y2hCYXJQb3BvdmVySXRlbVdpdGhJZGVudGlmaWVyKE5TVG91
Y2hCYXJJdGVtSWRlbnRpZmllclRleHRBbGlnbm1lbnQpOworfQorCistIChOU0NvbG9yICopdGV4
dENvbG9yCit7CisgICAgcmV0dXJuIF90ZXh0Q29sb3IuZ2V0KCk7Cit9CisKKy0gKHZvaWQpc2V0
VGV4dENvbG9yOihOU0NvbG9yICopY29sb3IKK3sKKyAgICBfdGV4dENvbG9yID0gY29sb3I7Cisg
ICAgc2VsZi5jb2xvclBpY2tlckl0ZW0uY29sb3IgPSBfdGV4dENvbG9yLmdldCgpOworfQorCist
ICh2b2lkKV93a0NoYW5nZUNvbG9yOihpZClzZW5kZXIKK3sKKyAgICBpZiAoIV93ZWJWaWV3SW1w
bCkKKyAgICAgICAgcmV0dXJuOworCisgICAgX3RleHRDb2xvciA9IHNlbGYuY29sb3JQaWNrZXJJ
dGVtLmNvbG9yOworICAgIF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZCgi
Rm9yZUNvbG9yIiwgV2ViQ29yZTo6Y29sb3JGcm9tTlNDb2xvcihfdGV4dENvbG9yLmdldCgpKS5z
ZXJpYWxpemVkKCkpOworfQorCistIChOU1ZpZXdDb250cm9sbGVyICopdGV4dExpc3RWaWV3Q29u
dHJvbGxlcgoreworICAgIGlmICghX3drVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyKQor
ICAgICAgICBfd2tUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgPSBhZG9wdE5TKFtbV0tU
ZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoV2ViVmlld0ltcGw6
X3dlYlZpZXdJbXBsXSk7CisgICAgcmV0dXJuIF93a1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJv
bGxlci5nZXQoKTsKK30KKworQGVuZAorCituYW1lc3BhY2UgV2ViS2l0IHsKK05TVG91Y2hCYXIg
KldlYlZpZXdJbXBsOjptYWtlVG91Y2hCYXIoKQoreworICAgIGlmICghbV9jYW5DcmVhdGVUb3Vj
aEJhcnMpIHsKKyAgICAgICAgbV9jYW5DcmVhdGVUb3VjaEJhcnMgPSB0cnVlOworICAgICAgICB1
cGRhdGVUb3VjaEJhcigpOworICAgIH0KKyAgICByZXR1cm4gbV9jdXJyZW50VG91Y2hCYXIuZ2V0
KCk7Cit9CisKK05TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSAqV2ViVmlld0ltcGw6OmNhbmRp
ZGF0ZUxpc3RUb3VjaEJhckl0ZW0oKSBjb25zdAoreworICAgIHJldHVybiBpc1JpY2hseUVkaXRh
YmxlKCkgPyBtX3JpY2hUZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbS5nZXQoKSA6IG1fcGxh
aW5UZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbS5nZXQoKTsKK30KKworQVZGdW5jdGlvbkJh
clNjcnViYmVyICpXZWJWaWV3SW1wbDo6bWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpIGNvbnN0
Cit7CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIGlmICht
X3BhZ2UtPmhhc0FjdGl2ZVZpZGVvRm9yQ29udHJvbHNNYW5hZ2VyKCkpCisgICAgICAgIHJldHVy
biBtX21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcuZ2V0KCk7CisjZW5kaWYKKyAgICByZXR1cm4g
bmlsOworfQorCitib29sIFdlYlZpZXdJbXBsOjp1c2VNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3
KCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgaWYgKGhhc0Z1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVyKCkpCisgICAgICAgIHJldHVybiAhW21fZnVsbFNjcmVlbldp
bmRvd0NvbnRyb2xsZXIgaXNGdWxsU2NyZWVuXTsKKyNlbmRpZgorICAgIHJldHVybiBtX2NsaWVu
dFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6
ZGlzbWlzc1RleHRUb3VjaEJhclBvcG92ZXJJdGVtV2l0aElkZW50aWZpZXIoTlNTdHJpbmcgKmlk
ZW50aWZpZXIpCit7CisgICAgTlNUb3VjaEJhckl0ZW0gKmZvdW5kSXRlbSA9IG5pbDsKKyAgICBm
b3IgKE5TVG91Y2hCYXJJdGVtICppdGVtIGluIHRleHRUb3VjaEJhcigpLml0ZW1zKSB7CisgICAg
ICAgIGlmIChbaXRlbS5pZGVudGlmaWVyIGlzRXF1YWxUb1N0cmluZzppZGVudGlmaWVyXSkgewor
ICAgICAgICAgICAgZm91bmRJdGVtID0gaXRlbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKFtbaXRlbSBpZGVudGlmaWVyXSBpc0VxdWFsVG9TdHJpbmc6TlNU
b3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEZvcm1hdF0pIHsKKyAgICAgICAgICAgIGZvciAoTlNU
b3VjaEJhckl0ZW0gKmNoaWxkSXRlbSBpbiBbKE5TR3JvdXBUb3VjaEJhckl0ZW0gKilpdGVtIGdy
b3VwVG91Y2hCYXJdLml0ZW1zKSB7CisgICAgICAgICAgICAgICAgaWYgKFtjaGlsZEl0ZW0uaWRl
bnRpZmllciBpc0VxdWFsVG9TdHJpbmc6aWRlbnRpZmllcl0pIHsKKyAgICAgICAgICAgICAgICAg
ICAgZm91bmRJdGVtID0gY2hpbGRJdGVtOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmIChbZm91bmRJdGVtIGlzS2luZE9mQ2xhc3M6W05TUG9wb3Zl
clRvdWNoQmFySXRlbSBjbGFzc11dKQorICAgICAgICBbKE5TUG9wb3ZlclRvdWNoQmFySXRlbSAq
KWZvdW5kSXRlbSBkaXNtaXNzUG9wb3ZlcjpuaWxdOworfQorCitzdGF0aWMgTlNBcnJheTxOU1N0
cmluZyAqPiAqdGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkFsbG93ZWRJZGVudGlmaWVycygpCit7
CisgICAgcmV0dXJuIEBbIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckNoYXJhY3RlclBpY2tlciwg
TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dENvbG9yUGlja2VyLCBOU1RvdWNoQmFySXRlbUlk
ZW50aWZpZXJUZXh0U3R5bGUsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRBbGlnbm1lbnQs
IE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRMaXN0LCBOU1RvdWNoQmFySXRlbUlkZW50aWZp
ZXJGbGV4aWJsZVNwYWNlIF07Cit9CisKK3N0YXRpYyBOU0FycmF5PE5TU3RyaW5nICo+ICpwbGFp
blRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25EZWZhdWx0SXRlbUlkZW50aWZpZXJzKCkKK3sKKyAg
ICByZXR1cm4gQFsgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyQ2hhcmFjdGVyUGlja2VyLCBOU1Rv
dWNoQmFySXRlbUlkZW50aWZpZXJDYW5kaWRhdGVMaXN0IF07Cit9CisKK3N0YXRpYyBOU0FycmF5
PE5TU3RyaW5nICo+ICpyaWNoVGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkRlZmF1bHRJdGVtSWRl
bnRpZmllcnMoKQoreworICAgIHJldHVybiBAWyBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJDaGFy
YWN0ZXJQaWNrZXIsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRGb3JtYXQsIE5TVG91Y2hC
YXJJdGVtSWRlbnRpZmllckNhbmRpZGF0ZUxpc3QgXTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6
dXBkYXRlVG91Y2hCYXJBbmRSZWZyZXNoVGV4dEJhcklkZW50aWZpZXJzKCkKK3sKKyAgICBpZiAo
bV9yaWNoVGV4dFRvdWNoQmFyKQorICAgICAgICBzZXRVcFRleHRUb3VjaEJhcihtX3JpY2hUZXh0
VG91Y2hCYXIuZ2V0KCkpOworCisgICAgaWYgKG1fcGxhaW5UZXh0VG91Y2hCYXIpCisgICAgICAg
IHNldFVwVGV4dFRvdWNoQmFyKG1fcGxhaW5UZXh0VG91Y2hCYXIuZ2V0KCkpOworCisgICAgdXBk
YXRlVG91Y2hCYXIoKTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6c2V0VXBUZXh0VG91Y2hCYXIo
TlNUb3VjaEJhciAqdG91Y2hCYXIpCit7CisgICAgYm9vbCBpc1JpY2hUZXh0VG91Y2hCYXIgPSB0
b3VjaEJhciA9PSBtX3JpY2hUZXh0VG91Y2hCYXIuZ2V0KCk7CisgICAgW3RvdWNoQmFyIHNldERl
bGVnYXRlOm1fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIuZ2V0KCldOworICAgIFt0b3VjaEJh
ciBzZXREZWZhdWx0SXRlbXM6W05TTXV0YWJsZVNldCBzZXRXaXRoT2JqZWN0czppc1JpY2hUZXh0
VG91Y2hCYXIgPyBtX3JpY2hUZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbS5nZXQoKSA6IG1f
cGxhaW5UZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbS5nZXQoKSwgbmlsXV07CisgICAgW3Rv
dWNoQmFyIHNldEN1c3RvbWl6YXRpb25BbGxvd2VkSXRlbUlkZW50aWZpZXJzOnRleHRUb3VjaEJh
ckN1c3RvbWl6YXRpb25BbGxvd2VkSWRlbnRpZmllcnMoKV07CisgICAgW3RvdWNoQmFyIHNldEN1
c3RvbWl6YXRpb25EZWZhdWx0SXRlbUlkZW50aWZpZXJzOmlzUmljaFRleHRUb3VjaEJhciA/IHJp
Y2hUZXh0VG91Y2hCYXJDdXN0b21pemF0aW9uRGVmYXVsdEl0ZW1JZGVudGlmaWVycygpIDogcGxh
aW5UZXh0VG91Y2hCYXJDdXN0b21pemF0aW9uRGVmYXVsdEl0ZW1JZGVudGlmaWVycygpXTsKKwor
ICAgIGlmIChOU0dyb3VwVG91Y2hCYXJJdGVtICp0ZXh0Rm9ybWF0SXRlbSA9IChOU0dyb3VwVG91
Y2hCYXJJdGVtICopW3RvdWNoQmFyIGl0ZW1Gb3JJZGVudGlmaWVyOk5TVG91Y2hCYXJJdGVtSWRl
bnRpZmllclRleHRGb3JtYXRdKQorICAgICAgICB0ZXh0Rm9ybWF0SXRlbS5ncm91cFRvdWNoQmFy
LmN1c3RvbWl6YXRpb25JZGVudGlmaWVyID0gQCJXS1RleHRGb3JtYXRUb3VjaEJhciI7Cit9CisK
K2Jvb2wgV2ViVmlld0ltcGw6OmlzUmljaGx5RWRpdGFibGUoKSBjb25zdAoreworICAgIHJldHVy
biBtX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUgJiYgIW1fcGFn
ZS0+bmVlZHNQbGFpblRleHRRdWlyaygpOworfQorCitOU1RvdWNoQmFyICpXZWJWaWV3SW1wbDo6
dGV4dFRvdWNoQmFyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNSaWNobHlFZGl0YWJsZSgpID8g
bV9yaWNoVGV4dFRvdWNoQmFyLmdldCgpIDogbV9wbGFpblRleHRUb3VjaEJhci5nZXQoKTsKK30K
Kwordm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlVGV4dFRvdWNoQmFyKCkKK3sKKyAgICBpZiAoIW1f
cGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0NvbnRlbnRFZGl0YWJsZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKG1faXNVcGRhdGluZ1RleHRUb3VjaEJhcikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IGlzVXBkYXRpbmdUZXh0RnVuY3Rpb25CYXIobV9pc1Vw
ZGF0aW5nVGV4dFRvdWNoQmFyLCB0cnVlKTsKKworICAgIGlmICghbV90ZXh0VG91Y2hCYXJJdGVt
Q29udHJvbGxlcikKKyAgICAgICAgbV90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciA9IGFkb3B0
TlMoW1tXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIGFsbG9jXSBpbml0V2l0aFdlYlZpZXdJ
bXBsOnRoaXNdKTsKKworICAgIGlmICghbV9zdGFydGVkTGlzdGVuaW5nVG9DdXN0b21pemF0aW9u
RXZlbnRzKSB7CisgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0g
YWRkT2JzZXJ2ZXI6bV90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlci5nZXQoKSBzZWxlY3RvcjpA
c2VsZWN0b3IodG91Y2hCYXJEaWRFeGl0Q3VzdG9taXphdGlvbjopIG5hbWU6TlNUb3VjaEJhckRp
ZEV4aXRDdXN0b21pemF0aW9uIG9iamVjdDpuaWxdOworICAgICAgICBbW05TTm90aWZpY2F0aW9u
Q2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOm1fdGV4dFRvdWNoQmFySXRlbUNvbnRy
b2xsZXIuZ2V0KCkgc2VsZWN0b3I6QHNlbGVjdG9yKHRvdWNoQmFyV2lsbEVudGVyQ3VzdG9taXph
dGlvbjopIG5hbWU6TlNUb3VjaEJhcldpbGxFbnRlckN1c3RvbWl6YXRpb24gb2JqZWN0Om5pbF07
CisgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2
ZXI6bV90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlci5nZXQoKSBzZWxlY3RvcjpAc2VsZWN0b3Io
ZGlkQ2hhbmdlQXV0b21hdGljVGV4dENvbXBsZXRpb246KSBuYW1lOk5TU3BlbGxDaGVja2VyRGlk
Q2hhbmdlQXV0b21hdGljVGV4dENvbXBsZXRpb25Ob3RpZmljYXRpb24gb2JqZWN0Om5pbF07CisK
KyAgICAgICAgbV9zdGFydGVkTGlzdGVuaW5nVG9DdXN0b21pemF0aW9uRXZlbnRzID0gdHJ1ZTsK
KyAgICB9CisKKyAgICBpZiAoIW1fcmljaFRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtIHx8
ICFtX3BsYWluVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0pIHsKKyAgICAgICAgbV9yaWNo
VGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gPSBhZG9wdE5TKFtbTlNDYW5kaWRhdGVMaXN0
VG91Y2hCYXJJdGVtIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6TlNUb3VjaEJhckl0ZW1JZGVu
dGlmaWVyQ2FuZGlkYXRlTGlzdF0pOworICAgICAgICBbbV9yaWNoVGV4dENhbmRpZGF0ZUxpc3RU
b3VjaEJhckl0ZW0gc2V0RGVsZWdhdGU6bV90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlci5nZXQo
KV07CisgICAgICAgIG1fcGxhaW5UZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSA9IGFkb3B0
TlMoW1tOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gYWxsb2NdIGluaXRXaXRoSWRlbnRpZmll
cjpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJDYW5kaWRhdGVMaXN0XSk7CisgICAgICAgIFttX3Bs
YWluVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gc2V0RGVsZWdhdGU6bV90ZXh0VG91Y2hC
YXJJdGVtQ29udHJvbGxlci5nZXQoKV07CisgICAgICAgIHJlcXVlc3RDYW5kaWRhdGVzRm9yU2Vs
ZWN0aW9uSWZOZWVkZWQoKTsKKyAgICB9CisKKyAgICBpZiAoIW1fcmljaFRleHRUb3VjaEJhcikg
eworICAgICAgICBtX3JpY2hUZXh0VG91Y2hCYXIgPSBhZG9wdE5TKFtbTlNUb3VjaEJhciBhbGxv
Y10gaW5pdF0pOworICAgICAgICBzZXRVcFRleHRUb3VjaEJhcihtX3JpY2hUZXh0VG91Y2hCYXIu
Z2V0KCkpOworICAgICAgICBbbV9yaWNoVGV4dFRvdWNoQmFyIHNldEN1c3RvbWl6YXRpb25JZGVu
dGlmaWVyOkAiV0tSaWNoVGV4dFRvdWNoQmFyIl07CisgICAgfQorCisgICAgaWYgKCFtX3BsYWlu
VGV4dFRvdWNoQmFyKSB7CisgICAgICAgIG1fcGxhaW5UZXh0VG91Y2hCYXIgPSBhZG9wdE5TKFtb
TlNUb3VjaEJhciBhbGxvY10gaW5pdF0pOworICAgICAgICBzZXRVcFRleHRUb3VjaEJhcihtX3Bs
YWluVGV4dFRvdWNoQmFyLmdldCgpKTsKKyAgICAgICAgW21fcGxhaW5UZXh0VG91Y2hCYXIgc2V0
Q3VzdG9taXphdGlvbklkZW50aWZpZXI6QCJXS1BsYWluVGV4dFRvdWNoQmFyIl07CisgICAgfQor
CisgICAgaWYgKFtOU1NwZWxsQ2hlY2tlciBpc0F1dG9tYXRpY1RleHRDb21wbGV0aW9uRW5hYmxl
ZF0gJiYgIW1faXNDdXN0b21pemluZ1RvdWNoQmFyKSB7CisgICAgICAgIEJPT0wgc2hvd0NhbmRp
ZGF0ZXNMaXN0ID0gIW1fcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25Jc1JhbmdlIHx8IG1f
aXNIYW5kbGluZ0FjY2VwdGVkQ2FuZGlkYXRlOworICAgICAgICBbY2FuZGlkYXRlTGlzdFRvdWNo
QmFySXRlbSgpIHVwZGF0ZVdpdGhJbnNlcnRpb25Qb2ludFZpc2liaWxpdHk6c2hvd0NhbmRpZGF0
ZXNMaXN0XTsKKyAgICAgICAgW21fdmlldyBfZGlkVXBkYXRlQ2FuZGlkYXRlTGlzdFZpc2liaWxp
dHk6c2hvd0NhbmRpZGF0ZXNMaXN0XTsKKyAgICB9CisKKyAgICBpZiAobV9wYWdlLT5lZGl0b3JT
dGF0ZSgpLmlzSW5QYXNzd29yZEZpZWxkKSB7CisgICAgICAgIC8vIFdlIGRvbid0IHJlcXVlc3Qg
Y2FuZGlkYXRlcyBmb3IgcGFzc3dvcmQgZmllbGRzLiBJZiB0aGUgdXNlciB3YXMgcHJldmlvdXNs
eSBpbiBhIG5vbi1wYXNzd29yZCBmaWVsZCwgdGhlbiB0aGUKKyAgICAgICAgLy8gb2xkIGNhbmRp
ZGF0ZXMgd2lsbCBzdGlsbCBzaG93IGJ5IGRlZmF1bHQsIHNvIHdlIGNsZWFyIHRoZW0gaGVyZSBi
eSBzZXR0aW5nIGFuIGVtcHR5IGFycmF5IG9mIGNhbmRpZGF0ZXMuCisgICAgICAgIGlmICghbV9l
bXB0eUNhbmRpZGF0ZXNBcnJheSkKKyAgICAgICAgICAgIG1fZW1wdHlDYW5kaWRhdGVzQXJyYXkg
PSBhZG9wdE5TKFtbTlNBcnJheSBhbGxvY10gaW5pdF0pOworICAgICAgICBbY2FuZGlkYXRlTGlz
dFRvdWNoQmFySXRlbSgpIHNldENhbmRpZGF0ZXM6bV9lbXB0eUNhbmRpZGF0ZXNBcnJheS5nZXQo
KSBmb3JTZWxlY3RlZFJhbmdlOk5TTWFrZVJhbmdlKDAsIDApIGluU3RyaW5nOm5pbF07CisgICAg
fQorCisgICAgTlNUb3VjaEJhciAqdGV4dFRvdWNoQmFyID0gdGhpcy0+dGV4dFRvdWNoQmFyKCk7
CisgICAgQk9PTCBpc1Nob3dpbmdDb21iaW5lZFRleHRGb3JtYXRJdGVtID0gW3RleHRUb3VjaEJh
ci5pdGVtSWRlbnRpZmllcnMgY29udGFpbnNPYmplY3Q6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVy
VGV4dEZvcm1hdF07CisgICAgW3RleHRUb3VjaEJhciBzZXRQcmluY2lwYWxJdGVtSWRlbnRpZmll
cjppc1Nob3dpbmdDb21iaW5lZFRleHRGb3JtYXRJdGVtID8gTlNUb3VjaEJhckl0ZW1JZGVudGlm
aWVyVGV4dEZvcm1hdCA6IG5pbF07CisKKyAgICAvLyBTZXQgY3VycmVudCB0eXBpbmcgYXR0cmli
dXRlcyBmb3IgcmljaCB0ZXh0LiBUaGlzIHdpbGwgZW5zdXJlIHRoYXQgdGhlIGJ1dHRvbnMgcmVm
bGVjdCB0aGUgc3RhdGUgb2YKKyAgICAvLyB0aGUgdGV4dCB3aGVuIGNoYW5naW5nIHNlbGVjdGlv
biB0aHJvdWdob3V0IHRoZSBkb2N1bWVudC4KKyAgICBpZiAoaXNSaWNobHlFZGl0YWJsZSgpKSB7
CisgICAgICAgIGNvbnN0IEVkaXRvclN0YXRlJiBlZGl0b3JTdGF0ZSA9IG1fcGFnZS0+ZWRpdG9y
U3RhdGUoKTsKKyAgICAgICAgaWYgKCFlZGl0b3JTdGF0ZS5pc01pc3NpbmdQb3N0TGF5b3V0RGF0
YSkgeworICAgICAgICAgICAgW21fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElz
Qm9sZDooYm9vbCkobV9wYWdlLT5lZGl0b3JTdGF0ZSgpLnBvc3RMYXlvdXREYXRhKCkudHlwaW5n
QXR0cmlidXRlcyAmIEF0dHJpYnV0ZUJvbGQpXTsKKyAgICAgICAgICAgIFttX3RleHRUb3VjaEJh
ckl0ZW1Db250cm9sbGVyIHNldFRleHRJc0l0YWxpYzooYm9vbCkobV9wYWdlLT5lZGl0b3JTdGF0
ZSgpLnBvc3RMYXlvdXREYXRhKCkudHlwaW5nQXR0cmlidXRlcyAmIEF0dHJpYnV0ZUl0YWxpY3Mp
XTsKKyAgICAgICAgICAgIFttX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFRleHRJc1Vu
ZGVybGluZWQ6KGJvb2wpKG1fcGFnZS0+ZWRpdG9yU3RhdGUoKS5wb3N0TGF5b3V0RGF0YSgpLnR5
cGluZ0F0dHJpYnV0ZXMgJiBBdHRyaWJ1dGVVbmRlcmxpbmUpXTsKKyAgICAgICAgICAgIFttX3Rl
eHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFRleHRDb2xvcjpuc0NvbG9yKGVkaXRvclN0YXRl
LnBvc3RMYXlvdXREYXRhKCkudGV4dENvbG9yKV07CisgICAgICAgICAgICBbW21fdGV4dFRvdWNo
QmFySXRlbUNvbnRyb2xsZXIgdGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyXSBzZXRDdXJy
ZW50TGlzdFR5cGU6KExpc3RUeXBlKW1fcGFnZS0+ZWRpdG9yU3RhdGUoKS5wb3N0TGF5b3V0RGF0
YSgpLmVuY2xvc2luZ0xpc3RUeXBlXTsKKworICAgICAgICAgICAgTlNUZXh0QWxpZ25tZW50IHRl
eHRBbGlnbm1lbnQ7CisgICAgICAgICAgICBzd2l0Y2ggKGVkaXRvclN0YXRlLnBvc3RMYXlvdXRE
YXRhKCkudGV4dEFsaWdubWVudCkgeworICAgICAgICAgICAgY2FzZSBOb0FsaWdubWVudDoKKyAg
ICAgICAgICAgICAgICB0ZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25tZW50TmF0dXJhbDsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTGVmdEFsaWdubWVudDoKKyAg
ICAgICAgICAgICAgICB0ZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25tZW50TGVmdDsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUmlnaHRBbGlnbm1lbnQ6CisgICAg
ICAgICAgICAgICAgdGV4dEFsaWdubWVudCA9IE5TVGV4dEFsaWdubWVudFJpZ2h0OworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDZW50ZXJBbGlnbm1lbnQ6CisgICAg
ICAgICAgICAgICAgdGV4dEFsaWdubWVudCA9IE5TVGV4dEFsaWdubWVudENlbnRlcjsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSnVzdGlmaWVkQWxpZ25tZW50Ogor
ICAgICAgICAgICAgICAgIHRleHRBbGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRKdXN0aWZpZWQ7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBbbV90
ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRDdXJyZW50VGV4dEFsaWdubWVudDp0ZXh0QWxp
Z25tZW50XTsKKyAgICAgICAgfQorICAgICAgICBCT09MIGlzU2hvd2luZ0NhbmRpZGF0ZUxpc3RJ
dGVtID0gW3RleHRUb3VjaEJhci5pdGVtSWRlbnRpZmllcnMgY29udGFpbnNPYmplY3Q6TlNUb3Vj
aEJhckl0ZW1JZGVudGlmaWVyQ2FuZGlkYXRlTGlzdF0gJiYgW05TU3BlbGxDaGVja2VyIGlzQXV0
b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZF07CisgICAgICAgIFttX3RleHRUb3VjaEJhckl0
ZW1Db250cm9sbGVyIHNldFVzZXNOYXJyb3dUZXh0U3R5bGVJdGVtOmlzU2hvd2luZ0NvbWJpbmVk
VGV4dEZvcm1hdEl0ZW0gJiYgaXNTaG93aW5nQ2FuZGlkYXRlTGlzdEl0ZW1dOworICAgIH0KK30K
Kwordm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlTWVkaWFUb3VjaEJhcigpCit7CisjaWYgRU5BQkxF
KFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIGlmICghbV9tZWRpYVRvdWNoQmFy
UHJvdmlkZXIpCisgICAgICAgIG1fbWVkaWFUb3VjaEJhclByb3ZpZGVyID0gYWRvcHROUyhbYWxs
b2NBVkZ1bmN0aW9uQmFyUGxheWJhY2tDb250cm9sc1Byb3ZpZGVySW5zdGFuY2UoKSBpbml0XSk7
CisKKyAgICBpZiAoIW1fbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldykKKyAgICAgICAgbV9tZWRp
YVBsYXliYWNrQ29udHJvbHNWaWV3ID0gYWRvcHROUyhbYWxsb2NBVkZ1bmN0aW9uQmFyU2NydWJi
ZXJJbnN0YW5jZSgpIGluaXRdKTsKKworICAgIGlmICghbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdl
cikKKyAgICAgICAgbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlciA9IGFkb3B0TlMoW1tXZWJQbGF5
YmFja0NvbnRyb2xzTWFuYWdlciBhbGxvY10gaW5pdF0pOworCisgICAgaWYgKFBsYXRmb3JtV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKiBpbnRlcmZhY2UgPSBtX3BhZ2UtPnBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIoKS0+Y29udHJvbHNNYW5hZ2VySW50ZXJmYWNlKCkpCisgICAgICAgIFttX3Bs
YXliYWNrQ29udHJvbHNNYW5hZ2VyIHNldFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzpp
bnRlcmZhY2VdOworCisgICAgW21fbWVkaWFUb3VjaEJhclByb3ZpZGVyIHNldFBsYXliYWNrQ29u
dHJvbHNDb250cm9sbGVyOm1fcGxheWJhY2tDb250cm9sc01hbmFnZXIuZ2V0KCldOworICAgIFtt
X21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcgc2V0UGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXI6
bV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlci5nZXQoKV07CisKKyAgICBpZiAoIXVzZU1lZGlhUGxh
eWJhY2tDb250cm9sc1ZpZXcoKSkgeworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICAg
ICAgLy8gSWYgd2UgY2FuJ3QgaGF2ZSBhIG1lZGlhIHBvcG92ZXIgZnVuY3Rpb24gYmFyIGl0ZW0s
IGl0IG1pZ2h0IGJlIGJlY2F1c2Ugd2UgYXJlIGluIGZ1bGwgc2NyZWVuLgorICAgICAgICAvLyBJ
ZiBzbywgY3VzdG9taXplIHRoZSBlc2NhcGUga2V5LgorICAgICAgICBOU1RvdWNoQmFyICp0b3Vj
aEJhciA9IFttX21lZGlhVG91Y2hCYXJQcm92aWRlciByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKHRvdWNoQmFyKV0gPyBbKGlkKW1fbWVkaWFUb3VjaEJhclByb3ZpZGVyLmdldCgpIHRvdWNo
QmFyXSA6IFsoaWQpbV9tZWRpYVRvdWNoQmFyUHJvdmlkZXIuZ2V0KCkgdG91Y2hCYXJdOworICAg
ICAgICBpZiAoaGFzRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIoKSAmJiBbbV9mdWxsU2NyZWVu
V2luZG93Q29udHJvbGxlciBpc0Z1bGxTY3JlZW5dKSB7CisgICAgICAgICAgICBpZiAoIW1fZXhp
dEZ1bGxTY3JlZW5CdXR0b24pIHsKKyAgICAgICAgICAgICAgICBtX2V4aXRGdWxsU2NyZWVuQnV0
dG9uID0gYWRvcHROUyhbW05TQ3VzdG9tVG91Y2hCYXJJdGVtIGFsbG9jXSBpbml0V2l0aElkZW50
aWZpZXI6V0tNZWRpYUV4aXRGdWxsU2NyZWVuSXRlbV0pOworCisgICAgICAgICAgICAgICAgTlNJ
bWFnZSAqaW1hZ2UgPSBbTlNJbWFnZSBpbWFnZU5hbWVkOk5TSW1hZ2VOYW1lVG91Y2hCYXJFeGl0
RnVsbFNjcmVlblRlbXBsYXRlXTsKKyAgICAgICAgICAgICAgICBbaW1hZ2Ugc2V0VGVtcGxhdGU6
WUVTXTsKKworICAgICAgICAgICAgICAgIE5TQnV0dG9uICpleGl0RnVsbFNjcmVlbkJ1dHRvbiA9
IFtOU0J1dHRvbiBidXR0b25XaXRoVGl0bGU6aW1hZ2UgPyBAIiIgOiBAIkV4aXQiIGltYWdlOmlt
YWdlIHRhcmdldDptX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmdldCgpIGFjdGlvbjpAc2Vs
ZWN0b3IocmVxdWVzdEV4aXRGdWxsU2NyZWVuKV07CisgICAgICAgICAgICAgICAgW2V4aXRGdWxs
U2NyZWVuQnV0dG9uIHNldEFjY2Vzc2liaWxpdHlUaXRsZTpXZWJDb3JlOjpleGl0RnVsbFNjcmVl
bkJ1dHRvbkFjY2Vzc2liaWxpdHlUaXRsZSgpXTsKKworICAgICAgICAgICAgICAgIFtbZXhpdEZ1
bGxTY3JlZW5CdXR0b24ud2lkdGhBbmNob3IgY29uc3RyYWludExlc3NUaGFuT3JFcXVhbFRvQ29u
c3RhbnQ6ZXhpdEZ1bGxTY3JlZW5CdXR0b25XaWR0aF0gc2V0QWN0aXZlOllFU107CisgICAgICAg
ICAgICAgICAgW21fZXhpdEZ1bGxTY3JlZW5CdXR0b24gc2V0VmlldzpleGl0RnVsbFNjcmVlbkJ1
dHRvbl07CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0b3VjaEJhci5lc2NhcGVLZXlSZXBs
YWNlbWVudEl0ZW0gPSBtX2V4aXRGdWxsU2NyZWVuQnV0dG9uLmdldCgpOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIHRvdWNoQmFyLmVzY2FwZUtleVJlcGxhY2VtZW50SXRlbSA9IG5pbDsK
KyNlbmRpZgorICAgICAgICAvLyBUaGUgcmVzdCBvZiB0aGUgd29yayB0byB1cGRhdGUgdGhlIG1l
ZGlhIGZ1bmN0aW9uIGJhciBvbmx5IGFwcGxpZXMgdG8gdGhlIHBvcG92ZXIgdmVyc2lvbiwgc28g
cmV0dXJuIGVhcmx5LgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fcGxheWJh
Y2tDb250cm9sc01hbmFnZXIgJiYgbV92aWV3ID09IG1fdmlldy53aW5kb3cuZmlyc3RSZXNwb25k
ZXIgJiYgW21fdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJfZGlkQWRkTWVk
aWFDb250cm9sc01hbmFnZXI6KV0pCisgICAgICAgIFttX3ZpZXcgX3dlYl9kaWRBZGRNZWRpYUNv
bnRyb2xzTWFuYWdlcjptX21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcuZ2V0KCldOworI2VuZGlm
Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OmZvcmNlUmVxdWVzdENhbmRpZGF0ZXNGb3JUZXN0aW5n
KCkKK3sKKyAgICBtX2NhbkNyZWF0ZVRvdWNoQmFycyA9IHRydWU7CisgICAgdXBkYXRlVG91Y2hC
YXIoKTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlVG91Y2hCYXIoKQoreworICAgIGlm
ICghbV9jYW5DcmVhdGVUb3VjaEJhcnMpCisgICAgICAgIHJldHVybjsKKworICAgIE5TVG91Y2hC
YXIgKnRvdWNoQmFyID0gbmlsOworICAgIGJvb2wgdXNlckFjdGlvblJlcXVpcmVtZW50c0hhdmVC
ZWVuTWV0ID0gbV9yZXF1aXJlc1VzZXJBY3Rpb25Gb3JFZGl0aW5nQ29udHJvbHNNYW5hZ2VyID8g
bV9wYWdlLT5oYXNIYWRTZWxlY3Rpb25DaGFuZ2VzRnJvbVVzZXJJbnRlcmFjdGlvbigpIDogdHJ1
ZTsKKyAgICBpZiAobV9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlICYmICFt
X3BhZ2UtPm5lZWRzSGlkZGVuQ29udGVudEVkaXRhYmxlUXVpcmsoKSkgeworICAgICAgICB1cGRh
dGVUZXh0VG91Y2hCYXIoKTsKKyAgICAgICAgaWYgKHVzZXJBY3Rpb25SZXF1aXJlbWVudHNIYXZl
QmVlbk1ldCkKKyAgICAgICAgICAgIHRvdWNoQmFyID0gdGV4dFRvdWNoQmFyKCk7CisgICAgfQor
I2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBlbHNlIGlmICht
X3BhZ2UtPmhhc0FjdGl2ZVZpZGVvRm9yQ29udHJvbHNNYW5hZ2VyKCkpIHsKKyAgICAgICAgdXBk
YXRlTWVkaWFUb3VjaEJhcigpOworICAgICAgICAvLyBJZiB1c2VNZWRpYVBsYXliYWNrQ29udHJv
bHNWaWV3KCkgaXMgdHJ1ZSwgdGhlbiB3ZSBhcmUgcmVseWluZyBvbiB0aGUgQVBJIGNsaWVudCB0
byBkaXNwbGF5IGEgcG9wb3ZlciB2ZXJzaW9uCisgICAgICAgIC8vIG9mIHRoZSBtZWRpYSB0aW1l
bGluZSBpbiB0aGVpciBvd24gZnVuY3Rpb24gYmFyLiBJZiBpdCBpcyBmYWxzZSwgdGhlbiB3ZSB3
aWxsIGRpc3BsYXkgdGhlIG1lZGlhIHRpbWVsaW5lIGluIG91cgorICAgICAgICAvLyBmdW5jdGlv
biBiYXIuCisgICAgICAgIGlmICghdXNlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpKQorICAg
ICAgICAgICAgdG91Y2hCYXIgPSBbbV9tZWRpYVRvdWNoQmFyUHJvdmlkZXIgcmVzcG9uZHNUb1Nl
bGVjdG9yOkBzZWxlY3Rvcih0b3VjaEJhcildID8gWyhpZCltX21lZGlhVG91Y2hCYXJQcm92aWRl
ci5nZXQoKSB0b3VjaEJhcl0gOiBbKGlkKW1fbWVkaWFUb3VjaEJhclByb3ZpZGVyLmdldCgpIHRv
dWNoQmFyXTsKKyAgICB9IGVsc2UgaWYgKFttX21lZGlhVG91Y2hCYXJQcm92aWRlciBwbGF5YmFj
a0NvbnRyb2xzQ29udHJvbGxlcl0pIHsKKyAgICAgICAgaWYgKG1fY2xpZW50V2FudHNNZWRpYVBs
YXliYWNrQ29udHJvbHNWaWV3KSB7CisgICAgICAgICAgICBpZiAoW21fdmlldyByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJfZGlkUmVtb3ZlTWVkaWFDb250cm9sc01hbmFnZXIpXSAm
JiBtX3ZpZXcgPT0gbV92aWV3LndpbmRvdy5maXJzdFJlc3BvbmRlcikKKyAgICAgICAgICAgICAg
ICBbbV92aWV3IF93ZWJfZGlkUmVtb3ZlTWVkaWFDb250cm9sc01hbmFnZXJdOworICAgICAgICB9
CisgICAgICAgIFttX21lZGlhVG91Y2hCYXJQcm92aWRlciBzZXRQbGF5YmFja0NvbnRyb2xzQ29u
dHJvbGxlcjpuaWxdOworICAgICAgICBbbV9tZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3IHNldFBs
YXliYWNrQ29udHJvbHNDb250cm9sbGVyOm5pbF07CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAo
dG91Y2hCYXIgPT0gbV9jdXJyZW50VG91Y2hCYXIpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IElmIG1fZWRpdGFibGVFbGVtZW50SXNGb2N1c2VkIGlzIHRydWUsIHRoZW4gd2UgbWF5IGhhdmUg
YSBub24tZWRpdGFibGUgc2VsZWN0aW9uIHJpZ2h0IG5vdyBqdXN0IGJlY2F1c2UKKyAgICAvLyB0
aGUgdXNlciBpcyBjbGlja2luZyBvciB0YWJiaW5nIGJldHdlZW4gZWRpdGFibGUgZmllbGRzLgor
ICAgIGlmIChtX2VkaXRhYmxlRWxlbWVudElzRm9jdXNlZCAmJiB0b3VjaEJhciAhPSB0ZXh0VG91
Y2hCYXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jdXJyZW50VG91Y2hCYXIgPSB0b3Vj
aEJhcjsKKyAgICBbbV92aWV3IHdpbGxDaGFuZ2VWYWx1ZUZvcktleTpAInRvdWNoQmFyIl07Cisg
ICAgW21fdmlldyBzZXRUb3VjaEJhcjptX2N1cnJlbnRUb3VjaEJhci5nZXQoKV07CisgICAgW21f
dmlldyBkaWRDaGFuZ2VWYWx1ZUZvcktleTpAInRvdWNoQmFyIl07Cit9CisKK2Jvb2wgV2ViVmll
d0ltcGw6OnNob3VsZFJlcXVlc3RDYW5kaWRhdGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1f
cGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0luUGFzc3dvcmRGaWVsZCAmJiBjYW5kaWRhdGVMaXN0VG91
Y2hCYXJJdGVtKCkuY2FuZGlkYXRlTGlzdFZpc2libGU7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6
OnNob3dDYW5kaWRhdGVzKE5TQXJyYXkgKmNhbmRpZGF0ZXMsIE5TU3RyaW5nICpzdHJpbmcsIE5T
UmVjdCByZWN0T2ZUeXBlZFN0cmluZywgTlNSYW5nZSBzZWxlY3RlZFJhbmdlLCBOU1ZpZXcgKnZp
ZXcsIHZvaWQgKF5jb21wbGV0aW9uSGFuZGxlcikoTlNUZXh0Q2hlY2tpbmdSZXN1bHQgKmFjY2Vw
dGVkQ2FuZGlkYXRlKSkKK3sKKyAgICBbY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSgpIHNldENh
bmRpZGF0ZXM6Y2FuZGlkYXRlcyBmb3JTZWxlY3RlZFJhbmdlOnNlbGVjdGVkUmFuZ2UgaW5TdHJp
bmc6c3RyaW5nXTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6d2ViVmlld0ltcGxBZGRpdGlvbnNX
aWxsRGVzdHJveVZpZXcoKQoreworICAgIFttX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIGRp
ZERlc3Ryb3lWaWV3XTsKKworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdF
UikKKyAgICBbbV9tZWRpYVRvdWNoQmFyUHJvdmlkZXIgc2V0UGxheWJhY2tDb250cm9sc0NvbnRy
b2xsZXI6bmlsXTsKKyAgICBbbV9tZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3IHNldFBsYXliYWNr
Q29udHJvbHNDb250cm9sbGVyOm5pbF07CisjZW5kaWYKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6
c2V0RWRpdGFibGVFbGVtZW50SXNGb2N1c2VkKGJvb2wgZWRpdGFibGVFbGVtZW50SXNGb2N1c2Vk
KQoreworICAgIG1fZWRpdGFibGVFbGVtZW50SXNGb2N1c2VkID0gZWRpdGFibGVFbGVtZW50SXNG
b2N1c2VkOworCisgICAgLy8gSWYgdGhlIGVkaXRhYmxlIGVsZW1lbnRzIGhhdmUgYmx1cnJlZCwg
dGhlbiB3ZSBtaWdodCBuZWVkIHRvIGdldCByaWQgb2YgdGhlIGVkaXRpbmcgZnVuY3Rpb24gYmFy
LgorICAgIGlmICghbV9lZGl0YWJsZUVsZW1lbnRJc0ZvY3VzZWQpCisgICAgICAgIHVwZGF0ZVRv
dWNoQmFyKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAogI2Vsc2UKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCi12b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVXZWJWaWV3SW1wbEFkZGl0aW9ucygp
Cit2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVUb3VjaEJhcigpCiB7CiB9CiAKQEAgLTQ2NSw3ICsx
MTU4LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0RWRpdGFibGVFbGVtZW50SXNGbwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLSNlbmRpZiAvLyBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID49IDEwMTIwMCAmJiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQorI2VuZGlmIC8vIEhB
VkUoVE9VQ0hfQkFSKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNjE1LDcgKzEzMDgsNyBA
QCBib29sIFdlYlZpZXdJbXBsOjpiZWNvbWVGaXJzdFJlc3BvbmRlcigpCiAKICAgICBtX2luQmVj
b21lRmlyc3RSZXNwb25kZXIgPSBmYWxzZTsKIAotICAgIHVwZGF0ZVdlYlZpZXdJbXBsQWRkaXRp
b25zKCk7CisgICAgdXBkYXRlVG91Y2hCYXIoKTsKIAogICAgIGlmIChkaXJlY3Rpb24gIT0gTlNE
aXJlY3RTZWxlY3Rpb24pIHsKICAgICAgICAgTlNFdmVudCAqZXZlbnQgPSBbTlNBcHAgY3VycmVu
dEV2ZW50XTsKQEAgLTE4MDgsNyArMjUwMSw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNlbGVjdGlv
bkRpZENoYW5nZSgpCiAgICAgaWYgKCFtX2lzSGFuZGxpbmdBY2NlcHRlZENhbmRpZGF0ZSkKICAg
ICAgICAgbV9zb2Z0U3BhY2VSYW5nZSA9IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwogI2lm
IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwCi0gICAgdXBkYXRlV2Vi
Vmlld0ltcGxBZGRpdGlvbnMoKTsKKyAgICB1cGRhdGVUb3VjaEJhcigpOwogICAgIGlmICghbV9w
YWdlLT5lZGl0b3JTdGF0ZSgpLmlzTWlzc2luZ1Bvc3RMYXlvdXREYXRhKQogICAgICAgICByZXF1
ZXN0Q2FuZGlkYXRlc0ZvclNlbGVjdGlvbklmTmVlZGVkKCk7CiAjZW5kaWYKQEAgLTI0NDgsNyAr
MzE0MSw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmRpZEhhbmRsZUFjY2VwdGVkQ2FuZGkKIHZvaWQg
V2ViVmlld0ltcGw6OnZpZGVvQ29udHJvbHNNYW5hZ2VyRGlkQ2hhbmdlKCkKIHsKICNpZiBfX01B
Q19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMAotICAgIHVwZGF0ZVdlYlZpZXdJ
bXBsQWRkaXRpb25zKCk7CisgICAgdXBkYXRlVG91Y2hCYXIoKTsKICNlbmRpZgogfQogCkluZGV4
OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2NyBAQAorMjAxNi0xMS0wNCAgQmV0
aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3VwcG9ydCBUb3VjaEJhciBp
biBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NDQzNworICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIHJkYXI6Ly9wcm9i
bGVtLzI4ODc2NTI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW06CisgICAgICAgIChXZWJF
ZGl0b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViRWRp
dG9yQ2xpZW50Ojp1cGRhdGVFZGl0b3JTdGF0ZUFmdGVyTGF5b3V0SWZFZGl0YWJpbGl0eUNoYW5n
ZWQpOgorICAgICAgICAqIFdlYlZpZXcvV2ViSFRNTFZpZXcubW06CisgICAgICAgICgtW1dlYkhU
TUxWaWV3IGNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW1dKToKKyAgICAgICAgKiBXZWJWaWV3L1dl
YlZpZXcubW06CisgICAgICAgICgtW19XZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIg
aW5pdFdpdGhXZWJWaWV3Ol0pOgorICAgICAgICAoLVtfV2ViVGV4dExpc3RUb3VjaEJhclZpZXdD
b250cm9sbGVyIF9zZWxlY3RMaXN0Ol0pOgorICAgICAgICAoLVtfV2ViVGV4dExpc3RUb3VjaEJh
clZpZXdDb250cm9sbGVyIHNldEN1cnJlbnRMaXN0VHlwZTpdKToKKyAgICAgICAgKC1bV2ViVGV4
dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgaW5pdFdpdGhXZWJWaWV3Ol0pOgorICAgICAgICAoLVtX
ZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBpdGVtRm9ySWRlbnRpZmllcjpdKToKKyAgICAg
ICAgKC1bV2ViVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgd2ViVGV4dExpc3RUb3VjaEJhclZp
ZXdDb250cm9sbGVyXSk6CisgICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVy
IHNldFRleHRJc0JvbGQ6XSk6CisgICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0ZW1Db250cm9s
bGVyIHNldFRleHRJc0l0YWxpYzpdKToKKyAgICAgICAgKC1bV2ViVGV4dFRvdWNoQmFySXRlbUNv
bnRyb2xsZXIgc2V0VGV4dElzVW5kZXJsaW5lZDpdKToKKyAgICAgICAgKC1bV2ViVGV4dFRvdWNo
QmFySXRlbUNvbnRyb2xsZXIgX3dlYkNoYW5nZVRleHRTdHlsZTpdKToKKyAgICAgICAgKC1bV2Vi
VGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0Q3VycmVudFRleHRBbGlnbm1lbnQ6XSk6Cisg
ICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIF93ZWJDaGFuZ2VUZXh0QWxp
Z25tZW50Ol0pOgorICAgICAgICAoLVtXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciB0ZXh0
Q29sb3JdKToKKyAgICAgICAgKC1bV2ViVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4
dENvbG9yOl0pOgorICAgICAgICAoLVtXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBfd2Vi
Q2hhbmdlQ29sb3I6XSk6CisgICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVy
IHRleHRMaXN0Vmlld0NvbnRyb2xsZXJdKToKKyAgICAgICAgKC1bV2ViVmlldyBfY29tbW9uSW5p
dGlhbGl6YXRpb25XaXRoRnJhbWVOYW1lOmdyb3VwTmFtZTpdKToKKyAgICAgICAgKC1bV2ViVmll
dyBzaG93Q2FuZGlkYXRlczpmb3JTdHJpbmc6aW5SZWN0OmZvclNlbGVjdGVkUmFuZ2U6dmlldzpj
b21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV2ViVmlldyBzaG91bGRSZXF1ZXN0Q2Fu
ZGlkYXRlc10pOgorICAgICAgICAoLVtXZWJWaWV3IGZvcmNlUmVxdWVzdENhbmRpZGF0ZXNGb3JU
ZXN0aW5nXSk6CisgICAgICAgICgtW1dlYlZpZXcgbWFrZVRvdWNoQmFyXSk6CisgICAgICAgICgt
W1dlYlZpZXcgdG91Y2hCYXI6bWFrZUl0ZW1Gb3JJZGVudGlmaWVyOl0pOgorICAgICAgICAodGV4
dENoZWNraW5nUmVzdWx0RnJvbU5TVGV4dENoZWNraW5nUmVzdWx0KToKKyAgICAgICAgKC1bV2Vi
VmlldyBjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtOmVuZFNlbGVjdGluZ0NhbmRpZGF0ZUF0SW5k
ZXg6XSk6CisgICAgICAgICgtW1dlYlZpZXcgY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTpjaGFu
Z2VkQ2FuZGlkYXRlTGlzdFZpc2liaWxpdHk6XSk6CisgICAgICAgICgtW1dlYlZpZXcgX3NldFVw
UGxheWJhY2tDb250cm9sc01hbmFnZXJGb3JNZWRpYUVsZW1lbnQ6XSk6CisgICAgICAgICgtW1dl
YlZpZXcgX2NsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXJdKToKKyAgICAgICAgKC1bV2ViVmll
dyBfZGlzbWlzc1RleHRUb3VjaEJhclBvcG92ZXJJdGVtV2l0aElkZW50aWZpZXI6XSk6CisgICAg
ICAgICgtW1dlYlZpZXcgX3RleHRUb3VjaEJhckN1c3RvbWl6YXRpb25BbGxvd2VkSWRlbnRpZmll
cnNdKToKKyAgICAgICAgKC1bV2ViVmlldyBfcGxhaW5UZXh0VG91Y2hCYXJDdXN0b21pemF0aW9u
RGVmYXVsdEl0ZW1JZGVudGlmaWVyc10pOgorICAgICAgICAoLVtXZWJWaWV3IF9yaWNoVGV4dFRv
dWNoQmFyQ3VzdG9taXphdGlvbkRlZmF1bHRJdGVtSWRlbnRpZmllcnNdKToKKyAgICAgICAgKC1b
V2ViVmlldyB0b3VjaEJhckRpZEV4aXRDdXN0b21pemF0aW9uOl0pOgorICAgICAgICAoLVtXZWJW
aWV3IHRvdWNoQmFyV2lsbEVudGVyQ3VzdG9taXphdGlvbjpdKToKKyAgICAgICAgKC1bV2ViVmll
dyBkaWRDaGFuZ2VBdXRvbWF0aWNUZXh0Q29tcGxldGlvbjpdKToKKyAgICAgICAgKC1bV2ViVmll
dyBzZXRVcFRleHRUb3VjaEJhcjpdKToKKyAgICAgICAgKC1bV2ViVmlldyBfaXNSaWNobHlFZGl0
YWJsZV0pOgorICAgICAgICAoLVtXZWJWaWV3IHRleHRUb3VjaEJhcl0pOgorICAgICAgICAoLVtX
ZWJWaWV3IHVwZGF0ZVRleHRUb3VjaEJhcl0pOgorICAgICAgICAoLVtXZWJWaWV3IHVwZGF0ZU1l
ZGlhVG91Y2hCYXJdKToKKyAgICAgICAgKC1bV2ViVmlldyB1cGRhdGVUb3VjaEJhcl0pOgorICAg
ICAgICAoLVtXZWJWaWV3IHByZXBhcmVGb3JNb3VzZURvd25dKToKKyAgICAgICAgKC1bV2ViVmll
dyBwcmVwYXJlRm9yTW91c2VVcF0pOgorICAgICAgICAoLVtXZWJWaWV3IHdlYlZpZXdBZGRpdGlv
bnNXaWxsRGVzdHJveVZpZXddKToKKyAgICAgICAgKC1bV2ViVmlldyBjYW5kaWRhdGVMaXN0XSk6
CisgICAgICAgICgtW1dlYlZpZXcgdXBkYXRlV2ViVmlld0FkZGl0aW9uc10pOiBEZWxldGVkLgor
ICAgICAgICAqIFdlYlZpZXcvV2ViVmlld0RhdGEuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZp
ZXdJbnRlcm5hbC5oOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlld1ByaXZhdGUuaDoKKwogMjAx
Ni0xMS0wNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgogCiAg
ICAgICAgIEFkZCBhIHNldHRpbmcgYW5kIHByZWZlcmVuY2VzIHRvIGVuYWJsZS9kaXNhYmxlIGFz
eW5jIGltYWdlIGRlY29kaW5nCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTM0Nyw3ICszNDcsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVzcG9uZFRv
Q2hhbmdlZFNlCiAgICAgTlNWaWV3PFdlYkRvY3VtZW50Vmlldz4gKmRvY3VtZW50VmlldyA9IFtb
a2l0KGZyYW1lKSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CiAgICAgaWYgKFtkb2N1bWVudFZp
ZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkgewogICAgICAgICBbKFdlYkhU
TUxWaWV3ICopZG9jdW1lbnRWaWV3IF9zZWxlY3Rpb25DaGFuZ2VkXTsKLSAgICAgICAgW21fd2Vi
VmlldyB1cGRhdGVXZWJWaWV3QWRkaXRpb25zXTsKKyAgICAgICAgW21fd2ViVmlldyB1cGRhdGVU
b3VjaEJhcl07CiAgICAgICAgIG1fbGFzdEVkaXRvclN0YXRlV2FzQ29udGVudEVkaXRhYmxlID0g
WyhXZWJIVE1MVmlldyAqKWRvY3VtZW50VmlldyBfaXNFZGl0YWJsZV0gPyBFZGl0b3JTdGF0ZUlz
Q29udGVudEVkaXRhYmxlOjpZZXMgOiBFZGl0b3JTdGF0ZUlzQ29udGVudEVkaXRhYmxlOjpObzsK
ICAgICB9CiAKQEAgLTY2Nyw3ICs2NjcsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6dXBkYXRl
RWRpdG9yU3RhdGVBCiAKICAgICBFZGl0b3JTdGF0ZUlzQ29udGVudEVkaXRhYmxlIGVkaXRvclN0
YXRlSXNDb250ZW50RWRpdGFibGUgPSBbKFdlYkhUTUxWaWV3ICopZG9jdW1lbnRWaWV3IF9pc0Vk
aXRhYmxlXSA/IEVkaXRvclN0YXRlSXNDb250ZW50RWRpdGFibGU6OlllcyA6IEVkaXRvclN0YXRl
SXNDb250ZW50RWRpdGFibGU6Ok5vOwogICAgIGlmIChtX2xhc3RFZGl0b3JTdGF0ZVdhc0NvbnRl
bnRFZGl0YWJsZSAhPSBlZGl0b3JTdGF0ZUlzQ29udGVudEVkaXRhYmxlKQotICAgICAgICBbbV93
ZWJWaWV3IHVwZGF0ZVdlYlZpZXdBZGRpdGlvbnNdOworICAgICAgICBbbV93ZWJWaWV3IHVwZGF0
ZVRvdWNoQmFyXTsKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlZ2lzdGVyVW5kb1N0ZXAo
UGFzc1JlZlB0cjxVbmRvU3RlcD4gY21kKQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJIVE1MVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYkhUTUxWaWV3Lm1tCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC03MjMwLDggKzcyMzAsMTEg
QEAgLSAodm9pZClfdXBkYXRlU2VsZWN0aW9uRm9ySW5wdXRNYW5hZ2VyCiAjZW5kaWYgLy8gUExB
VEZPUk0oSU9TKQogfQogCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05f
TUlOX1JFUVVJUkVEID49IDEwMTIwMCAmJiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2ltcG9y
dCA8V2ViS2l0QWRkaXRpb25zL1dlYkhUTUxWaWV3V2ViTlNUZXh0SW5wdXRTdXBwb3J0QWRkaXRp
b25zLm1tPgorI2lmIEhBVkUoVE9VQ0hfQkFSKQorLSAoTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJ
dGVtICopY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbQoreworICAgIHJldHVybiBbW3NlbGYgX3dl
YlZpZXddIGNhbmRpZGF0ZUxpc3RdOworfQogI2VuZGlmCiAKIEBlbmQKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCw3
IEBACiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CiAjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9FeGNlcHRpb24uaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWVSZWYu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvQVZLaXRTUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvQWx0ZXJu
YXRpdmVUZXh0VUlDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0FuaW1hdGlvbkNvbnRy
b2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaD4KQEAg
LTE0NCw2ICsxNDUsOCBAQAogI2ltcG9ydCA8V2ViQ29yZS9HZW9sb2NhdGlvbkNvbnRyb2xsZXIu
aD4KICNpbXBvcnQgPFdlYkNvcmUvR2VvbG9jYXRpb25FcnJvci5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9IVE1MTmFtZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTE9MaXN0RWxlbWVudC5oPgorI2lt
cG9ydCA8V2ViQ29yZS9IVE1MVUxpc3RFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxW
aWRlb0VsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvSGlzdG9yeUNvbnRyb2xsZXIuaD4KICNp
bXBvcnQgPFdlYkNvcmUvSGlzdG9yeUl0ZW0uaD4KQEAgLTE1MywxMSArMTU2LDE0IEBACiAjaW1w
b3J0IDxXZWJDb3JlL0pTRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9KU05vZGVMaXN0Lmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0pTTm90aWZpY2F0aW9uLmg+CisjaW1wb3J0IDxXZWJDb3JlL0xv
Y2FsaXplZFN0cmluZ3MuaD4KICNpbXBvcnQgPFdlYkNvcmUvTG9nSW5pdGlhbGl6YXRpb24uaD4K
ICNpbXBvcnQgPFdlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5oPgogI2ltcG9ydCA8V2ViQ29yZS9N
YWluRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvTWVtb3J5Q2FjaGUuaD4KICNpbXBvcnQgPFdl
YkNvcmUvTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL05TU3BlbGxD
aGVja2VyU1BJLmg+CisjaW1wb3J0IDxXZWJDb3JlL05TVG91Y2hCYXJTUEkuaD4KICNpbXBvcnQg
PFdlYkNvcmUvTlNVUkxGaWxlVHlwZU1hcHBpbmdzU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05l
dHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9Ob2RlTGlzdC5oPgpAQCAt
MTkyLDYgKzE5OCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVPYmpDRXh0cmFzLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dpZGdldC5o
PgorI2ltcG9ydCA8V2ViQ29yZS9odG1sZWRpdGluZy5oPgogI2ltcG9ydCA8V2ViS2l0TGVnYWN5
L0RPTS5oPgogI2ltcG9ydCA8V2ViS2l0TGVnYWN5L0RPTUV4dGVuc2lvbnMuaD4KICNpbXBvcnQg
PFdlYktpdExlZ2FjeS9ET01Qcml2YXRlLmg+CkBAIC0yMTMsNiArMjIwLDcgQEAKICNpbXBvcnQg
PHd0Zi9SZWZQdHIuaD4KICNpbXBvcnQgPHd0Zi9SdW5Mb29wLmg+CiAjaW1wb3J0IDx3dGYvU3Rk
TGliRXh0cmFzLmg+CisjaW1wb3J0IDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CiAjaW1wb3J0IDx3
dGYvc3BpL2Rhcndpbi9keWxkU1BJLmg+CiAKICNpZiAhUExBVEZPUk0oSU9TKQpAQCAtMzA3LDYg
KzMxNSwxMiBAQAogI2ltcG9ydCA8V2ViQ29yZS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudC5oPgogI2VuZGlmCiAKKyNpZiBIQVZFKFRPVUNIX0JBUikgJiYgRU5BQkxFKFdFQl9Q
TEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorU09GVF9MSU5LX0ZSQU1FV09SSyhBVktpdCkKK1NP
RlRfTElOS19DTEFTUyhBVktpdCwgQVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNQcm92aWRl
cikKK1NPRlRfTElOS19DTEFTUyhBVktpdCwgQVZGdW5jdGlvbkJhclNjcnViYmVyKQorI2VuZGlm
IC8vIEhBVkUoVE9VQ0hfQkFSKSAmJiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFH
RVIpCisKICNpZiBQTEFURk9STShNQUMpCiBTT0ZUX0xJTktfQ09OU1RBTlRfTUFZX0ZBSUwoTG9v
a3VwLCBMVU5vdGlmaWNhdGlvblBvcG92ZXJXaWxsQ2xvc2UsIE5TU3RyaW5nICopCiAjZW5kaWYK
QEAgLTY2Miw2ICs2NzYsMjgxIEBAIHN0YXRpYyBCT09MIGF1dG9tYXRpY1RleHRSZXBsYWNlbWVu
dEVuYWIKIHN0YXRpYyBCT09MIGF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQ7CiAj
ZW5kaWYKIAorI2lmIEhBVkUoVE9VQ0hfQkFSKQorCitlbnVtIGNsYXNzIFdlYkxpc3RUeXBlIHsK
KyAgICBOb25lID0gMCwKKyAgICBPcmRlcmVkLAorICAgIFVub3JkZXJlZAorfTsKKworQGludGVy
ZmFjZSBfV2ViVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyIDogTlNWaWV3Q29udHJvbGxl
ciB7CisgICAgV2ViTGlzdFR5cGUgX2N1cnJlbnRMaXN0VHlwZTsKKworQHByaXZhdGUKKyAgICBX
ZWJWaWV3ICpfd2ViVmlldzsKK30KKworQHByb3BlcnR5IChub25hdG9taWMpIFdlYkxpc3RUeXBl
IGN1cnJlbnRMaXN0VHlwZTsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViVmlldzooV2Vi
VmlldyAqKXdlYlZpZXc7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIF9XZWJUZXh0TGlzdFRv
dWNoQmFyVmlld0NvbnRyb2xsZXIKKworQHN5bnRoZXNpemUgY3VycmVudExpc3RUeXBlPV9jdXJy
ZW50TGlzdFR5cGU7CisKK3N0YXRpYyBjb25zdCBkb3VibGUgbGlzdENvbnRyb2xTZWdtZW50V2lk
dGggPSA2Ny4wOworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbm9MaXN0U2VnbWVudCA9IDA7Citz
dGF0aWMgY29uc3QgdW5zaWduZWQgdW5vcmRlcmVkTGlzdFNlZ21lbnQgPSAxOworc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG9yZGVyZWRMaXN0U2VnbWVudCA9IDI7CisKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3Cit7CisgICAgaWYgKCEoc2VsZiA9IFtz
dXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfd2ViVmlldyA9IHdlYlZp
ZXc7CisKKyAgICBOU1NlZ21lbnRlZENvbnRyb2wgKmluc2VydExpc3RDb250cm9sID0gW05TU2Vn
bWVudGVkQ29udHJvbCBzZWdtZW50ZWRDb250cm9sV2l0aExhYmVsczpAWyBXZWJDb3JlOjppbnNl
cnRMaXN0VHlwZU5vbmUoKSwgV2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVCdWxsZXRlZCgpLCBXZWJD
b3JlOjppbnNlcnRMaXN0VHlwZU51bWJlcmVkKCkgXSB0cmFja2luZ01vZGU6TlNTZWdtZW50U3dp
dGNoVHJhY2tpbmdTZWxlY3RPbmUgdGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3Rvcihfc2VsZWN0
TGlzdDopXTsKKyAgICBbaW5zZXJ0TGlzdENvbnRyb2wgc2V0V2lkdGg6bGlzdENvbnRyb2xTZWdt
ZW50V2lkdGggZm9yU2VnbWVudDpub0xpc3RTZWdtZW50XTsKKyAgICBbaW5zZXJ0TGlzdENvbnRy
b2wgc2V0V2lkdGg6bGlzdENvbnRyb2xTZWdtZW50V2lkdGggZm9yU2VnbWVudDp1bm9yZGVyZWRM
aXN0U2VnbWVudF07CisgICAgW2luc2VydExpc3RDb250cm9sIHNldFdpZHRoOmxpc3RDb250cm9s
U2VnbWVudFdpZHRoIGZvclNlZ21lbnQ6b3JkZXJlZExpc3RTZWdtZW50XTsKKyAgICBpbnNlcnRM
aXN0Q29udHJvbC5mb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOjE1XTsKKworI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVk
ICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorICAgIGlkIHNlZ21lbnRFbGVtZW50ID0gTlNB
Y2Nlc3NpYmlsaXR5VW5pZ25vcmVkRGVzY2VuZGFudChpbnNlcnRMaXN0Q29udHJvbCk7CisgICAg
TlNBcnJheSAqc2VnbWVudHMgPSBbc2VnbWVudEVsZW1lbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlXTsKKyAgICBBU1NFUlQoc2Vn
bWVudHMuY291bnQgPT0gMyk7CisgICAgW1tzZWdtZW50cyBvYmplY3RBdEluZGV4Om5vTGlzdFNl
Z21lbnRdIGFjY2Vzc2liaWxpdHlTZXRPdmVycmlkZVZhbHVlOldlYkNvcmU6Omluc2VydExpc3RU
eXBlTm9uZSgpIGZvckF0dHJpYnV0ZTpOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkF0dHJpYnV0
ZV07CisgICAgW1tzZWdtZW50cyBvYmplY3RBdEluZGV4OnVub3JkZXJlZExpc3RTZWdtZW50XSBh
Y2Nlc3NpYmlsaXR5U2V0T3ZlcnJpZGVWYWx1ZTpXZWJDb3JlOjppbnNlcnRMaXN0VHlwZUJ1bGxl
dGVkQWNjZXNzaWJpbGl0eVRpdGxlKCkgZm9yQXR0cmlidXRlOk5TQWNjZXNzaWJpbGl0eURlc2Ny
aXB0aW9uQXR0cmlidXRlXTsKKyAgICBbW3NlZ21lbnRzIG9iamVjdEF0SW5kZXg6b3JkZXJlZExp
c3RTZWdtZW50XSBhY2Nlc3NpYmlsaXR5U2V0T3ZlcnJpZGVWYWx1ZTpXZWJDb3JlOjppbnNlcnRM
aXN0VHlwZU51bWJlcmVkQWNjZXNzaWJpbGl0eVRpdGxlKCkgZm9yQXR0cmlidXRlOk5TQWNjZXNz
aWJpbGl0eURlc2NyaXB0aW9uQXR0cmlidXRlXTsKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBw
b3AKKworICAgIHNlbGYudmlldyA9IGluc2VydExpc3RDb250cm9sOworCisgICAgcmV0dXJuIHNl
bGY7Cit9CisKKy0gKHZvaWQpX3NlbGVjdExpc3Q6KGlkKXNlbmRlcgoreworICAgIE5TVmlldyAq
ZG9jdW1lbnRWaWV3ID0gW1tbX3dlYlZpZXcgX3NlbGVjdGVkT3JNYWluRnJhbWVdIGZyYW1lVmll
d10gZG9jdW1lbnRWaWV3XTsKKyAgICBpZiAoIVtkb2N1bWVudFZpZXcgaXNLaW5kT2ZDbGFzczpb
V2ViSFRNTFZpZXcgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViSFRNTFZpZXcg
KndlYkhUTUxWaWV3ID0gKFdlYkhUTUxWaWV3ICopZG9jdW1lbnRWaWV3OworICAgIE5TU2VnbWVu
dGVkQ29udHJvbCAqaW5zZXJ0TGlzdENvbnRyb2wgPSAoTlNTZWdtZW50ZWRDb250cm9sICopc2Vs
Zi52aWV3OworICAgIGlmIChpbnNlcnRMaXN0Q29udHJvbC5zZWxlY3RlZFNlZ21lbnQgPT0gbm9M
aXN0U2VnbWVudCkgeworICAgICAgICAvLyBUaGVyZSBpcyBubyAicmVtb3ZlIGxpc3QiIGVkaXQg
Y29tbWFuZCwgYnV0IF9pbnNlcnRPcmRlcmVkTGlzdCBhbmQgX2luc2VydFVub3JkZXJlZExpc3Qg
Ym90aAorICAgICAgICAvLyBiZWhhdmUgYXMgdG9nZ2xlcywgc28gd2UgY2FuIGludm9rZSB0aGUg
YXBwcm9wcmlhdGUgbWV0aG9kIGRlcGVuZGluZyBvbiBvdXIgX2N1cnJlbnRMaXN0VHlwZQorICAg
ICAgICAvLyB0byByZW1vdmUgYW4gZXhpc3RpbmcgbGlzdC4gV2UgZG9uJ3QgaGF2ZSB0byBkbyBh
bnl0aGluZyBpZiBfY3VycmVudExpc3RUeXBlIGlzIFdlYkxpc3RUeXBlOjpOb25lLgorICAgICAg
ICBpZiAoX2N1cnJlbnRMaXN0VHlwZSA9PSBXZWJMaXN0VHlwZTo6T3JkZXJlZCkKKyAgICAgICAg
ICAgIFt3ZWJIVE1MVmlldyBfaW5zZXJ0T3JkZXJlZExpc3RdOworICAgICAgICBlbHNlIGlmIChf
Y3VycmVudExpc3RUeXBlID09IFdlYkxpc3RUeXBlOjpVbm9yZGVyZWQpCisgICAgICAgICAgICBb
d2ViSFRNTFZpZXcgX2luc2VydFVub3JkZXJlZExpc3RdOworICAgIH0gZWxzZSBpZiAoaW5zZXJ0
TGlzdENvbnRyb2wuc2VsZWN0ZWRTZWdtZW50ID09IHVub3JkZXJlZExpc3RTZWdtZW50KQorICAg
ICAgICBbd2ViSFRNTFZpZXcgX2luc2VydFVub3JkZXJlZExpc3RdOworICAgIGVsc2UgaWYgKGlu
c2VydExpc3RDb250cm9sLnNlbGVjdGVkU2VnbWVudCA9PSBvcmRlcmVkTGlzdFNlZ21lbnQpCisg
ICAgICAgIFt3ZWJIVE1MVmlldyBfaW5zZXJ0T3JkZXJlZExpc3RdOworCisgICAgW193ZWJWaWV3
IF9kaXNtaXNzVGV4dFRvdWNoQmFyUG9wb3Zlckl0ZW1XaXRoSWRlbnRpZmllcjpOU1RvdWNoQmFy
SXRlbUlkZW50aWZpZXJUZXh0TGlzdF07Cit9CisKKy0gKHZvaWQpc2V0Q3VycmVudExpc3RUeXBl
OihXZWJMaXN0VHlwZSlsaXN0VHlwZQoreworICAgIE5TU2VnbWVudGVkQ29udHJvbCAqaW5zZXJ0
TGlzdENvbnRyb2wgPSAoTlNTZWdtZW50ZWRDb250cm9sICopc2VsZi52aWV3OworICAgIHN3aXRj
aCAobGlzdFR5cGUpIHsKKyAgICBjYXNlIFdlYkxpc3RUeXBlOjpOb25lOgorICAgICAgICBbaW5z
ZXJ0TGlzdENvbnRyb2wgc2V0U2VsZWN0ZWQ6WUVTIGZvclNlZ21lbnQ6bm9MaXN0U2VnbWVudF07
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViTGlzdFR5cGU6Ok9yZGVyZWQ6CisgICAgICAg
IFtpbnNlcnRMaXN0Q29udHJvbCBzZXRTZWxlY3RlZDpZRVMgZm9yU2VnbWVudDpvcmRlcmVkTGlz
dFNlZ21lbnRdOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYkxpc3RUeXBlOjpVbm9yZGVy
ZWQ6CisgICAgICAgIFtpbnNlcnRMaXN0Q29udHJvbCBzZXRTZWxlY3RlZDpZRVMgZm9yU2VnbWVu
dDp1bm9yZGVyZWRMaXN0U2VnbWVudF07CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIF9j
dXJyZW50TGlzdFR5cGUgPSBsaXN0VHlwZTsKK30KKworQGVuZAorCitAaW50ZXJmYWNlIFdlYlRl
eHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIDogTlNUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciB7
CisgICAgQk9PTCBfdGV4dElzQm9sZDsKKyAgICBCT09MIF90ZXh0SXNJdGFsaWM7CisgICAgQk9P
TCBfdGV4dElzVW5kZXJsaW5lZDsKKyAgICBOU1RleHRBbGlnbm1lbnQgX2N1cnJlbnRUZXh0QWxp
Z25tZW50OworICAgIFJldGFpblB0cjxOU0NvbG9yPiBfdGV4dENvbG9yOworICAgIFJldGFpblB0
cjxfV2ViVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyPiBfd2ViVGV4dExpc3RUb3VjaEJh
clZpZXdDb250cm9sbGVyOworCitAcHJpdmF0ZQorICAgIFdlYlZpZXcgKl93ZWJWaWV3OworfQor
CitAcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCB0ZXh0SXNCb2xkOworQHByb3BlcnR5IChub25h
dG9taWMpIEJPT0wgdGV4dElzSXRhbGljOworQHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgdGV4
dElzVW5kZXJsaW5lZDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBOU1RleHRBbGlnbm1lbnQgY3Vy
cmVudFRleHRBbGlnbm1lbnQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCByZWFkd3Jp
dGUpIE5TQ29sb3IgKnRleHRDb2xvcjsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViVmll
dzooV2ViVmlldyAqKXdlYlZpZXc7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJUZXh0VG91
Y2hCYXJJdGVtQ29udHJvbGxlcgorCitAc3ludGhlc2l6ZSB0ZXh0SXNCb2xkPV90ZXh0SXNCb2xk
OworQHN5bnRoZXNpemUgdGV4dElzSXRhbGljPV90ZXh0SXNJdGFsaWM7CitAc3ludGhlc2l6ZSB0
ZXh0SXNVbmRlcmxpbmVkPV90ZXh0SXNVbmRlcmxpbmVkOworQHN5bnRoZXNpemUgY3VycmVudFRl
eHRBbGlnbm1lbnQ9X2N1cnJlbnRUZXh0QWxpZ25tZW50OworCistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhXZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldworeworICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX3dlYlZpZXcgPSB3ZWJWaWV3
OworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKE5TVG91Y2hCYXJJdGVtICopaXRlbUZvcklk
ZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcgoreworICAgIE5TVG91Y2hCYXJJdGVtICpp
dGVtID0gW3N1cGVyIGl0ZW1Gb3JJZGVudGlmaWVyOmlkZW50aWZpZXJdOworICAgIEJPT0wgaXNU
ZXh0Rm9ybWF0SXRlbSA9IFtpZGVudGlmaWVyIGlzRXF1YWxUb1N0cmluZzpOU1RvdWNoQmFySXRl
bUlkZW50aWZpZXJUZXh0Rm9ybWF0XTsKKworICAgIGlmIChpc1RleHRGb3JtYXRJdGVtIHx8IFtp
ZGVudGlmaWVyIGlzRXF1YWxUb1N0cmluZzpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0U3R5
bGVdKQorICAgICAgICBzZWxmLnRleHRTdHlsZS5hY3Rpb24gPSBAc2VsZWN0b3IoX3dlYkNoYW5n
ZVRleHRTdHlsZTopOworCisgICAgaWYgKGlzVGV4dEZvcm1hdEl0ZW0gfHwgW2lkZW50aWZpZXIg
aXNFcXVhbFRvU3RyaW5nOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRBbGlnbm1lbnRdKQor
ICAgICAgICBzZWxmLnRleHRBbGlnbm1lbnRzLmFjdGlvbiA9IEBzZWxlY3Rvcihfd2ViQ2hhbmdl
VGV4dEFsaWdubWVudDopOworCisgICAgTlNDb2xvclBpY2tlclRvdWNoQmFySXRlbSAqY29sb3JQ
aWNrZXJJdGVtID0gbmlsOworICAgIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9TdHJpbmc6TlNU
b3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dENvbG9yUGlja2VyXSAmJiBbaXRlbSBpc0tpbmRPZkNs
YXNzOltOU0NvbG9yUGlja2VyVG91Y2hCYXJJdGVtIGNsYXNzXV0pCisgICAgICAgIGNvbG9yUGlj
a2VySXRlbSA9IChOU0NvbG9yUGlja2VyVG91Y2hCYXJJdGVtICopaXRlbTsKKyAgICBpZiAoaXNU
ZXh0Rm9ybWF0SXRlbSkKKyAgICAgICAgY29sb3JQaWNrZXJJdGVtID0gc2VsZi5jb2xvclBpY2tl
ckl0ZW07CisgICAgaWYgKGNvbG9yUGlja2VySXRlbSkgeworICAgICAgICBjb2xvclBpY2tlckl0
ZW0udGFyZ2V0ID0gc2VsZjsKKyAgICAgICAgY29sb3JQaWNrZXJJdGVtLmFjdGlvbiA9IEBzZWxl
Y3Rvcihfd2ViQ2hhbmdlQ29sb3I6KTsKKyAgICAgICAgY29sb3JQaWNrZXJJdGVtLnNob3dzQWxw
aGEgPSBOTzsKKyAgICB9CisKKyAgICByZXR1cm4gaXRlbTsKK30KKworLSAoX1dlYlRleHRMaXN0
VG91Y2hCYXJWaWV3Q29udHJvbGxlciAqKXdlYlRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxl
cgoreworICAgIHJldHVybiAoX1dlYlRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciAqKVtz
ZWxmIHRleHRMaXN0Vmlld0NvbnRyb2xsZXJdOworfQorCistICh2b2lkKXNldFRleHRJc0JvbGQ6
KEJPT0wpYm9sZAoreworICAgIF90ZXh0SXNCb2xkID0gYm9sZDsKKyAgICBpZiAoW3NlbGYudGV4
dFN0eWxlIGlzU2VsZWN0ZWRGb3JTZWdtZW50OjBdICE9IF90ZXh0SXNCb2xkKQorICAgICAgICBb
c2VsZi50ZXh0U3R5bGUgc2V0U2VsZWN0ZWQ6X3RleHRJc0JvbGQgZm9yU2VnbWVudDowXTsKK30K
KworLSAodm9pZClzZXRUZXh0SXNJdGFsaWM6KEJPT0wpaXRhbGljCit7CisgICAgX3RleHRJc0l0
YWxpYyA9IGl0YWxpYzsKKyAgICBpZiAoW3NlbGYudGV4dFN0eWxlIGlzU2VsZWN0ZWRGb3JTZWdt
ZW50OjFdICE9IF90ZXh0SXNJdGFsaWMpCisgICAgICAgIFtzZWxmLnRleHRTdHlsZSBzZXRTZWxl
Y3RlZDpfdGV4dElzSXRhbGljIGZvclNlZ21lbnQ6MV07Cit9CisKKy0gKHZvaWQpc2V0VGV4dElz
VW5kZXJsaW5lZDooQk9PTCl1bmRlcmxpbmVkCit7CisgICAgX3RleHRJc1VuZGVybGluZWQgPSB1
bmRlcmxpbmVkOworICAgIGlmIChbc2VsZi50ZXh0U3R5bGUgaXNTZWxlY3RlZEZvclNlZ21lbnQ6
Ml0gIT0gX3RleHRJc1VuZGVybGluZWQpCisgICAgICAgIFtzZWxmLnRleHRTdHlsZSBzZXRTZWxl
Y3RlZDpfdGV4dElzVW5kZXJsaW5lZCBmb3JTZWdtZW50OjJdOworfQorCistICh2b2lkKV93ZWJD
aGFuZ2VUZXh0U3R5bGU6KGlkKXNlbmRlcgoreworICAgIGlmIChbc2VsZi50ZXh0U3R5bGUgaXNT
ZWxlY3RlZEZvclNlZ21lbnQ6MF0gIT0gX3RleHRJc0JvbGQpIHsKKyAgICAgICAgX3RleHRJc0Jv
bGQgPSAhX3RleHRJc0JvbGQ7CisgICAgICAgIFtfd2ViVmlldyBfZXhlY3V0ZUNvcmVDb21tYW5k
QnlOYW1lOkAiVG9nZ2xlQm9sZCIgdmFsdWU6QCIiXTsKKyAgICB9CisKKyAgICBpZiAoW3NlbGYu
dGV4dFN0eWxlIGlzU2VsZWN0ZWRGb3JTZWdtZW50OjFdICE9IF90ZXh0SXNJdGFsaWMpIHsKKyAg
ICAgICAgX3RleHRJc0l0YWxpYyA9ICFfdGV4dElzSXRhbGljOworICAgICAgICBbX3dlYlZpZXcg
X2V4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZTpAIlRvZ2dsZUl0YWxpYyIgdmFsdWU6QCIiXTsKKyAg
ICB9CisKKyAgICBpZiAoW3NlbGYudGV4dFN0eWxlIGlzU2VsZWN0ZWRGb3JTZWdtZW50OjJdICE9
IF90ZXh0SXNVbmRlcmxpbmVkKSB7CisgICAgICAgIF90ZXh0SXNVbmRlcmxpbmVkID0gIV90ZXh0
SXNVbmRlcmxpbmVkOworICAgICAgICBbX3dlYlZpZXcgX2V4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFt
ZTpAIlRvZ2dsZVVuZGVybGluZSIgdmFsdWU6QCIiXTsKKyAgICB9Cit9CisKKy0gKHZvaWQpc2V0
Q3VycmVudFRleHRBbGlnbm1lbnQ6KE5TVGV4dEFsaWdubWVudClhbGlnbm1lbnQKK3sKKyAgICBf
Y3VycmVudFRleHRBbGlnbm1lbnQgPSBhbGlnbm1lbnQ7CisgICAgW3NlbGYudGV4dEFsaWdubWVu
dHMgc2VsZWN0U2VnbWVudFdpdGhUYWc6X2N1cnJlbnRUZXh0QWxpZ25tZW50XTsKK30KKworLSAo
dm9pZClfd2ViQ2hhbmdlVGV4dEFsaWdubWVudDooaWQpc2VuZGVyCit7CisgICAgTlNUZXh0QWxp
Z25tZW50IGFsaWdubWVudCA9IChOU1RleHRBbGlnbm1lbnQpW3NlbGYudGV4dEFsaWdubWVudHMu
Y2VsbCB0YWdGb3JTZWdtZW50OltzZWxmLnRleHRBbGlnbm1lbnRzIHNlbGVjdGVkU2VnbWVudF1d
OworICAgIHN3aXRjaCAoYWxpZ25tZW50KSB7CisgICAgY2FzZSBOU1RleHRBbGlnbm1lbnRMZWZ0
OiB7CisgICAgICAgIF9jdXJyZW50VGV4dEFsaWdubWVudCA9IE5TVGV4dEFsaWdubWVudExlZnQ7
CisgICAgICAgIFtfd2ViVmlldyBhbGlnbkxlZnQ6c2VuZGVyXTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgTlNUZXh0QWxpZ25tZW50UmlnaHQ6IHsKKyAgICAgICAgX2N1cnJlbnRU
ZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25tZW50UmlnaHQ7CisgICAgICAgIFtfd2ViVmlldyBh
bGlnblJpZ2h0OnNlbmRlcl07CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIE5TVGV4
dEFsaWdubWVudENlbnRlcjogeworICAgICAgICBfY3VycmVudFRleHRBbGlnbm1lbnQgPSBOU1Rl
eHRBbGlnbm1lbnRDZW50ZXI7CisgICAgICAgIFtfd2ViVmlldyBhbGlnbkNlbnRlcjpzZW5kZXJd
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBOU1RleHRBbGlnbm1lbnRKdXN0aWZp
ZWQ6IHsKKyAgICAgICAgX2N1cnJlbnRUZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25tZW50SnVz
dGlmaWVkOworICAgICAgICBbX3dlYlZpZXcgYWxpZ25KdXN0aWZpZWQ6c2VuZGVyXTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIFtfd2ViVmlldyBfZGlzbWlzc1RleHRUb3VjaEJhclBvcG92ZXJJdGVtV2l0aElkZW50aWZp
ZXI6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEFsaWdubWVudF07Cit9CisKKy0gKE5TQ29s
b3IgKil0ZXh0Q29sb3IKK3sKKyAgICByZXR1cm4gX3RleHRDb2xvci5nZXQoKTsKK30KKworLSAo
dm9pZClzZXRUZXh0Q29sb3I6KE5TQ29sb3IgKiljb2xvcgoreworICAgIF90ZXh0Q29sb3IgPSBj
b2xvcjsKKyAgICBzZWxmLmNvbG9yUGlja2VySXRlbS5jb2xvciA9IF90ZXh0Q29sb3IuZ2V0KCk7
Cit9CisKKy0gKHZvaWQpX3dlYkNoYW5nZUNvbG9yOihpZClzZW5kZXIKK3sKKyAgICBfdGV4dENv
bG9yID0gc2VsZi5jb2xvclBpY2tlckl0ZW0uY29sb3I7CisgICAgW193ZWJWaWV3IF9leGVjdXRl
Q29yZUNvbW1hbmRCeU5hbWU6QCJGb3JlQ29sb3IiIHZhbHVlOiBXZWJDb3JlOjpjb2xvckZyb21O
U0NvbG9yKF90ZXh0Q29sb3IuZ2V0KCkpLnNlcmlhbGl6ZWQoKV07Cit9CisKKy0gKE5TVmlld0Nv
bnRyb2xsZXIgKil0ZXh0TGlzdFZpZXdDb250cm9sbGVyCit7CisgICAgaWYgKCFfd2ViVGV4dExp
c3RUb3VjaEJhclZpZXdDb250cm9sbGVyKQorICAgICAgICBfd2ViVGV4dExpc3RUb3VjaEJhclZp
ZXdDb250cm9sbGVyID0gYWRvcHROUyhbW19XZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xs
ZXIgYWxsb2NdIGluaXRXaXRoV2ViVmlldzpfd2ViVmlld10pOworICAgIHJldHVybiBfd2ViVGV4
dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyLmdldCgpOworfQorCitAZW5kCisKKyNlbmRpZiAv
LyBIQVZFKFRPVUNIX0JBUikKKwogQGltcGxlbWVudGF0aW9uIFdlYlZpZXcgKEFsbFdlYlZpZXdz
KQogCiBzdGF0aWMgQ0ZTZXRDYWxsQmFja3MgTm9uUmV0YWluaW5nU2V0Q2FsbGJhY2tzID0gewpA
QCAtOTcwLDcgKzEyNTksNyBAQCAtICh2b2lkKV9jb21tb25Jbml0aWFsaXphdGlvbldpdGhGcmFt
ZU5hCiAgICAgfQogI2VuZGlmCiAKLSAgICBbc2VsZiB1cGRhdGVXZWJWaWV3QWRkaXRpb25zXTsK
KyAgICBbc2VsZiB1cGRhdGVUb3VjaEJhcl07CiAKICNpZiAhUExBVEZPUk0oSU9TKQogICAgIHN0
YXRpYyBib29sIGRpZE9uZVRpbWVJbml0aWFsaXphdGlvbiA9IGZhbHNlOwpAQCAtNDY5Miw2ICs0
OTgxLDQ1IEBAIC0gKHZvaWQpX3NldEZvbnRGYWxsYmFja1ByZWZlcnNQaWN0b2dyYXAKICAgICAg
ICAgX3ByaXZhdGUtPnBhZ2UtPnNldHRpbmdzKCkuc2V0Rm9udEZhbGxiYWNrUHJlZmVyc1BpY3Rv
Z3JhcGhzKGZsYWcpOwogfQogCisjaWYgSEFWRShUT1VDSF9CQVIpCisKKy0gKHZvaWQpc2hvd0Nh
bmRpZGF0ZXM6KE5TQXJyYXk8TlNUZXh0Q2hlY2tpbmdSZXN1bHQgKj4gKiljYW5kaWRhdGVzIGZv
clN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgaW5SZWN0OihOU1JlY3QpcmVjdE9mVHlwZWRTdHJp
bmcgZm9yU2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlyYW5nZSB2aWV3OihOU1ZpZXcgKil2aWV3IGNv
bXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU1RleHRDaGVja2luZ1Jlc3VsdCAqYWNjZXB0ZWRD
YW5kaWRhdGUpKWNvbXBsZXRpb25CbG9jaworeworICAgIFtzZWxmLmNhbmRpZGF0ZUxpc3Qgc2V0
Q2FuZGlkYXRlczpjYW5kaWRhdGVzIGZvclNlbGVjdGVkUmFuZ2U6cmFuZ2UgaW5TdHJpbmc6c3Ry
aW5nXTsKK30KKworLSAoQk9PTClzaG91bGRSZXF1ZXN0Q2FuZGlkYXRlcworeworICAgIEZyYW1l
KiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXSk7CisgICAgaWYg
KCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybiBOTzsKKworICAgIHJldHVybiAhY29yZUZyYW1l
LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpICYmIHNlbGYuY2Fu
ZGlkYXRlTGlzdC5jYW5kaWRhdGVMaXN0VmlzaWJsZTsKK30KKworLSAodm9pZClmb3JjZVJlcXVl
c3RDYW5kaWRhdGVzRm9yVGVzdGluZworeworICAgIF9wcml2YXRlLT5fY2FuQ3JlYXRlVG91Y2hC
YXJzID0gWUVTOworICAgIFtzZWxmIHVwZGF0ZVRvdWNoQmFyXTsKK30KKworI2Vsc2UKKworLSAo
dm9pZClzaG93Q2FuZGlkYXRlczooTlNBcnJheSAqKWNhbmRpZGF0ZXMgZm9yU3RyaW5nOihOU1N0
cmluZyAqKXN0cmluZyBpblJlY3Q6KE5TUmVjdClyZWN0T2ZUeXBlZFN0cmluZyBmb3JTZWxlY3Rl
ZFJhbmdlOihOU1JhbmdlKXJhbmdlIHZpZXc6KE5TVmlldyAqKXZpZXcgY29tcGxldGlvbkhhbmRs
ZXI6KHZvaWQgKF4pKE5TVGV4dENoZWNraW5nUmVzdWx0ICphY2NlcHRlZENhbmRpZGF0ZSkpY29t
cGxldGlvbkJsb2NrCit7Cit9CisKKy0gKHZvaWQpZm9yY2VSZXF1ZXN0Q2FuZGlkYXRlc0ZvclRl
c3RpbmcKK3sKK30KKworLSAoQk9PTClzaG91bGRSZXF1ZXN0Q2FuZGlkYXRlcworeworICAgIHJl
dHVybiBOTzsKK30KKworI2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFSKQorCiBAZW5kCiAKIEBpbXBs
ZW1lbnRhdGlvbiBfV2ViU2FmZUZvcndhcmRlcgpAQCAtNDgwNCw2ICs1MTMyLDExIEBAIC0gKE5T
TWV0aG9kU2lnbmF0dXJlICopbWV0aG9kU2lnbmF0dXJlRm8KIEBlbmQKICNlbmRpZgogCisjaWYg
SEFWRShUT1VDSF9CQVIpCitAaW50ZXJmYWNlIFdlYlZpZXcgKCkgPE5TQ2FuZGlkYXRlTGlzdFRv
dWNoQmFySXRlbURlbGVnYXRlLCBOU1RvdWNoQmFyRGVsZWdhdGUsIE5TVG91Y2hCYXJQcm92aWRl
cj4KK0BlbmQKKyNlbmRpZgorCiBAaW1wbGVtZW50YXRpb24gV2ViVmlldwogCiArICh2b2lkKWlu
aXRpYWxpemUKQEAgLTY0ODgsNiArNjgyMSw4NyBAQCAtIChOU1ZpZXcgKilwcmV2aW91c1ZhbGlk
S2V5VmlldwogICAgIHJldHVybiBbcHJldmlvdXNWaWV3IHByZXZpb3VzVmFsaWRLZXlWaWV3XTsK
IH0KIAorI2lmIEhBVkUoVE9VQ0hfQkFSKQorCitAZHluYW1pYyB0b3VjaEJhcjsKKworLSAoTlNU
b3VjaEJhciAqKW1ha2VUb3VjaEJhcgoreworICAgIGlmICghX3ByaXZhdGUtPl9jYW5DcmVhdGVU
b3VjaEJhcnMpIHsKKyAgICAgICAgX3ByaXZhdGUtPl9jYW5DcmVhdGVUb3VjaEJhcnMgPSBZRVM7
CisgICAgICAgIFtzZWxmIHVwZGF0ZVRvdWNoQmFyXTsKKyAgICB9CisgICAgcmV0dXJuIF9wcml2
YXRlLT5fY3VycmVudFRvdWNoQmFyLmdldCgpOworfQorCistIChOU1RvdWNoQmFySXRlbSAqKXRv
dWNoQmFyOihOU1RvdWNoQmFyICopdG91Y2hCYXIgbWFrZUl0ZW1Gb3JJZGVudGlmaWVyOihOU1N0
cmluZyAqKWlkZW50aWZpZXIKK3sKKyAgICBpZiAodG91Y2hCYXIgPT0gX3ByaXZhdGUtPl9yaWNo
VGV4dFRvdWNoQmFyIHx8IHRvdWNoQmFyID09IF9wcml2YXRlLT5fcGxhaW5UZXh0VG91Y2hCYXIp
CisgICAgICAgIHJldHVybiBbX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBp
dGVtRm9ySWRlbnRpZmllcjppZGVudGlmaWVyXTsKKworICAgIHJldHVybiBuaWw7Cit9CisKK3N0
YXRpYyBUZXh0Q2hlY2tpbmdSZXN1bHQgdGV4dENoZWNraW5nUmVzdWx0RnJvbU5TVGV4dENoZWNr
aW5nUmVzdWx0KE5TVGV4dENoZWNraW5nUmVzdWx0ICpuc1Jlc3VsdCkKK3sKKyAgICBXZWJDb3Jl
OjpUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OworCisgICAgc3dpdGNoIChbbnNSZXN1bHQgcmVz
dWx0VHlwZV0pIHsKKyAgICBjYXNlIE5TVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nOgorICAgICAg
ICByZXN1bHQudHlwZSA9IFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGVTcGVsbGluZzsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBOU1RleHRDaGVja2luZ1R5cGVSZXBsYWNlbWVudDoKKyAgICAg
ICAgcmVzdWx0LnR5cGUgPSBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlUmVwbGFjZW1lbnQ7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgTlNUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbjoKKyAg
ICAgICAgcmVzdWx0LnR5cGUgPSBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbjsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBXZWJD
b3JlOjpUZXh0Q2hlY2tpbmdUeXBlTm9uZTsKKyAgICB9CisKKyAgICBOU1JhbmdlIHJlc3VsdFJh
bmdlID0gbnNSZXN1bHQucmFuZ2U7CisgICAgcmVzdWx0LmxvY2F0aW9uID0gcmVzdWx0UmFuZ2Uu
bG9jYXRpb247CisgICAgcmVzdWx0Lmxlbmd0aCA9IHJlc3VsdFJhbmdlLmxlbmd0aDsKKyAgICBy
ZXN1bHQucmVwbGFjZW1lbnQgPSBuc1Jlc3VsdC5yZXBsYWNlbWVudFN0cmluZzsKKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKKy0gKHZvaWQpY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTooTlND
YW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtICopYW5JdGVtIGVuZFNlbGVjdGluZ0NhbmRpZGF0ZUF0
SW5kZXg6KE5TSW50ZWdlcilpbmRleAoreworICAgIGlmIChpbmRleCA9PSBOU05vdEZvdW5kKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYW5JdGVtICE9IHNlbGYuY2FuZGlkYXRlTGlzdCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgTlNBcnJheSAqY2FuZGlkYXRlcyA9IGFuSXRlbS5jYW5k
aWRhdGVzOworICAgIGlmICgoTlNVSW50ZWdlcilpbmRleCA+PSBjYW5kaWRhdGVzLmNvdW50KQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZCBjYW5kaWRhdGUgPSBjYW5kaWRhdGVzW2luZGV4XTsK
KyAgICBBU1NFUlQoW2NhbmRpZGF0ZSBpc0tpbmRPZkNsYXNzOltOU1RleHRDaGVja2luZ1Jlc3Vs
dCBjbGFzc11dKTsKKworICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShzZWxmLl9zZWxl
Y3RlZE9yTWFpbkZyYW1lKSkKKyAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+
aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGVXaXRoU29mdFNwYWNlcyh0ZXh0Q2hlY2tpbmdSZXN1bHRG
cm9tTlNUZXh0Q2hlY2tpbmdSZXN1bHQoKE5TVGV4dENoZWNraW5nUmVzdWx0ICopY2FuZGlkYXRl
KSk7Cit9CisKKy0gKHZvaWQpY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTooTlNDYW5kaWRhdGVM
aXN0VG91Y2hCYXJJdGVtICopYW5JdGVtIGNoYW5nZWRDYW5kaWRhdGVMaXN0VmlzaWJpbGl0eToo
Qk9PTClpc1Zpc2libGUKK3sKKyAgICBpZiAoYW5JdGVtICE9IHNlbGYuY2FuZGlkYXRlTGlzdCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGlzVmlzaWJsZSkgeworICAgICAgICBpZiAoRnJh
bWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVdKSkKKyAgICAg
ICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPnJlcXVlc3RDYW5kaWRhdGVzRm9y
U2VsZWN0aW9uKGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIH0KKwor
ICAgIFtzZWxmIHVwZGF0ZVRvdWNoQmFyXTsKK30KKworI2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFS
KQorCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJWaWV3IChXZWJJQkFjdGlvbnMpCkBAIC02
NzQ2LDQ4ICs3MTYwLDYgQEAgLSAoQk9PTCl2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtOihpZCA8
TgogCiBAZW5kCiAKLSNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5f
UkVRVUlSRUQgPj0gMTAxMjAwICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0jaW1wb3J0IDxX
ZWJLaXRBZGRpdGlvbnMvV2ViVmlld0FkZGl0aW9ucy5tbT4KLSNlbHNlCi1AaW1wbGVtZW50YXRp
b24gV2ViVmlldyAoV2ViVXBkYXRlV2ViVmlld0FkZGl0aW9ucykKLQotLSAodm9pZCl1cGRhdGVX
ZWJWaWV3QWRkaXRpb25zCi17Ci19Ci0KLS0gKHZvaWQpcHJlcGFyZUZvck1vdXNlRG93bgotewot
fQotCi0tICh2b2lkKXByZXBhcmVGb3JNb3VzZVVwCi17Ci19Ci0KLS0gKHZvaWQpc2hvd0NhbmRp
ZGF0ZXM6KE5TQXJyYXkgKiljYW5kaWRhdGVzIGZvclN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcg
aW5SZWN0OihOU1JlY3QpcmVjdE9mVHlwZWRTdHJpbmcgZm9yU2VsZWN0ZWRSYW5nZTooTlNSYW5n
ZSlyYW5nZSB2aWV3OihOU1ZpZXcgKil2aWV3IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShO
U1RleHRDaGVja2luZ1Jlc3VsdCAqYWNjZXB0ZWRDYW5kaWRhdGUpKWNvbXBsZXRpb25CbG9jawot
ewotfQotCi0tICh2b2lkKWZvcmNlUmVxdWVzdENhbmRpZGF0ZXNGb3JUZXN0aW5nCi17Ci19Ci0K
LS0gKEJPT0wpc2hvdWxkUmVxdWVzdENhbmRpZGF0ZXMKLXsKLSAgICByZXR1cm4gTk87Ci19Ci0K
LS0gKHZvaWQpd2ViVmlld0FkZGl0aW9uc1dpbGxEZXN0cm95VmlldwotewotfQotCi0tIChpZClj
YW5kaWRhdGVMaXN0Ci17Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotQGVuZAotI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAg
JiYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLQogQGltcGxlbWVudGF0aW9uIFdlYlZpZXcgKFdl
YlBlbmRpbmdQdWJsaWMpCiAKIC0gKHZvaWQpc2NoZWR1bGVJblJ1bkxvb3A6KE5TUnVuTG9vcCAq
KXJ1bkxvb3AgZm9yTW9kZTooTlNTdHJpbmcgKiltb2RlCkBAIC04NjU2LDcgKzkwMjgsNyBAQCAt
ICh2b2lkKV9zZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyRm9yCiAgICAgaWYgKCFfcHJpdmF0
ZS0+cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQogICAgICAgICBfcHJpdmF0ZS0+cGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlID0gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpjcmVhdGUo
Kl9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCk7CiAKLSAgICBbc2VsZiB1cGRhdGVXZWJW
aWV3QWRkaXRpb25zXTsKKyAgICBbc2VsZiB1cGRhdGVUb3VjaEJhcl07CiB9CiAKIC0gKHZvaWQp
X2NsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIKQEAgLTg2NjksNyArOTA0MSw3IEBAIC0gKHZv
aWQpX2NsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIKIAogICAgIF9wcml2YXRlLT5wbGF5YmFj
a1Nlc3Npb25Nb2RlbCA9IG51bGxwdHI7CiAgICAgX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZSA9IG51bGxwdHI7Ci0gICAgW3NlbGYgdXBkYXRlV2ViVmlld0FkZGl0aW9uc107Cisg
ICAgW3NlbGYgdXBkYXRlVG91Y2hCYXJdOwogfQogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykgJiYg
RU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQogI2VuZGlmIC8vIEVOQUJMRShWSURFTykK
QEAgLTg4OTgsNiArOTI3MCwzNDIgQEAgLSAodm9pZClfc2V0TW9ja01lZGlhUGxheWJhY2tUYXJn
ZXRQaWNrZQogfQogI2VuZGlmCiAKKyNpZiBIQVZFKFRPVUNIX0JBUikKKy0gKHZvaWQpX2Rpc21p
c3NUZXh0VG91Y2hCYXJQb3BvdmVySXRlbVdpdGhJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50
aWZpZXIKK3sKKyAgICBOU1RvdWNoQmFySXRlbSAqZm91bmRJdGVtID0gbmlsOworICAgIGZvciAo
TlNUb3VjaEJhckl0ZW0gKml0ZW0gaW4gc2VsZi50ZXh0VG91Y2hCYXIuaXRlbXMpIHsKKyAgICAg
ICAgaWYgKFtpdGVtLmlkZW50aWZpZXIgaXNFcXVhbFRvU3RyaW5nOmlkZW50aWZpZXJdKSB7Cisg
ICAgICAgICAgICBmb3VuZEl0ZW0gPSBpdGVtOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoW2l0ZW0uaWRlbnRpZmllciBpc0VxdWFsVG9TdHJpbmc6TlNUb3Vj
aEJhckl0ZW1JZGVudGlmaWVyVGV4dEZvcm1hdF0pIHsKKyAgICAgICAgICAgIGZvciAoTlNUb3Vj
aEJhckl0ZW0gKmNoaWxkSXRlbSBpbiBbKE5TR3JvdXBUb3VjaEJhckl0ZW0gKilpdGVtIGdyb3Vw
VG91Y2hCYXJdLml0ZW1zKSB7CisgICAgICAgICAgICAgICAgaWYgKFtjaGlsZEl0ZW0uaWRlbnRp
ZmllciBpc0VxdWFsVG9TdHJpbmc6aWRlbnRpZmllcl0pIHsKKyAgICAgICAgICAgICAgICAgICAg
Zm91bmRJdGVtID0gY2hpbGRJdGVtOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmIChbZm91bmRJdGVtIGlzS2luZE9mQ2xhc3M6W05TUG9wb3ZlclRv
dWNoQmFySXRlbSBjbGFzc11dKQorICAgICAgICBbKE5TUG9wb3ZlclRvdWNoQmFySXRlbSAqKWZv
dW5kSXRlbSBkaXNtaXNzUG9wb3ZlcjpuaWxdOworfQorCistIChOU0FycmF5PE5TU3RyaW5nICo+
ICopX3RleHRUb3VjaEJhckN1c3RvbWl6YXRpb25BbGxvd2VkSWRlbnRpZmllcnMKK3sKKyAgICBy
ZXR1cm4gQFsgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyQ2hhcmFjdGVyUGlja2VyLCBOU1RvdWNo
QmFySXRlbUlkZW50aWZpZXJUZXh0Q29sb3JQaWNrZXIsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmll
clRleHRTdHlsZSwgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEFsaWdubWVudCwgTlNUb3Vj
aEJhckl0ZW1JZGVudGlmaWVyVGV4dExpc3QsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckZsZXhp
YmxlU3BhY2UgXTsKK30KKworLSAoTlNBcnJheTxOU1N0cmluZyAqPiAqKV9wbGFpblRleHRUb3Vj
aEJhckN1c3RvbWl6YXRpb25EZWZhdWx0SXRlbUlkZW50aWZpZXJzCit7CisgICAgcmV0dXJuIEBb
IE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckNoYXJhY3RlclBpY2tlciwgTlNUb3VjaEJhckl0ZW1J
ZGVudGlmaWVyQ2FuZGlkYXRlTGlzdCBdOworfQorCistIChOU0FycmF5PE5TU3RyaW5nICo+ICop
X3JpY2hUZXh0VG91Y2hCYXJDdXN0b21pemF0aW9uRGVmYXVsdEl0ZW1JZGVudGlmaWVycworewor
ICAgIHJldHVybiBAWyBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJDaGFyYWN0ZXJQaWNrZXIsIE5T
VG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRGb3JtYXQsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmll
ckNhbmRpZGF0ZUxpc3QgXTsKK30KKworLSAodm9pZCl0b3VjaEJhckRpZEV4aXRDdXN0b21pemF0
aW9uOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIF9wcml2YXRlLT5faXND
dXN0b21pemluZ1RvdWNoQmFyID0gTk87CisgICAgW3NlbGYgdXBkYXRlVG91Y2hCYXJdOworfQor
CistICh2b2lkKXRvdWNoQmFyV2lsbEVudGVyQ3VzdG9taXphdGlvbjooTlNOb3RpZmljYXRpb24g
Kilub3RpZmljYXRpb24KK3sKKyAgICBfcHJpdmF0ZS0+X2lzQ3VzdG9taXppbmdUb3VjaEJhciA9
IFlFUzsKK30KKworLSAodm9pZClkaWRDaGFuZ2VBdXRvbWF0aWNUZXh0Q29tcGxldGlvbjooTlNO
b3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBpZiAoX3ByaXZhdGUtPl9yaWNoVGV4
dFRvdWNoQmFyKQorICAgICAgICBbc2VsZiBzZXRVcFRleHRUb3VjaEJhcjpfcHJpdmF0ZS0+X3Jp
Y2hUZXh0VG91Y2hCYXIuZ2V0KCldOworCisgICAgaWYgKF9wcml2YXRlLT5fcGxhaW5UZXh0VG91
Y2hCYXIpCisgICAgICAgIFtzZWxmIHNldFVwVGV4dFRvdWNoQmFyOl9wcml2YXRlLT5fcGxhaW5U
ZXh0VG91Y2hCYXIuZ2V0KCldOworCisgICAgW3NlbGYgdXBkYXRlVG91Y2hCYXJdOworfQorCist
ICh2b2lkKXNldFVwVGV4dFRvdWNoQmFyOihOU1RvdWNoQmFyICopdGV4dFRvdWNoQmFyCit7Cisg
ICAgQk9PTCBpc1JpY2hUZXh0VG91Y2hCYXIgPSB0ZXh0VG91Y2hCYXIgPT0gX3ByaXZhdGUtPl9y
aWNoVGV4dFRvdWNoQmFyOworICAgIFt0ZXh0VG91Y2hCYXIgc2V0RGVsZWdhdGU6c2VsZl07Cisg
ICAgW3RleHRUb3VjaEJhciBzZXREZWZhdWx0SXRlbXM6W05TTXV0YWJsZVNldCBzZXRXaXRoT2Jq
ZWN0czppc1JpY2hUZXh0VG91Y2hCYXIgPyBfcHJpdmF0ZS0+X3JpY2hUZXh0Q2FuZGlkYXRlTGlz
dFRvdWNoQmFySXRlbS5nZXQoKSA6IF9wcml2YXRlLT5fcGxhaW5UZXh0Q2FuZGlkYXRlTGlzdFRv
dWNoQmFySXRlbS5nZXQoKSwgbmlsXV07CisgICAgW3RleHRUb3VjaEJhciBzZXRDdXN0b21pemF0
aW9uQWxsb3dlZEl0ZW1JZGVudGlmaWVyczpbc2VsZiBfdGV4dFRvdWNoQmFyQ3VzdG9taXphdGlv
bkFsbG93ZWRJZGVudGlmaWVyc11dOworCisgICAgTlNBcnJheTxOU1N0cmluZyAqPiAqZGVmYXVs
dElkZW50aWZpZXJzID0gaXNSaWNoVGV4dFRvdWNoQmFyID8gW3NlbGYgX3JpY2hUZXh0VG91Y2hC
YXJDdXN0b21pemF0aW9uRGVmYXVsdEl0ZW1JZGVudGlmaWVyc10gOiBbc2VsZiBfcGxhaW5UZXh0
VG91Y2hCYXJDdXN0b21pemF0aW9uRGVmYXVsdEl0ZW1JZGVudGlmaWVyc107CisgICAgW3RleHRU
b3VjaEJhciBzZXRDdXN0b21pemF0aW9uRGVmYXVsdEl0ZW1JZGVudGlmaWVyczpkZWZhdWx0SWRl
bnRpZmllcnNdOworCisgICAgaWYgKE5TR3JvdXBUb3VjaEJhckl0ZW0gKnRleHRGb3JtYXRJdGVt
ID0gKE5TR3JvdXBUb3VjaEJhckl0ZW0gKilbdGV4dFRvdWNoQmFyIGl0ZW1Gb3JJZGVudGlmaWVy
Ok5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRGb3JtYXRdKQorICAgICAgICB0ZXh0Rm9ybWF0
SXRlbS5ncm91cFRvdWNoQmFyLmN1c3RvbWl6YXRpb25JZGVudGlmaWVyID0gQCJXZWJUZXh0Rm9y
bWF0VG91Y2hCYXIiOworfQorCistIChCT09MKV9pc1JpY2hseUVkaXRhYmxlCit7CisgICAgTlNW
aWV3ICpkb2N1bWVudFZpZXcgPSBzZWxmLl9zZWxlY3RlZE9yTWFpbkZyYW1lLmZyYW1lVmlldy5k
b2N1bWVudFZpZXc7CisgICAgaWYgKCFbZG9jdW1lbnRWaWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhU
TUxWaWV3IGNsYXNzXV0pCisgICAgICAgIHJldHVybiBOTzsKKworICAgIFdlYkhUTUxWaWV3ICp3
ZWJIVE1MVmlldyA9IChXZWJIVE1MVmlldyAqKWRvY3VtZW50VmlldzsKKyAgICByZXR1cm4gd2Vi
SFRNTFZpZXcuX2lzRWRpdGFibGUgJiYgd2ViSFRNTFZpZXcuX2NhbkVkaXRSaWNobHk7Cit9CisK
Ky0gKE5TVG91Y2hCYXIgKil0ZXh0VG91Y2hCYXIKK3sKKyAgICBpZiAoc2VsZi5faXNSaWNobHlF
ZGl0YWJsZSkKKyAgICAgICAgcmV0dXJuIF9wcml2YXRlLT5fcmljaFRleHRUb3VjaEJhci5nZXQo
KTsKKworICAgIHJldHVybiBfcHJpdmF0ZS0+X3BsYWluVGV4dFRvdWNoQmFyLmdldCgpOworfQor
CistICh2b2lkKXVwZGF0ZVRleHRUb3VjaEJhcgoreworICAgIGlmIChfcHJpdmF0ZS0+X2lzRGVm
ZXJyaW5nVGV4dFRvdWNoQmFyVXBkYXRlcykgeworICAgICAgICBfcHJpdmF0ZS0+X25lZWRzRGVm
ZXJyZWRUZXh0VG91Y2hCYXJVcGRhdGUgPSBZRVM7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBOU1ZpZXcgKmRvY3VtZW50VmlldyA9IFtbW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVd
IGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsKKyAgICBpZiAoIVtkb2N1bWVudFZpZXcgaXNLaW5k
T2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IFdlYkhUTUxWaWV3ICp3ZWJIVE1MVmlldyA9IChXZWJIVE1MVmlldyAqKWRvY3VtZW50VmlldzsK
KyAgICBpZiAoIVt3ZWJIVE1MVmlldyBfaXNFZGl0YWJsZV0pCisgICAgICAgIHJldHVybjsKKwor
ICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXSk7
CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChfcHJpdmF0
ZS0+X2lzVXBkYXRpbmdUZXh0VG91Y2hCYXIpCisgICAgICAgIHJldHVybjsKKworICAgIFRlbXBv
cmFyeUNoYW5nZTxCT09MPiBpc1VwZGF0aW5nVGV4dFRvdWNoQmFyKF9wcml2YXRlLT5faXNVcGRh
dGluZ1RleHRUb3VjaEJhciwgWUVTKTsKKworICAgIGlmICghX3ByaXZhdGUtPl90ZXh0VG91Y2hC
YXJJdGVtQ29udHJvbGxlcikKKyAgICAgICAgX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29u
dHJvbGxlciA9IGFkb3B0TlMoW1tXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBhbGxvY10g
aW5pdFdpdGhXZWJWaWV3OnNlbGZdKTsKKworICAgIGlmICghX3ByaXZhdGUtPl9zdGFydGVkTGlz
dGVuaW5nVG9DdXN0b21pemF0aW9uRXZlbnRzKSB7CisgICAgICAgIFtbTlNOb3RpZmljYXRpb25D
ZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Io
dG91Y2hCYXJEaWRFeGl0Q3VzdG9taXphdGlvbjopIG5hbWU6TlNUb3VjaEJhckRpZEV4aXRDdXN0
b21pemF0aW9uIG9iamVjdDpuaWxdOworICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRl
ZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHRvdWNoQmFy
V2lsbEVudGVyQ3VzdG9taXphdGlvbjopIG5hbWU6TlNUb3VjaEJhcldpbGxFbnRlckN1c3RvbWl6
YXRpb24gb2JqZWN0Om5pbF07CisgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVs
dENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoZGlkQ2hhbmdlQXV0
b21hdGljVGV4dENvbXBsZXRpb246KSBuYW1lOk5TU3BlbGxDaGVja2VyRGlkQ2hhbmdlQXV0b21h
dGljVGV4dENvbXBsZXRpb25Ob3RpZmljYXRpb24gb2JqZWN0Om5pbF07CisgICAgICAgIF9wcml2
YXRlLT5fc3RhcnRlZExpc3RlbmluZ1RvQ3VzdG9taXphdGlvbkV2ZW50cyA9IFlFUzsKKyAgICB9
CisKKyAgICBpZiAoIV9wcml2YXRlLT5fcGxhaW5UZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRl
bSB8fCAhX3ByaXZhdGUtPl9yaWNoVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0pIHsKKyAg
ICAgICAgX3ByaXZhdGUtPl9wbGFpblRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtID0gYWRv
cHROUyhbW05TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSBhbGxvY10gaW5pdFdpdGhJZGVudGlm
aWVyOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckNhbmRpZGF0ZUxpc3RdKTsKKyAgICAgICAgW19w
cml2YXRlLT5fcGxhaW5UZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSBzZXREZWxlZ2F0ZTpz
ZWxmXTsKKyAgICAgICAgX3ByaXZhdGUtPl9yaWNoVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0
ZW0gPSBhZG9wdE5TKFtbTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtIGFsbG9jXSBpbml0V2l0
aElkZW50aWZpZXI6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyQ2FuZGlkYXRlTGlzdF0pOworICAg
ICAgICBbX3ByaXZhdGUtPl9yaWNoVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gc2V0RGVs
ZWdhdGU6c2VsZl07CisgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPnJlcXVl
c3RDYW5kaWRhdGVzRm9yU2VsZWN0aW9uKGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkpOworICAgIH0KKworICAgIGlmICghX3ByaXZhdGUtPl9yaWNoVGV4dFRvdWNoQmFyKSB7Cisg
ICAgICAgIF9wcml2YXRlLT5fcmljaFRleHRUb3VjaEJhciA9IGFkb3B0TlMoW1tOU1RvdWNoQmFy
IGFsbG9jXSBpbml0XSk7CisgICAgICAgIFtzZWxmIHNldFVwVGV4dFRvdWNoQmFyOl9wcml2YXRl
LT5fcmljaFRleHRUb3VjaEJhci5nZXQoKV07CisgICAgICAgIFtfcHJpdmF0ZS0+X3JpY2hUZXh0
VG91Y2hCYXIgc2V0Q3VzdG9taXphdGlvbklkZW50aWZpZXI6QCJXZWJSaWNoVGV4dFRvdWNoQmFy
Il07CisgICAgfQorCisgICAgaWYgKCFfcHJpdmF0ZS0+X3BsYWluVGV4dFRvdWNoQmFyKSB7Cisg
ICAgICAgIF9wcml2YXRlLT5fcGxhaW5UZXh0VG91Y2hCYXIgPSBhZG9wdE5TKFtbTlNUb3VjaEJh
ciBhbGxvY10gaW5pdF0pOworICAgICAgICBbc2VsZiBzZXRVcFRleHRUb3VjaEJhcjpfcHJpdmF0
ZS0+X3BsYWluVGV4dFRvdWNoQmFyLmdldCgpXTsKKyAgICAgICAgW19wcml2YXRlLT5fcGxhaW5U
ZXh0VG91Y2hCYXIgc2V0Q3VzdG9taXphdGlvbklkZW50aWZpZXI6QCJXZWJQbGFpblRleHRUb3Vj
aEJhciJdOworICAgIH0KKworICAgIGlmIChbTlNTcGVsbENoZWNrZXIgaXNBdXRvbWF0aWNUZXh0
Q29tcGxldGlvbkVuYWJsZWRdICYmICFfcHJpdmF0ZS0+X2lzQ3VzdG9taXppbmdUb3VjaEJhcikg
eworICAgICAgICBCT09MIHNob3VsZFNob3dDYW5kaWRhdGVMaXN0ID0gIWNvcmVGcmFtZS0+c2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNSYW5nZSgpIHx8IGNvcmVGcmFtZS0+ZWRpdG9yKCkuaWdu
b3JlQ29tcG9zaXRpb25TZWxlY3Rpb25DaGFuZ2UoKTsKKyAgICAgICAgW3NlbGYuY2FuZGlkYXRl
TGlzdCB1cGRhdGVXaXRoSW5zZXJ0aW9uUG9pbnRWaXNpYmlsaXR5OnNob3VsZFNob3dDYW5kaWRh
dGVMaXN0XTsKKyAgICB9CisKKyAgICBpZiAoY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKSB7CisgICAgICAgIC8vIFdlIGRvbid0IHJlcXVlc3Qg
Y2FuZGlkYXRlcyBmb3IgcGFzc3dvcmQgZmllbGRzLiBJZiB0aGUgdXNlciB3YXMgcHJldmlvdXNs
eSBpbiBhIG5vbi1wYXNzd29yZCBmaWVsZCwgdGhlbiB0aGUKKyAgICAgICAgLy8gb2xkIGNhbmRp
ZGF0ZXMgd2lsbCBzdGlsbCBzaG93IGJ5IGRlZmF1bHQsIHNvIHdlIGNsZWFyIHRoZW0gaGVyZSBi
eSBzZXR0aW5nIGFuIGVtcHR5IGFycmF5IG9mIGNhbmRpZGF0ZXMuCisgICAgICAgIGlmICghX3By
aXZhdGUtPl9lbXB0eUNhbmRpZGF0ZXNBcnJheSkKKyAgICAgICAgICAgIF9wcml2YXRlLT5fZW1w
dHlDYW5kaWRhdGVzQXJyYXkgPSBhZG9wdE5TKFtbTlNBcnJheSBhbGxvY10gaW5pdF0pOworICAg
ICAgICBbc2VsZi5jYW5kaWRhdGVMaXN0IHNldENhbmRpZGF0ZXM6X3ByaXZhdGUtPl9lbXB0eUNh
bmRpZGF0ZXNBcnJheS5nZXQoKSBmb3JTZWxlY3RlZFJhbmdlOk5TTWFrZVJhbmdlKDAsIDApIGlu
U3RyaW5nOm5pbF07CisgICAgfQorCisgICAgTlNUb3VjaEJhciAqdGV4dFRvdWNoQmFyID0gc2Vs
Zi50ZXh0VG91Y2hCYXI7CisgICAgTlNBcnJheTxOU1N0cmluZyAqPiAqaXRlbUlkZW50aWZpZXJz
ID0gdGV4dFRvdWNoQmFyLml0ZW1JZGVudGlmaWVyczsKKyAgICBCT09MIGlzU2hvd2luZ0NvbWJp
bmVkVGV4dEZvcm1hdEl0ZW0gPSBbaXRlbUlkZW50aWZpZXJzIGNvbnRhaW5zT2JqZWN0Ok5TVG91
Y2hCYXJJdGVtSWRlbnRpZmllclRleHRGb3JtYXRdOworICAgIFt0ZXh0VG91Y2hCYXIgc2V0UHJp
bmNpcGFsSXRlbUlkZW50aWZpZXI6aXNTaG93aW5nQ29tYmluZWRUZXh0Rm9ybWF0SXRlbSA/IE5T
VG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRGb3JtYXQgOiBuaWxdOworCisgICAgLy8gU2V0IGN1
cnJlbnQgdHlwaW5nIGF0dHJpYnV0ZXMgZm9yIHJpY2ggdGV4dC4gVGhpcyB3aWxsIGVuc3VyZSB0
aGF0IHRoZSBidXR0b25zIHJlZmxlY3QgdGhlIHN0YXRlIG9mCisgICAgLy8gdGhlIHRleHQgd2hl
biBjaGFuZ2luZyBzZWxlY3Rpb24gdGhyb3VnaG91dCB0aGUgZG9jdW1lbnQuCisgICAgaWYgKHdl
YkhUTUxWaWV3Ll9jYW5FZGl0UmljaGx5KSB7CisgICAgICAgIGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIHNlbGVjdGlvbiA9IGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAg
ICAgIGlmICghc2VsZWN0aW9uLmlzTm9uZSgpKSB7CisgICAgICAgICAgICBOb2RlKiBub2RlVG9S
ZW1vdmU7CisgICAgICAgICAgICBpZiAoYXV0byogc3R5bGUgPSBFZGl0b3I6OnN0eWxlRm9yU2Vs
ZWN0aW9uU3RhcnQoY29yZUZyYW1lLCBub2RlVG9SZW1vdmUpKSB7CisgICAgICAgICAgICAgICAg
W19wcml2YXRlLT5fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzQm9sZDooc3R5
bGUtPmZvbnRDYXNjYWRlKCkud2VpZ2h0KCkgPj0gRm9udFdlaWdodEJvbGQpXTsKKyAgICAgICAg
ICAgICAgICBbX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRUZXh0SXNJ
dGFsaWM6KHN0eWxlLT5mb250Q2FzY2FkZSgpLml0YWxpYygpID09IEZvbnRJdGFsaWNPbildOwor
CisgICAgICAgICAgICAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBjb3Jl
RnJhbWUtPnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCk7CisgICAgICAgICAgICAgICAgaWYgKHR5
cGluZ1N0eWxlICYmIHR5cGluZ1N0eWxlLT5zdHlsZSgpKSB7CisgICAgICAgICAgICAgICAgICAg
IFN0cmluZyB2YWx1ZSA9IHR5cGluZ1N0eWxlLT5zdHlsZSgpLT5nZXRQcm9wZXJ0eVZhbHVlKENT
U1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QpOworICAgICAgICAgICAgICAg
ICAgICBbX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRUZXh0SXNVbmRl
cmxpbmVkOnZhbHVlLmNvbnRhaW5zKCJ1bmRlcmxpbmUiKV07CisgICAgICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgICAgIFtfcHJpdmF0ZS0+X3RleHRUb3VjaEJhckl0ZW1Db250
cm9sbGVyIHNldFRleHRJc1VuZGVybGluZWQ6KHN0eWxlLT50ZXh0RGVjb3JhdGlvbnNJbkVmZmVj
dCgpICYgVGV4dERlY29yYXRpb25VbmRlcmxpbmUpXTsKKworICAgICAgICAgICAgICAgIGlmIChz
dHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLmlzVmFsaWQoKSkK
KyAgICAgICAgICAgICAgICAgICAgW19wcml2YXRlLT5fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xs
ZXIgc2V0VGV4dENvbG9yOm5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eUNvbG9yKSldOworCisgICAgICAgICAgICAgICAgTlNUZXh0QWxpZ25tZW50IHRleHRB
bGlnbm1lbnQ7CisgICAgICAgICAgICAgICAgc3dpdGNoIChzdHlsZS0+dGV4dEFsaWduKCkpIHsK
KyAgICAgICAgICAgICAgICBjYXNlIFJJR0hUOgorICAgICAgICAgICAgICAgIGNhc2UgV0VCS0lU
X1JJR0hUOgorICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25t
ZW50UmlnaHQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgTEVGVDoKKyAgICAgICAgICAgICAgICBjYXNlIFdFQktJVF9MRUZUOgorICAgICAgICAgICAg
ICAgICAgICB0ZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25tZW50TGVmdDsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDRU5URVI6CisgICAgICAgICAg
ICAgICAgY2FzZSBXRUJLSVRfQ0VOVEVSOgorICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ25t
ZW50ID0gTlNUZXh0QWxpZ25tZW50Q2VudGVyOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlIEpVU1RJRlk6CisgICAgICAgICAgICAgICAgICAgIHRleHRB
bGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRKdXN0aWZpZWQ7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVEFTVEFSVDoKKyAgICAgICAgICAgICAgICAg
ICAgdGV4dEFsaWdubWVudCA9IHN0eWxlLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBOU1Rl
eHRBbGlnbm1lbnRMZWZ0IDogTlNUZXh0QWxpZ25tZW50UmlnaHQ7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVEFFTkQ6CisgICAgICAgICAgICAgICAg
ICAgIHRleHRBbGlnbm1lbnQgPSBzdHlsZS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gTlNU
ZXh0QWxpZ25tZW50UmlnaHQgOiBOU1RleHRBbGlnbm1lbnRMZWZ0OworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgW19wcml2YXRl
LT5fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0Q3VycmVudFRleHRBbGlnbm1lbnQ6dGV4
dEFsaWdubWVudF07CisKKyAgICAgICAgICAgICAgICBIVE1MRWxlbWVudCogZW5jbG9zaW5nTGlz
dEVsZW1lbnQgPSBlbmNsb3NpbmdMaXN0KHNlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2Rl
KCkpOworICAgICAgICAgICAgICAgIGlmIChlbmNsb3NpbmdMaXN0RWxlbWVudCkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoaXM8SFRNTFVMaXN0RWxlbWVudD4oKmVuY2xvc2luZ0xpc3RFbGVt
ZW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIFtbX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJ
dGVtQ29udHJvbGxlciB3ZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXJdIHNldEN1cnJl
bnRMaXN0VHlwZTpXZWJMaXN0VHlwZTo6VW5vcmRlcmVkXTsKKyAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoaXM8SFRNTE9MaXN0RWxlbWVudD4oKmVuY2xvc2luZ0xpc3RFbGVtZW50KSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFtbX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJv
bGxlciB3ZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXJdIHNldEN1cnJlbnRMaXN0VHlw
ZTpXZWJMaXN0VHlwZTo6T3JkZXJlZF07CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBbW19wcml2YXRlLT5fdGV4dFRvdWNoQmFySXRl
bUNvbnRyb2xsZXIgd2ViVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyXSBzZXRDdXJyZW50
TGlzdFR5cGU6V2ViTGlzdFR5cGU6Ok5vbmVdOworCisgICAgICAgICAgICAgICAgaWYgKG5vZGVU
b1JlbW92ZSkKKyAgICAgICAgICAgICAgICAgICAgbm9kZVRvUmVtb3ZlLT5yZW1vdmUoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBCT09MIGlzU2hvd2luZ0NhbmRpZGF0ZUxp
c3RJdGVtID0gW2l0ZW1JZGVudGlmaWVycyBjb250YWluc09iamVjdDpOU1RvdWNoQmFySXRlbUlk
ZW50aWZpZXJDYW5kaWRhdGVMaXN0XSAmJiBbTlNTcGVsbENoZWNrZXIgaXNBdXRvbWF0aWNUZXh0
Q29tcGxldGlvbkVuYWJsZWRdOworICAgICAgICBbX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVt
Q29udHJvbGxlciBzZXRVc2VzTmFycm93VGV4dFN0eWxlSXRlbTppc1Nob3dpbmdDb21iaW5lZFRl
eHRGb3JtYXRJdGVtICYmIGlzU2hvd2luZ0NhbmRpZGF0ZUxpc3RJdGVtXTsKKyAgICB9Cit9CisK
Ky0gKHZvaWQpdXBkYXRlTWVkaWFUb3VjaEJhcgoreworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tf
Q09OVFJPTFNfTUFOQUdFUikKKyAgICBpZiAoIV9wcml2YXRlLT5tZWRpYVRvdWNoQmFyUHJvdmlk
ZXIpCisgICAgICAgIF9wcml2YXRlLT5tZWRpYVRvdWNoQmFyUHJvdmlkZXIgPSBhZG9wdE5TKFth
bGxvY0FWRnVuY3Rpb25CYXJQbGF5YmFja0NvbnRyb2xzUHJvdmlkZXJJbnN0YW5jZSgpIGluaXRd
KTsKKworICAgIGlmICghW19wcml2YXRlLT5tZWRpYVRvdWNoQmFyUHJvdmlkZXIgcGxheWJhY2tD
b250cm9sc0NvbnRyb2xsZXJdKSB7CisgICAgICAgIEFTU0VSVChfcHJpdmF0ZS0+cGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlKTsKKyAgICAgICAgV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgKm1h
bmFnZXIgPSBfcHJpdmF0ZS0+cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5QmFja0NvbnRy
b2xzTWFuYWdlcigpOworICAgICAgICBbX3ByaXZhdGUtPm1lZGlhVG91Y2hCYXJQcm92aWRlciBz
ZXRQbGF5YmFja0NvbnRyb2xzQ29udHJvbGxlcjooaWQgPEFWRnVuY3Rpb25CYXJQbGF5YmFja0Nv
bnRyb2xzQ29udHJvbGxpbmc+KW1hbmFnZXJdOworICAgICAgICBbX3ByaXZhdGUtPm1lZGlhUGxh
eWJhY2tDb250cm9sc1ZpZXcgc2V0UGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXI6KGlkIDxBVkZ1
bmN0aW9uQmFyUGxheWJhY2tDb250cm9sc0NvbnRyb2xsaW5nPiltYW5hZ2VyXTsKKyAgICB9Cisj
ZW5kaWYKK30KKworLSAodm9pZCl1cGRhdGVUb3VjaEJhcgoreworICAgIGlmICghX3ByaXZhdGUt
Pl9jYW5DcmVhdGVUb3VjaEJhcnMpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lKiBjb3Jl
RnJhbWUgPSBjb3JlKFtzZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXSk7CisgICAgaWYgKCFjb3Jl
RnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIE5TVG91Y2hCYXIgKnRvdWNoQmFyID0gbmls
OworICAgIE5TVmlldyAqZG9jdW1lbnRWaWV3ID0gW1tbc2VsZiBfc2VsZWN0ZWRPck1haW5GcmFt
ZV0gZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOworICAgIGlmIChbZG9jdW1lbnRWaWV3IGlzS2lu
ZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pIHsKKyAgICAgICAgV2ViSFRNTFZpZXcgKndl
YkhUTUxWaWV3ID0gKFdlYkhUTUxWaWV3ICopZG9jdW1lbnRWaWV3OworICAgICAgICBpZiAoW3dl
YkhUTUxWaWV3IF9pc0VkaXRhYmxlXSkgeworICAgICAgICAgICAgW3NlbGYgdXBkYXRlVGV4dFRv
dWNoQmFyXTsKKyAgICAgICAgICAgIHRvdWNoQmFyID0gW3NlbGYgdGV4dFRvdWNoQmFyXTsKKyAg
ICAgICAgfQorI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICAg
ICAgZWxzZSBpZiAoW3NlbGYgX2hhc0FjdGl2ZVZpZGVvRm9yQ29udHJvbHNJbnRlcmZhY2VdKSB7
CisgICAgICAgICAgICBbc2VsZiB1cGRhdGVNZWRpYVRvdWNoQmFyXTsKKyAgICAgICAgICAgIHRv
dWNoQmFyID0gW19wcml2YXRlLT5tZWRpYVRvdWNoQmFyUHJvdmlkZXIgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3Rvcih0b3VjaEJhcildID8gWyhpZClfcHJpdmF0ZS0+bWVkaWFUb3VjaEJhclBy
b3ZpZGVyIHRvdWNoQmFyXSA6IFsoaWQpX3ByaXZhdGUtPm1lZGlhVG91Y2hCYXJQcm92aWRlciB0
b3VjaEJhcl07CisgICAgICAgIH0gZWxzZSBpZiAoW19wcml2YXRlLT5tZWRpYVRvdWNoQmFyUHJv
dmlkZXIgcGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXJdKSB7CisgICAgICAgICAgICBbX3ByaXZh
dGUtPm1lZGlhVG91Y2hCYXJQcm92aWRlciBzZXRQbGF5YmFja0NvbnRyb2xzQ29udHJvbGxlcjpu
aWxdOworICAgICAgICAgICAgW19wcml2YXRlLT5tZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3IHNl
dFBsYXliYWNrQ29udHJvbHNDb250cm9sbGVyOm5pbF07CisgICAgICAgIH0KKyNlbmRpZgorICAg
IH0KKworICAgIGlmICh0b3VjaEJhciA9PSBfcHJpdmF0ZS0+X2N1cnJlbnRUb3VjaEJhcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgX3ByaXZhdGUtPl9jdXJyZW50VG91Y2hCYXIgPSB0b3VjaEJh
cjsKKyAgICBbc2VsZiB3aWxsQ2hhbmdlVmFsdWVGb3JLZXk6QCJ0b3VjaEJhciJdOworICAgIFtz
ZWxmIHNldFRvdWNoQmFyOl9wcml2YXRlLT5fY3VycmVudFRvdWNoQmFyLmdldCgpXTsKKyAgICBb
c2VsZiBkaWRDaGFuZ2VWYWx1ZUZvcktleTpAInRvdWNoQmFyIl07Cit9CisKKy0gKHZvaWQpcHJl
cGFyZUZvck1vdXNlRG93bgoreworICAgIF9wcml2YXRlLT5fbmVlZHNEZWZlcnJlZFRleHRUb3Vj
aEJhclVwZGF0ZSA9IE5POworICAgIF9wcml2YXRlLT5faXNEZWZlcnJpbmdUZXh0VG91Y2hCYXJV
cGRhdGVzID0gWUVTOworfQorCistICh2b2lkKXByZXBhcmVGb3JNb3VzZVVwCit7CisgICAgaWYg
KCFfcHJpdmF0ZS0+X2lzRGVmZXJyaW5nVGV4dFRvdWNoQmFyVXBkYXRlcykKKyAgICAgICAgcmV0
dXJuOworCisgICAgX3ByaXZhdGUtPl9pc0RlZmVycmluZ1RleHRUb3VjaEJhclVwZGF0ZXMgPSBO
TzsKKyAgICBpZiAoX3ByaXZhdGUtPl9uZWVkc0RlZmVycmVkVGV4dFRvdWNoQmFyVXBkYXRlKSB7
CisgICAgICAgIC8vIE9ubHkgdHJpZ2dlciBhbm90aGVyIHVwZGF0ZSBpZiB3ZSBhdHRlbXB0ZWQg
YW5kIGJhaWxlZCBmcm9tIGFuIHVwZGF0ZSBkdXJpbmcgdGhlIGRlZmVycmFsLgorICAgICAgICBb
c2VsZiB1cGRhdGVUb3VjaEJhcl07CisgICAgfQorfQorCistICh2b2lkKXdlYlZpZXdBZGRpdGlv
bnNXaWxsRGVzdHJveVZpZXcKK3sKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRD
ZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGZdOworfQorCistIChOU0NhbmRpZGF0ZUxpc3RUb3Vj
aEJhckl0ZW0gKiljYW5kaWRhdGVMaXN0Cit7CisgICAgcmV0dXJuIHNlbGYuX2lzUmljaGx5RWRp
dGFibGUgPyBfcHJpdmF0ZS0+X3JpY2hUZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbS5nZXQo
KSA6IF9wcml2YXRlLT5fcGxhaW5UZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbS5nZXQoKTsK
K30KKyNlbHNlCisKKy0gKHZvaWQpdXBkYXRlVG91Y2hCYXIKK3sKK30KKworLSAodm9pZClwcmVw
YXJlRm9yTW91c2VEb3duCit7Cit9CisKKy0gKHZvaWQpcHJlcGFyZUZvck1vdXNlVXAKK3sKK30K
KworLSAodm9pZCl3ZWJWaWV3QWRkaXRpb25zV2lsbERlc3Ryb3lWaWV3Cit7Cit9CisKKy0gKGlk
KWNhbmRpZGF0ZUxpc3QKK3sKKyAgICByZXR1cm4gbmlsOworfQorCisjZW5kaWYKKwogQGVuZAog
CiBAaW1wbGVtZW50YXRpb24gV2ViVmlldyAoV2ViVmlld0RldmljZU9yaWVudGF0aW9uKQpJbmRl
eDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEuaAkocmV2aXNpb24gMjA4NDA1
KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDEsOCArMTAxLDEwIEBAIGNsYXNzIFdlYlZpZXdHcm91cDsKIGNsYXNzIFdlYlNl
bGVjdGlvblNlcnZpY2VDb250cm9sbGVyOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpICYm
IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwICYmIFVTRShBUFBMRV9J
TlRFUk5BTF9TREspCi0jaW1wb3J0IDxXZWJLaXRBZGRpdGlvbnMvV2ViVmlld0RhdGFBZGRpdGlv
bnNEZWNsYXJhdGlvbnMuaD4KKyNpZiBIQVZFKFRPVUNIX0JBUikKK0BjbGFzcyBXZWJUZXh0VG91
Y2hCYXJJdGVtQ29udHJvbGxlcjsKK0BjbGFzcyBBVkZ1bmN0aW9uQmFyUGxheWJhY2tDb250cm9s
c1Byb3ZpZGVyOworQGNsYXNzIEFWRnVuY3Rpb25CYXJTY3J1YmJlcjsKICNlbmRpZgogCiBjbGFz
cyBXZWJWaWV3TGF5ZXJGbHVzaFNjaGVkdWxlciA6IHB1YmxpYyBXZWJDb3JlOjpMYXllckZsdXNo
U2NoZWR1bGVyIHsKQEAgLTE3OCw5ICsxODAsMjQgQEAgQGludGVyZmFjZSBXZWJWaWV3UHJpdmF0
ZSA6IE5TT2JqZWN0IHsKICNpZiBQTEFURk9STShNQUMpCiAgICAgV2ViSW1tZWRpYXRlQWN0aW9u
Q29udHJvbGxlciAqaW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlcjsKIAotI2lmIF9fTUFDX09TX1hf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREsp
Ci0jaW1wb3J0IDxXZWJLaXRBZGRpdGlvbnMvV2ViVmlld0RhdGFBZGRpdGlvbnMuaD4KLSNlbmRp
ZgorI2lmIEhBVkUoVE9VQ0hfQkFSKQorICAgIFJldGFpblB0cjxOU1RvdWNoQmFyPiBfY3VycmVu
dFRvdWNoQmFyOworICAgIFJldGFpblB0cjxOU1RvdWNoQmFyPiBfcGxhaW5UZXh0VG91Y2hCYXI7
CisgICAgUmV0YWluUHRyPE5TVG91Y2hCYXI+IF9yaWNoVGV4dFRvdWNoQmFyOworICAgIFJldGFp
blB0cjxXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlcj4gX3RleHRUb3VjaEJhckl0ZW1Db250
cm9sbGVyOworICAgIFJldGFpblB0cjxOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0+IF9yaWNo
VGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW07CisgICAgUmV0YWluUHRyPE5TQ2FuZGlkYXRl
TGlzdFRvdWNoQmFySXRlbT4gX3BsYWluVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW07Cisg
ICAgUmV0YWluUHRyPE5TQXJyYXk+IF9lbXB0eUNhbmRpZGF0ZXNBcnJheTsKKyAgICBSZXRhaW5Q
dHI8QVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNQcm92aWRlcj4gbWVkaWFUb3VjaEJhclBy
b3ZpZGVyOworICAgIFJldGFpblB0cjxBVkZ1bmN0aW9uQmFyU2NydWJiZXI+IG1lZGlhUGxheWJh
Y2tDb250cm9sc1ZpZXc7CisKKyAgICBCT09MIF9jYW5DcmVhdGVUb3VjaEJhcnM7CisgICAgQk9P
TCBfaXNVcGRhdGluZ1RleHRUb3VjaEJhcjsKKyAgICBCT09MIF9zdGFydGVkTGlzdGVuaW5nVG9D
dXN0b21pemF0aW9uRXZlbnRzOworICAgIEJPT0wgX2lzQ3VzdG9taXppbmdUb3VjaEJhcjsKKyAg
ICBCT09MIF9pc0RlZmVycmluZ1RleHRUb3VjaEJhclVwZGF0ZXM7CisgICAgQk9PTCBfbmVlZHNE
ZWZlcnJlZFRleHRUb3VjaEJhclVwZGF0ZTsKKyNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikKIAog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpUZXh0SW5kaWNhdG9yV2luZG93PiB0ZXh0SW5k
aWNhdG9yV2luZG93OwogICAgIEJPT0wgaGFzSW5pdGlhbGl6ZWRMb29rdXBPYnNlcnZlcjsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaAkocmV2aXNp
b24gMjA4NDA1KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwu
aAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsNyBAQCBjbGFzcyBXZWJTZWxlY3Rpb25TZXJ2
aWNlQ29udHJvbGxlcjsKIAogI2VuZGlmCiAKK0BjbGFzcyBOU0NhbmRpZGF0ZUxpc3RUb3VjaEJh
ckl0ZW07CiBAY2xhc3MgV2ViQmFzZVBsdWdpblBhY2thZ2U7CiBAY2xhc3MgV2ViRG93bmxvYWQ7
CiBAY2xhc3MgV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlcjsKQEAgLTI5MywxMiArMjk0LDEx
IEBAIEBpbnRlcmZhY2UgV2ViVmlldyAoV2ViVmlld090aGVySW50ZXJuYWwKIC0gKHZvaWQpX3Nl
dE1vY2tNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTmFtZTooTlNTdHJpbmcgKiluYW1lIHN0YXRl
OihXZWJDb3JlOjpNZWRpYVBsYXliYWNrVGFyZ2V0Q29udGV4dDo6U3RhdGUpc3RhdGU7CiAjZW5k
aWYKIAotQGVuZAotCi1AaW50ZXJmYWNlIFdlYlZpZXcgKFdlYlVwZGF0ZVdlYlZpZXdBZGRpdGlv
bnMpCiAtICh2b2lkKXByZXBhcmVGb3JNb3VzZVVwOwogLSAodm9pZClwcmVwYXJlRm9yTW91c2VE
b3duOwotLSAodm9pZCl1cGRhdGVXZWJWaWV3QWRkaXRpb25zOworLSAodm9pZCl1cGRhdGVUb3Vj
aEJhcjsKIC0gKHZvaWQpd2ViVmlld0FkZGl0aW9uc1dpbGxEZXN0cm95VmlldzsKLS0gKGlkKWNh
bmRpZGF0ZUxpc3Q7CistICh2b2lkKV9kaXNtaXNzVGV4dFRvdWNoQmFyUG9wb3Zlckl0ZW1XaXRo
SWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyOworLSAoTlNDYW5kaWRhdGVMaXN0VG91
Y2hCYXJJdGVtICopY2FuZGlkYXRlTGlzdDsKKwogQGVuZApJbmRleDogU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJWaWV3UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViVmlld1ByaXZhdGUuaAkocmV2aXNpb24gMjA4NDA1KQorKysgU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04
ODksNiArODg5LDEwIEBAIENvdWxkIGJlIHdvcnRoIGFkZGluZyB0byB0aGUgQVBJLgogCiAtICh2
b2lkKV9zZXRGb250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHM6KEJPT0wpZmxhZzsKIAorLSAo
dm9pZClzaG93Q2FuZGlkYXRlczooTlNBcnJheSAqKWNhbmRpZGF0ZXMgZm9yU3RyaW5nOihOU1N0
cmluZyAqKXN0cmluZyBpblJlY3Q6KE5TUmVjdClyZWN0T2ZUeXBlZFN0cmluZyBmb3JTZWxlY3Rl
ZFJhbmdlOihOU1JhbmdlKXJhbmdlIHZpZXc6KE5TVmlldyAqKXZpZXcgY29tcGxldGlvbkhhbmRs
ZXI6KHZvaWQgKF4pKE5TVGV4dENoZWNraW5nUmVzdWx0ICphY2NlcHRlZENhbmRpZGF0ZSkpY29t
cGxldGlvbkJsb2NrOworLSAodm9pZClmb3JjZVJlcXVlc3RDYW5kaWRhdGVzRm9yVGVzdGluZzsK
Ky0gKEJPT0wpc2hvdWxkUmVxdWVzdENhbmRpZGF0ZXM7CisKIEBlbmQKIAogI2lmICFUQVJHRVRf
T1NfSVBIT05FCkBAIC0xMDYxLDEyICsxMDY1LDYgQEAgQGludGVyZmFjZSBOU09iamVjdCAoV2Vi
Vmlld1Jlc291cmNlTG9hZAogLSAoTlNDYWNoZWRVUkxSZXNwb25zZSAqKXdlYlZpZXc6KFdlYlZp
ZXcgKilzZW5kZXIgcmVzb3VyY2U6KGlkKWlkZW50aWZpZXIgd2lsbENhY2hlUmVzcG9uc2U6KE5T
Q2FjaGVkVVJMUmVzcG9uc2UgKilyZXNwb25zZSBmcm9tRGF0YVNvdXJjZTooV2ViRGF0YVNvdXJj
ZSAqKWRhdGFTb3VyY2U7CiBAZW5kCiAKLUBpbnRlcmZhY2UgV2ViVmlldyAoV2ViU2hvd0NhbmRp
ZGF0ZXMpCi0tICh2b2lkKXNob3dDYW5kaWRhdGVzOihOU0FycmF5ICopY2FuZGlkYXRlcyBmb3JT
dHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIGluUmVjdDooTlNSZWN0KXJlY3RPZlR5cGVkU3RyaW5n
IGZvclNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UgdmlldzooTlNWaWV3ICopdmlldyBjb21w
bGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNUZXh0Q2hlY2tpbmdSZXN1bHQgKmFjY2VwdGVkQ2Fu
ZGlkYXRlKSljb21wbGV0aW9uQmxvY2s7Ci0tICh2b2lkKWZvcmNlUmVxdWVzdENhbmRpZGF0ZXNG
b3JUZXN0aW5nOwotLSAoQk9PTClzaG91bGRSZXF1ZXN0Q2FuZGlkYXRlczsKLUBlbmQKLQogI2lm
ZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgpJbmRleDogVG9vbHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4NDA1KQorKysg
VG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTYtMTEt
MDQgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIFN1cHBvcnQgVG91
Y2hCYXIgaW4gV2ViS2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjQ0MzcKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAgICByZGFy
Oi8vcHJvYmxlbS8yODg3NjUyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoaXMgbWFrZXMgTWluaUJyb3dzZXIgc3VwcG9ydCBUb3VjaEJhciBjdXN0
b21pemF0aW9uLiAKKworICAgICAgICAqIE1pbmlCcm93c2VyL21hYy9BcHBEZWxlZ2F0ZS5tOgor
ICAgICAgICAoLVtCcm93c2VyQXBwRGVsZWdhdGUgYXdha2VGcm9tTmliXSk6CisKIDIwMTYtMTEt
MDQgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAg
ICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjA4MjkzLgpJbmRleDogVG9vbHMvTWluaUJyb3dz
ZXIvbWFjL0FwcERlbGVnYXRlLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTWluaUJyb3dzZXIvbWFj
L0FwcERlbGVnYXRlLm0JKHJldmlzaW9uIDIwODQwNSkKKysrIFRvb2xzL01pbmlCcm93c2VyL21h
Yy9BcHBEZWxlZ2F0ZS5tCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw5IEBAIC0gKHZvaWQp
YXdha2VGcm9tTmliCiAjZW5kaWYKIAogICAgIFtbTlNBcHAgbWFpbk1lbnVdIGluc2VydEl0ZW06
W2l0ZW0gYXV0b3JlbGVhc2VdIGF0SW5kZXg6W1tOU0FwcCBtYWluTWVudV0gaW5kZXhPZkl0ZW1X
aXRoVGl0bGU6QCJEZWJ1ZyJdXTsKKworICAgIGlmIChbTlNBcHAgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3RvcihzZXRBdXRvbWF0aWNDdXN0b21pemVUb3VjaEJhck1lbnVJdGVtRW5hYmxlZDop
XSkKKyAgICAgICAgW05TQXBwIHNldEF1dG9tYXRpY0N1c3RvbWl6ZVRvdWNoQmFyTWVudUl0ZW1F
bmFibGVkOllFU107CiB9CiAKICNpZiBXS19BUElfRU5BQkxFRAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293987</attachid>
            <date>2016-11-04 23:33:35 -0700</date>
            <delta_ts>2016-11-04 23:39:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-5.txt</filename>
            <type>text/plain</type>
            <size>117743</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE2LTExLTA0ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBTdXBwb3J0IFRvdWNoQmFyIGluIFdl
YktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0
NDM3CisgICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0v
Mjg4NzY1MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9y
bS9zcGkvY29jb2EvQVZLaXRTUEkuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcGkvY29jb2EvTlNU
b3VjaEJhclNQSS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxD
aGVja2VyU1BJLmg6CisKIDIwMTYtMTEtMDQgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgogCiAgICAgICAgIEluZGV4ZWREQiAyLjA6IENsZWFuIHVwIG1vcmUgdHJhbnNhY3Rpb24g
YWJvcnQgYW5kIGV4Y2VwdGlvbiB0aHJvd2luZyBiZWhhdmlvciBmcm9tIElEQk9iamVjdFN0b3Jl
LgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMjA4NDA1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNTY0LDEwICsxNTY0LDEw
IEBACiAJCTQxNjJBNDU3MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQxNjJBNDU1MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
LmNwcCAqLzsgfTsKIAkJNDE2MkE0NTgxMDExNDY0NzAwREZGM0VEIC8qIEpTRGVkaWNhdGVkV29y
a2VyR2xvYmFsU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQxNjJBNDU2MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlLmggKi87IH07CiAJCTQxNkUyOUE2MTAyRkE5NjIwMDdGQzE0RSAvKiBXb3JrZXJSZXBv
cnRpbmdQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDE2RTI5QTUxMDJGQTk2MjAwN0ZDMTRFIC8qIFdvcmtlclJlcG9ydGluZ1Byb3h5LmggKi87
IH07CisJCTQxNkU2RkU4MUJCRDEyREYwMDBBM0Y2NCAvKiBSZWFkYWJsZVN0cmVhbUludGVybmFs
c0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTQxNkU2RkU4MUJCRDEyREYwMDBBNjAyMyAvKiBGZXRjaEludGVybmFsc0J1aWx0aW5zLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMx
MTBEMDBCNzY0QjkgLyogRmV0Y2hJbnRlcm5hbHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjAz
MyAvKiBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEM5IC8qIFN0cmVhbUlu
dGVybmFsc0J1aWx0aW5zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJNDE2RTZGRTgxQkJEMTJERjAwMEEzRjY0IC8qIFJlYWRhYmxlQnl0ZVN0cmVh
bUludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVCeXRlU3RyZWFt
SW50ZXJuYWxzQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQk0MTZFNkZFODFCQkQxMkRGMDAwQTYwNDMgLyogUmVhZGFibGVTdHJlYW1J
bnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOUIwM0Q4MDYxQkIzMTEwRDAwQjczRjY0IC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJu
YWxzQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk0MTZFNkZFODFCQkQxMkRGMDAwQTYwNDMgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50
ZXJuYWxzQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRl
cm5hbHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjA1MyAvKiBXcml0YWJsZVN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RTkgLyogV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNC
dWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTQxNkU2RkU5MUJCRDEyRTUwMDBBNjA0MyAvKiBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFC
QjMxMTBEMDBCNzY0RDggLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxNkU2RkU5MUJCRDEyRTUwMDBB
NjA1MyAvKiBXcml0YWJsZVN0cmVhbUJ1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RTggLyogV3JpdGFi
bGVTdHJlYW1CdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0yNTkwLDggKzI1OTAsOCBAQAogCQk2QjY5M0EyRTFDNTFBODJFMDBCMDNC
RUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZCNjkzQTJEMUM1MUE4MkUwMEIwM0JFRiAvKiBSZXNvdXJjZUxv
YWRPYnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTZCNjkzQTM0MUM1MUE5NUQwMEIwM0JFRiAvKiBSZXNvdXJjZUxvYWRPYnNlcnZlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QjY5M0Ez
MzFDNTFBOTVEMDBCMDNCRUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwICovOyB9OwogCQk2
QzRDOTZERTFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNEM5
NkRBMUFENDQ4MzUwMDM2M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuY3Bw
ICovOyB9OwotCQk2QzRDOTZERjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJl
YW1Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2QzRDOTZEQjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250
cm9sbGVyLmggKi87IH07CiAJCTZDNEM5NkRFMUFENDQ4MzUwMDM2NUE1MCAvKiBKU1JlYWRhYmxl
U3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkM0Qzk2REExQUQ0NDgzNTAwMzY1QTUwIC8qIEpTUmVhZGFibGVT
dHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHAgKi87IH07CisJCTZDNEM5NkRGMUFENDQ4MzUwMDM2
M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNEM5NkRCMUFENDQ4MzUwMDM2M0Y2NCAv
KiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaCAqLzsgfTsKIAkJNkM0Qzk2REYxQUQ0
NDgzNTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0Qzk2REIxQUQ0NDgz
NTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5oICovOyB9Owog
CQk2QzYzODg5NUE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlh
dG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM2
Mzg4OTNBOTZDQ0VFNTBDOEM5NDZDIC8qIENhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2QzYz
ODg5NkE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzYzODg5
NEE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5jcHAg
Ki87IH07CkBAIC0zMjc0LDYgKzMyNzQsNyBAQAogCQk5MzMwOUVBMzA5OUVCNzhDMDA1NkU1ODEg
LyogU2hhcmVkVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzMzA5RUEwMDk5RUI3OEMwMDU2RTU4MSAvKiBTaGFyZWRUaW1lci5oICovOyB9Owog
CQk5MzMwOUVBNDA5OUVCNzhDMDA1NkU1ODEgLyogVGltZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlFQTEwOTlFQjc4QzAwNTZFNTgxIC8q
IFRpbWVyLmNwcCAqLzsgfTsKIAkJOTMzNTRBM0MwQjI0RjhDOTAwM0Y2REVBIC8qIFVJRXZlbnRX
aXRoS2V5U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTMzNTRBM0IwQjI0RjhDOTAwM0Y2REVBIC8qIFVJRXZlbnRXaXRoS2V5U3RhdGUuY3Bw
ICovOyB9OworCQk5MzM1QjQ5RDFEQ0JFRjdDMDBFRDQ2OEUgLyogTlNUb3VjaEJhclNQSS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzNUI0OUIxRENC
RUY3MTAwRUQ0NjhFIC8qIE5TVG91Y2hCYXJTUEkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5MzNBMTQyRTBCN0QxODg2MDBBNTNGRkQgLyogVGV4
dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzM0ExNDJCMEI3RDE4ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuY3BwICovOyB9OwogCQk5MzNB
MTQzMDBCN0QxODg2MDBBNTNGRkQgLyogVGV4dEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzNBMTQyRDBCN0QxODg2MDBBNTNGRkQgLyogVGV4
dEV2ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJOTMzQTE0QjgwQjdEMUQ1MjAwQTUzRkZEIC8qIEpTVGV4dEV2ZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzM0ExNEI2MEI3RDFENTIwMEE1
M0ZGRCAvKiBKU1RleHRFdmVudC5jcHAgKi87IH07CkBAIC05NzgyLDggKzk3ODMsOCBAQAogCQk2
QjY5M0EyRDFDNTFBODJFMDBCMDNCRUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkI2OTNBMzMxQzUxQTk1RDAwQjAzQkVGIC8qIFJlc291
cmNlTG9hZE9ic2VydmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlc291cmNlTG9hZE9ic2VydmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NkM0Qzk2REExQUQ0NDgzNTAwMzYzRjY0IC8qIEpTUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1JlYWRhYmxlQnl0
ZVN0cmVhbUNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzRD
OTZEQjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUmVhZGFibGVCeXRlU3RyZWFtQ29u
dHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QzRDOTZEQTFBRDQ0ODM1
MDAzNjVBNTAgLyogSlNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29u
dHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZDNEM5NkRCMUFENDQ4
MzUwMDM2M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZDNEM5NkRCMUFENDQ4MzUwMDM2NUE1MCAv
KiBKU1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZDNjM4ODkzQTk2Q0NFRTUwQzhDOTQ2QyAvKiBDYWNo
ZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTZDNjM4ODk0QTk2Q0NFRTUwQzhDOTQ2QyAvKiBDYWNoZWRSZXNvdXJj
ZVJlcXVlc3RJbml0aWF0b3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTEwNzIyLDYgKzEwNzIzLDcgQEAKIAkJOTMzMkFCOEIxNjUzQTk3OTAw
RDgyN0VDIC8qIEZFTGlnaHRpbmdORU9OLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZFTGlnaHRpbmdORU9OLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMzJB
QjhDMTY1M0E5NzkwMEQ4MjdFQyAvKiBORU9OSGVscGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBORU9OSGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5MzM1NEEzQjBCMjRGOEM5MDAzRjZERUEgLyogVUlFdmVudFdpdGhLZXlTdGF0ZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVSUV2ZW50V2l0aEtleVN0YXRlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTMzNUI0OUIxRENCRUY3MTAwRUQ0NjhF
IC8qIE5TVG91Y2hCYXJTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTlNU
b3VjaEJhclNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzNBMTQyQjBCN0Qx
ODg2MDBBNTNGRkQgLyogVGV4dEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFRleHRFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkz
M0ExNDJDMEI3RDE4ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFRleHRFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzM0Ex
NDJEMEI3RDE4ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGV4dEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MTE3NSw4ICsxMTE3Nyw4IEBACiAJCTk5MDhCMEYwMUJDQUNGOTEwMEVEM0Y2NCAvKiBSZWFkYWJs
ZUJ5dGVTdHJlYW1Db250cm9sbGVyLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0
OyBwYXRoID0gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlci5qczsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTkwOEIwRjExQkNBQ0Y5MTAwRUQwRjU1IC8qIFN0cmVhbUludGVybmFs
cy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFN0cmVhbUludGVy
bmFscy5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkwOEIwRjExQkNBQ0Y5MTAw
RUQwRjY1IC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzLmpzICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVhZGFibGVTdHJlYW1JbnRlcm5hbHMuanM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk5MDhCMEYxMUJDQUNGOTEwMEVEM0Y2NCAvKiBSZWFkYWJs
ZUJ5dGVTdHJlYW1JbnRlcm5hbHMuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7
IHBhdGggPSBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHMuanM7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTk5MDhCMEYxMUJDQUNGOTEwMEVEMEY3NSAvKiBXcml0YWJsZVN0cmVhbUlu
dGVybmFscy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFdyaXRh
YmxlU3RyZWFtSW50ZXJuYWxzLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OTA4
QjBGMTFCQ0FDRjkxMDBFRDNGNjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzLmpzICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVhZGFibGVCeXRlU3RyZWFt
SW50ZXJuYWxzLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGMjFCQ0FD
RjkxMDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyLmpzICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVy
LmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGMzFCQ0FDRkZFMDBFRDBG
NjUgLyogQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJ5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3lCdWlsdGlu
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5MDhCMEY1MUJDQUQwN0QwMEVE
MEY2NSAvKiBCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5QnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTE4NCwxNSArMTExODYsMTMgQEAKIAkJ
OTkwOEIwRjcxQkNBRDA3RDAwRUQwRjY1IC8qIENvdW50UXVldWluZ1N0cmF0ZWd5QnVpbHRpbnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ291bnRRdWV1aW5nU3RyYXRlZ3lC
dWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGOTFCQ0FEMDdE
MDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkwOEIwRjkxQkNBRDA3RDAwRUQwRjc1IC8qIFdyaXRhYmxl
U3RyZWFtQnVpbHRpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V3JpdGFibGVTdHJlYW1CdWlsdGlucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTk5MDhCMEZBMUJDQUQwN0QwMEVEM0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVy
QnVpbHRpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFi
bGVCeXRlU3RyZWFtQ29udHJvbGxlckJ1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJOTkwOEIwRkIxQkNBRDA3RDAwRUQzRjY0IC8qIFJlYWRhYmxlQnl0ZVN0cmVhbUNv
bnRyb2xsZXJCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFk
YWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQnVpbHRpbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTkwOEIwRkExQkNBRDA3RDAwRUQwRjY1IC8qIFJlYWRhYmxlU3RyZWFtRGVmYXVs
dENvbnRyb2xsZXJCdWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQnVpbHRpbnMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGQjFCQ0FEMDdEMDBFRDBGNjUgLyogUmVhZGFi
bGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckJ1aWx0aW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJCdWlsdGlucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGRDFCQ0FEMDdEMDBFRDBGNDUgLyog
RmV0Y2hJbnRlcm5hbHNCdWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGZXRjaEludGVybmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTkwOEIwRkQxQkNBRDA3RDAwRUQwRjU1IC8qIFN0cmVhbUludGVybmFsc0J1aWx0
aW5zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTkwOEIwRkQx
QkNBRDA3RDAwRUQzRjY0IC8qIFJlYWRhYmxlQnl0ZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlYWRhYmxlQnl0ZVN0cmVh
bUludGVybmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkw
OEIwRkQxQkNBRDA3RDAwRUQwRjY1IC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFibGVTdHJlYW1J
bnRlcm5hbHNCdWlsdGlucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5MDhC
MEZEMUJDQUQwN0QwMEVEMEY3NSAvKiBXcml0YWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdyaXRhYmxlU3RyZWFtSW50
ZXJuYWxzQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OTA4QjBG
RDFCQ0FEMDdEMDBFRDNGNjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFibGVCeXRlU3Ry
ZWFtSW50ZXJuYWxzQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
OTA4QjBGRTFCQ0FEMDdEMDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyQnVp
bHRpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFibGVT
dHJlYW1EZWZhdWx0UmVhZGVyQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5OTA4QjBGRjFCQ0FEMDdEMDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVh
ZGVyQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVhZGFibGVT
dHJlYW1EZWZhdWx0UmVhZGVyQnVpbHRpbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTkyMDM5ODAxOEI5NUJDNjAwQjM5QUY5IC8qIFVzZXJJbnB1dEJyaWRnZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVc2VySW5wdXRCcmlkZ2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEyMzAsMTAgKzExMjMwLDEwIEBACiAJCTlBNTI4
RTgyMTdEN0Y1MkYwMEFBOTUxOCAvKiBGbG9hdGluZ09iamVjdHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRmxvYXRpbmdPYmplY3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTlBQjFGMzdFMThFMjQ4OUEwMDUzNDc0MyAvKiBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUFCMUYzN0YxOEUy
NDg5QTAwNTM0NzQzIC8qIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAv
KiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0QjkgLyog
RmV0Y2hJbnRlcm5hbHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGZXRjaEludGVybmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTlCMDNEODA2MUJCMzExMEQwMEI3NjRDOSAvKiBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDgg
LyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5h
bHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZUJ5
dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZVN0cmVhbUlu
dGVybmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMDNEODA2
MUJCMzExMEQwMEI3NjRFOCAvKiBXcml0YWJsZVN0cmVhbUJ1aWx0aW5zLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyaXRhYmxlU3RyZWFtQnVpbHRpbnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEU5IC8qIFdyaXRhYmxl
U3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTcyNTcsNiArMTcyNTcsNyBAQAogCQkJCTJEREI5N0YzMTlGOUFFQ0EwMDIw
MjVEOCAvKiBOU0V4dGVuc2lvblNQSS5oICovLAogCQkJCUNFMTI1MjNBMUExNjcxMTAwMDg2NDQ4
MCAvKiBOU0ZpbGVNYW5hZ2VyU1BJLmggKi8sCiAJCQkJQ0UxMjUyNTIxQTFCRUMwNjAwODY0NDgw
IC8qIE5TU3RyaW5nU1BJLmggKi8sCisJCQkJOTMzNUI0OUIxRENCRUY3MTAwRUQ0NjhFIC8qIE5T
VG91Y2hCYXJTUEkuaCAqLywKIAkJCQkzMUIzMTNEQTFCNjk4NzE2MDBGMkFBQkMgLyogTlNVUkxD
b25uZWN0aW9uU1BJLmggKi8sCiAJCQkJQ0UxMjUyNTQxQTFCRUMwRTAwODY0NDgwIC8qIE5TVVJM
RG93bmxvYWRTUEkuaCAqLywKIAkJCQk2NTNFRjgzODE5QTA0M0FFMDA1MjIwMkMgLyogTlNVUkxG
aWxlVHlwZU1hcHBpbmdzU1BJLmggKi8sCkBAIC0xNzMzMyw4ICsxNzMzNCw2IEBACiAJCQkJNDRB
MjhBQUUxMkRGQjhCRjAwQUU5MjNCIC8qIE1hdGhNTE5hbWVzLmggKi8sCiAJCQkJNzFFMjE4Mzgx
NzM1OUZCODAwNkU2RTREIC8qIFBsdWdJbnNSZXNvdXJjZXMuaCAqLywKIAkJCQk3MUUyMTgzOTE3
MzU5RkI4MDA2RTZFNEQgLyogUGx1Z0luc1Jlc291cmNlc0RhdGEuY3BwICovLAotCQkJCTk5MDhC
MEZBMUJDQUQwN0QwMDc2M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQnVpbHRp
bnMuY3BwICovLAotCQkJCTk5MDhCMEZCMUJDQUQwN0QwMDc2M0Y2NCAvKiBSZWFkYWJsZUJ5dGVT
dHJlYW1Db250cm9sbGVyQnVpbHRpbnMuaCAqLywKIAkJCQk5OTA4QjBGRDFCQ0FEMDdEMDBFRDNG
NjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuY3BwICovLAogCQkJCTlC
MDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oICovLAogCQkJCTk5MDhCMEY5MUJDQUQwN0QwMEVEMEY2NSAvKiBSZWFkYWJsZVN0cmVh
bUJ1aWx0aW5zLmNwcCAqLywKQEAgLTI1MDc3LDcgKzI1MDc2LDYgQEAKIAkJCQlCQzFCREYyNTE1
NkMxOEM3MDAxQzEyNDMgLyogRE9NRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTJFRDYwOUJE
MTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgx
ODVGM0IwOTc2NTc2NjAwNTgyNkQ5IC8qIERPTUltcGxlbWVudGF0aW9uLmggaW4gSGVhZGVycyAq
LywKLQkJCQlFMzVDQTE0RTFEQkMzQTQyMDBGODM1MTYgLyogRE9NSklUQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMxNTBFQTcxREE3MjE5MzAwMTk0MDEyIC8q
IERPTUpJVEhlbHBlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE5QzZFNEU0MEQ3NDVFMDUwMDY0
NDJFOSAvKiBET01NaW1lVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTlDNkU0RTgwRDc0NUUx
ODAwNjQ0MkU5IC8qIERPTU1pbWVUeXBlQXJyYXkuaCBpbiBIZWFkZXJzICovLApAQCAtMjY3OTEs
OSArMjY3ODksOSBAQAogCQkJCUY1NUIzRENFMTI1MUYxMkQwMDNFRjI2OSAvKiBSYW5nZUlucHV0
VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU4NEU5RTExNzY2OEJGMTAwODE1QjY4IC8qIFJh
c3RlclNoYXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODREODI3QzExRDMzM0VEMDA5NzI5OTAg
LyogUmF3RGF0YURvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQk0MTZFNkZFODFC
QkQxMkRGMDAwQTNGNjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCBp
biBIZWFkZXJzICovLAorCQkJCTQxNkU2RkU4MUJCRDEyREYwMDBBM0Y2NCAvKiBSZWFkYWJsZVN0
cmVhbUludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTZFNkZFOTFCQkQx
MkU1MDAwQTYwNDMgLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJNDE2RTZGRTgxQkJEMTJERjAwMEE2MDQzIC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVp
bHRpbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjA0MyAvKiBS
ZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkQzMTYwM0MxMkIwMjY3NjAwQzFBMzU5IC8qIFJlYWx0aW1lQW5hbHlzZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTRBNEY2NTcxMUFBOTk3RjEwMEUzOENERCAvKiBSZWFsdGltZU1lZGlhU291cmNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0QTRGNjU3MjFBQTk5N0YxMDBFMzhDREQgLyogUmVhbHRp
bWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzg3NSw2ICsy
Nzg3Myw3IEBACiAJCQkJMUNBRjM0ODEwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVj
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUNBRjM0ODMwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNj
cmlwdE9iamVjdFByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNTY5RDFCMEQ3RTJCODIw
MDdDMzk4MyAvKiBXZWJTY3JpcHRPYmplY3RQcm90b2NvbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
OTMzNUI0OUQxRENCRUY3QzAwRUQ0NjhFIC8qIE5TVG91Y2hCYXJTUEkuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk3QUFCRDFCMTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk3QUFCRDFFMTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXRDaGFubmVsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5N0FBQkQxRjE0RkEwOUQ1MDA3NDU3QUUgLyogV2ViU29ja2V0
Q2hhbm5lbENsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODgzNCw3ICsyODgzMyw2IEBACiAJ
CQkJQkMxQkRGMjQxNTZDMTg4MzAwMUMxMjQzIC8qIERPTUVycm9yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTJFRDYwOUJDMTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBODE4NUYzRTA5NzY1NzY2MDA1ODI2RDkgLyogRE9NSW1wbGVtZW50YXRp
b24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRTM1Q0ExNEQxREJDM0EzRjAwRjgzNTE2IC8qIERP
TUpJVEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTlDNkU0
RTMwRDc0NUUwNTAwNjQ0MkU5IC8qIERPTU1pbWVUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE5QzZFNEU3MEQ3NDVFMTgwMDY0NDJFOSAvKiBET01NaW1lVHlwZUFycmF5LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTUyQjZDOUMyMTVFM0Y0REYwMDY5MEIwNSAvKiBET01OYW1lZEZsb3dDb2xs
ZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
c3BpL2NvY29hL0FWS2l0U1BJLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vc3BpL2NvY29hL0FWS2l0U1BJLmgJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3NwaS9jb2NvYS9BVktpdFNQSS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIs
NiArMTMyLDggQEAgTlNfQ0xBU1NfQVZBSUxBQkxFX01BQygxMF8xMSkKIAogI2VuZGlmIC8vIEVO
QUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICYmICFQTEFURk9STShJT1MpCiAKK05TX0FT
U1VNRV9OT05OVUxMX0JFR0lOCisKIEBpbnRlcmZhY2UgQVZWYWx1ZVRpbWluZyA6IE5TT2JqZWN0
IDxOU0NvZGluZywgTlNDb3B5aW5nLCBOU011dGFibGVDb3B5aW5nPiAKIEBlbmQKIApAQCAtMTM5
LDMgKzE0MSwzMiBAQCBOU19DTEFTU19BVkFJTEFCTEVfTUFDKDEwXzExKQogKyAoQVZWYWx1ZVRp
bWluZyAqKXZhbHVlVGltaW5nV2l0aEFuY2hvclZhbHVlOihkb3VibGUpYW5jaG9yVmFsdWUgYW5j
aG9yVGltZVN0YW1wOihOU1RpbWVJbnRlcnZhbCl0aW1lU3RhbXAgcmF0ZTooZG91YmxlKXJhdGU7
CiBAcHJvcGVydHkgKE5TX05PTkFUT01JQ19JT1NPTkxZLCByZWFkb25seSkgZG91YmxlIGN1cnJl
bnRWYWx1ZTsKIEBlbmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECisKKyNpZiBQTEFURk9STShN
QUMpCisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorI2ltcG9ydCA8
QVZLaXQvQVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNQcm92aWRlci5oPgorI2ltcG9ydCA8
QVZLaXQvQVZGdW5jdGlvbkJhclNjcnViYmVyLmg+CisjZWxzZQorCitOU19BU1NVTUVfTk9OTlVM
TF9CRUdJTgorCitAcHJvdG9jb2wgQVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNDb250cm9s
bGluZyA8TlNPYmplY3Q+CitAcHJvcGVydHkgKHJlYWRvbmx5KSBOU1RpbWVJbnRlcnZhbCBjb250
ZW50RHVyYXRpb247CitAcHJvcGVydHkgKHJlYWRvbmx5LCBudWxsYWJsZSkgQVZWYWx1ZVRpbWlu
ZyAqdGltaW5nOworQHByb3BlcnR5IChyZWFkb25seSwgZ2V0dGVyPWlzU2Vla2luZykgQk9PTCBz
ZWVraW5nOworQHByb3BlcnR5IChyZWFkb25seSkgTlNUaW1lSW50ZXJ2YWwgc2Vla1RvVGltZTsK
Ky0gKHZvaWQpc2Vla1RvVGltZTooTlNUaW1lSW50ZXJ2YWwpdGltZSB0b2xlcmFuY2VCZWZvcmU6
KE5TVGltZUludGVydmFsKXRvbGVyYW5jZUJlZm9yZSB0b2xlcmFuY2VBZnRlcjooTlNUaW1lSW50
ZXJ2YWwpdG9sZXJhbmNlQWZ0ZXI7CitAcHJvcGVydHkgKHJlYWRvbmx5KSBCT09MIGhhc0VuYWJs
ZWRBdWRpbzsKK0Bwcm9wZXJ0eSAocmVhZG9ubHkpIEJPT0wgaGFzRW5hYmxlZFZpZGVvOworQGVu
ZAorCitAaW50ZXJmYWNlIEFWRnVuY3Rpb25CYXJTY3J1YmJlciA6IE5TVmlldworQHByb3BlcnR5
IChhc3NpZ24sIG51bGxhYmxlKSBpZDxBVkZ1bmN0aW9uQmFyUGxheWJhY2tDb250cm9sc0NvbnRy
b2xsaW5nPiBwbGF5YmFja0NvbnRyb2xzQ29udHJvbGxlcjsKK0BlbmQKKworTlNfQVNTVU1FX05P
Tk5VTExfRU5ECisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFH
RVIpCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vc3BpL2NvY29hL05TVG91Y2hCYXJTUEkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9zcGkvY29jb2EvTlNUb3VjaEJhclNQSS5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9jb2NvYS9OU1RvdWNoQmFyU1BJLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBQTEFURk9STShNQUMpCisj
aWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykgJiYgSEFWRShUT1VDSF9CQVIpCisKKyNpbXBvcnQg
PEFwcEtpdC9OU0Z1bmN0aW9uQmFyX1ByaXZhdGUuaD4KKyNpbXBvcnQgPEFwcEtpdC9OU1RleHRU
b3VjaEJhckl0ZW1Db250cm9sbGVyX1dlYktpdFNQSS5oPgorI2ltcG9ydCA8QXBwS2l0L05TVG91
Y2hCYXJfUHJpdmF0ZS5oPgorCisjZWxzZQorCitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCitA
aW50ZXJmYWNlIE5TVG91Y2hCYXJJdGVtIDogTlNPYmplY3QKK0BlbmQKKworQGludGVyZmFjZSBO
U0NvbG9yUGlja2VyVG91Y2hCYXJJdGVtIDogTlNUb3VjaEJhckl0ZW0KK0BlbmQKKworQGludGVy
ZmFjZSBOU1RvdWNoQmFyIDogTlNPYmplY3QKK0Bwcm9wZXJ0eSAocmVhZG9ubHksIGNvcHksIG51
bGxhYmxlKSBOU0FycmF5PE5TVG91Y2hCYXJJdGVtICo+ICppdGVtczsKK0Bwcm9wZXJ0eSAoc3Ry
b25nLCBudWxsYWJsZSkgTlNUb3VjaEJhckl0ZW0gKmVzY2FwZUtleVJlcGxhY2VtZW50SXRlbTsK
K0BlbmQKKworQGludGVyZmFjZSBOU1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIDogTlNPYmpl
Y3QKKworQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nLCBudWxsYWJsZSkgTlNDb2xvclBpY2tl
clRvdWNoQmFySXRlbSAqY29sb3JQaWNrZXJJdGVtOworQHByb3BlcnR5IChyZWFkb25seSwgc3Ry
b25nLCBudWxsYWJsZSkgTlNTZWdtZW50ZWRDb250cm9sICp0ZXh0U3R5bGU7CitAcHJvcGVydHkg
KHJlYWRvbmx5LCBzdHJvbmcsIG51bGxhYmxlKSBOU1NlZ21lbnRlZENvbnRyb2wgKnRleHRBbGln
bm1lbnRzOworQHByb3BlcnR5IChudWxsYWJsZSwgc3Ryb25nKSBOU1ZpZXdDb250cm9sbGVyICp0
ZXh0TGlzdFZpZXdDb250cm9sbGVyOworQHByb3BlcnR5IEJPT0wgdXNlc05hcnJvd1RleHRTdHls
ZUl0ZW07CisKKy0gKG51bGxhYmxlIE5TVG91Y2hCYXJJdGVtICopaXRlbUZvcklkZW50aWZpZXI6
KG51bGxhYmxlIE5TU3RyaW5nICopaWRlbnRpZmllcjsKKworQGVuZAorCisjZGVmaW5lIE5TVG91
Y2hCYXJXaWxsRW50ZXJDdXN0b21pemF0aW9uIEAiTlNUb3VjaEJhcldpbGxFbnRlckN1c3RvbWl6
YXRpb24iCisjZGVmaW5lIE5TVG91Y2hCYXJEaWRFeGl0Q3VzdG9taXphdGlvbiBAIk5TVG91Y2hC
YXJEaWRFeGl0Q3VzdG9taXphdGlvbiIKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECisKKyNlbmRp
ZiAvLyBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKSAmJiBIQVZFKFRPVUNIX0JBUikKKyNlbmRpZiAv
LyBQTEFURk9STShNQUMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvbWFjL05T
U3BlbGxDaGVja2VyU1BJLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
c3BpL21hYy9OU1NwZWxsQ2hlY2tlclNQSS5oCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxDaGVja2VyU1BJLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDYgKzMwLDcgQEAKIC8vIEZJWE1FOiBUaGlzIGhlYWRlciBzaG91bGQgaW5jbHVk
ZSBzeXN0ZW0gaGVhZGVycyB3aGVuIHBvc3NpYmxlLgogCiBleHRlcm4gTlNTdHJpbmcgKk5TVGV4
dENoZWNraW5nSW5zZXJ0aW9uUG9pbnRLZXk7CitleHRlcm4gTlNOb3RpZmljYXRpb25OYW1lIGNv
bnN0IE5TU3BlbGxDaGVja2VyRGlkQ2hhbmdlQXV0b21hdGljVGV4dENvbXBsZXRpb25Ob3RpZmlj
YXRpb247CiAKIEBpbnRlcmZhY2UgTlNTcGVsbENoZWNrZXIgKCkKIC0gKE5TSW50ZWdlcilyZXF1
ZXN0Q2FuZGlkYXRlc0ZvclNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2Upc2VsZWN0ZWRSYW5nZSBpblN0
cmluZzooTlNTdHJpbmcgKilzdHJpbmdUb0NoZWNrIHR5cGVzOihOU1RleHRDaGVja2luZ1R5cGVz
KWNoZWNraW5nVHlwZXMgb3B0aW9uczooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKW9w
dGlvbnMgaW5TcGVsbERvY3VtZW50V2l0aFRhZzooTlNJbnRlZ2VyKXRhZyBjb21wbGV0aW9uSGFu
ZGxlcjoodm9pZCAoXikoTlNJbnRlZ2VyIHNlcXVlbmNlTnVtYmVyLCBOU0FycmF5PE5TVGV4dENo
ZWNraW5nUmVzdWx0ICo+ICpjYW5kaWRhdGVzKSljb21wbGV0aW9uSGFuZGxlcjsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDkwIEBACisyMDE2LTExLTA0ICBCZXRoIERha2luICA8YmRh
a2luQGFwcGxlLmNvbT4KKworICAgICAgICBTdXBwb3J0IFRvdWNoQmFyIGluIFdlYktpdAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NDM3CisgICAg
ICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjg4NzY1MjQK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tWaWV3UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJWaWV3Lm1tOgorICAgICAgICAoLVtXS1dlYlZpZXcgbWFrZVRvdWNoQmFyXSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtXSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfd2ViX2RpZEFkZE1lZGlhQ29udHJvbHNNYW5hZ2VyOl0pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX3dlYl9kaWRSZW1vdmVNZWRpYUNvbnRyb2xzTWFuYWdlcl0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX2ludGVyYWN0V2l0aE1lZGlhQ29udHJvbHNGb3JUZXN0aW5n
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNW
aWV3Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXdd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9hZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Ol0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX3JlbW92ZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXdd
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAgICgtW1dLVmlldyBt
YWtlVG91Y2hCYXJdKToKKyAgICAgICAgKC1bV0tWaWV3IGNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0
ZW1dKToKKyAgICAgICAgKC1bV0tWaWV3IF93ZWJfZGlkQWRkTWVkaWFDb250cm9sc01hbmFnZXI6
XSk6CisgICAgICAgICgtW1dLVmlldyBfd2ViX2RpZFJlbW92ZU1lZGlhQ29udHJvbHNNYW5hZ2Vy
XSk6CisgICAgICAgICgtW1dLVmlldyBfd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3XSk6
CisgICAgICAgICgtW1dLVmlldyBfc2V0V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Ol0p
OgorICAgICAgICAoLVtXS1ZpZXcgX21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXddKToKKyAgICAg
ICAgKC1bV0tWaWV3IF9hZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Ol0pOgorICAgICAgICAo
LVtXS1ZpZXcgX3JlbW92ZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXddKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0lt
cGw6OmN1cnJlbnRUb3VjaEJhcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjbGll
bnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3SW1wbDo6c2V0Q2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldElzQ3VzdG9taXppbmdUb3VjaEJhcik6CisgICAg
ICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tOgorICAgICAgICAoLVtXS1RleHRM
aXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciBpbml0V2l0aFdlYlZpZXdJbXBsOl0pOgorICAgICAg
ICAoLVtXS1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciBkaWREZXN0cm95Vmlld10pOgor
ICAgICAgICAoLVtXS1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciBfc2VsZWN0TGlzdDpd
KToKKyAgICAgICAgKC1bV0tUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgc2V0Q3VycmVu
dExpc3RUeXBlOl0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIGlu
aXRXaXRoV2ViVmlld0ltcGw6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRy
b2xsZXIgZGlkRGVzdHJveVZpZXddKToKKyAgICAgICAgKC1bV0tUZXh0VG91Y2hCYXJJdGVtQ29u
dHJvbGxlciB0b3VjaEJhcjptYWtlSXRlbUZvcklkZW50aWZpZXI6XSk6CisgICAgICAgICgtW1dL
VGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgaXRlbUZvcklkZW50aWZpZXI6XSk6CisgICAgICAg
ICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRl
bTplbmRTZWxlY3RpbmdDYW5kaWRhdGVBdEluZGV4Ol0pOgorICAgICAgICAoLVtXS1RleHRUb3Vj
aEJhckl0ZW1Db250cm9sbGVyIGNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW06Y2hhbmdlZENhbmRp
ZGF0ZUxpc3RWaXNpYmlsaXR5Ol0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250
cm9sbGVyIHRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlcl0pOgorICAgICAgICAoLVtXS1Rl
eHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFRleHRJc0JvbGQ6XSk6CisgICAgICAgICgtW1dL
VGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzSXRhbGljOl0pOgorICAgICAgICAo
LVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFRleHRJc1VuZGVybGluZWQ6XSk6Cisg
ICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgX3drQ2hhbmdlVGV4dFN0eWxl
Ol0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldEN1cnJlbnRU
ZXh0QWxpZ25tZW50Ol0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVy
IF93a0NoYW5nZVRleHRBbGlnbm1lbnQ6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRl
bUNvbnRyb2xsZXIgdGV4dENvbG9yXSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNv
bnRyb2xsZXIgc2V0VGV4dENvbG9yOl0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1D
b250cm9sbGVyIF93a0NoYW5nZUNvbG9yOl0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0
ZW1Db250cm9sbGVyIHRleHRMaXN0Vmlld0NvbnRyb2xsZXJdKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6Om1ha2VUb3VjaEJhcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBs
OjpjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0lt
cGw6Om1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6dXNlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjpkaXNtaXNzVGV4dFRvdWNoQmFyUG9wb3Zlckl0ZW1XaXRoSWRlbnRpZmllcik6
CisgICAgICAgIChXZWJLaXQ6OnRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25BbGxvd2VkSWRlbnRp
ZmllcnMpOgorICAgICAgICAoV2ViS2l0OjpwbGFpblRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25E
ZWZhdWx0SXRlbUlkZW50aWZpZXJzKToKKyAgICAgICAgKFdlYktpdDo6cmljaFRleHRUb3VjaEJh
ckN1c3RvbWl6YXRpb25EZWZhdWx0SXRlbUlkZW50aWZpZXJzKToKKyAgICAgICAgKFdlYktpdDo6
dG91Y2hCYXJEaWRFeGl0Q3VzdG9taXphdGlvbik6CisgICAgICAgIChXZWJLaXQ6OnRvdWNoQmFy
V2lsbEVudGVyQ3VzdG9taXphdGlvbik6CisgICAgICAgIChXZWJLaXQ6OmRpZENoYW5nZUF1dG9t
YXRpY1RleHRDb21wbGV0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0
ZVRvdWNoQmFyQW5kUmVmcmVzaFRleHRCYXJJZGVudGlmaWVycyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXdJbXBsOjpzZXRVcFRleHRUb3VjaEJhcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjppc1JpY2hseUVkaXRhYmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OnRleHRUb3VjaEJhcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVUZXh0
VG91Y2hCYXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dXBkYXRlTWVkaWFUb3Vj
aEJhcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpmb3JjZVJlcXVlc3RDYW5kaWRh
dGVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVUb3Vj
aEJhcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzaG91bGRSZXF1ZXN0Q2FuZGlk
YXRlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzaG93Q2FuZGlkYXRlcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp3ZWJWaWV3SW1wbEFkZGl0aW9uc1dpbGxEZXN0
cm95Vmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRFZGl0YWJsZUVsZW1l
bnRJc0ZvY3VzZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YmVjb21lRmlyc3RS
ZXNwb25kZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2VsZWN0aW9uRGlkQ2hh
bmdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnZpZGVvQ29udHJvbHNNYW5hZ2Vy
RGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0ZVdlYlZpZXdJ
bXBsQWRkaXRpb25zKTogRGVsZXRlZC4KKwogMjAxNi0xMS0wNCAgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcg
b3V0IHIyMDgyOTMuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
Vmlld1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLVmlld1ByaXZhdGUuaAkocmV2aXNpb24gMjA4NDA1KQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ZpZXdQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDYgKzMxLDggQEAKICNpbXBvcnQgPFdlYktpdC9XS1ZpZXcuaD4KICNpbXBvcnQgPFdlYktp
dC9fV0tPdmVybGF5U2Nyb2xsYmFyU3R5bGUuaD4KIAorQGNsYXNzIEFWRnVuY3Rpb25CYXJTY3J1
YmJlcjsKKwogQGludGVyZmFjZSBXS1ZpZXcgKFByaXZhdGUpCiAKIC8qIEMgU1BJIHN1cHBvcnQu
ICovCkBAIC0xMzIsNiArMTM0LDExIEBACiAKIC0gKHZvaWQpX2dlc3R1cmVFdmVudFdhc05vdEhh
bmRsZWRCeVdlYkNvcmU6KE5TRXZlbnQgKilldmVudDsKIAorQHByb3BlcnR5IChub25hdG9taWMs
IHJlYWR3cml0ZSwgc2V0dGVyPV9zZXRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6KSBC
T09MIF93YW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc7CitAcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIEFWRnVuY3Rpb25CYXJTY3J1YmJlciAqX21lZGlhUGxheWJhY2tDb250cm9s
c1ZpZXc7CistICh2b2lkKV9hZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OihBVkZ1bmN0aW9u
QmFyU2NydWJiZXIgKiltZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OworLSAodm9pZClfcmVtb3Zl
TWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzsKKwogQGVuZAogCiAjZW5kaWYgLy8gIVRBUkdFVF9P
U19JUEhPTkUKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJW
aWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJWaWV3Lm1tCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTc0LDcgKzE3NCwx
MiBAQCBzdGF0aWMgY29uc3QgdWludDMyX3QgZmlyc3RTREtWZXJzaW9uV2l0CiAKIEBpbnRlcmZh
Y2UgV0tXZWJWaWV3ICgpIDxXZWJWaWV3SW1wbERlbGVnYXRlLCBOU1RleHRJbnB1dENsaWVudD4K
IEBlbmQKLSNlbmRpZgorCisjaWYgSEFWRShUT1VDSF9CQVIpCitAaW50ZXJmYWNlIFdLV2ViVmll
dyAoKSA8TlNUb3VjaEJhclByb3ZpZGVyPgorQGVuZAorI2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFS
KQorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogc3RhdGljIEhhc2hNYXA8V2ViS2l0OjpXZWJQ
YWdlUHJveHkqLCBXS1dlYlZpZXcgKj4mIHBhZ2VUb1ZpZXdNYXAoKQogewpAQCAtMzE1NSw2ICsz
MTYwLDM4IEBAIC0gKHZvaWQpX3dlYl9nZXN0dXJlRXZlbnRXYXNOb3RIYW5kbGVkQnkKIAogI2Vu
ZGlmIC8vIFBMQVRGT1JNKE1BQykKIAorI2lmIEhBVkUoVE9VQ0hfQkFSKQorCitAZHluYW1pYyB0
b3VjaEJhcjsKKworLSAoTlNUb3VjaEJhciAqKW1ha2VUb3VjaEJhcgoreworICAgIHJldHVybiBf
aW1wbC0+bWFrZVRvdWNoQmFyKCk7Cit9CisKKy0gKE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRl
bSAqKWNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0KK3sKKyAgICByZXR1cm4gX2ltcGwtPmNhbmRp
ZGF0ZUxpc3RUb3VjaEJhckl0ZW0oKTsKK30KKworLSAodm9pZClfd2ViX2RpZEFkZE1lZGlhQ29u
dHJvbHNNYW5hZ2VyOihpZCljb250cm9sc01hbmFnZXIKK3sKKyAgICBbc2VsZiBfYWRkTWVkaWFQ
bGF5YmFja0NvbnRyb2xzVmlldzpjb250cm9sc01hbmFnZXJdOworfQorCistICh2b2lkKV93ZWJf
ZGlkUmVtb3ZlTWVkaWFDb250cm9sc01hbmFnZXIKK3sKKyAgICBbc2VsZiBfcmVtb3ZlTWVkaWFQ
bGF5YmFja0NvbnRyb2xzVmlld107Cit9CisKKy0gKHZvaWQpX2ludGVyYWN0V2l0aE1lZGlhQ29u
dHJvbHNGb3JUZXN0aW5nCit7CisgICAgW3NlbGYgX3NldFdhbnRzTWVkaWFQbGF5YmFja0NvbnRy
b2xzVmlldzpZRVNdOworICAgIFtzZWxmIG1ha2VUb3VjaEJhcl07Cit9CisKKyNlbmRpZiAvLyBI
QVZFKFRPVUNIX0JBUikKKwogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV0tXZWJWaWV3IChXS1By
aXZhdGUpCkBAIC00NTI5LDYgKzQ1NjYsNDEgQEAgLSAodm9pZClzZXRVc2VySW50ZXJmYWNlTGF5
b3V0RGlyZWN0aW9uOgogICAgIF9pbXBsLT5zZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9u
KHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24pOwogfQogCistIChCT09MKV93YW50c01lZGlh
UGxheWJhY2tDb250cm9sc1ZpZXcKK3sKKyNpZiBIQVZFKFRPVUNIX0JBUikKKyAgICByZXR1cm4g
X2ltcGwtPmNsaWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpOworI2Vsc2UKKyAg
ICByZXR1cm4gTk87CisjZW5kaWYKK30KKworLSAodm9pZClfc2V0V2FudHNNZWRpYVBsYXliYWNr
Q29udHJvbHNWaWV3OihCT09MKXdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldworeworI2lm
IEhBVkUoVE9VQ0hfQkFSKQorICAgIF9pbXBsLT5zZXRDbGllbnRXYW50c01lZGlhUGxheWJhY2tD
b250cm9sc1ZpZXcod2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KTsKKyNlbmRpZgorfQor
CistIChBVkZ1bmN0aW9uQmFyU2NydWJiZXIgKilfbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldwor
eworI2lmIEhBVkUoVE9VQ0hfQkFSKQorICAgIGlmICghX2ltcGwtPmNsaWVudFdhbnRzTWVkaWFQ
bGF5YmFja0NvbnRyb2xzVmlldygpKQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBf
aW1wbC0+bWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpOworI2Vsc2UKKyAgICByZXR1cm4gbmls
OworI2VuZGlmCit9CisKKy0gKHZvaWQpX2FkZE1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6KEFW
RnVuY3Rpb25CYXJTY3J1YmJlciAqKW1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcKK3sKK30KKwor
LSAodm9pZClfcmVtb3ZlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldworeworfQorCiAjZW5kaWYK
IAogQGVuZApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZp
ZXdQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYlZpZXdQcml2YXRlLmgJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Miw2ICs1Miw3IEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9XS0ltbWVkaWF0
ZUEKIAogI2VuZGlmCiAKK0BjbGFzcyBBVkZ1bmN0aW9uQmFyU2NydWJiZXI7CiBAY2xhc3MgV0tC
cm93c2luZ0NvbnRleHRIYW5kbGU7CiBAY2xhc3MgX1dLRnJhbWVIYW5kbGU7CiBAY2xhc3MgX1dL
SGl0VGVzdFJlc3VsdDsKQEAgLTIwMiw2ICsyMDMsMTIgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50
ZWdlciwgX1dLSW1tZWRpYXRlQQogLSAoTlNQcmludE9wZXJhdGlvbiAqKV9wcmludE9wZXJhdGlv
bldpdGhQcmludEluZm86KE5TUHJpbnRJbmZvICopcHJpbnRJbmZvOwogLSAoTlNQcmludE9wZXJh
dGlvbiAqKV9wcmludE9wZXJhdGlvbldpdGhQcmludEluZm86KE5TUHJpbnRJbmZvICopcHJpbnRJ
bmZvIGZvckZyYW1lOihfV0tGcmFtZUhhbmRsZSAqKWZyYW1lSGFuZGxlIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3N4KDEwLjEyKSwgaW9zKDEwLjApKTsKIAorLy8gRklYTUU6IFRoaXMgU1BJIHNob3Vs
ZCBiZWNvbWUgYSBwYXJ0IG9mIHRoZSBXS1VJRGVsZWdhdGUuIHJkYXI6Ly9wcm9ibGVtLzI2NTYx
NTM3CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZHdyaXRlLCBzZXR0ZXI9X3NldFdhbnRzTWVk
aWFQbGF5YmFja0NvbnRyb2xzVmlldzopIEJPT0wgX3dhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xz
VmlldyBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSk7CitAcHJvcGVydHkgKG5v
bmF0b21pYywgcmVhZG9ubHkpIEFWRnVuY3Rpb25CYXJTY3J1YmJlciAqX21lZGlhUGxheWJhY2tD
b250cm9sc1ZpZXcgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSkpOworLSAodm9p
ZClfYWRkTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzooQVZGdW5jdGlvbkJhclNjcnViYmVyICop
bWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNf
VEJBKSk7CistICh2b2lkKV9yZW1vdmVNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3IFdLX0FQSV9B
VkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpKTsKKwogI2VuZGlmCiAKIC0gKFdLTmF2aWdhdGlv
biAqKV9yZWxvYWRXaXRob3V0Q29udGVudEJsb2NrZXJzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4
KDEwLjEyKSwgaW9zKDEwLjApKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
bWFjL1dLVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L21hYy9XS1ZpZXcubW0JKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsMTEgQEAg
QGludGVyZmFjZSBXS1ZpZXdEYXRhIDogTlNPYmplY3QgewogQGludGVyZmFjZSBXS1ZpZXcgKCkg
PFdlYlZpZXdJbXBsRGVsZWdhdGU+CiBAZW5kCiAKKyNpZiBIQVZFKFRPVUNIX0JBUikKK0BpbnRl
cmZhY2UgV0tWaWV3ICgpIDxOU1RvdWNoQmFyUHJvdmlkZXI+CitAZW5kCisjZW5kaWYKKwogQGlt
cGxlbWVudGF0aW9uIFdLVmlldwogCiAjaWYgV0tfQVBJX0VOQUJMRUQKQEAgLTk3Nyw2ICs5ODIs
MzIgQEAgLSAodm9pZClfZGlkVXBkYXRlQ2FuZGlkYXRlTGlzdFZpc2liaWxpdAogewogfQogCisj
aWYgSEFWRShUT1VDSF9CQVIpCisKK0BkeW5hbWljIHRvdWNoQmFyOworCistIChOU1RvdWNoQmFy
ICopbWFrZVRvdWNoQmFyCit7CisgICAgcmV0dXJuIF9kYXRhLT5faW1wbC0+bWFrZVRvdWNoQmFy
KCk7Cit9CisKKy0gKE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSAqKWNhbmRpZGF0ZUxpc3RU
b3VjaEJhckl0ZW0KK3sKKyAgICByZXR1cm4gX2RhdGEtPl9pbXBsLT5jYW5kaWRhdGVMaXN0VG91
Y2hCYXJJdGVtKCk7Cit9CisKKy0gKHZvaWQpX3dlYl9kaWRBZGRNZWRpYUNvbnRyb2xzTWFuYWdl
cjooaWQpY29udHJvbHNNYW5hZ2VyCit7CisgICAgW3NlbGYgX2FkZE1lZGlhUGxheWJhY2tDb250
cm9sc1ZpZXc6Y29udHJvbHNNYW5hZ2VyXTsKK30KKworLSAodm9pZClfd2ViX2RpZFJlbW92ZU1l
ZGlhQ29udHJvbHNNYW5hZ2VyCit7CisgICAgW3NlbGYgX3JlbW92ZU1lZGlhUGxheWJhY2tDb250
cm9sc1ZpZXddOworfQorCisjZW5kaWYgLy8gSEFWRShUT1VDSF9CQVIpCisKIEBlbmQKIAogQGlt
cGxlbWVudGF0aW9uIFdLVmlldyAoUHJpdmF0ZSkKQEAgLTE0NjcsMTAgKzE0OTgsNDEgQEAgLSAo
dm9pZClzZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOgogICAgIF9kYXRhLT5faW1wbC0+
c2V0VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbih1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0
aW9uKTsKIH0KIAotQGVuZAorLSAoQk9PTClfd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3
Cit7CisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgcmV0dXJuIF9kYXRhLT5faW1wbC0+Y2xpZW50
V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCk7CisjZWxzZQorICAgIHJldHVybiBOTzsK
KyNlbmRpZgorfQorCistICh2b2lkKV9zZXRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6
KEJPT0wpd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Cit7CisjaWYgSEFWRShUT1VDSF9C
QVIpCisgICAgX2RhdGEtPl9pbXBsLT5zZXRDbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9s
c1ZpZXcod2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KTsKKyNlbmRpZgorfQogCi0jaWYg
UExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIw
MCAmJiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2ltcG9ydCA8V2ViS2l0QWRkaXRpb25zL1dL
Vmlld0FkZGl0aW9ucy5tbT4KKy0gKEFWRnVuY3Rpb25CYXJTY3J1YmJlciAqKV9tZWRpYVBsYXli
YWNrQ29udHJvbHNWaWV3Cit7CisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgaWYgKCFfZGF0YS0+
X2ltcGwtPmNsaWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpKQorICAgICAgICBy
ZXR1cm4gbmlsOworICAgIHJldHVybiBfZGF0YS0+X2ltcGwtPm1lZGlhUGxheWJhY2tDb250cm9s
c1ZpZXcoKTsKKyNlbHNlCisgICAgcmV0dXJuIG5pbDsKICNlbmRpZgorfQorCistICh2b2lkKV9h
ZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OihBVkZ1bmN0aW9uQmFyU2NydWJiZXIgKiltZWRp
YVBsYXliYWNrQ29udHJvbHNWaWV3Cit7Cit9CisKKy0gKHZvaWQpX3JlbW92ZU1lZGlhUGxheWJh
Y2tDb250cm9sc1ZpZXcKK3sKK30KKworQGVuZAogCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLmgJKHJl
dmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1MiwxNyBAQCBPQkpDX0NMQVNTIFdLV2Vi
VmlldzsKIE9CSkNfQ0xBU1MgV0tXaW5kb3dWaXNpYmlsaXR5T2JzZXJ2ZXI7CiBPQkpDX0NMQVNT
IF9XS1RodW1ibmFpbFZpZXc7CiAKLSNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKSAmJiBfX01B
Q19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMAotI2ltcG9ydCA8V2ViS2l0QWRk
aXRpb25zL1dlYlZpZXdJbXBsQWRkaXRpb25zRGVjbGFyYXRpb25zLmg+Ci0jZW5kaWYKKyNpZiBI
QVZFKFRPVUNIX0JBUikKK09CSkNfQ0xBU1MgQVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNQ
cm92aWRlcjsKK09CSkNfQ0xBU1MgQVZGdW5jdGlvbkJhclNjcnViYmVyOworT0JKQ19DTEFTUyBO
U0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW07CitPQkpDX0NMQVNTIE5TQ3VzdG9tVG91Y2hCYXJJ
dGVtOworT0JKQ19DTEFTUyBOU1RvdWNoQmFyOworT0JKQ19DTEFTUyBOU1RvdWNoQmFySXRlbTsK
K09CSkNfQ0xBU1MgTlNQb3BvdmVyVG91Y2hCYXJJdGVtOworT0JKQ19DTEFTUyBXS1RleHRUb3Vj
aEJhckl0ZW1Db250cm9sbGVyOworT0JKQ19DTEFTUyBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdl
cjsKKyNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikKIAogQHByb3RvY29sIFdlYlZpZXdJbXBsRGVs
ZWdhdGUKIApAQCAtNDgwLDcgKzQ4OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJpZ2h0TW91c2VE
cmFnZ2VkKE5TRXZlbnQgKik7CiAgICAgdm9pZCByaWdodE1vdXNlVXAoTlNFdmVudCAqKTsKIAot
ICAgIHZvaWQgdXBkYXRlV2ViVmlld0ltcGxBZGRpdGlvbnMoKTsKKyAgICB2b2lkIHVwZGF0ZVRv
dWNoQmFyKCk7CiAgICAgdm9pZCBmb3JjZVJlcXVlc3RDYW5kaWRhdGVzRm9yVGVzdGluZygpOwog
ICAgIGJvb2wgc2hvdWxkUmVxdWVzdENhbmRpZGF0ZXMoKSBjb25zdDsKICAgICB2b2lkIHNob3dD
YW5kaWRhdGVzKE5TQXJyYXkgKmNhbmRpZGF0ZXMsIE5TU3RyaW5nICosIE5TUmVjdCByZWN0T2ZU
eXBlZFN0cmluZywgTlNSYW5nZSBzZWxlY3RlZFJhbmdlLCBOU1ZpZXcgKiwgdm9pZCAoXmNvbXBs
ZXRpb25IYW5kbGVyKShOU1RleHRDaGVja2luZ1Jlc3VsdCAqYWNjZXB0ZWRDYW5kaWRhdGUpKTsK
QEAgLTQ5NiwxMiArNTA0LDU0IEBAIHB1YmxpYzoKIAogI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9N
SU5fUkVRVUlSRUQgPj0gMTAxMjAwIAogICAgIHZvaWQgaGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUo
TlNUZXh0Q2hlY2tpbmdSZXN1bHQgKmFjY2VwdGVkQ2FuZGlkYXRlKTsKLSNpZiBVU0UoQVBQTEVf
SU5URVJOQUxfU0RLKQotI2ltcG9ydCA8V2ViS2l0QWRkaXRpb25zL1dlYlZpZXdJbXBsQWRkaXRp
b25zLmg+Ci0jZW5kaWYKICNlbmRpZgogCisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgTlNUb3Vj
aEJhciAqbWFrZVRvdWNoQmFyKCk7CisgICAgTlNUb3VjaEJhciAqY3VycmVudFRvdWNoQmFyKCkg
Y29uc3QgeyByZXR1cm4gbV9jdXJyZW50VG91Y2hCYXIuZ2V0KCk7IH0KKyAgICBOU0NhbmRpZGF0
ZUxpc3RUb3VjaEJhckl0ZW0gKmNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0oKSBjb25zdDsKKyAg
ICBBVkZ1bmN0aW9uQmFyU2NydWJiZXIgKm1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSBjb25z
dDsKKyAgICBOU1RvdWNoQmFyICp0ZXh0VG91Y2hCYXIoKSBjb25zdDsKKyAgICB2b2lkIGRpc21p
c3NUZXh0VG91Y2hCYXJQb3BvdmVySXRlbVdpdGhJZGVudGlmaWVyKE5TU3RyaW5nICopOworCisg
ICAgYm9vbCBjbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSBjb25zdCB7IHJl
dHVybiBtX2NsaWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzsgfQorICAgIHZvaWQg
c2V0Q2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KGJvb2wgY2xpZW50V2FudHNN
ZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KSB7IG1fY2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29u
dHJvbHNWaWV3ID0gY2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OyB9CisKKyAg
ICB2b2lkIHVwZGF0ZVRvdWNoQmFyQW5kUmVmcmVzaFRleHRCYXJJZGVudGlmaWVycygpOworICAg
IHZvaWQgc2V0SXNDdXN0b21pemluZ1RvdWNoQmFyKGJvb2wgaXNDdXN0b21pemluZ1RvdWNoQmFy
KSB7IG1faXNDdXN0b21pemluZ1RvdWNoQmFyID0gaXNDdXN0b21pemluZ1RvdWNoQmFyOyB9Owor
I2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFSKQorCiBwcml2YXRlOgorI2lmIEhBVkUoVE9VQ0hfQkFS
KQorICAgIHZvaWQgc2V0VXBUZXh0VG91Y2hCYXIoTlNUb3VjaEJhciAqKTsKKyAgICB2b2lkIHVw
ZGF0ZVRleHRUb3VjaEJhcigpOworICAgIHZvaWQgdXBkYXRlTWVkaWFUb3VjaEJhcigpOworCisg
ICAgYm9vbCB1c2VNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCkgY29uc3Q7CisgICAgYm9vbCBp
c1JpY2hseUVkaXRhYmxlKCkgY29uc3Q7CisKKyAgICBib29sIG1fY2xpZW50V2FudHNNZWRpYVBs
YXliYWNrQ29udHJvbHNWaWV3IHsgZmFsc2UgfTsKKyAgICBib29sIG1fY2FuQ3JlYXRlVG91Y2hC
YXJzIHsgZmFsc2UgfTsKKyAgICBib29sIG1fc3RhcnRlZExpc3RlbmluZ1RvQ3VzdG9taXphdGlv
bkV2ZW50cyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzVXBkYXRpbmdUZXh0VG91Y2hCYXIgeyBm
YWxzZSB9OworICAgIGJvb2wgbV9pc0N1c3RvbWl6aW5nVG91Y2hCYXIgeyBmYWxzZSB9OworCisg
ICAgUmV0YWluUHRyPE5TVG91Y2hCYXI+IG1fY3VycmVudFRvdWNoQmFyOworICAgIFJldGFpblB0
cjxOU1RvdWNoQmFyPiBtX3JpY2hUZXh0VG91Y2hCYXI7CisgICAgUmV0YWluUHRyPE5TVG91Y2hC
YXI+IG1fcGxhaW5UZXh0VG91Y2hCYXI7CisgICAgUmV0YWluUHRyPFdLVGV4dFRvdWNoQmFySXRl
bUNvbnRyb2xsZXI+IG1fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXI7CisgICAgUmV0YWluUHRy
PE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbT4gbV9yaWNoVGV4dENhbmRpZGF0ZUxpc3RUb3Vj
aEJhckl0ZW07CisgICAgUmV0YWluUHRyPE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbT4gbV9w
bGFpblRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtOworICAgIFJldGFpblB0cjxOU0FycmF5
PiBtX2VtcHR5Q2FuZGlkYXRlc0FycmF5OworICAgIFJldGFpblB0cjxXZWJQbGF5YmFja0NvbnRy
b2xzTWFuYWdlcj4gbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlcjsKKyAgICBSZXRhaW5QdHI8TlND
dXN0b21Ub3VjaEJhckl0ZW0+IG1fZXhpdEZ1bGxTY3JlZW5CdXR0b247CisKKyNpZiBFTkFCTEUo
V0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgUmV0YWluUHRyPEFWRnVuY3Rpb25C
YXJQbGF5YmFja0NvbnRyb2xzUHJvdmlkZXI+IG1fbWVkaWFUb3VjaEJhclByb3ZpZGVyOworICAg
IFJldGFpblB0cjxBVkZ1bmN0aW9uQmFyU2NydWJiZXI+IG1fbWVkaWFQbGF5YmFja0NvbnRyb2xz
VmlldzsKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisj
ZW5kaWYgLy8gSEFWRShUT1VDSF9CQVIpCisKICAgICBXZWFrUHRyPFdlYlZpZXdJbXBsPiBjcmVh
dGVXZWFrUHRyKCkgeyByZXR1cm4gbV93ZWFrUHRyRmFjdG9yeS5jcmVhdGVXZWFrUHRyKCk7IH0K
IAogICAgIGJvb2wgc3VwcG9ydHNBcmJpdHJhcnlMYXlvdXRNb2RlcygpIGNvbnN0OwpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQkocmV2aXNp
b24gMjA4NDA1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBs
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxMSArNjAsMTMgQEAKICNpbXBvcnQgIldlYkV2ZW50
RmFjdG9yeS5oIgogI2ltcG9ydCAiV2ViSW5zcGVjdG9yUHJveHkuaCIKICNpbXBvcnQgIldlYlBh
Z2VQcm94eS5oIgorI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCiAj
aW1wb3J0ICJXZWJQcm9jZXNzUG9vbC5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAj
aW1wb3J0ICJfV0tSZW1vdGVPYmplY3RSZWdpc3RyeUludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tU
aHVtYm5haWxWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgPEhJVG9vbGJveC9DYXJib25FdmVudHND
b3JlLmg+CisjaW1wb3J0IDxXZWJDb3JlL0FWS2l0U1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0FY
T2JqZWN0Q2FjaGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvQWN0aXZpdHlTdGF0ZS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9Db2xvck1hYy5oPgpAQCAtODAsNiArODIsNyBAQAogI2ltcG9ydCA8V2ViQ29y
ZS9OU0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyU1BJLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL05TU3BlbGxDaGVja2VyU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05TVGV4dEZpbmRlclNQ
SS5oPgorI2ltcG9ydCA8V2ViQ29yZS9OU1RvdWNoQmFyU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L05TV2luZG93U1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtRXZlbnRGYWN0b3J5TWFj
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+CkBAIC05MCwxNiArOTMsMjIgQEAK
ICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcuaD4KICNp
bXBvcnQgPFdlYkNvcmUvV2ViQ29yZUZ1bGxTY3JlZW5XaW5kb3cuaD4KICNpbXBvcnQgPFdlYkNv
cmUvV2ViQ29yZU5TU3RyaW5nRXh0cmFzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1dlYlBsYXliYWNr
Q29udHJvbHNNYW5hZ2VyLmg+CiAjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KICNp
bXBvcnQgPHN5cy9zdGF0Lmg+CiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbXBv
cnQgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KIAotI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREsp
Ci0jaW1wb3J0IDxXZWJLaXRBZGRpdGlvbnMvV2ViVmlld0ltcGxJbmNsdWRlcy5oPgotI2VuZGlm
CisjaWYgSEFWRShUT1VDSF9CQVIpICYmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFO
QUdFUikKK1NPRlRfTElOS19GUkFNRVdPUksoQVZLaXQpCitTT0ZUX0xJTktfQ0xBU1MoQVZLaXQs
IEFWRnVuY3Rpb25CYXJQbGF5YmFja0NvbnRyb2xzUHJvdmlkZXIpCitTT0ZUX0xJTktfQ0xBU1Mo
QVZLaXQsIEFWRnVuY3Rpb25CYXJTY3J1YmJlcikKKyNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikg
JiYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQogCiBTT0ZUX0xJTktfQ09O
U1RBTlRfTUFZX0ZBSUwoTG9va3VwLCBMVU5vdGlmaWNhdGlvblBvcG92ZXJXaWxsQ2xvc2UsIE5T
U3RyaW5nICopCiAKK05TU3RyaW5nICogY29uc3QgV0tNZWRpYUV4aXRGdWxsU2NyZWVuSXRlbSA9
IEAiV0tNZWRpYUV4aXRGdWxsU2NyZWVuSXRlbSI7CisKIEBpbnRlcmZhY2UgTlNBcHBsaWNhdGlv
biAoKQogLSAoQk9PTClpc1NwZWFraW5nOwogLSAodm9pZClzcGVha1N0cmluZzooTlNTdHJpbmcg
KilzdHJpbmc7CkBAIC00MzMsMTIgKzQ0Miw2OTYgQEAgLSAoQk9PTCl0cnlUb1BlcmZvcm06KFNF
TClhY3Rpb24gd2l0aDooaQogCiBAZW5kCiAKLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID49IDEwMTIwMCAmJiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2ltcG9ydCA8V2Vi
S2l0QWRkaXRpb25zL1dlYlZpZXdJbXBsQWRkaXRpb25zLm1tPgordXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKKworI2lmIEhBVkUoVE9VQ0hfQkFSKQorCitAaW50ZXJmYWNlIFdLVGV4dExpc3RUb3Vj
aEJhclZpZXdDb250cm9sbGVyIDogTlNWaWV3Q29udHJvbGxlciB7CisgICAgTGlzdFR5cGUgX2N1
cnJlbnRMaXN0VHlwZTsKKworQHByaXZhdGUKKyAgICBXZWJWaWV3SW1wbCogX3dlYlZpZXdJbXBs
OworfQorCitAcHJvcGVydHkgKG5vbmF0b21pYykgTGlzdFR5cGUgY3VycmVudExpc3RUeXBlOwor
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWV3SW1wbDooV2ViVmlld0ltcGwqKXdlYlZp
ZXdJbXBsOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1RleHRMaXN0VG91Y2hCYXJWaWV3
Q29udHJvbGxlcgorCitAc3ludGhlc2l6ZSBjdXJyZW50TGlzdFR5cGU9X2N1cnJlbnRMaXN0VHlw
ZTsKKworc3RhdGljIGNvbnN0IGRvdWJsZSBsaXN0Q29udHJvbFNlZ21lbnRXaWR0aCA9IDY3Owor
c3RhdGljIGNvbnN0IGRvdWJsZSBleGl0RnVsbFNjcmVlbkJ1dHRvbldpZHRoID0gNjQ7CisKK3N0
YXRpYyBjb25zdCB1bnNpZ25lZCBub0xpc3RTZWdtZW50ID0gMDsKK3N0YXRpYyBjb25zdCB1bnNp
Z25lZCB1bm9yZGVyZWRMaXN0U2VnbWVudCA9IDE7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgb3Jk
ZXJlZExpc3RTZWdtZW50ID0gMjsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViVmlld0lt
cGw6KFdlYlZpZXdJbXBsKil3ZWJWaWV3SW1wbAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIg
aW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX3dlYlZpZXdJbXBsID0gd2ViVmll
d0ltcGw7CisKKyAgICBOU1NlZ21lbnRlZENvbnRyb2wgKmluc2VydExpc3RDb250cm9sID0gW05T
U2VnbWVudGVkQ29udHJvbCBzZWdtZW50ZWRDb250cm9sV2l0aExhYmVsczpAWyBXZWJDb3JlOjpp
bnNlcnRMaXN0VHlwZU5vbmUoKSwgV2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVCdWxsZXRlZCgpLCBX
ZWJDb3JlOjppbnNlcnRMaXN0VHlwZU51bWJlcmVkKCkgXSB0cmFja2luZ01vZGU6TlNTZWdtZW50
U3dpdGNoVHJhY2tpbmdTZWxlY3RPbmUgdGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3Rvcihfc2Vs
ZWN0TGlzdDopXTsKKyAgICBbaW5zZXJ0TGlzdENvbnRyb2wgc2V0V2lkdGg6bGlzdENvbnRyb2xT
ZWdtZW50V2lkdGggZm9yU2VnbWVudDpub0xpc3RTZWdtZW50XTsKKyAgICBbaW5zZXJ0TGlzdENv
bnRyb2wgc2V0V2lkdGg6bGlzdENvbnRyb2xTZWdtZW50V2lkdGggZm9yU2VnbWVudDp1bm9yZGVy
ZWRMaXN0U2VnbWVudF07CisgICAgW2luc2VydExpc3RDb250cm9sIHNldFdpZHRoOmxpc3RDb250
cm9sU2VnbWVudFdpZHRoIGZvclNlZ21lbnQ6b3JkZXJlZExpc3RTZWdtZW50XTsKKyAgICBpbnNl
cnRMaXN0Q29udHJvbC5mb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOjE1XTsKKworI3By
YWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25v
cmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorICAgIGlkIHNlZ21lbnRFbGVtZW50ID0g
TlNBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkRGVzY2VuZGFudChpbnNlcnRMaXN0Q29udHJvbCk7Cisg
ICAgTlNBcnJheSAqc2VnbWVudHMgPSBbc2VnbWVudEVsZW1lbnQgYWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlXTsKKyAgICBBU1NFUlQo
c2VnbWVudHMuY291bnQgPT0gMyk7CisgICAgW1tzZWdtZW50cyBvYmplY3RBdEluZGV4Om5vTGlz
dFNlZ21lbnRdIGFjY2Vzc2liaWxpdHlTZXRPdmVycmlkZVZhbHVlOldlYkNvcmU6Omluc2VydExp
c3RUeXBlTm9uZSgpIGZvckF0dHJpYnV0ZTpOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkF0dHJp
YnV0ZV07CisgICAgW1tzZWdtZW50cyBvYmplY3RBdEluZGV4OnVub3JkZXJlZExpc3RTZWdtZW50
XSBhY2Nlc3NpYmlsaXR5U2V0T3ZlcnJpZGVWYWx1ZTpXZWJDb3JlOjppbnNlcnRMaXN0VHlwZUJ1
bGxldGVkQWNjZXNzaWJpbGl0eVRpdGxlKCkgZm9yQXR0cmlidXRlOk5TQWNjZXNzaWJpbGl0eURl
c2NyaXB0aW9uQXR0cmlidXRlXTsKKyAgICBbW3NlZ21lbnRzIG9iamVjdEF0SW5kZXg6b3JkZXJl
ZExpc3RTZWdtZW50XSBhY2Nlc3NpYmlsaXR5U2V0T3ZlcnJpZGVWYWx1ZTpXZWJDb3JlOjppbnNl
cnRMaXN0VHlwZU51bWJlcmVkQWNjZXNzaWJpbGl0eVRpdGxlKCkgZm9yQXR0cmlidXRlOk5TQWNj
ZXNzaWJpbGl0eURlc2NyaXB0aW9uQXR0cmlidXRlXTsKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3Rp
YyBwb3AKKworICAgIHNlbGYudmlldyA9IGluc2VydExpc3RDb250cm9sOworCisgICAgcmV0dXJu
IHNlbGY7Cit9CisKKy0gKHZvaWQpZGlkRGVzdHJveVZpZXcKK3sKKyAgICBfd2ViVmlld0ltcGwg
PSBudWxscHRyOworfQorCistICh2b2lkKV9zZWxlY3RMaXN0OihpZClzZW5kZXIKK3sKKyAgICBp
ZiAoIV93ZWJWaWV3SW1wbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNTZWdtZW50ZWRDb250
cm9sICppbnNlcnRMaXN0Q29udHJvbCA9IChOU1NlZ21lbnRlZENvbnRyb2wgKilzZWxmLnZpZXc7
CisgICAgaWYgKGluc2VydExpc3RDb250cm9sLnNlbGVjdGVkU2VnbWVudCA9PSBub0xpc3RTZWdt
ZW50KSB7CisgICAgICAgIC8vIFRoZXJlIGlzIG5vICJyZW1vdmUgbGlzdCIgZWRpdCBjb21tYW5k
LCBidXQgSW5zZXJ0T3JkZXJlZExpc3QgYW5kIEluc2VydFVub3JkZXJlZExpc3QgYm90aAorICAg
ICAgICAvLyBiZWhhdmUgYXMgdG9nZ2xlcywgc28gd2UgY2FuIGludm9rZSB0aGUgYXBwcm9wcmlh
dGUgZWRpdCBjb21tYW5kIGRlcGVuZGluZyBvbiBvdXIgX2N1cnJlbnRMaXN0VHlwZQorICAgICAg
ICAvLyB0byByZW1vdmUgYW4gZXhpc3RpbmcgbGlzdC4gV2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0
aGluZyBpZiBfY3VycmVudExpc3RUeXBlIGlzIE5vTGlzdC4KKyAgICAgICAgaWYgKF9jdXJyZW50
TGlzdFR5cGUgPT0gT3JkZXJlZExpc3QpCisgICAgICAgICAgICBfd2ViVmlld0ltcGwtPnBhZ2Uo
KS5leGVjdXRlRWRpdENvbW1hbmQoQCJJbnNlcnRPcmRlcmVkTGlzdCIsIEAiIik7CisgICAgICAg
IGVsc2UgaWYgKF9jdXJyZW50TGlzdFR5cGUgPT0gVW5vcmRlcmVkTGlzdCkKKyAgICAgICAgICAg
IF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZChAIkluc2VydFVub3JkZXJl
ZExpc3QiLCBAIiIpOworICAgIH0gZWxzZSBpZiAoaW5zZXJ0TGlzdENvbnRyb2wuc2VsZWN0ZWRT
ZWdtZW50ID09IHVub3JkZXJlZExpc3RTZWdtZW50KQorICAgICAgICBfd2ViVmlld0ltcGwtPnBh
Z2UoKS5leGVjdXRlRWRpdENvbW1hbmQoQCJJbnNlcnRVbm9yZGVyZWRMaXN0IiwgQCIiKTsKKyAg
ICBlbHNlIGlmIChpbnNlcnRMaXN0Q29udHJvbC5zZWxlY3RlZFNlZ21lbnQgPT0gb3JkZXJlZExp
c3RTZWdtZW50KQorICAgICAgICBfd2ViVmlld0ltcGwtPnBhZ2UoKS5leGVjdXRlRWRpdENvbW1h
bmQoQCJJbnNlcnRPcmRlcmVkTGlzdCIsIEAiIik7CisKKyAgICBfd2ViVmlld0ltcGwtPmRpc21p
c3NUZXh0VG91Y2hCYXJQb3BvdmVySXRlbVdpdGhJZGVudGlmaWVyKE5TVG91Y2hCYXJJdGVtSWRl
bnRpZmllclRleHRMaXN0KTsKK30KKworLSAodm9pZClzZXRDdXJyZW50TGlzdFR5cGU6KExpc3RU
eXBlKWxpc3RUeXBlCit7CisgICAgTlNTZWdtZW50ZWRDb250cm9sICppbnNlcnRMaXN0Q29udHJv
bCA9IChOU1NlZ21lbnRlZENvbnRyb2wgKilzZWxmLnZpZXc7CisgICAgc3dpdGNoIChsaXN0VHlw
ZSkgeworICAgIGNhc2UgTm9MaXN0OgorICAgICAgICBbaW5zZXJ0TGlzdENvbnRyb2wgc2V0U2Vs
ZWN0ZWQ6WUVTIGZvclNlZ21lbnQ6bm9MaXN0U2VnbWVudF07CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgT3JkZXJlZExpc3Q6CisgICAgICAgIFtpbnNlcnRMaXN0Q29udHJvbCBzZXRTZWxlY3Rl
ZDpZRVMgZm9yU2VnbWVudDpvcmRlcmVkTGlzdFNlZ21lbnRdOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFVub3JkZXJlZExpc3Q6CisgICAgICAgIFtpbnNlcnRMaXN0Q29udHJvbCBzZXRTZWxl
Y3RlZDpZRVMgZm9yU2VnbWVudDp1bm9yZGVyZWRMaXN0U2VnbWVudF07CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIF9jdXJyZW50TGlzdFR5cGUgPSBsaXN0VHlwZTsKK30KKworQGVuZAor
CitAaW50ZXJmYWNlIFdLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgOiBOU1RleHRUb3VjaEJh
ckl0ZW1Db250cm9sbGVyIDxOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW1EZWxlZ2F0ZSwgTlNU
b3VjaEJhckRlbGVnYXRlPiB7CisgICAgQk9PTCBfdGV4dElzQm9sZDsKKyAgICBCT09MIF90ZXh0
SXNJdGFsaWM7CisgICAgQk9PTCBfdGV4dElzVW5kZXJsaW5lZDsKKyAgICBOU1RleHRBbGlnbm1l
bnQgX2N1cnJlbnRUZXh0QWxpZ25tZW50OworICAgIFJldGFpblB0cjxOU0NvbG9yPiBfdGV4dENv
bG9yOworICAgIFJldGFpblB0cjxXS1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlcj4gX3dr
VGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyOworCitAcHJpdmF0ZQorICAgIFdlYlZpZXdJ
bXBsKiBfd2ViVmlld0ltcGw7Cit9CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIHRleHRJ
c0JvbGQ7CitAcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCB0ZXh0SXNJdGFsaWM7CitAcHJvcGVy
dHkgKG5vbmF0b21pYykgQk9PTCB0ZXh0SXNVbmRlcmxpbmVkOworQHByb3BlcnR5IChub25hdG9t
aWMpIE5TVGV4dEFsaWdubWVudCBjdXJyZW50VGV4dEFsaWdubWVudDsKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCByZXRhaW4sIHJlYWR3cml0ZSkgTlNDb2xvciAqdGV4dENvbG9yOworCistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWV3SW1wbDooV2ViVmlld0ltcGwqKXdlYlZpZXdJbXBsOwor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlcgorCitA
c3ludGhlc2l6ZSB0ZXh0SXNCb2xkPV90ZXh0SXNCb2xkOworQHN5bnRoZXNpemUgdGV4dElzSXRh
bGljPV90ZXh0SXNJdGFsaWM7CitAc3ludGhlc2l6ZSB0ZXh0SXNVbmRlcmxpbmVkPV90ZXh0SXNV
bmRlcmxpbmVkOworQHN5bnRoZXNpemUgY3VycmVudFRleHRBbGlnbm1lbnQ9X2N1cnJlbnRUZXh0
QWxpZ25tZW50OworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWV3SW1wbDooV2ViVmll
d0ltcGwqKXdlYlZpZXdJbXBsCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisg
ICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfd2ViVmlld0ltcGwgPSB3ZWJWaWV3SW1wbDsKKwor
ICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRpZERlc3Ryb3lWaWV3Cit7CisgICAgW1tO
U05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmXTsK
KyAgICBfd2ViVmlld0ltcGwgPSBudWxscHRyOworICAgIFtfd2tUZXh0TGlzdFRvdWNoQmFyVmll
d0NvbnRyb2xsZXIgZGlkRGVzdHJveVZpZXddOworfQorCisjcHJhZ21hIG1hcmsgTlNUb3VjaEJh
ckRlbGVnYXRlCisKKy0gKE5TVG91Y2hCYXJJdGVtICopdG91Y2hCYXI6KE5TVG91Y2hCYXIgKil0
b3VjaEJhciBtYWtlSXRlbUZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcgorewor
ICAgIHJldHVybiBbc2VsZiBpdGVtRm9ySWRlbnRpZmllcjppZGVudGlmaWVyXTsKK30KKworLSAo
bnVsbGFibGUgTlNUb3VjaEJhckl0ZW0gKilpdGVtRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilp
ZGVudGlmaWVyCit7CisgICAgTlNUb3VjaEJhckl0ZW0gKml0ZW0gPSBbc3VwZXIgaXRlbUZvcklk
ZW50aWZpZXI6aWRlbnRpZmllcl07CisgICAgQk9PTCBpc1RleHRGb3JtYXRJdGVtID0gW2lkZW50
aWZpZXIgaXNFcXVhbFRvU3RyaW5nOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRGb3JtYXRd
OworCisgICAgaWYgKGlzVGV4dEZvcm1hdEl0ZW0gfHwgW2lkZW50aWZpZXIgaXNFcXVhbFRvU3Ry
aW5nOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRTdHlsZV0pCisgICAgICAgIHNlbGYudGV4
dFN0eWxlLmFjdGlvbiA9IEBzZWxlY3Rvcihfd2tDaGFuZ2VUZXh0U3R5bGU6KTsKKworICAgIGlm
IChpc1RleHRGb3JtYXRJdGVtIHx8IFtpZGVudGlmaWVyIGlzRXF1YWxUb1N0cmluZzpOU1RvdWNo
QmFySXRlbUlkZW50aWZpZXJUZXh0QWxpZ25tZW50XSkKKyAgICAgICAgc2VsZi50ZXh0QWxpZ25t
ZW50cy5hY3Rpb24gPSBAc2VsZWN0b3IoX3drQ2hhbmdlVGV4dEFsaWdubWVudDopOworCisgICAg
TlNDb2xvclBpY2tlclRvdWNoQmFySXRlbSAqY29sb3JQaWNrZXJJdGVtID0gbmlsOworICAgIGlm
IChbaWRlbnRpZmllciBpc0VxdWFsVG9TdHJpbmc6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4
dENvbG9yUGlja2VyXSAmJiBbaXRlbSBpc0tpbmRPZkNsYXNzOltOU0NvbG9yUGlja2VyVG91Y2hC
YXJJdGVtIGNsYXNzXV0pCisgICAgICAgIGNvbG9yUGlja2VySXRlbSA9IChOU0NvbG9yUGlja2Vy
VG91Y2hCYXJJdGVtICopaXRlbTsKKyAgICBpZiAoaXNUZXh0Rm9ybWF0SXRlbSkKKyAgICAgICAg
Y29sb3JQaWNrZXJJdGVtID0gc2VsZi5jb2xvclBpY2tlckl0ZW07CisgICAgaWYgKGNvbG9yUGlj
a2VySXRlbSkgeworICAgICAgICBjb2xvclBpY2tlckl0ZW0udGFyZ2V0ID0gc2VsZjsKKyAgICAg
ICAgY29sb3JQaWNrZXJJdGVtLmFjdGlvbiA9IEBzZWxlY3Rvcihfd2tDaGFuZ2VDb2xvcjopOwor
ICAgICAgICBjb2xvclBpY2tlckl0ZW0uc2hvd3NBbHBoYSA9IE5POworICAgIH0KKworICAgIHJl
dHVybiBpdGVtOworfQorCisjcHJhZ21hIG1hcmsgTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVt
RGVsZWdhdGUKKworLSAodm9pZCljYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtOihOU0NhbmRpZGF0
ZUxpc3RUb3VjaEJhckl0ZW0gKilhbkl0ZW0gZW5kU2VsZWN0aW5nQ2FuZGlkYXRlQXRJbmRleDoo
TlNJbnRlZ2VyKWluZGV4Cit7CisgICAgaWYgKGluZGV4ID09IE5TTm90Rm91bmQpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghX3dlYlZpZXdJbXBsKQorICAgICAgICByZXR1cm47CisKKyAg
ICBOU0FycmF5ICpjYW5kaWRhdGVzID0gYW5JdGVtLmNhbmRpZGF0ZXM7CisgICAgaWYgKChOU1VJ
bnRlZ2VyKWluZGV4ID49IGNhbmRpZGF0ZXMuY291bnQpCisgICAgICAgIHJldHVybjsKKworICAg
IGlkIGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZXNbaW5kZXhdOworICAgIEFTU0VSVChbY2FuZGlkYXRl
IGlzS2luZE9mQ2xhc3M6W05TVGV4dENoZWNraW5nUmVzdWx0IGNsYXNzXV0pOworCisgICAgX3dl
YlZpZXdJbXBsLT5oYW5kbGVBY2NlcHRlZENhbmRpZGF0ZSgoTlNUZXh0Q2hlY2tpbmdSZXN1bHQg
KiljYW5kaWRhdGUpOworfQorCistICh2b2lkKWNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW06KE5T
Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSAqKWFuSXRlbSBjaGFuZ2VkQ2FuZGlkYXRlTGlzdFZp
c2liaWxpdHk6KEJPT0wpaXNWaXNpYmxlCit7CisgICAgaWYgKCFfd2ViVmlld0ltcGwpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChpc1Zpc2libGUpCisgICAgICAgIF93ZWJWaWV3SW1wbC0+
cmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb25JZk5lZWRlZCgpOworCisgICAgX3dlYlZpZXdJ
bXBsLT51cGRhdGVUb3VjaEJhcigpOworfQorCisjcHJhZ21hIG1hcmsgTlNOb3RpZmljYXRpb25D
ZW50ZXIgb2JzZXJ2ZXJzCisKKy0gKHZvaWQpdG91Y2hCYXJEaWRFeGl0Q3VzdG9taXphdGlvbjoo
TlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBpZiAoIV93ZWJWaWV3SW1wbCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgX3dlYlZpZXdJbXBsLT5zZXRJc0N1c3RvbWl6aW5nVG91
Y2hCYXIoZmFsc2UpOworICAgIF93ZWJWaWV3SW1wbC0+dXBkYXRlVG91Y2hCYXIoKTsKK30KKwor
LSAodm9pZCl0b3VjaEJhcldpbGxFbnRlckN1c3RvbWl6YXRpb246KE5TTm90aWZpY2F0aW9uICop
bm90aWZpY2F0aW9uCit7CisgICAgaWYgKCFfd2ViVmlld0ltcGwpCisgICAgICAgIHJldHVybjsK
KworICAgIF93ZWJWaWV3SW1wbC0+c2V0SXNDdXN0b21pemluZ1RvdWNoQmFyKHRydWUpOworfQor
CistICh2b2lkKWRpZENoYW5nZUF1dG9tYXRpY1RleHRDb21wbGV0aW9uOihOU05vdGlmaWNhdGlv
biAqKW5vdGlmaWNhdGlvbgoreworICAgIGlmICghX3dlYlZpZXdJbXBsKQorICAgICAgICByZXR1
cm47CisKKyAgICBfd2ViVmlld0ltcGwtPnVwZGF0ZVRvdWNoQmFyQW5kUmVmcmVzaFRleHRCYXJJ
ZGVudGlmaWVycygpOworfQorCisKKyNwcmFnbWEgbWFyayBOU1RleHRUb3VjaEJhckl0ZW1Db250
cm9sbGVyCisKKy0gKFdLVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyICopdGV4dExpc3RU
b3VjaEJhclZpZXdDb250cm9sbGVyCit7CisgICAgcmV0dXJuIChXS1RleHRMaXN0VG91Y2hCYXJW
aWV3Q29udHJvbGxlciAqKVtzZWxmIHRleHRMaXN0Vmlld0NvbnRyb2xsZXJdOworfQorCistICh2
b2lkKXNldFRleHRJc0JvbGQ6KEJPT0wpYm9sZAoreworICAgIF90ZXh0SXNCb2xkID0gYm9sZDsK
KyAgICBpZiAoW3NlbGYudGV4dFN0eWxlIGlzU2VsZWN0ZWRGb3JTZWdtZW50OjBdICE9IF90ZXh0
SXNCb2xkKQorICAgICAgICBbc2VsZi50ZXh0U3R5bGUgc2V0U2VsZWN0ZWQ6X3RleHRJc0JvbGQg
Zm9yU2VnbWVudDowXTsKK30KKworLSAodm9pZClzZXRUZXh0SXNJdGFsaWM6KEJPT0wpaXRhbGlj
Cit7CisgICAgX3RleHRJc0l0YWxpYyA9IGl0YWxpYzsKKyAgICBpZiAoW3NlbGYudGV4dFN0eWxl
IGlzU2VsZWN0ZWRGb3JTZWdtZW50OjFdICE9IF90ZXh0SXNJdGFsaWMpCisgICAgICAgIFtzZWxm
LnRleHRTdHlsZSBzZXRTZWxlY3RlZDpfdGV4dElzSXRhbGljIGZvclNlZ21lbnQ6MV07Cit9CisK
Ky0gKHZvaWQpc2V0VGV4dElzVW5kZXJsaW5lZDooQk9PTCl1bmRlcmxpbmVkCit7CisgICAgX3Rl
eHRJc1VuZGVybGluZWQgPSB1bmRlcmxpbmVkOworICAgIGlmIChbc2VsZi50ZXh0U3R5bGUgaXNT
ZWxlY3RlZEZvclNlZ21lbnQ6Ml0gIT0gX3RleHRJc1VuZGVybGluZWQpCisgICAgICAgIFtzZWxm
LnRleHRTdHlsZSBzZXRTZWxlY3RlZDpfdGV4dElzVW5kZXJsaW5lZCBmb3JTZWdtZW50OjJdOwor
fQorCistICh2b2lkKV93a0NoYW5nZVRleHRTdHlsZTooaWQpc2VuZGVyCit7CisgICAgaWYgKCFf
d2ViVmlld0ltcGwpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChbc2VsZi50ZXh0U3R5bGUg
aXNTZWxlY3RlZEZvclNlZ21lbnQ6MF0gIT0gX3RleHRJc0JvbGQpIHsKKyAgICAgICAgX3RleHRJ
c0JvbGQgPSAhX3RleHRJc0JvbGQ7CisgICAgICAgIF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1
dGVFZGl0Q29tbWFuZChAIlRvZ2dsZUJvbGQiLCBAIiIpOworICAgIH0KKworICAgIGlmIChbc2Vs
Zi50ZXh0U3R5bGUgaXNTZWxlY3RlZEZvclNlZ21lbnQ6MV0gIT0gX3RleHRJc0l0YWxpYykgewor
ICAgICAgICBfdGV4dElzSXRhbGljID0gIV90ZXh0SXNJdGFsaWM7CisgICAgICAgIF93ZWJWaWV3
SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZCgiVG9nZ2xlSXRhbGljIiwgQCIiKTsKKyAg
ICB9CisKKyAgICBpZiAoW3NlbGYudGV4dFN0eWxlIGlzU2VsZWN0ZWRGb3JTZWdtZW50OjJdICE9
IF90ZXh0SXNVbmRlcmxpbmVkKSB7CisgICAgICAgIF90ZXh0SXNVbmRlcmxpbmVkID0gIV90ZXh0
SXNVbmRlcmxpbmVkOworICAgICAgICBfd2ViVmlld0ltcGwtPnBhZ2UoKS5leGVjdXRlRWRpdENv
bW1hbmQoIlRvZ2dsZVVuZGVybGluZSIsIEAiIik7CisgICAgfQorfQorCistICh2b2lkKXNldEN1
cnJlbnRUZXh0QWxpZ25tZW50OihOU1RleHRBbGlnbm1lbnQpYWxpZ25tZW50Cit7CisgICAgX2N1
cnJlbnRUZXh0QWxpZ25tZW50ID0gYWxpZ25tZW50OworICAgIFtzZWxmLnRleHRBbGlnbm1lbnRz
IHNlbGVjdFNlZ21lbnRXaXRoVGFnOl9jdXJyZW50VGV4dEFsaWdubWVudF07Cit9CisKKy0gKHZv
aWQpX3drQ2hhbmdlVGV4dEFsaWdubWVudDooaWQpc2VuZGVyCit7CisgICAgaWYgKCFfd2ViVmll
d0ltcGwpCisgICAgICAgIHJldHVybjsKKworICAgIE5TVGV4dEFsaWdubWVudCBhbGlnbm1lbnQg
PSAoTlNUZXh0QWxpZ25tZW50KVtzZWxmLnRleHRBbGlnbm1lbnRzLmNlbGwgdGFnRm9yU2VnbWVu
dDpbc2VsZi50ZXh0QWxpZ25tZW50cyBzZWxlY3RlZFNlZ21lbnRdXTsKKyAgICBzd2l0Y2ggKGFs
aWdubWVudCkgeworICAgIGNhc2UgTlNUZXh0QWxpZ25tZW50TGVmdDogeworICAgICAgICBfY3Vy
cmVudFRleHRBbGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRMZWZ0OworICAgICAgICBfd2ViVmll
d0ltcGwtPnBhZ2UoKS5leGVjdXRlRWRpdENvbW1hbmQoIkFsaWduTGVmdCIsIEAiIik7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIE5TVGV4dEFsaWdubWVudFJpZ2h0OiB7CisgICAg
ICAgIF9jdXJyZW50VGV4dEFsaWdubWVudCA9IE5TVGV4dEFsaWdubWVudFJpZ2h0OworICAgICAg
ICBfd2ViVmlld0ltcGwtPnBhZ2UoKS5leGVjdXRlRWRpdENvbW1hbmQoIkFsaWduUmlnaHQiLCBA
IiIpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBOU1RleHRBbGlnbm1lbnRDZW50
ZXI6IHsKKyAgICAgICAgX2N1cnJlbnRUZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25tZW50Q2Vu
dGVyOworICAgICAgICBfd2ViVmlld0ltcGwtPnBhZ2UoKS5leGVjdXRlRWRpdENvbW1hbmQoIkFs
aWduQ2VudGVyIiwgQCIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgTlNUZXh0
QWxpZ25tZW50SnVzdGlmaWVkOiB7CisgICAgICAgIF9jdXJyZW50VGV4dEFsaWdubWVudCA9IE5T
VGV4dEFsaWdubWVudEp1c3RpZmllZDsKKyAgICAgICAgX3dlYlZpZXdJbXBsLT5wYWdlKCkuZXhl
Y3V0ZUVkaXRDb21tYW5kKCJBbGlnbkp1c3RpZmllZCIsIEAiIik7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBfd2ViVmll
d0ltcGwtPmRpc21pc3NUZXh0VG91Y2hCYXJQb3BvdmVySXRlbVdpdGhJZGVudGlmaWVyKE5TVG91
Y2hCYXJJdGVtSWRlbnRpZmllclRleHRBbGlnbm1lbnQpOworfQorCistIChOU0NvbG9yICopdGV4
dENvbG9yCit7CisgICAgcmV0dXJuIF90ZXh0Q29sb3IuZ2V0KCk7Cit9CisKKy0gKHZvaWQpc2V0
VGV4dENvbG9yOihOU0NvbG9yICopY29sb3IKK3sKKyAgICBfdGV4dENvbG9yID0gY29sb3I7Cisg
ICAgc2VsZi5jb2xvclBpY2tlckl0ZW0uY29sb3IgPSBfdGV4dENvbG9yLmdldCgpOworfQorCist
ICh2b2lkKV93a0NoYW5nZUNvbG9yOihpZClzZW5kZXIKK3sKKyAgICBpZiAoIV93ZWJWaWV3SW1w
bCkKKyAgICAgICAgcmV0dXJuOworCisgICAgX3RleHRDb2xvciA9IHNlbGYuY29sb3JQaWNrZXJJ
dGVtLmNvbG9yOworICAgIF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZCgi
Rm9yZUNvbG9yIiwgV2ViQ29yZTo6Y29sb3JGcm9tTlNDb2xvcihfdGV4dENvbG9yLmdldCgpKS5z
ZXJpYWxpemVkKCkpOworfQorCistIChOU1ZpZXdDb250cm9sbGVyICopdGV4dExpc3RWaWV3Q29u
dHJvbGxlcgoreworICAgIGlmICghX3drVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyKQor
ICAgICAgICBfd2tUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgPSBhZG9wdE5TKFtbV0tU
ZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoV2ViVmlld0ltcGw6
X3dlYlZpZXdJbXBsXSk7CisgICAgcmV0dXJuIF93a1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJv
bGxlci5nZXQoKTsKK30KKworQGVuZAorCituYW1lc3BhY2UgV2ViS2l0IHsKK05TVG91Y2hCYXIg
KldlYlZpZXdJbXBsOjptYWtlVG91Y2hCYXIoKQoreworICAgIGlmICghbV9jYW5DcmVhdGVUb3Vj
aEJhcnMpIHsKKyAgICAgICAgbV9jYW5DcmVhdGVUb3VjaEJhcnMgPSB0cnVlOworICAgICAgICB1
cGRhdGVUb3VjaEJhcigpOworICAgIH0KKyAgICByZXR1cm4gbV9jdXJyZW50VG91Y2hCYXIuZ2V0
KCk7Cit9CisKK05TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSAqV2ViVmlld0ltcGw6OmNhbmRp
ZGF0ZUxpc3RUb3VjaEJhckl0ZW0oKSBjb25zdAoreworICAgIHJldHVybiBpc1JpY2hseUVkaXRh
YmxlKCkgPyBtX3JpY2hUZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbS5nZXQoKSA6IG1fcGxh
aW5UZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbS5nZXQoKTsKK30KKworQVZGdW5jdGlvbkJh
clNjcnViYmVyICpXZWJWaWV3SW1wbDo6bWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpIGNvbnN0
Cit7CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIGlmICht
X3BhZ2UtPmhhc0FjdGl2ZVZpZGVvRm9yQ29udHJvbHNNYW5hZ2VyKCkpCisgICAgICAgIHJldHVy
biBtX21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcuZ2V0KCk7CisjZW5kaWYKKyAgICByZXR1cm4g
bmlsOworfQorCitib29sIFdlYlZpZXdJbXBsOjp1c2VNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3
KCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgaWYgKGhhc0Z1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVyKCkpCisgICAgICAgIHJldHVybiAhW21fZnVsbFNjcmVlbldp
bmRvd0NvbnRyb2xsZXIgaXNGdWxsU2NyZWVuXTsKKyNlbmRpZgorICAgIHJldHVybiBtX2NsaWVu
dFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6
ZGlzbWlzc1RleHRUb3VjaEJhclBvcG92ZXJJdGVtV2l0aElkZW50aWZpZXIoTlNTdHJpbmcgKmlk
ZW50aWZpZXIpCit7CisgICAgTlNUb3VjaEJhckl0ZW0gKmZvdW5kSXRlbSA9IG5pbDsKKyAgICBm
b3IgKE5TVG91Y2hCYXJJdGVtICppdGVtIGluIHRleHRUb3VjaEJhcigpLml0ZW1zKSB7CisgICAg
ICAgIGlmIChbaXRlbS5pZGVudGlmaWVyIGlzRXF1YWxUb1N0cmluZzppZGVudGlmaWVyXSkgewor
ICAgICAgICAgICAgZm91bmRJdGVtID0gaXRlbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKFtbaXRlbSBpZGVudGlmaWVyXSBpc0VxdWFsVG9TdHJpbmc6TlNU
b3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEZvcm1hdF0pIHsKKyAgICAgICAgICAgIGZvciAoTlNU
b3VjaEJhckl0ZW0gKmNoaWxkSXRlbSBpbiBbKE5TR3JvdXBUb3VjaEJhckl0ZW0gKilpdGVtIGdy
b3VwVG91Y2hCYXJdLml0ZW1zKSB7CisgICAgICAgICAgICAgICAgaWYgKFtjaGlsZEl0ZW0uaWRl
bnRpZmllciBpc0VxdWFsVG9TdHJpbmc6aWRlbnRpZmllcl0pIHsKKyAgICAgICAgICAgICAgICAg
ICAgZm91bmRJdGVtID0gY2hpbGRJdGVtOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmIChbZm91bmRJdGVtIGlzS2luZE9mQ2xhc3M6W05TUG9wb3Zl
clRvdWNoQmFySXRlbSBjbGFzc11dKQorICAgICAgICBbKE5TUG9wb3ZlclRvdWNoQmFySXRlbSAq
KWZvdW5kSXRlbSBkaXNtaXNzUG9wb3ZlcjpuaWxdOworfQorCitzdGF0aWMgTlNBcnJheTxOU1N0
cmluZyAqPiAqdGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkFsbG93ZWRJZGVudGlmaWVycygpCit7
CisgICAgcmV0dXJuIEBbIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckNoYXJhY3RlclBpY2tlciwg
TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dENvbG9yUGlja2VyLCBOU1RvdWNoQmFySXRlbUlk
ZW50aWZpZXJUZXh0U3R5bGUsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRBbGlnbm1lbnQs
IE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRMaXN0LCBOU1RvdWNoQmFySXRlbUlkZW50aWZp
ZXJGbGV4aWJsZVNwYWNlIF07Cit9CisKK3N0YXRpYyBOU0FycmF5PE5TU3RyaW5nICo+ICpwbGFp
blRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25EZWZhdWx0SXRlbUlkZW50aWZpZXJzKCkKK3sKKyAg
ICByZXR1cm4gQFsgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyQ2hhcmFjdGVyUGlja2VyLCBOU1Rv
dWNoQmFySXRlbUlkZW50aWZpZXJDYW5kaWRhdGVMaXN0IF07Cit9CisKK3N0YXRpYyBOU0FycmF5
PE5TU3RyaW5nICo+ICpyaWNoVGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkRlZmF1bHRJdGVtSWRl
bnRpZmllcnMoKQoreworICAgIHJldHVybiBAWyBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJDaGFy
YWN0ZXJQaWNrZXIsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRGb3JtYXQsIE5TVG91Y2hC
YXJJdGVtSWRlbnRpZmllckNhbmRpZGF0ZUxpc3QgXTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6
dXBkYXRlVG91Y2hCYXJBbmRSZWZyZXNoVGV4dEJhcklkZW50aWZpZXJzKCkKK3sKKyAgICBpZiAo
bV9yaWNoVGV4dFRvdWNoQmFyKQorICAgICAgICBzZXRVcFRleHRUb3VjaEJhcihtX3JpY2hUZXh0
VG91Y2hCYXIuZ2V0KCkpOworCisgICAgaWYgKG1fcGxhaW5UZXh0VG91Y2hCYXIpCisgICAgICAg
IHNldFVwVGV4dFRvdWNoQmFyKG1fcGxhaW5UZXh0VG91Y2hCYXIuZ2V0KCkpOworCisgICAgdXBk
YXRlVG91Y2hCYXIoKTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6c2V0VXBUZXh0VG91Y2hCYXIo
TlNUb3VjaEJhciAqdG91Y2hCYXIpCit7CisgICAgYm9vbCBpc1JpY2hUZXh0VG91Y2hCYXIgPSB0
b3VjaEJhciA9PSBtX3JpY2hUZXh0VG91Y2hCYXIuZ2V0KCk7CisgICAgW3RvdWNoQmFyIHNldERl
bGVnYXRlOm1fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIuZ2V0KCldOworICAgIFt0b3VjaEJh
ciBzZXREZWZhdWx0SXRlbXM6W05TTXV0YWJsZVNldCBzZXRXaXRoT2JqZWN0czppc1JpY2hUZXh0
VG91Y2hCYXIgPyBtX3JpY2hUZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbS5nZXQoKSA6IG1f
cGxhaW5UZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbS5nZXQoKSwgbmlsXV07CisgICAgW3Rv
dWNoQmFyIHNldEN1c3RvbWl6YXRpb25BbGxvd2VkSXRlbUlkZW50aWZpZXJzOnRleHRUb3VjaEJh
ckN1c3RvbWl6YXRpb25BbGxvd2VkSWRlbnRpZmllcnMoKV07CisgICAgW3RvdWNoQmFyIHNldEN1
c3RvbWl6YXRpb25EZWZhdWx0SXRlbUlkZW50aWZpZXJzOmlzUmljaFRleHRUb3VjaEJhciA/IHJp
Y2hUZXh0VG91Y2hCYXJDdXN0b21pemF0aW9uRGVmYXVsdEl0ZW1JZGVudGlmaWVycygpIDogcGxh
aW5UZXh0VG91Y2hCYXJDdXN0b21pemF0aW9uRGVmYXVsdEl0ZW1JZGVudGlmaWVycygpXTsKKwor
ICAgIGlmIChOU0dyb3VwVG91Y2hCYXJJdGVtICp0ZXh0Rm9ybWF0SXRlbSA9IChOU0dyb3VwVG91
Y2hCYXJJdGVtICopW3RvdWNoQmFyIGl0ZW1Gb3JJZGVudGlmaWVyOk5TVG91Y2hCYXJJdGVtSWRl
bnRpZmllclRleHRGb3JtYXRdKQorICAgICAgICB0ZXh0Rm9ybWF0SXRlbS5ncm91cFRvdWNoQmFy
LmN1c3RvbWl6YXRpb25JZGVudGlmaWVyID0gQCJXS1RleHRGb3JtYXRUb3VjaEJhciI7Cit9CisK
K2Jvb2wgV2ViVmlld0ltcGw6OmlzUmljaGx5RWRpdGFibGUoKSBjb25zdAoreworICAgIHJldHVy
biBtX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUgJiYgIW1fcGFn
ZS0+bmVlZHNQbGFpblRleHRRdWlyaygpOworfQorCitOU1RvdWNoQmFyICpXZWJWaWV3SW1wbDo6
dGV4dFRvdWNoQmFyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNSaWNobHlFZGl0YWJsZSgpID8g
bV9yaWNoVGV4dFRvdWNoQmFyLmdldCgpIDogbV9wbGFpblRleHRUb3VjaEJhci5nZXQoKTsKK30K
Kwordm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlVGV4dFRvdWNoQmFyKCkKK3sKKyAgICBpZiAoIW1f
cGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0NvbnRlbnRFZGl0YWJsZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKG1faXNVcGRhdGluZ1RleHRUb3VjaEJhcikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IGlzVXBkYXRpbmdUZXh0RnVuY3Rpb25CYXIobV9pc1Vw
ZGF0aW5nVGV4dFRvdWNoQmFyLCB0cnVlKTsKKworICAgIGlmICghbV90ZXh0VG91Y2hCYXJJdGVt
Q29udHJvbGxlcikKKyAgICAgICAgbV90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciA9IGFkb3B0
TlMoW1tXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIGFsbG9jXSBpbml0V2l0aFdlYlZpZXdJ
bXBsOnRoaXNdKTsKKworICAgIGlmICghbV9zdGFydGVkTGlzdGVuaW5nVG9DdXN0b21pemF0aW9u
RXZlbnRzKSB7CisgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0g
YWRkT2JzZXJ2ZXI6bV90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlci5nZXQoKSBzZWxlY3RvcjpA
c2VsZWN0b3IodG91Y2hCYXJEaWRFeGl0Q3VzdG9taXphdGlvbjopIG5hbWU6TlNUb3VjaEJhckRp
ZEV4aXRDdXN0b21pemF0aW9uIG9iamVjdDpuaWxdOworICAgICAgICBbW05TTm90aWZpY2F0aW9u
Q2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOm1fdGV4dFRvdWNoQmFySXRlbUNvbnRy
b2xsZXIuZ2V0KCkgc2VsZWN0b3I6QHNlbGVjdG9yKHRvdWNoQmFyV2lsbEVudGVyQ3VzdG9taXph
dGlvbjopIG5hbWU6TlNUb3VjaEJhcldpbGxFbnRlckN1c3RvbWl6YXRpb24gb2JqZWN0Om5pbF07
CisgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2
ZXI6bV90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlci5nZXQoKSBzZWxlY3RvcjpAc2VsZWN0b3Io
ZGlkQ2hhbmdlQXV0b21hdGljVGV4dENvbXBsZXRpb246KSBuYW1lOk5TU3BlbGxDaGVja2VyRGlk
Q2hhbmdlQXV0b21hdGljVGV4dENvbXBsZXRpb25Ob3RpZmljYXRpb24gb2JqZWN0Om5pbF07CisK
KyAgICAgICAgbV9zdGFydGVkTGlzdGVuaW5nVG9DdXN0b21pemF0aW9uRXZlbnRzID0gdHJ1ZTsK
KyAgICB9CisKKyAgICBpZiAoIW1fcmljaFRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtIHx8
ICFtX3BsYWluVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0pIHsKKyAgICAgICAgbV9yaWNo
VGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gPSBhZG9wdE5TKFtbTlNDYW5kaWRhdGVMaXN0
VG91Y2hCYXJJdGVtIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6TlNUb3VjaEJhckl0ZW1JZGVu
dGlmaWVyQ2FuZGlkYXRlTGlzdF0pOworICAgICAgICBbbV9yaWNoVGV4dENhbmRpZGF0ZUxpc3RU
b3VjaEJhckl0ZW0gc2V0RGVsZWdhdGU6bV90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlci5nZXQo
KV07CisgICAgICAgIG1fcGxhaW5UZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSA9IGFkb3B0
TlMoW1tOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gYWxsb2NdIGluaXRXaXRoSWRlbnRpZmll
cjpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJDYW5kaWRhdGVMaXN0XSk7CisgICAgICAgIFttX3Bs
YWluVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gc2V0RGVsZWdhdGU6bV90ZXh0VG91Y2hC
YXJJdGVtQ29udHJvbGxlci5nZXQoKV07CisgICAgICAgIHJlcXVlc3RDYW5kaWRhdGVzRm9yU2Vs
ZWN0aW9uSWZOZWVkZWQoKTsKKyAgICB9CisKKyAgICBpZiAoIW1fcmljaFRleHRUb3VjaEJhcikg
eworICAgICAgICBtX3JpY2hUZXh0VG91Y2hCYXIgPSBhZG9wdE5TKFtbTlNUb3VjaEJhciBhbGxv
Y10gaW5pdF0pOworICAgICAgICBzZXRVcFRleHRUb3VjaEJhcihtX3JpY2hUZXh0VG91Y2hCYXIu
Z2V0KCkpOworICAgICAgICBbbV9yaWNoVGV4dFRvdWNoQmFyIHNldEN1c3RvbWl6YXRpb25JZGVu
dGlmaWVyOkAiV0tSaWNoVGV4dFRvdWNoQmFyIl07CisgICAgfQorCisgICAgaWYgKCFtX3BsYWlu
VGV4dFRvdWNoQmFyKSB7CisgICAgICAgIG1fcGxhaW5UZXh0VG91Y2hCYXIgPSBhZG9wdE5TKFtb
TlNUb3VjaEJhciBhbGxvY10gaW5pdF0pOworICAgICAgICBzZXRVcFRleHRUb3VjaEJhcihtX3Bs
YWluVGV4dFRvdWNoQmFyLmdldCgpKTsKKyAgICAgICAgW21fcGxhaW5UZXh0VG91Y2hCYXIgc2V0
Q3VzdG9taXphdGlvbklkZW50aWZpZXI6QCJXS1BsYWluVGV4dFRvdWNoQmFyIl07CisgICAgfQor
CisgICAgaWYgKFtOU1NwZWxsQ2hlY2tlciBpc0F1dG9tYXRpY1RleHRDb21wbGV0aW9uRW5hYmxl
ZF0gJiYgIW1faXNDdXN0b21pemluZ1RvdWNoQmFyKSB7CisgICAgICAgIEJPT0wgc2hvd0NhbmRp
ZGF0ZXNMaXN0ID0gIW1fcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25Jc1JhbmdlIHx8IG1f
aXNIYW5kbGluZ0FjY2VwdGVkQ2FuZGlkYXRlOworICAgICAgICBbY2FuZGlkYXRlTGlzdFRvdWNo
QmFySXRlbSgpIHVwZGF0ZVdpdGhJbnNlcnRpb25Qb2ludFZpc2liaWxpdHk6c2hvd0NhbmRpZGF0
ZXNMaXN0XTsKKyAgICAgICAgW21fdmlldyBfZGlkVXBkYXRlQ2FuZGlkYXRlTGlzdFZpc2liaWxp
dHk6c2hvd0NhbmRpZGF0ZXNMaXN0XTsKKyAgICB9CisKKyAgICBpZiAobV9wYWdlLT5lZGl0b3JT
dGF0ZSgpLmlzSW5QYXNzd29yZEZpZWxkKSB7CisgICAgICAgIC8vIFdlIGRvbid0IHJlcXVlc3Qg
Y2FuZGlkYXRlcyBmb3IgcGFzc3dvcmQgZmllbGRzLiBJZiB0aGUgdXNlciB3YXMgcHJldmlvdXNs
eSBpbiBhIG5vbi1wYXNzd29yZCBmaWVsZCwgdGhlbiB0aGUKKyAgICAgICAgLy8gb2xkIGNhbmRp
ZGF0ZXMgd2lsbCBzdGlsbCBzaG93IGJ5IGRlZmF1bHQsIHNvIHdlIGNsZWFyIHRoZW0gaGVyZSBi
eSBzZXR0aW5nIGFuIGVtcHR5IGFycmF5IG9mIGNhbmRpZGF0ZXMuCisgICAgICAgIGlmICghbV9l
bXB0eUNhbmRpZGF0ZXNBcnJheSkKKyAgICAgICAgICAgIG1fZW1wdHlDYW5kaWRhdGVzQXJyYXkg
PSBhZG9wdE5TKFtbTlNBcnJheSBhbGxvY10gaW5pdF0pOworICAgICAgICBbY2FuZGlkYXRlTGlz
dFRvdWNoQmFySXRlbSgpIHNldENhbmRpZGF0ZXM6bV9lbXB0eUNhbmRpZGF0ZXNBcnJheS5nZXQo
KSBmb3JTZWxlY3RlZFJhbmdlOk5TTWFrZVJhbmdlKDAsIDApIGluU3RyaW5nOm5pbF07CisgICAg
fQorCisgICAgTlNUb3VjaEJhciAqdGV4dFRvdWNoQmFyID0gdGhpcy0+dGV4dFRvdWNoQmFyKCk7
CisgICAgQk9PTCBpc1Nob3dpbmdDb21iaW5lZFRleHRGb3JtYXRJdGVtID0gW3RleHRUb3VjaEJh
ci5pdGVtSWRlbnRpZmllcnMgY29udGFpbnNPYmplY3Q6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVy
VGV4dEZvcm1hdF07CisgICAgW3RleHRUb3VjaEJhciBzZXRQcmluY2lwYWxJdGVtSWRlbnRpZmll
cjppc1Nob3dpbmdDb21iaW5lZFRleHRGb3JtYXRJdGVtID8gTlNUb3VjaEJhckl0ZW1JZGVudGlm
aWVyVGV4dEZvcm1hdCA6IG5pbF07CisKKyAgICAvLyBTZXQgY3VycmVudCB0eXBpbmcgYXR0cmli
dXRlcyBmb3IgcmljaCB0ZXh0LiBUaGlzIHdpbGwgZW5zdXJlIHRoYXQgdGhlIGJ1dHRvbnMgcmVm
bGVjdCB0aGUgc3RhdGUgb2YKKyAgICAvLyB0aGUgdGV4dCB3aGVuIGNoYW5naW5nIHNlbGVjdGlv
biB0aHJvdWdob3V0IHRoZSBkb2N1bWVudC4KKyAgICBpZiAoaXNSaWNobHlFZGl0YWJsZSgpKSB7
CisgICAgICAgIGNvbnN0IEVkaXRvclN0YXRlJiBlZGl0b3JTdGF0ZSA9IG1fcGFnZS0+ZWRpdG9y
U3RhdGUoKTsKKyAgICAgICAgaWYgKCFlZGl0b3JTdGF0ZS5pc01pc3NpbmdQb3N0TGF5b3V0RGF0
YSkgeworICAgICAgICAgICAgW21fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElz
Qm9sZDooYm9vbCkobV9wYWdlLT5lZGl0b3JTdGF0ZSgpLnBvc3RMYXlvdXREYXRhKCkudHlwaW5n
QXR0cmlidXRlcyAmIEF0dHJpYnV0ZUJvbGQpXTsKKyAgICAgICAgICAgIFttX3RleHRUb3VjaEJh
ckl0ZW1Db250cm9sbGVyIHNldFRleHRJc0l0YWxpYzooYm9vbCkobV9wYWdlLT5lZGl0b3JTdGF0
ZSgpLnBvc3RMYXlvdXREYXRhKCkudHlwaW5nQXR0cmlidXRlcyAmIEF0dHJpYnV0ZUl0YWxpY3Mp
XTsKKyAgICAgICAgICAgIFttX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFRleHRJc1Vu
ZGVybGluZWQ6KGJvb2wpKG1fcGFnZS0+ZWRpdG9yU3RhdGUoKS5wb3N0TGF5b3V0RGF0YSgpLnR5
cGluZ0F0dHJpYnV0ZXMgJiBBdHRyaWJ1dGVVbmRlcmxpbmUpXTsKKyAgICAgICAgICAgIFttX3Rl
eHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFRleHRDb2xvcjpuc0NvbG9yKGVkaXRvclN0YXRl
LnBvc3RMYXlvdXREYXRhKCkudGV4dENvbG9yKV07CisgICAgICAgICAgICBbW21fdGV4dFRvdWNo
QmFySXRlbUNvbnRyb2xsZXIgdGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyXSBzZXRDdXJy
ZW50TGlzdFR5cGU6KExpc3RUeXBlKW1fcGFnZS0+ZWRpdG9yU3RhdGUoKS5wb3N0TGF5b3V0RGF0
YSgpLmVuY2xvc2luZ0xpc3RUeXBlXTsKKworICAgICAgICAgICAgTlNUZXh0QWxpZ25tZW50IHRl
eHRBbGlnbm1lbnQ7CisgICAgICAgICAgICBzd2l0Y2ggKGVkaXRvclN0YXRlLnBvc3RMYXlvdXRE
YXRhKCkudGV4dEFsaWdubWVudCkgeworICAgICAgICAgICAgY2FzZSBOb0FsaWdubWVudDoKKyAg
ICAgICAgICAgICAgICB0ZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25tZW50TmF0dXJhbDsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTGVmdEFsaWdubWVudDoKKyAg
ICAgICAgICAgICAgICB0ZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25tZW50TGVmdDsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUmlnaHRBbGlnbm1lbnQ6CisgICAg
ICAgICAgICAgICAgdGV4dEFsaWdubWVudCA9IE5TVGV4dEFsaWdubWVudFJpZ2h0OworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDZW50ZXJBbGlnbm1lbnQ6CisgICAg
ICAgICAgICAgICAgdGV4dEFsaWdubWVudCA9IE5TVGV4dEFsaWdubWVudENlbnRlcjsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSnVzdGlmaWVkQWxpZ25tZW50Ogor
ICAgICAgICAgICAgICAgIHRleHRBbGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRKdXN0aWZpZWQ7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBbbV90
ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRDdXJyZW50VGV4dEFsaWdubWVudDp0ZXh0QWxp
Z25tZW50XTsKKyAgICAgICAgfQorICAgICAgICBCT09MIGlzU2hvd2luZ0NhbmRpZGF0ZUxpc3RJ
dGVtID0gW3RleHRUb3VjaEJhci5pdGVtSWRlbnRpZmllcnMgY29udGFpbnNPYmplY3Q6TlNUb3Vj
aEJhckl0ZW1JZGVudGlmaWVyQ2FuZGlkYXRlTGlzdF0gJiYgW05TU3BlbGxDaGVja2VyIGlzQXV0
b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZF07CisgICAgICAgIFttX3RleHRUb3VjaEJhckl0
ZW1Db250cm9sbGVyIHNldFVzZXNOYXJyb3dUZXh0U3R5bGVJdGVtOmlzU2hvd2luZ0NvbWJpbmVk
VGV4dEZvcm1hdEl0ZW0gJiYgaXNTaG93aW5nQ2FuZGlkYXRlTGlzdEl0ZW1dOworICAgIH0KK30K
Kwordm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlTWVkaWFUb3VjaEJhcigpCit7CisjaWYgRU5BQkxF
KFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIGlmICghbV9tZWRpYVRvdWNoQmFy
UHJvdmlkZXIpCisgICAgICAgIG1fbWVkaWFUb3VjaEJhclByb3ZpZGVyID0gYWRvcHROUyhbYWxs
b2NBVkZ1bmN0aW9uQmFyUGxheWJhY2tDb250cm9sc1Byb3ZpZGVySW5zdGFuY2UoKSBpbml0XSk7
CisKKyAgICBpZiAoIW1fbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldykKKyAgICAgICAgbV9tZWRp
YVBsYXliYWNrQ29udHJvbHNWaWV3ID0gYWRvcHROUyhbYWxsb2NBVkZ1bmN0aW9uQmFyU2NydWJi
ZXJJbnN0YW5jZSgpIGluaXRdKTsKKworICAgIGlmICghbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdl
cikKKyAgICAgICAgbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlciA9IGFkb3B0TlMoW1tXZWJQbGF5
YmFja0NvbnRyb2xzTWFuYWdlciBhbGxvY10gaW5pdF0pOworCisgICAgaWYgKFBsYXRmb3JtV2Vi
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKiBpbnRlcmZhY2UgPSBtX3BhZ2UtPnBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIoKS0+Y29udHJvbHNNYW5hZ2VySW50ZXJmYWNlKCkpCisgICAgICAgIFttX3Bs
YXliYWNrQ29udHJvbHNNYW5hZ2VyIHNldFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzpp
bnRlcmZhY2VdOworCisgICAgW21fbWVkaWFUb3VjaEJhclByb3ZpZGVyIHNldFBsYXliYWNrQ29u
dHJvbHNDb250cm9sbGVyOm1fcGxheWJhY2tDb250cm9sc01hbmFnZXIuZ2V0KCldOworICAgIFtt
X21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcgc2V0UGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXI6
bV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlci5nZXQoKV07CisKKyAgICBpZiAoIXVzZU1lZGlhUGxh
eWJhY2tDb250cm9sc1ZpZXcoKSkgeworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICAg
ICAgLy8gSWYgd2UgY2FuJ3QgaGF2ZSBhIG1lZGlhIHBvcG92ZXIgZnVuY3Rpb24gYmFyIGl0ZW0s
IGl0IG1pZ2h0IGJlIGJlY2F1c2Ugd2UgYXJlIGluIGZ1bGwgc2NyZWVuLgorICAgICAgICAvLyBJ
ZiBzbywgY3VzdG9taXplIHRoZSBlc2NhcGUga2V5LgorICAgICAgICBOU1RvdWNoQmFyICp0b3Vj
aEJhciA9IFttX21lZGlhVG91Y2hCYXJQcm92aWRlciByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKHRvdWNoQmFyKV0gPyBbKGlkKW1fbWVkaWFUb3VjaEJhclByb3ZpZGVyLmdldCgpIHRvdWNo
QmFyXSA6IFsoaWQpbV9tZWRpYVRvdWNoQmFyUHJvdmlkZXIuZ2V0KCkgdG91Y2hCYXJdOworICAg
ICAgICBpZiAoaGFzRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIoKSAmJiBbbV9mdWxsU2NyZWVu
V2luZG93Q29udHJvbGxlciBpc0Z1bGxTY3JlZW5dKSB7CisgICAgICAgICAgICBpZiAoIW1fZXhp
dEZ1bGxTY3JlZW5CdXR0b24pIHsKKyAgICAgICAgICAgICAgICBtX2V4aXRGdWxsU2NyZWVuQnV0
dG9uID0gYWRvcHROUyhbW05TQ3VzdG9tVG91Y2hCYXJJdGVtIGFsbG9jXSBpbml0V2l0aElkZW50
aWZpZXI6V0tNZWRpYUV4aXRGdWxsU2NyZWVuSXRlbV0pOworCisgICAgICAgICAgICAgICAgTlNJ
bWFnZSAqaW1hZ2UgPSBbTlNJbWFnZSBpbWFnZU5hbWVkOk5TSW1hZ2VOYW1lVG91Y2hCYXJFeGl0
RnVsbFNjcmVlblRlbXBsYXRlXTsKKyAgICAgICAgICAgICAgICBbaW1hZ2Ugc2V0VGVtcGxhdGU6
WUVTXTsKKworICAgICAgICAgICAgICAgIE5TQnV0dG9uICpleGl0RnVsbFNjcmVlbkJ1dHRvbiA9
IFtOU0J1dHRvbiBidXR0b25XaXRoVGl0bGU6aW1hZ2UgPyBAIiIgOiBAIkV4aXQiIGltYWdlOmlt
YWdlIHRhcmdldDptX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmdldCgpIGFjdGlvbjpAc2Vs
ZWN0b3IocmVxdWVzdEV4aXRGdWxsU2NyZWVuKV07CisgICAgICAgICAgICAgICAgW2V4aXRGdWxs
U2NyZWVuQnV0dG9uIHNldEFjY2Vzc2liaWxpdHlUaXRsZTpXZWJDb3JlOjpleGl0RnVsbFNjcmVl
bkJ1dHRvbkFjY2Vzc2liaWxpdHlUaXRsZSgpXTsKKworICAgICAgICAgICAgICAgIFtbZXhpdEZ1
bGxTY3JlZW5CdXR0b24ud2lkdGhBbmNob3IgY29uc3RyYWludExlc3NUaGFuT3JFcXVhbFRvQ29u
c3RhbnQ6ZXhpdEZ1bGxTY3JlZW5CdXR0b25XaWR0aF0gc2V0QWN0aXZlOllFU107CisgICAgICAg
ICAgICAgICAgW21fZXhpdEZ1bGxTY3JlZW5CdXR0b24gc2V0VmlldzpleGl0RnVsbFNjcmVlbkJ1
dHRvbl07CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0b3VjaEJhci5lc2NhcGVLZXlSZXBs
YWNlbWVudEl0ZW0gPSBtX2V4aXRGdWxsU2NyZWVuQnV0dG9uLmdldCgpOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIHRvdWNoQmFyLmVzY2FwZUtleVJlcGxhY2VtZW50SXRlbSA9IG5pbDsK
KyNlbmRpZgorICAgICAgICAvLyBUaGUgcmVzdCBvZiB0aGUgd29yayB0byB1cGRhdGUgdGhlIG1l
ZGlhIGZ1bmN0aW9uIGJhciBvbmx5IGFwcGxpZXMgdG8gdGhlIHBvcG92ZXIgdmVyc2lvbiwgc28g
cmV0dXJuIGVhcmx5LgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fcGxheWJh
Y2tDb250cm9sc01hbmFnZXIgJiYgbV92aWV3ID09IG1fdmlldy53aW5kb3cuZmlyc3RSZXNwb25k
ZXIgJiYgW21fdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJfZGlkQWRkTWVk
aWFDb250cm9sc01hbmFnZXI6KV0pCisgICAgICAgIFttX3ZpZXcgX3dlYl9kaWRBZGRNZWRpYUNv
bnRyb2xzTWFuYWdlcjptX21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcuZ2V0KCldOworI2VuZGlm
Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OmZvcmNlUmVxdWVzdENhbmRpZGF0ZXNGb3JUZXN0aW5n
KCkKK3sKKyAgICBtX2NhbkNyZWF0ZVRvdWNoQmFycyA9IHRydWU7CisgICAgdXBkYXRlVG91Y2hC
YXIoKTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlVG91Y2hCYXIoKQoreworICAgIGlm
ICghbV9jYW5DcmVhdGVUb3VjaEJhcnMpCisgICAgICAgIHJldHVybjsKKworICAgIE5TVG91Y2hC
YXIgKnRvdWNoQmFyID0gbmlsOworICAgIGJvb2wgdXNlckFjdGlvblJlcXVpcmVtZW50c0hhdmVC
ZWVuTWV0ID0gbV9yZXF1aXJlc1VzZXJBY3Rpb25Gb3JFZGl0aW5nQ29udHJvbHNNYW5hZ2VyID8g
bV9wYWdlLT5oYXNIYWRTZWxlY3Rpb25DaGFuZ2VzRnJvbVVzZXJJbnRlcmFjdGlvbigpIDogdHJ1
ZTsKKyAgICBpZiAobV9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlICYmICFt
X3BhZ2UtPm5lZWRzSGlkZGVuQ29udGVudEVkaXRhYmxlUXVpcmsoKSkgeworICAgICAgICB1cGRh
dGVUZXh0VG91Y2hCYXIoKTsKKyAgICAgICAgaWYgKHVzZXJBY3Rpb25SZXF1aXJlbWVudHNIYXZl
QmVlbk1ldCkKKyAgICAgICAgICAgIHRvdWNoQmFyID0gdGV4dFRvdWNoQmFyKCk7CisgICAgfQor
I2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBlbHNlIGlmICht
X3BhZ2UtPmhhc0FjdGl2ZVZpZGVvRm9yQ29udHJvbHNNYW5hZ2VyKCkpIHsKKyAgICAgICAgdXBk
YXRlTWVkaWFUb3VjaEJhcigpOworICAgICAgICAvLyBJZiB1c2VNZWRpYVBsYXliYWNrQ29udHJv
bHNWaWV3KCkgaXMgdHJ1ZSwgdGhlbiB3ZSBhcmUgcmVseWluZyBvbiB0aGUgQVBJIGNsaWVudCB0
byBkaXNwbGF5IGEgcG9wb3ZlciB2ZXJzaW9uCisgICAgICAgIC8vIG9mIHRoZSBtZWRpYSB0aW1l
bGluZSBpbiB0aGVpciBvd24gZnVuY3Rpb24gYmFyLiBJZiBpdCBpcyBmYWxzZSwgdGhlbiB3ZSB3
aWxsIGRpc3BsYXkgdGhlIG1lZGlhIHRpbWVsaW5lIGluIG91cgorICAgICAgICAvLyBmdW5jdGlv
biBiYXIuCisgICAgICAgIGlmICghdXNlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpKQorICAg
ICAgICAgICAgdG91Y2hCYXIgPSBbbV9tZWRpYVRvdWNoQmFyUHJvdmlkZXIgcmVzcG9uZHNUb1Nl
bGVjdG9yOkBzZWxlY3Rvcih0b3VjaEJhcildID8gWyhpZCltX21lZGlhVG91Y2hCYXJQcm92aWRl
ci5nZXQoKSB0b3VjaEJhcl0gOiBbKGlkKW1fbWVkaWFUb3VjaEJhclByb3ZpZGVyLmdldCgpIHRv
dWNoQmFyXTsKKyAgICB9IGVsc2UgaWYgKFttX21lZGlhVG91Y2hCYXJQcm92aWRlciBwbGF5YmFj
a0NvbnRyb2xzQ29udHJvbGxlcl0pIHsKKyAgICAgICAgaWYgKG1fY2xpZW50V2FudHNNZWRpYVBs
YXliYWNrQ29udHJvbHNWaWV3KSB7CisgICAgICAgICAgICBpZiAoW21fdmlldyByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJfZGlkUmVtb3ZlTWVkaWFDb250cm9sc01hbmFnZXIpXSAm
JiBtX3ZpZXcgPT0gbV92aWV3LndpbmRvdy5maXJzdFJlc3BvbmRlcikKKyAgICAgICAgICAgICAg
ICBbbV92aWV3IF93ZWJfZGlkUmVtb3ZlTWVkaWFDb250cm9sc01hbmFnZXJdOworICAgICAgICB9
CisgICAgICAgIFttX21lZGlhVG91Y2hCYXJQcm92aWRlciBzZXRQbGF5YmFja0NvbnRyb2xzQ29u
dHJvbGxlcjpuaWxdOworICAgICAgICBbbV9tZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3IHNldFBs
YXliYWNrQ29udHJvbHNDb250cm9sbGVyOm5pbF07CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAo
dG91Y2hCYXIgPT0gbV9jdXJyZW50VG91Y2hCYXIpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IElmIG1fZWRpdGFibGVFbGVtZW50SXNGb2N1c2VkIGlzIHRydWUsIHRoZW4gd2UgbWF5IGhhdmUg
YSBub24tZWRpdGFibGUgc2VsZWN0aW9uIHJpZ2h0IG5vdyBqdXN0IGJlY2F1c2UKKyAgICAvLyB0
aGUgdXNlciBpcyBjbGlja2luZyBvciB0YWJiaW5nIGJldHdlZW4gZWRpdGFibGUgZmllbGRzLgor
ICAgIGlmIChtX2VkaXRhYmxlRWxlbWVudElzRm9jdXNlZCAmJiB0b3VjaEJhciAhPSB0ZXh0VG91
Y2hCYXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jdXJyZW50VG91Y2hCYXIgPSB0b3Vj
aEJhcjsKKyAgICBbbV92aWV3IHdpbGxDaGFuZ2VWYWx1ZUZvcktleTpAInRvdWNoQmFyIl07Cisg
ICAgW21fdmlldyBzZXRUb3VjaEJhcjptX2N1cnJlbnRUb3VjaEJhci5nZXQoKV07CisgICAgW21f
dmlldyBkaWRDaGFuZ2VWYWx1ZUZvcktleTpAInRvdWNoQmFyIl07Cit9CisKK2Jvb2wgV2ViVmll
d0ltcGw6OnNob3VsZFJlcXVlc3RDYW5kaWRhdGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1f
cGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0luUGFzc3dvcmRGaWVsZCAmJiBjYW5kaWRhdGVMaXN0VG91
Y2hCYXJJdGVtKCkuY2FuZGlkYXRlTGlzdFZpc2libGU7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6
OnNob3dDYW5kaWRhdGVzKE5TQXJyYXkgKmNhbmRpZGF0ZXMsIE5TU3RyaW5nICpzdHJpbmcsIE5T
UmVjdCByZWN0T2ZUeXBlZFN0cmluZywgTlNSYW5nZSBzZWxlY3RlZFJhbmdlLCBOU1ZpZXcgKnZp
ZXcsIHZvaWQgKF5jb21wbGV0aW9uSGFuZGxlcikoTlNUZXh0Q2hlY2tpbmdSZXN1bHQgKmFjY2Vw
dGVkQ2FuZGlkYXRlKSkKK3sKKyAgICBbY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSgpIHNldENh
bmRpZGF0ZXM6Y2FuZGlkYXRlcyBmb3JTZWxlY3RlZFJhbmdlOnNlbGVjdGVkUmFuZ2UgaW5TdHJp
bmc6c3RyaW5nXTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6d2ViVmlld0ltcGxBZGRpdGlvbnNX
aWxsRGVzdHJveVZpZXcoKQoreworICAgIFttX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIGRp
ZERlc3Ryb3lWaWV3XTsKKworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdF
UikKKyAgICBbbV9tZWRpYVRvdWNoQmFyUHJvdmlkZXIgc2V0UGxheWJhY2tDb250cm9sc0NvbnRy
b2xsZXI6bmlsXTsKKyAgICBbbV9tZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3IHNldFBsYXliYWNr
Q29udHJvbHNDb250cm9sbGVyOm5pbF07CisjZW5kaWYKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6
c2V0RWRpdGFibGVFbGVtZW50SXNGb2N1c2VkKGJvb2wgZWRpdGFibGVFbGVtZW50SXNGb2N1c2Vk
KQoreworICAgIG1fZWRpdGFibGVFbGVtZW50SXNGb2N1c2VkID0gZWRpdGFibGVFbGVtZW50SXNG
b2N1c2VkOworCisgICAgLy8gSWYgdGhlIGVkaXRhYmxlIGVsZW1lbnRzIGhhdmUgYmx1cnJlZCwg
dGhlbiB3ZSBtaWdodCBuZWVkIHRvIGdldCByaWQgb2YgdGhlIGVkaXRpbmcgZnVuY3Rpb24gYmFy
LgorICAgIGlmICghbV9lZGl0YWJsZUVsZW1lbnRJc0ZvY3VzZWQpCisgICAgICAgIHVwZGF0ZVRv
dWNoQmFyKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAogI2Vsc2UKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCi12b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVXZWJWaWV3SW1wbEFkZGl0aW9ucygp
Cit2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVUb3VjaEJhcigpCiB7CiB9CiAKQEAgLTQ2NSw3ICsx
MTU4LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0RWRpdGFibGVFbGVtZW50SXNGbwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLSNlbmRpZiAvLyBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID49IDEwMTIwMCAmJiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQorI2VuZGlmIC8vIEhB
VkUoVE9VQ0hfQkFSKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNjE1LDcgKzEzMDgsNyBA
QCBib29sIFdlYlZpZXdJbXBsOjpiZWNvbWVGaXJzdFJlc3BvbmRlcigpCiAKICAgICBtX2luQmVj
b21lRmlyc3RSZXNwb25kZXIgPSBmYWxzZTsKIAotICAgIHVwZGF0ZVdlYlZpZXdJbXBsQWRkaXRp
b25zKCk7CisgICAgdXBkYXRlVG91Y2hCYXIoKTsKIAogICAgIGlmIChkaXJlY3Rpb24gIT0gTlNE
aXJlY3RTZWxlY3Rpb24pIHsKICAgICAgICAgTlNFdmVudCAqZXZlbnQgPSBbTlNBcHAgY3VycmVu
dEV2ZW50XTsKQEAgLTE4MDgsNyArMjUwMSw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNlbGVjdGlv
bkRpZENoYW5nZSgpCiAgICAgaWYgKCFtX2lzSGFuZGxpbmdBY2NlcHRlZENhbmRpZGF0ZSkKICAg
ICAgICAgbV9zb2Z0U3BhY2VSYW5nZSA9IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwogI2lm
IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwCi0gICAgdXBkYXRlV2Vi
Vmlld0ltcGxBZGRpdGlvbnMoKTsKKyAgICB1cGRhdGVUb3VjaEJhcigpOwogICAgIGlmICghbV9w
YWdlLT5lZGl0b3JTdGF0ZSgpLmlzTWlzc2luZ1Bvc3RMYXlvdXREYXRhKQogICAgICAgICByZXF1
ZXN0Q2FuZGlkYXRlc0ZvclNlbGVjdGlvbklmTmVlZGVkKCk7CiAjZW5kaWYKQEAgLTI0NDgsNyAr
MzE0MSw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmRpZEhhbmRsZUFjY2VwdGVkQ2FuZGkKIHZvaWQg
V2ViVmlld0ltcGw6OnZpZGVvQ29udHJvbHNNYW5hZ2VyRGlkQ2hhbmdlKCkKIHsKICNpZiBfX01B
Q19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMAotICAgIHVwZGF0ZVdlYlZpZXdJ
bXBsQWRkaXRpb25zKCk7CisgICAgdXBkYXRlVG91Y2hCYXIoKTsKICNlbmRpZgogfQogCkluZGV4
OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2NyBAQAorMjAxNi0xMS0wNCAgQmV0
aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3VwcG9ydCBUb3VjaEJhciBp
biBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NDQzNworICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIHJkYXI6Ly9wcm9i
bGVtLzI4ODc2NTI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW06CisgICAgICAgIChXZWJF
ZGl0b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViRWRp
dG9yQ2xpZW50Ojp1cGRhdGVFZGl0b3JTdGF0ZUFmdGVyTGF5b3V0SWZFZGl0YWJpbGl0eUNoYW5n
ZWQpOgorICAgICAgICAqIFdlYlZpZXcvV2ViSFRNTFZpZXcubW06CisgICAgICAgICgtW1dlYkhU
TUxWaWV3IGNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW1dKToKKyAgICAgICAgKiBXZWJWaWV3L1dl
YlZpZXcubW06CisgICAgICAgICgtW19XZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIg
aW5pdFdpdGhXZWJWaWV3Ol0pOgorICAgICAgICAoLVtfV2ViVGV4dExpc3RUb3VjaEJhclZpZXdD
b250cm9sbGVyIF9zZWxlY3RMaXN0Ol0pOgorICAgICAgICAoLVtfV2ViVGV4dExpc3RUb3VjaEJh
clZpZXdDb250cm9sbGVyIHNldEN1cnJlbnRMaXN0VHlwZTpdKToKKyAgICAgICAgKC1bV2ViVGV4
dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgaW5pdFdpdGhXZWJWaWV3Ol0pOgorICAgICAgICAoLVtX
ZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBpdGVtRm9ySWRlbnRpZmllcjpdKToKKyAgICAg
ICAgKC1bV2ViVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgd2ViVGV4dExpc3RUb3VjaEJhclZp
ZXdDb250cm9sbGVyXSk6CisgICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVy
IHNldFRleHRJc0JvbGQ6XSk6CisgICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0ZW1Db250cm9s
bGVyIHNldFRleHRJc0l0YWxpYzpdKToKKyAgICAgICAgKC1bV2ViVGV4dFRvdWNoQmFySXRlbUNv
bnRyb2xsZXIgc2V0VGV4dElzVW5kZXJsaW5lZDpdKToKKyAgICAgICAgKC1bV2ViVGV4dFRvdWNo
QmFySXRlbUNvbnRyb2xsZXIgX3dlYkNoYW5nZVRleHRTdHlsZTpdKToKKyAgICAgICAgKC1bV2Vi
VGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0Q3VycmVudFRleHRBbGlnbm1lbnQ6XSk6Cisg
ICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIF93ZWJDaGFuZ2VUZXh0QWxp
Z25tZW50Ol0pOgorICAgICAgICAoLVtXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciB0ZXh0
Q29sb3JdKToKKyAgICAgICAgKC1bV2ViVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4
dENvbG9yOl0pOgorICAgICAgICAoLVtXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBfd2Vi
Q2hhbmdlQ29sb3I6XSk6CisgICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVy
IHRleHRMaXN0Vmlld0NvbnRyb2xsZXJdKToKKyAgICAgICAgKC1bV2ViVmlldyBfY29tbW9uSW5p
dGlhbGl6YXRpb25XaXRoRnJhbWVOYW1lOmdyb3VwTmFtZTpdKToKKyAgICAgICAgKC1bV2ViVmll
dyBzaG93Q2FuZGlkYXRlczpmb3JTdHJpbmc6aW5SZWN0OmZvclNlbGVjdGVkUmFuZ2U6dmlldzpj
b21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV2ViVmlldyBzaG91bGRSZXF1ZXN0Q2Fu
ZGlkYXRlc10pOgorICAgICAgICAoLVtXZWJWaWV3IGZvcmNlUmVxdWVzdENhbmRpZGF0ZXNGb3JU
ZXN0aW5nXSk6CisgICAgICAgICgtW1dlYlZpZXcgbWFrZVRvdWNoQmFyXSk6CisgICAgICAgICgt
W1dlYlZpZXcgdG91Y2hCYXI6bWFrZUl0ZW1Gb3JJZGVudGlmaWVyOl0pOgorICAgICAgICAodGV4
dENoZWNraW5nUmVzdWx0RnJvbU5TVGV4dENoZWNraW5nUmVzdWx0KToKKyAgICAgICAgKC1bV2Vi
VmlldyBjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtOmVuZFNlbGVjdGluZ0NhbmRpZGF0ZUF0SW5k
ZXg6XSk6CisgICAgICAgICgtW1dlYlZpZXcgY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTpjaGFu
Z2VkQ2FuZGlkYXRlTGlzdFZpc2liaWxpdHk6XSk6CisgICAgICAgICgtW1dlYlZpZXcgX3NldFVw
UGxheWJhY2tDb250cm9sc01hbmFnZXJGb3JNZWRpYUVsZW1lbnQ6XSk6CisgICAgICAgICgtW1dl
YlZpZXcgX2NsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXJdKToKKyAgICAgICAgKC1bV2ViVmll
dyBfZGlzbWlzc1RleHRUb3VjaEJhclBvcG92ZXJJdGVtV2l0aElkZW50aWZpZXI6XSk6CisgICAg
ICAgICgtW1dlYlZpZXcgX3RleHRUb3VjaEJhckN1c3RvbWl6YXRpb25BbGxvd2VkSWRlbnRpZmll
cnNdKToKKyAgICAgICAgKC1bV2ViVmlldyBfcGxhaW5UZXh0VG91Y2hCYXJDdXN0b21pemF0aW9u
RGVmYXVsdEl0ZW1JZGVudGlmaWVyc10pOgorICAgICAgICAoLVtXZWJWaWV3IF9yaWNoVGV4dFRv
dWNoQmFyQ3VzdG9taXphdGlvbkRlZmF1bHRJdGVtSWRlbnRpZmllcnNdKToKKyAgICAgICAgKC1b
V2ViVmlldyB0b3VjaEJhckRpZEV4aXRDdXN0b21pemF0aW9uOl0pOgorICAgICAgICAoLVtXZWJW
aWV3IHRvdWNoQmFyV2lsbEVudGVyQ3VzdG9taXphdGlvbjpdKToKKyAgICAgICAgKC1bV2ViVmll
dyBkaWRDaGFuZ2VBdXRvbWF0aWNUZXh0Q29tcGxldGlvbjpdKToKKyAgICAgICAgKC1bV2ViVmll
dyBzZXRVcFRleHRUb3VjaEJhcjpdKToKKyAgICAgICAgKC1bV2ViVmlldyBfaXNSaWNobHlFZGl0
YWJsZV0pOgorICAgICAgICAoLVtXZWJWaWV3IHRleHRUb3VjaEJhcl0pOgorICAgICAgICAoLVtX
ZWJWaWV3IHVwZGF0ZVRleHRUb3VjaEJhcl0pOgorICAgICAgICAoLVtXZWJWaWV3IHVwZGF0ZU1l
ZGlhVG91Y2hCYXJdKToKKyAgICAgICAgKC1bV2ViVmlldyB1cGRhdGVUb3VjaEJhcl0pOgorICAg
ICAgICAoLVtXZWJWaWV3IHByZXBhcmVGb3JNb3VzZURvd25dKToKKyAgICAgICAgKC1bV2ViVmll
dyBwcmVwYXJlRm9yTW91c2VVcF0pOgorICAgICAgICAoLVtXZWJWaWV3IHdlYlZpZXdBZGRpdGlv
bnNXaWxsRGVzdHJveVZpZXddKToKKyAgICAgICAgKC1bV2ViVmlldyBjYW5kaWRhdGVMaXN0XSk6
CisgICAgICAgICgtW1dlYlZpZXcgdXBkYXRlV2ViVmlld0FkZGl0aW9uc10pOiBEZWxldGVkLgor
ICAgICAgICAqIFdlYlZpZXcvV2ViVmlld0RhdGEuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZp
ZXdJbnRlcm5hbC5oOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlld1ByaXZhdGUuaDoKKwogMjAx
Ni0xMS0wNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgogCiAg
ICAgICAgIEFkZCBhIHNldHRpbmcgYW5kIHByZWZlcmVuY2VzIHRvIGVuYWJsZS9kaXNhYmxlIGFz
eW5jIGltYWdlIGRlY29kaW5nCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTM0Nyw3ICszNDcsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVzcG9uZFRv
Q2hhbmdlZFNlCiAgICAgTlNWaWV3PFdlYkRvY3VtZW50Vmlldz4gKmRvY3VtZW50VmlldyA9IFtb
a2l0KGZyYW1lKSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CiAgICAgaWYgKFtkb2N1bWVudFZp
ZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkgewogICAgICAgICBbKFdlYkhU
TUxWaWV3ICopZG9jdW1lbnRWaWV3IF9zZWxlY3Rpb25DaGFuZ2VkXTsKLSAgICAgICAgW21fd2Vi
VmlldyB1cGRhdGVXZWJWaWV3QWRkaXRpb25zXTsKKyAgICAgICAgW21fd2ViVmlldyB1cGRhdGVU
b3VjaEJhcl07CiAgICAgICAgIG1fbGFzdEVkaXRvclN0YXRlV2FzQ29udGVudEVkaXRhYmxlID0g
WyhXZWJIVE1MVmlldyAqKWRvY3VtZW50VmlldyBfaXNFZGl0YWJsZV0gPyBFZGl0b3JTdGF0ZUlz
Q29udGVudEVkaXRhYmxlOjpZZXMgOiBFZGl0b3JTdGF0ZUlzQ29udGVudEVkaXRhYmxlOjpObzsK
ICAgICB9CiAKQEAgLTY2Nyw3ICs2NjcsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6dXBkYXRl
RWRpdG9yU3RhdGVBCiAKICAgICBFZGl0b3JTdGF0ZUlzQ29udGVudEVkaXRhYmxlIGVkaXRvclN0
YXRlSXNDb250ZW50RWRpdGFibGUgPSBbKFdlYkhUTUxWaWV3ICopZG9jdW1lbnRWaWV3IF9pc0Vk
aXRhYmxlXSA/IEVkaXRvclN0YXRlSXNDb250ZW50RWRpdGFibGU6OlllcyA6IEVkaXRvclN0YXRl
SXNDb250ZW50RWRpdGFibGU6Ok5vOwogICAgIGlmIChtX2xhc3RFZGl0b3JTdGF0ZVdhc0NvbnRl
bnRFZGl0YWJsZSAhPSBlZGl0b3JTdGF0ZUlzQ29udGVudEVkaXRhYmxlKQotICAgICAgICBbbV93
ZWJWaWV3IHVwZGF0ZVdlYlZpZXdBZGRpdGlvbnNdOworICAgICAgICBbbV93ZWJWaWV3IHVwZGF0
ZVRvdWNoQmFyXTsKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlZ2lzdGVyVW5kb1N0ZXAo
UGFzc1JlZlB0cjxVbmRvU3RlcD4gY21kKQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJIVE1MVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYkhUTUxWaWV3Lm1tCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC03MjMwLDggKzcyMzAsMTEg
QEAgLSAodm9pZClfdXBkYXRlU2VsZWN0aW9uRm9ySW5wdXRNYW5hZ2VyCiAjZW5kaWYgLy8gUExB
VEZPUk0oSU9TKQogfQogCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05f
TUlOX1JFUVVJUkVEID49IDEwMTIwMCAmJiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2ltcG9y
dCA8V2ViS2l0QWRkaXRpb25zL1dlYkhUTUxWaWV3V2ViTlNUZXh0SW5wdXRTdXBwb3J0QWRkaXRp
b25zLm1tPgorI2lmIEhBVkUoVE9VQ0hfQkFSKQorLSAoTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJ
dGVtICopY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbQoreworICAgIHJldHVybiBbW3NlbGYgX3dl
YlZpZXddIGNhbmRpZGF0ZUxpc3RdOworfQogI2VuZGlmCiAKIEBlbmQKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCw3
IEBACiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CiAjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9FeGNlcHRpb24uaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWVSZWYu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvQVZLaXRTUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvQWx0ZXJu
YXRpdmVUZXh0VUlDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0FuaW1hdGlvbkNvbnRy
b2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaD4KQEAg
LTE0NCw2ICsxNDUsOCBAQAogI2ltcG9ydCA8V2ViQ29yZS9HZW9sb2NhdGlvbkNvbnRyb2xsZXIu
aD4KICNpbXBvcnQgPFdlYkNvcmUvR2VvbG9jYXRpb25FcnJvci5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9IVE1MTmFtZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTE9MaXN0RWxlbWVudC5oPgorI2lt
cG9ydCA8V2ViQ29yZS9IVE1MVUxpc3RFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxW
aWRlb0VsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvSGlzdG9yeUNvbnRyb2xsZXIuaD4KICNp
bXBvcnQgPFdlYkNvcmUvSGlzdG9yeUl0ZW0uaD4KQEAgLTE1MywxMSArMTU2LDE0IEBACiAjaW1w
b3J0IDxXZWJDb3JlL0pTRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9KU05vZGVMaXN0Lmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0pTTm90aWZpY2F0aW9uLmg+CisjaW1wb3J0IDxXZWJDb3JlL0xv
Y2FsaXplZFN0cmluZ3MuaD4KICNpbXBvcnQgPFdlYkNvcmUvTG9nSW5pdGlhbGl6YXRpb24uaD4K
ICNpbXBvcnQgPFdlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5oPgogI2ltcG9ydCA8V2ViQ29yZS9N
YWluRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvTWVtb3J5Q2FjaGUuaD4KICNpbXBvcnQgPFdl
YkNvcmUvTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL05TU3BlbGxD
aGVja2VyU1BJLmg+CisjaW1wb3J0IDxXZWJDb3JlL05TVG91Y2hCYXJTUEkuaD4KICNpbXBvcnQg
PFdlYkNvcmUvTlNVUkxGaWxlVHlwZU1hcHBpbmdzU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05l
dHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9Ob2RlTGlzdC5oPgpAQCAt
MTkyLDYgKzE5OCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVPYmpDRXh0cmFzLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dpZGdldC5o
PgorI2ltcG9ydCA8V2ViQ29yZS9odG1sZWRpdGluZy5oPgogI2ltcG9ydCA8V2ViS2l0TGVnYWN5
L0RPTS5oPgogI2ltcG9ydCA8V2ViS2l0TGVnYWN5L0RPTUV4dGVuc2lvbnMuaD4KICNpbXBvcnQg
PFdlYktpdExlZ2FjeS9ET01Qcml2YXRlLmg+CkBAIC0yMTMsNiArMjIwLDcgQEAKICNpbXBvcnQg
PHd0Zi9SZWZQdHIuaD4KICNpbXBvcnQgPHd0Zi9SdW5Mb29wLmg+CiAjaW1wb3J0IDx3dGYvU3Rk
TGliRXh0cmFzLmg+CisjaW1wb3J0IDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CiAjaW1wb3J0IDx3
dGYvc3BpL2Rhcndpbi9keWxkU1BJLmg+CiAKICNpZiAhUExBVEZPUk0oSU9TKQpAQCAtMzA3LDYg
KzMxNSwxMiBAQAogI2ltcG9ydCA8V2ViQ29yZS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudC5oPgogI2VuZGlmCiAKKyNpZiBIQVZFKFRPVUNIX0JBUikgJiYgRU5BQkxFKFdFQl9Q
TEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorU09GVF9MSU5LX0ZSQU1FV09SSyhBVktpdCkKK1NP
RlRfTElOS19DTEFTUyhBVktpdCwgQVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNQcm92aWRl
cikKK1NPRlRfTElOS19DTEFTUyhBVktpdCwgQVZGdW5jdGlvbkJhclNjcnViYmVyKQorI2VuZGlm
IC8vIEhBVkUoVE9VQ0hfQkFSKSAmJiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFH
RVIpCisKICNpZiBQTEFURk9STShNQUMpCiBTT0ZUX0xJTktfQ09OU1RBTlRfTUFZX0ZBSUwoTG9v
a3VwLCBMVU5vdGlmaWNhdGlvblBvcG92ZXJXaWxsQ2xvc2UsIE5TU3RyaW5nICopCiAjZW5kaWYK
QEAgLTY2Miw2ICs2NzYsMjgxIEBAIHN0YXRpYyBCT09MIGF1dG9tYXRpY1RleHRSZXBsYWNlbWVu
dEVuYWIKIHN0YXRpYyBCT09MIGF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQ7CiAj
ZW5kaWYKIAorI2lmIEhBVkUoVE9VQ0hfQkFSKQorCitlbnVtIGNsYXNzIFdlYkxpc3RUeXBlIHsK
KyAgICBOb25lID0gMCwKKyAgICBPcmRlcmVkLAorICAgIFVub3JkZXJlZAorfTsKKworQGludGVy
ZmFjZSBfV2ViVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyIDogTlNWaWV3Q29udHJvbGxl
ciB7CisgICAgV2ViTGlzdFR5cGUgX2N1cnJlbnRMaXN0VHlwZTsKKworQHByaXZhdGUKKyAgICBX
ZWJWaWV3ICpfd2ViVmlldzsKK30KKworQHByb3BlcnR5IChub25hdG9taWMpIFdlYkxpc3RUeXBl
IGN1cnJlbnRMaXN0VHlwZTsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViVmlldzooV2Vi
VmlldyAqKXdlYlZpZXc7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIF9XZWJUZXh0TGlzdFRv
dWNoQmFyVmlld0NvbnRyb2xsZXIKKworQHN5bnRoZXNpemUgY3VycmVudExpc3RUeXBlPV9jdXJy
ZW50TGlzdFR5cGU7CisKK3N0YXRpYyBjb25zdCBkb3VibGUgbGlzdENvbnRyb2xTZWdtZW50V2lk
dGggPSA2Ny4wOworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbm9MaXN0U2VnbWVudCA9IDA7Citz
dGF0aWMgY29uc3QgdW5zaWduZWQgdW5vcmRlcmVkTGlzdFNlZ21lbnQgPSAxOworc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG9yZGVyZWRMaXN0U2VnbWVudCA9IDI7CisKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3Cit7CisgICAgaWYgKCEoc2VsZiA9IFtz
dXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfd2ViVmlldyA9IHdlYlZp
ZXc7CisKKyAgICBOU1NlZ21lbnRlZENvbnRyb2wgKmluc2VydExpc3RDb250cm9sID0gW05TU2Vn
bWVudGVkQ29udHJvbCBzZWdtZW50ZWRDb250cm9sV2l0aExhYmVsczpAWyBXZWJDb3JlOjppbnNl
cnRMaXN0VHlwZU5vbmUoKSwgV2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVCdWxsZXRlZCgpLCBXZWJD
b3JlOjppbnNlcnRMaXN0VHlwZU51bWJlcmVkKCkgXSB0cmFja2luZ01vZGU6TlNTZWdtZW50U3dp
dGNoVHJhY2tpbmdTZWxlY3RPbmUgdGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3Rvcihfc2VsZWN0
TGlzdDopXTsKKyAgICBbaW5zZXJ0TGlzdENvbnRyb2wgc2V0V2lkdGg6bGlzdENvbnRyb2xTZWdt
ZW50V2lkdGggZm9yU2VnbWVudDpub0xpc3RTZWdtZW50XTsKKyAgICBbaW5zZXJ0TGlzdENvbnRy
b2wgc2V0V2lkdGg6bGlzdENvbnRyb2xTZWdtZW50V2lkdGggZm9yU2VnbWVudDp1bm9yZGVyZWRM
aXN0U2VnbWVudF07CisgICAgW2luc2VydExpc3RDb250cm9sIHNldFdpZHRoOmxpc3RDb250cm9s
U2VnbWVudFdpZHRoIGZvclNlZ21lbnQ6b3JkZXJlZExpc3RTZWdtZW50XTsKKyAgICBpbnNlcnRM
aXN0Q29udHJvbC5mb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOjE1XTsKKworI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVk
ICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorICAgIGlkIHNlZ21lbnRFbGVtZW50ID0gTlNB
Y2Nlc3NpYmlsaXR5VW5pZ25vcmVkRGVzY2VuZGFudChpbnNlcnRMaXN0Q29udHJvbCk7CisgICAg
TlNBcnJheSAqc2VnbWVudHMgPSBbc2VnbWVudEVsZW1lbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlXTsKKyAgICBBU1NFUlQoc2Vn
bWVudHMuY291bnQgPT0gMyk7CisgICAgW1tzZWdtZW50cyBvYmplY3RBdEluZGV4Om5vTGlzdFNl
Z21lbnRdIGFjY2Vzc2liaWxpdHlTZXRPdmVycmlkZVZhbHVlOldlYkNvcmU6Omluc2VydExpc3RU
eXBlTm9uZSgpIGZvckF0dHJpYnV0ZTpOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkF0dHJpYnV0
ZV07CisgICAgW1tzZWdtZW50cyBvYmplY3RBdEluZGV4OnVub3JkZXJlZExpc3RTZWdtZW50XSBh
Y2Nlc3NpYmlsaXR5U2V0T3ZlcnJpZGVWYWx1ZTpXZWJDb3JlOjppbnNlcnRMaXN0VHlwZUJ1bGxl
dGVkQWNjZXNzaWJpbGl0eVRpdGxlKCkgZm9yQXR0cmlidXRlOk5TQWNjZXNzaWJpbGl0eURlc2Ny
aXB0aW9uQXR0cmlidXRlXTsKKyAgICBbW3NlZ21lbnRzIG9iamVjdEF0SW5kZXg6b3JkZXJlZExp
c3RTZWdtZW50XSBhY2Nlc3NpYmlsaXR5U2V0T3ZlcnJpZGVWYWx1ZTpXZWJDb3JlOjppbnNlcnRM
aXN0VHlwZU51bWJlcmVkQWNjZXNzaWJpbGl0eVRpdGxlKCkgZm9yQXR0cmlidXRlOk5TQWNjZXNz
aWJpbGl0eURlc2NyaXB0aW9uQXR0cmlidXRlXTsKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBw
b3AKKworICAgIHNlbGYudmlldyA9IGluc2VydExpc3RDb250cm9sOworCisgICAgcmV0dXJuIHNl
bGY7Cit9CisKKy0gKHZvaWQpX3NlbGVjdExpc3Q6KGlkKXNlbmRlcgoreworICAgIE5TVmlldyAq
ZG9jdW1lbnRWaWV3ID0gW1tbX3dlYlZpZXcgX3NlbGVjdGVkT3JNYWluRnJhbWVdIGZyYW1lVmll
d10gZG9jdW1lbnRWaWV3XTsKKyAgICBpZiAoIVtkb2N1bWVudFZpZXcgaXNLaW5kT2ZDbGFzczpb
V2ViSFRNTFZpZXcgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViSFRNTFZpZXcg
KndlYkhUTUxWaWV3ID0gKFdlYkhUTUxWaWV3ICopZG9jdW1lbnRWaWV3OworICAgIE5TU2VnbWVu
dGVkQ29udHJvbCAqaW5zZXJ0TGlzdENvbnRyb2wgPSAoTlNTZWdtZW50ZWRDb250cm9sICopc2Vs
Zi52aWV3OworICAgIGlmIChpbnNlcnRMaXN0Q29udHJvbC5zZWxlY3RlZFNlZ21lbnQgPT0gbm9M
aXN0U2VnbWVudCkgeworICAgICAgICAvLyBUaGVyZSBpcyBubyAicmVtb3ZlIGxpc3QiIGVkaXQg
Y29tbWFuZCwgYnV0IF9pbnNlcnRPcmRlcmVkTGlzdCBhbmQgX2luc2VydFVub3JkZXJlZExpc3Qg
Ym90aAorICAgICAgICAvLyBiZWhhdmUgYXMgdG9nZ2xlcywgc28gd2UgY2FuIGludm9rZSB0aGUg
YXBwcm9wcmlhdGUgbWV0aG9kIGRlcGVuZGluZyBvbiBvdXIgX2N1cnJlbnRMaXN0VHlwZQorICAg
ICAgICAvLyB0byByZW1vdmUgYW4gZXhpc3RpbmcgbGlzdC4gV2UgZG9uJ3QgaGF2ZSB0byBkbyBh
bnl0aGluZyBpZiBfY3VycmVudExpc3RUeXBlIGlzIFdlYkxpc3RUeXBlOjpOb25lLgorICAgICAg
ICBpZiAoX2N1cnJlbnRMaXN0VHlwZSA9PSBXZWJMaXN0VHlwZTo6T3JkZXJlZCkKKyAgICAgICAg
ICAgIFt3ZWJIVE1MVmlldyBfaW5zZXJ0T3JkZXJlZExpc3RdOworICAgICAgICBlbHNlIGlmIChf
Y3VycmVudExpc3RUeXBlID09IFdlYkxpc3RUeXBlOjpVbm9yZGVyZWQpCisgICAgICAgICAgICBb
d2ViSFRNTFZpZXcgX2luc2VydFVub3JkZXJlZExpc3RdOworICAgIH0gZWxzZSBpZiAoaW5zZXJ0
TGlzdENvbnRyb2wuc2VsZWN0ZWRTZWdtZW50ID09IHVub3JkZXJlZExpc3RTZWdtZW50KQorICAg
ICAgICBbd2ViSFRNTFZpZXcgX2luc2VydFVub3JkZXJlZExpc3RdOworICAgIGVsc2UgaWYgKGlu
c2VydExpc3RDb250cm9sLnNlbGVjdGVkU2VnbWVudCA9PSBvcmRlcmVkTGlzdFNlZ21lbnQpCisg
ICAgICAgIFt3ZWJIVE1MVmlldyBfaW5zZXJ0T3JkZXJlZExpc3RdOworCisgICAgW193ZWJWaWV3
IF9kaXNtaXNzVGV4dFRvdWNoQmFyUG9wb3Zlckl0ZW1XaXRoSWRlbnRpZmllcjpOU1RvdWNoQmFy
SXRlbUlkZW50aWZpZXJUZXh0TGlzdF07Cit9CisKKy0gKHZvaWQpc2V0Q3VycmVudExpc3RUeXBl
OihXZWJMaXN0VHlwZSlsaXN0VHlwZQoreworICAgIE5TU2VnbWVudGVkQ29udHJvbCAqaW5zZXJ0
TGlzdENvbnRyb2wgPSAoTlNTZWdtZW50ZWRDb250cm9sICopc2VsZi52aWV3OworICAgIHN3aXRj
aCAobGlzdFR5cGUpIHsKKyAgICBjYXNlIFdlYkxpc3RUeXBlOjpOb25lOgorICAgICAgICBbaW5z
ZXJ0TGlzdENvbnRyb2wgc2V0U2VsZWN0ZWQ6WUVTIGZvclNlZ21lbnQ6bm9MaXN0U2VnbWVudF07
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViTGlzdFR5cGU6Ok9yZGVyZWQ6CisgICAgICAg
IFtpbnNlcnRMaXN0Q29udHJvbCBzZXRTZWxlY3RlZDpZRVMgZm9yU2VnbWVudDpvcmRlcmVkTGlz
dFNlZ21lbnRdOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYkxpc3RUeXBlOjpVbm9yZGVy
ZWQ6CisgICAgICAgIFtpbnNlcnRMaXN0Q29udHJvbCBzZXRTZWxlY3RlZDpZRVMgZm9yU2VnbWVu
dDp1bm9yZGVyZWRMaXN0U2VnbWVudF07CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIF9j
dXJyZW50TGlzdFR5cGUgPSBsaXN0VHlwZTsKK30KKworQGVuZAorCitAaW50ZXJmYWNlIFdlYlRl
eHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIDogTlNUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciB7
CisgICAgQk9PTCBfdGV4dElzQm9sZDsKKyAgICBCT09MIF90ZXh0SXNJdGFsaWM7CisgICAgQk9P
TCBfdGV4dElzVW5kZXJsaW5lZDsKKyAgICBOU1RleHRBbGlnbm1lbnQgX2N1cnJlbnRUZXh0QWxp
Z25tZW50OworICAgIFJldGFpblB0cjxOU0NvbG9yPiBfdGV4dENvbG9yOworICAgIFJldGFpblB0
cjxfV2ViVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyPiBfd2ViVGV4dExpc3RUb3VjaEJh
clZpZXdDb250cm9sbGVyOworCitAcHJpdmF0ZQorICAgIFdlYlZpZXcgKl93ZWJWaWV3OworfQor
CitAcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCB0ZXh0SXNCb2xkOworQHByb3BlcnR5IChub25h
dG9taWMpIEJPT0wgdGV4dElzSXRhbGljOworQHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgdGV4
dElzVW5kZXJsaW5lZDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBOU1RleHRBbGlnbm1lbnQgY3Vy
cmVudFRleHRBbGlnbm1lbnQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCByZWFkd3Jp
dGUpIE5TQ29sb3IgKnRleHRDb2xvcjsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViVmll
dzooV2ViVmlldyAqKXdlYlZpZXc7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJUZXh0VG91
Y2hCYXJJdGVtQ29udHJvbGxlcgorCitAc3ludGhlc2l6ZSB0ZXh0SXNCb2xkPV90ZXh0SXNCb2xk
OworQHN5bnRoZXNpemUgdGV4dElzSXRhbGljPV90ZXh0SXNJdGFsaWM7CitAc3ludGhlc2l6ZSB0
ZXh0SXNVbmRlcmxpbmVkPV90ZXh0SXNVbmRlcmxpbmVkOworQHN5bnRoZXNpemUgY3VycmVudFRl
eHRBbGlnbm1lbnQ9X2N1cnJlbnRUZXh0QWxpZ25tZW50OworCistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhXZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldworeworICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX3dlYlZpZXcgPSB3ZWJWaWV3
OworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKE5TVG91Y2hCYXJJdGVtICopaXRlbUZvcklk
ZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcgoreworICAgIE5TVG91Y2hCYXJJdGVtICpp
dGVtID0gW3N1cGVyIGl0ZW1Gb3JJZGVudGlmaWVyOmlkZW50aWZpZXJdOworICAgIEJPT0wgaXNU
ZXh0Rm9ybWF0SXRlbSA9IFtpZGVudGlmaWVyIGlzRXF1YWxUb1N0cmluZzpOU1RvdWNoQmFySXRl
bUlkZW50aWZpZXJUZXh0Rm9ybWF0XTsKKworICAgIGlmIChpc1RleHRGb3JtYXRJdGVtIHx8IFtp
ZGVudGlmaWVyIGlzRXF1YWxUb1N0cmluZzpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0U3R5
bGVdKQorICAgICAgICBzZWxmLnRleHRTdHlsZS5hY3Rpb24gPSBAc2VsZWN0b3IoX3dlYkNoYW5n
ZVRleHRTdHlsZTopOworCisgICAgaWYgKGlzVGV4dEZvcm1hdEl0ZW0gfHwgW2lkZW50aWZpZXIg
aXNFcXVhbFRvU3RyaW5nOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRBbGlnbm1lbnRdKQor
ICAgICAgICBzZWxmLnRleHRBbGlnbm1lbnRzLmFjdGlvbiA9IEBzZWxlY3Rvcihfd2ViQ2hhbmdl
VGV4dEFsaWdubWVudDopOworCisgICAgTlNDb2xvclBpY2tlclRvdWNoQmFySXRlbSAqY29sb3JQ
aWNrZXJJdGVtID0gbmlsOworICAgIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9TdHJpbmc6TlNU
b3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dENvbG9yUGlja2VyXSAmJiBbaXRlbSBpc0tpbmRPZkNs
YXNzOltOU0NvbG9yUGlja2VyVG91Y2hCYXJJdGVtIGNsYXNzXV0pCisgICAgICAgIGNvbG9yUGlj
a2VySXRlbSA9IChOU0NvbG9yUGlja2VyVG91Y2hCYXJJdGVtICopaXRlbTsKKyAgICBpZiAoaXNU
ZXh0Rm9ybWF0SXRlbSkKKyAgICAgICAgY29sb3JQaWNrZXJJdGVtID0gc2VsZi5jb2xvclBpY2tl
ckl0ZW07CisgICAgaWYgKGNvbG9yUGlja2VySXRlbSkgeworICAgICAgICBjb2xvclBpY2tlckl0
ZW0udGFyZ2V0ID0gc2VsZjsKKyAgICAgICAgY29sb3JQaWNrZXJJdGVtLmFjdGlvbiA9IEBzZWxl
Y3Rvcihfd2ViQ2hhbmdlQ29sb3I6KTsKKyAgICAgICAgY29sb3JQaWNrZXJJdGVtLnNob3dzQWxw
aGEgPSBOTzsKKyAgICB9CisKKyAgICByZXR1cm4gaXRlbTsKK30KKworLSAoX1dlYlRleHRMaXN0
VG91Y2hCYXJWaWV3Q29udHJvbGxlciAqKXdlYlRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxl
cgoreworICAgIHJldHVybiAoX1dlYlRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciAqKVtz
ZWxmIHRleHRMaXN0Vmlld0NvbnRyb2xsZXJdOworfQorCistICh2b2lkKXNldFRleHRJc0JvbGQ6
KEJPT0wpYm9sZAoreworICAgIF90ZXh0SXNCb2xkID0gYm9sZDsKKyAgICBpZiAoW3NlbGYudGV4
dFN0eWxlIGlzU2VsZWN0ZWRGb3JTZWdtZW50OjBdICE9IF90ZXh0SXNCb2xkKQorICAgICAgICBb
c2VsZi50ZXh0U3R5bGUgc2V0U2VsZWN0ZWQ6X3RleHRJc0JvbGQgZm9yU2VnbWVudDowXTsKK30K
KworLSAodm9pZClzZXRUZXh0SXNJdGFsaWM6KEJPT0wpaXRhbGljCit7CisgICAgX3RleHRJc0l0
YWxpYyA9IGl0YWxpYzsKKyAgICBpZiAoW3NlbGYudGV4dFN0eWxlIGlzU2VsZWN0ZWRGb3JTZWdt
ZW50OjFdICE9IF90ZXh0SXNJdGFsaWMpCisgICAgICAgIFtzZWxmLnRleHRTdHlsZSBzZXRTZWxl
Y3RlZDpfdGV4dElzSXRhbGljIGZvclNlZ21lbnQ6MV07Cit9CisKKy0gKHZvaWQpc2V0VGV4dElz
VW5kZXJsaW5lZDooQk9PTCl1bmRlcmxpbmVkCit7CisgICAgX3RleHRJc1VuZGVybGluZWQgPSB1
bmRlcmxpbmVkOworICAgIGlmIChbc2VsZi50ZXh0U3R5bGUgaXNTZWxlY3RlZEZvclNlZ21lbnQ6
Ml0gIT0gX3RleHRJc1VuZGVybGluZWQpCisgICAgICAgIFtzZWxmLnRleHRTdHlsZSBzZXRTZWxl
Y3RlZDpfdGV4dElzVW5kZXJsaW5lZCBmb3JTZWdtZW50OjJdOworfQorCistICh2b2lkKV93ZWJD
aGFuZ2VUZXh0U3R5bGU6KGlkKXNlbmRlcgoreworICAgIGlmIChbc2VsZi50ZXh0U3R5bGUgaXNT
ZWxlY3RlZEZvclNlZ21lbnQ6MF0gIT0gX3RleHRJc0JvbGQpIHsKKyAgICAgICAgX3RleHRJc0Jv
bGQgPSAhX3RleHRJc0JvbGQ7CisgICAgICAgIFtfd2ViVmlldyBfZXhlY3V0ZUNvcmVDb21tYW5k
QnlOYW1lOkAiVG9nZ2xlQm9sZCIgdmFsdWU6QCIiXTsKKyAgICB9CisKKyAgICBpZiAoW3NlbGYu
dGV4dFN0eWxlIGlzU2VsZWN0ZWRGb3JTZWdtZW50OjFdICE9IF90ZXh0SXNJdGFsaWMpIHsKKyAg
ICAgICAgX3RleHRJc0l0YWxpYyA9ICFfdGV4dElzSXRhbGljOworICAgICAgICBbX3dlYlZpZXcg
X2V4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZTpAIlRvZ2dsZUl0YWxpYyIgdmFsdWU6QCIiXTsKKyAg
ICB9CisKKyAgICBpZiAoW3NlbGYudGV4dFN0eWxlIGlzU2VsZWN0ZWRGb3JTZWdtZW50OjJdICE9
IF90ZXh0SXNVbmRlcmxpbmVkKSB7CisgICAgICAgIF90ZXh0SXNVbmRlcmxpbmVkID0gIV90ZXh0
SXNVbmRlcmxpbmVkOworICAgICAgICBbX3dlYlZpZXcgX2V4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFt
ZTpAIlRvZ2dsZVVuZGVybGluZSIgdmFsdWU6QCIiXTsKKyAgICB9Cit9CisKKy0gKHZvaWQpc2V0
Q3VycmVudFRleHRBbGlnbm1lbnQ6KE5TVGV4dEFsaWdubWVudClhbGlnbm1lbnQKK3sKKyAgICBf
Y3VycmVudFRleHRBbGlnbm1lbnQgPSBhbGlnbm1lbnQ7CisgICAgW3NlbGYudGV4dEFsaWdubWVu
dHMgc2VsZWN0U2VnbWVudFdpdGhUYWc6X2N1cnJlbnRUZXh0QWxpZ25tZW50XTsKK30KKworLSAo
dm9pZClfd2ViQ2hhbmdlVGV4dEFsaWdubWVudDooaWQpc2VuZGVyCit7CisgICAgTlNUZXh0QWxp
Z25tZW50IGFsaWdubWVudCA9IChOU1RleHRBbGlnbm1lbnQpW3NlbGYudGV4dEFsaWdubWVudHMu
Y2VsbCB0YWdGb3JTZWdtZW50OltzZWxmLnRleHRBbGlnbm1lbnRzIHNlbGVjdGVkU2VnbWVudF1d
OworICAgIHN3aXRjaCAoYWxpZ25tZW50KSB7CisgICAgY2FzZSBOU1RleHRBbGlnbm1lbnRMZWZ0
OiB7CisgICAgICAgIF9jdXJyZW50VGV4dEFsaWdubWVudCA9IE5TVGV4dEFsaWdubWVudExlZnQ7
CisgICAgICAgIFtfd2ViVmlldyBhbGlnbkxlZnQ6c2VuZGVyXTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgTlNUZXh0QWxpZ25tZW50UmlnaHQ6IHsKKyAgICAgICAgX2N1cnJlbnRU
ZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25tZW50UmlnaHQ7CisgICAgICAgIFtfd2ViVmlldyBh
bGlnblJpZ2h0OnNlbmRlcl07CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIE5TVGV4
dEFsaWdubWVudENlbnRlcjogeworICAgICAgICBfY3VycmVudFRleHRBbGlnbm1lbnQgPSBOU1Rl
eHRBbGlnbm1lbnRDZW50ZXI7CisgICAgICAgIFtfd2ViVmlldyBhbGlnbkNlbnRlcjpzZW5kZXJd
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBOU1RleHRBbGlnbm1lbnRKdXN0aWZp
ZWQ6IHsKKyAgICAgICAgX2N1cnJlbnRUZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25tZW50SnVz
dGlmaWVkOworICAgICAgICBbX3dlYlZpZXcgYWxpZ25KdXN0aWZpZWQ6c2VuZGVyXTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIFtfd2ViVmlldyBfZGlzbWlzc1RleHRUb3VjaEJhclBvcG92ZXJJdGVtV2l0aElkZW50aWZp
ZXI6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEFsaWdubWVudF07Cit9CisKKy0gKE5TQ29s
b3IgKil0ZXh0Q29sb3IKK3sKKyAgICByZXR1cm4gX3RleHRDb2xvci5nZXQoKTsKK30KKworLSAo
dm9pZClzZXRUZXh0Q29sb3I6KE5TQ29sb3IgKiljb2xvcgoreworICAgIF90ZXh0Q29sb3IgPSBj
b2xvcjsKKyAgICBzZWxmLmNvbG9yUGlja2VySXRlbS5jb2xvciA9IF90ZXh0Q29sb3IuZ2V0KCk7
Cit9CisKKy0gKHZvaWQpX3dlYkNoYW5nZUNvbG9yOihpZClzZW5kZXIKK3sKKyAgICBfdGV4dENv
bG9yID0gc2VsZi5jb2xvclBpY2tlckl0ZW0uY29sb3I7CisgICAgW193ZWJWaWV3IF9leGVjdXRl
Q29yZUNvbW1hbmRCeU5hbWU6QCJGb3JlQ29sb3IiIHZhbHVlOiBXZWJDb3JlOjpjb2xvckZyb21O
U0NvbG9yKF90ZXh0Q29sb3IuZ2V0KCkpLnNlcmlhbGl6ZWQoKV07Cit9CisKKy0gKE5TVmlld0Nv
bnRyb2xsZXIgKil0ZXh0TGlzdFZpZXdDb250cm9sbGVyCit7CisgICAgaWYgKCFfd2ViVGV4dExp
c3RUb3VjaEJhclZpZXdDb250cm9sbGVyKQorICAgICAgICBfd2ViVGV4dExpc3RUb3VjaEJhclZp
ZXdDb250cm9sbGVyID0gYWRvcHROUyhbW19XZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xs
ZXIgYWxsb2NdIGluaXRXaXRoV2ViVmlldzpfd2ViVmlld10pOworICAgIHJldHVybiBfd2ViVGV4
dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyLmdldCgpOworfQorCitAZW5kCisKKyNlbmRpZiAv
LyBIQVZFKFRPVUNIX0JBUikKKwogQGltcGxlbWVudGF0aW9uIFdlYlZpZXcgKEFsbFdlYlZpZXdz
KQogCiBzdGF0aWMgQ0ZTZXRDYWxsQmFja3MgTm9uUmV0YWluaW5nU2V0Q2FsbGJhY2tzID0gewpA
QCAtOTcwLDcgKzEyNTksNyBAQCAtICh2b2lkKV9jb21tb25Jbml0aWFsaXphdGlvbldpdGhGcmFt
ZU5hCiAgICAgfQogI2VuZGlmCiAKLSAgICBbc2VsZiB1cGRhdGVXZWJWaWV3QWRkaXRpb25zXTsK
KyAgICBbc2VsZiB1cGRhdGVUb3VjaEJhcl07CiAKICNpZiAhUExBVEZPUk0oSU9TKQogICAgIHN0
YXRpYyBib29sIGRpZE9uZVRpbWVJbml0aWFsaXphdGlvbiA9IGZhbHNlOwpAQCAtNDY5Miw2ICs0
OTgxLDQ1IEBAIC0gKHZvaWQpX3NldEZvbnRGYWxsYmFja1ByZWZlcnNQaWN0b2dyYXAKICAgICAg
ICAgX3ByaXZhdGUtPnBhZ2UtPnNldHRpbmdzKCkuc2V0Rm9udEZhbGxiYWNrUHJlZmVyc1BpY3Rv
Z3JhcGhzKGZsYWcpOwogfQogCisjaWYgSEFWRShUT1VDSF9CQVIpCisKKy0gKHZvaWQpc2hvd0Nh
bmRpZGF0ZXM6KE5TQXJyYXk8TlNUZXh0Q2hlY2tpbmdSZXN1bHQgKj4gKiljYW5kaWRhdGVzIGZv
clN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgaW5SZWN0OihOU1JlY3QpcmVjdE9mVHlwZWRTdHJp
bmcgZm9yU2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlyYW5nZSB2aWV3OihOU1ZpZXcgKil2aWV3IGNv
bXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU1RleHRDaGVja2luZ1Jlc3VsdCAqYWNjZXB0ZWRD
YW5kaWRhdGUpKWNvbXBsZXRpb25CbG9jaworeworICAgIFtzZWxmLmNhbmRpZGF0ZUxpc3Qgc2V0
Q2FuZGlkYXRlczpjYW5kaWRhdGVzIGZvclNlbGVjdGVkUmFuZ2U6cmFuZ2UgaW5TdHJpbmc6c3Ry
aW5nXTsKK30KKworLSAoQk9PTClzaG91bGRSZXF1ZXN0Q2FuZGlkYXRlcworeworICAgIEZyYW1l
KiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXSk7CisgICAgaWYg
KCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybiBOTzsKKworICAgIHJldHVybiAhY29yZUZyYW1l
LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpICYmIHNlbGYuY2Fu
ZGlkYXRlTGlzdC5jYW5kaWRhdGVMaXN0VmlzaWJsZTsKK30KKworLSAodm9pZClmb3JjZVJlcXVl
c3RDYW5kaWRhdGVzRm9yVGVzdGluZworeworICAgIF9wcml2YXRlLT5fY2FuQ3JlYXRlVG91Y2hC
YXJzID0gWUVTOworICAgIFtzZWxmIHVwZGF0ZVRvdWNoQmFyXTsKK30KKworI2Vsc2UKKworLSAo
dm9pZClzaG93Q2FuZGlkYXRlczooTlNBcnJheSAqKWNhbmRpZGF0ZXMgZm9yU3RyaW5nOihOU1N0
cmluZyAqKXN0cmluZyBpblJlY3Q6KE5TUmVjdClyZWN0T2ZUeXBlZFN0cmluZyBmb3JTZWxlY3Rl
ZFJhbmdlOihOU1JhbmdlKXJhbmdlIHZpZXc6KE5TVmlldyAqKXZpZXcgY29tcGxldGlvbkhhbmRs
ZXI6KHZvaWQgKF4pKE5TVGV4dENoZWNraW5nUmVzdWx0ICphY2NlcHRlZENhbmRpZGF0ZSkpY29t
cGxldGlvbkJsb2NrCit7Cit9CisKKy0gKHZvaWQpZm9yY2VSZXF1ZXN0Q2FuZGlkYXRlc0ZvclRl
c3RpbmcKK3sKK30KKworLSAoQk9PTClzaG91bGRSZXF1ZXN0Q2FuZGlkYXRlcworeworICAgIHJl
dHVybiBOTzsKK30KKworI2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFSKQorCiBAZW5kCiAKIEBpbXBs
ZW1lbnRhdGlvbiBfV2ViU2FmZUZvcndhcmRlcgpAQCAtNDgwNCw2ICs1MTMyLDExIEBAIC0gKE5T
TWV0aG9kU2lnbmF0dXJlICopbWV0aG9kU2lnbmF0dXJlRm8KIEBlbmQKICNlbmRpZgogCisjaWYg
SEFWRShUT1VDSF9CQVIpCitAaW50ZXJmYWNlIFdlYlZpZXcgKCkgPE5TQ2FuZGlkYXRlTGlzdFRv
dWNoQmFySXRlbURlbGVnYXRlLCBOU1RvdWNoQmFyRGVsZWdhdGUsIE5TVG91Y2hCYXJQcm92aWRl
cj4KK0BlbmQKKyNlbmRpZgorCiBAaW1wbGVtZW50YXRpb24gV2ViVmlldwogCiArICh2b2lkKWlu
aXRpYWxpemUKQEAgLTY0ODgsNiArNjgyMSw4NyBAQCAtIChOU1ZpZXcgKilwcmV2aW91c1ZhbGlk
S2V5VmlldwogICAgIHJldHVybiBbcHJldmlvdXNWaWV3IHByZXZpb3VzVmFsaWRLZXlWaWV3XTsK
IH0KIAorI2lmIEhBVkUoVE9VQ0hfQkFSKQorCitAZHluYW1pYyB0b3VjaEJhcjsKKworLSAoTlNU
b3VjaEJhciAqKW1ha2VUb3VjaEJhcgoreworICAgIGlmICghX3ByaXZhdGUtPl9jYW5DcmVhdGVU
b3VjaEJhcnMpIHsKKyAgICAgICAgX3ByaXZhdGUtPl9jYW5DcmVhdGVUb3VjaEJhcnMgPSBZRVM7
CisgICAgICAgIFtzZWxmIHVwZGF0ZVRvdWNoQmFyXTsKKyAgICB9CisgICAgcmV0dXJuIF9wcml2
YXRlLT5fY3VycmVudFRvdWNoQmFyLmdldCgpOworfQorCistIChOU1RvdWNoQmFySXRlbSAqKXRv
dWNoQmFyOihOU1RvdWNoQmFyICopdG91Y2hCYXIgbWFrZUl0ZW1Gb3JJZGVudGlmaWVyOihOU1N0
cmluZyAqKWlkZW50aWZpZXIKK3sKKyAgICBpZiAodG91Y2hCYXIgPT0gX3ByaXZhdGUtPl9yaWNo
VGV4dFRvdWNoQmFyIHx8IHRvdWNoQmFyID09IF9wcml2YXRlLT5fcGxhaW5UZXh0VG91Y2hCYXIp
CisgICAgICAgIHJldHVybiBbX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBp
dGVtRm9ySWRlbnRpZmllcjppZGVudGlmaWVyXTsKKworICAgIHJldHVybiBuaWw7Cit9CisKK3N0
YXRpYyBUZXh0Q2hlY2tpbmdSZXN1bHQgdGV4dENoZWNraW5nUmVzdWx0RnJvbU5TVGV4dENoZWNr
aW5nUmVzdWx0KE5TVGV4dENoZWNraW5nUmVzdWx0ICpuc1Jlc3VsdCkKK3sKKyAgICBXZWJDb3Jl
OjpUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OworCisgICAgc3dpdGNoIChbbnNSZXN1bHQgcmVz
dWx0VHlwZV0pIHsKKyAgICBjYXNlIE5TVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nOgorICAgICAg
ICByZXN1bHQudHlwZSA9IFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGVTcGVsbGluZzsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBOU1RleHRDaGVja2luZ1R5cGVSZXBsYWNlbWVudDoKKyAgICAg
ICAgcmVzdWx0LnR5cGUgPSBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlUmVwbGFjZW1lbnQ7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgTlNUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbjoKKyAg
ICAgICAgcmVzdWx0LnR5cGUgPSBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbjsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBXZWJD
b3JlOjpUZXh0Q2hlY2tpbmdUeXBlTm9uZTsKKyAgICB9CisKKyAgICBOU1JhbmdlIHJlc3VsdFJh
bmdlID0gbnNSZXN1bHQucmFuZ2U7CisgICAgcmVzdWx0LmxvY2F0aW9uID0gcmVzdWx0UmFuZ2Uu
bG9jYXRpb247CisgICAgcmVzdWx0Lmxlbmd0aCA9IHJlc3VsdFJhbmdlLmxlbmd0aDsKKyAgICBy
ZXN1bHQucmVwbGFjZW1lbnQgPSBuc1Jlc3VsdC5yZXBsYWNlbWVudFN0cmluZzsKKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKKy0gKHZvaWQpY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTooTlND
YW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtICopYW5JdGVtIGVuZFNlbGVjdGluZ0NhbmRpZGF0ZUF0
SW5kZXg6KE5TSW50ZWdlcilpbmRleAoreworICAgIGlmIChpbmRleCA9PSBOU05vdEZvdW5kKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYW5JdGVtICE9IHNlbGYuY2FuZGlkYXRlTGlzdCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgTlNBcnJheSAqY2FuZGlkYXRlcyA9IGFuSXRlbS5jYW5k
aWRhdGVzOworICAgIGlmICgoTlNVSW50ZWdlcilpbmRleCA+PSBjYW5kaWRhdGVzLmNvdW50KQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZCBjYW5kaWRhdGUgPSBjYW5kaWRhdGVzW2luZGV4XTsK
KyAgICBBU1NFUlQoW2NhbmRpZGF0ZSBpc0tpbmRPZkNsYXNzOltOU1RleHRDaGVja2luZ1Jlc3Vs
dCBjbGFzc11dKTsKKworICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShzZWxmLl9zZWxl
Y3RlZE9yTWFpbkZyYW1lKSkKKyAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+
aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGVXaXRoU29mdFNwYWNlcyh0ZXh0Q2hlY2tpbmdSZXN1bHRG
cm9tTlNUZXh0Q2hlY2tpbmdSZXN1bHQoKE5TVGV4dENoZWNraW5nUmVzdWx0ICopY2FuZGlkYXRl
KSk7Cit9CisKKy0gKHZvaWQpY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTooTlNDYW5kaWRhdGVM
aXN0VG91Y2hCYXJJdGVtICopYW5JdGVtIGNoYW5nZWRDYW5kaWRhdGVMaXN0VmlzaWJpbGl0eToo
Qk9PTClpc1Zpc2libGUKK3sKKyAgICBpZiAoYW5JdGVtICE9IHNlbGYuY2FuZGlkYXRlTGlzdCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGlzVmlzaWJsZSkgeworICAgICAgICBpZiAoRnJh
bWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVdKSkKKyAgICAg
ICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPnJlcXVlc3RDYW5kaWRhdGVzRm9y
U2VsZWN0aW9uKGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIH0KKwor
ICAgIFtzZWxmIHVwZGF0ZVRvdWNoQmFyXTsKK30KKworI2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFS
KQorCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJWaWV3IChXZWJJQkFjdGlvbnMpCkBAIC02
NzQ2LDQ4ICs3MTYwLDYgQEAgLSAoQk9PTCl2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtOihpZCA8
TgogCiBAZW5kCiAKLSNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5f
UkVRVUlSRUQgPj0gMTAxMjAwICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0jaW1wb3J0IDxX
ZWJLaXRBZGRpdGlvbnMvV2ViVmlld0FkZGl0aW9ucy5tbT4KLSNlbHNlCi1AaW1wbGVtZW50YXRp
b24gV2ViVmlldyAoV2ViVXBkYXRlV2ViVmlld0FkZGl0aW9ucykKLQotLSAodm9pZCl1cGRhdGVX
ZWJWaWV3QWRkaXRpb25zCi17Ci19Ci0KLS0gKHZvaWQpcHJlcGFyZUZvck1vdXNlRG93bgotewot
fQotCi0tICh2b2lkKXByZXBhcmVGb3JNb3VzZVVwCi17Ci19Ci0KLS0gKHZvaWQpc2hvd0NhbmRp
ZGF0ZXM6KE5TQXJyYXkgKiljYW5kaWRhdGVzIGZvclN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcg
aW5SZWN0OihOU1JlY3QpcmVjdE9mVHlwZWRTdHJpbmcgZm9yU2VsZWN0ZWRSYW5nZTooTlNSYW5n
ZSlyYW5nZSB2aWV3OihOU1ZpZXcgKil2aWV3IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShO
U1RleHRDaGVja2luZ1Jlc3VsdCAqYWNjZXB0ZWRDYW5kaWRhdGUpKWNvbXBsZXRpb25CbG9jawot
ewotfQotCi0tICh2b2lkKWZvcmNlUmVxdWVzdENhbmRpZGF0ZXNGb3JUZXN0aW5nCi17Ci19Ci0K
LS0gKEJPT0wpc2hvdWxkUmVxdWVzdENhbmRpZGF0ZXMKLXsKLSAgICByZXR1cm4gTk87Ci19Ci0K
LS0gKHZvaWQpd2ViVmlld0FkZGl0aW9uc1dpbGxEZXN0cm95VmlldwotewotfQotCi0tIChpZClj
YW5kaWRhdGVMaXN0Ci17Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotQGVuZAotI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAg
JiYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLQogQGltcGxlbWVudGF0aW9uIFdlYlZpZXcgKFdl
YlBlbmRpbmdQdWJsaWMpCiAKIC0gKHZvaWQpc2NoZWR1bGVJblJ1bkxvb3A6KE5TUnVuTG9vcCAq
KXJ1bkxvb3AgZm9yTW9kZTooTlNTdHJpbmcgKiltb2RlCkBAIC04NjU2LDcgKzkwMjgsNyBAQCAt
ICh2b2lkKV9zZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyRm9yCiAgICAgaWYgKCFfcHJpdmF0
ZS0+cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQogICAgICAgICBfcHJpdmF0ZS0+cGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlID0gV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpjcmVhdGUo
Kl9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCk7CiAKLSAgICBbc2VsZiB1cGRhdGVXZWJW
aWV3QWRkaXRpb25zXTsKKyAgICBbc2VsZiB1cGRhdGVUb3VjaEJhcl07CiB9CiAKIC0gKHZvaWQp
X2NsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIKQEAgLTg2NjksNyArOTA0MSw3IEBAIC0gKHZv
aWQpX2NsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIKIAogICAgIF9wcml2YXRlLT5wbGF5YmFj
a1Nlc3Npb25Nb2RlbCA9IG51bGxwdHI7CiAgICAgX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZSA9IG51bGxwdHI7Ci0gICAgW3NlbGYgdXBkYXRlV2ViVmlld0FkZGl0aW9uc107Cisg
ICAgW3NlbGYgdXBkYXRlVG91Y2hCYXJdOwogfQogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykgJiYg
RU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQogI2VuZGlmIC8vIEVOQUJMRShWSURFTykK
QEAgLTg4OTgsNiArOTI3MCwzNDIgQEAgLSAodm9pZClfc2V0TW9ja01lZGlhUGxheWJhY2tUYXJn
ZXRQaWNrZQogfQogI2VuZGlmCiAKKyNpZiBIQVZFKFRPVUNIX0JBUikKKy0gKHZvaWQpX2Rpc21p
c3NUZXh0VG91Y2hCYXJQb3BvdmVySXRlbVdpdGhJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50
aWZpZXIKK3sKKyAgICBOU1RvdWNoQmFySXRlbSAqZm91bmRJdGVtID0gbmlsOworICAgIGZvciAo
TlNUb3VjaEJhckl0ZW0gKml0ZW0gaW4gc2VsZi50ZXh0VG91Y2hCYXIuaXRlbXMpIHsKKyAgICAg
ICAgaWYgKFtpdGVtLmlkZW50aWZpZXIgaXNFcXVhbFRvU3RyaW5nOmlkZW50aWZpZXJdKSB7Cisg
ICAgICAgICAgICBmb3VuZEl0ZW0gPSBpdGVtOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoW2l0ZW0uaWRlbnRpZmllciBpc0VxdWFsVG9TdHJpbmc6TlNUb3Vj
aEJhckl0ZW1JZGVudGlmaWVyVGV4dEZvcm1hdF0pIHsKKyAgICAgICAgICAgIGZvciAoTlNUb3Vj
aEJhckl0ZW0gKmNoaWxkSXRlbSBpbiBbKE5TR3JvdXBUb3VjaEJhckl0ZW0gKilpdGVtIGdyb3Vw
VG91Y2hCYXJdLml0ZW1zKSB7CisgICAgICAgICAgICAgICAgaWYgKFtjaGlsZEl0ZW0uaWRlbnRp
ZmllciBpc0VxdWFsVG9TdHJpbmc6aWRlbnRpZmllcl0pIHsKKyAgICAgICAgICAgICAgICAgICAg
Zm91bmRJdGVtID0gY2hpbGRJdGVtOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmIChbZm91bmRJdGVtIGlzS2luZE9mQ2xhc3M6W05TUG9wb3ZlclRv
dWNoQmFySXRlbSBjbGFzc11dKQorICAgICAgICBbKE5TUG9wb3ZlclRvdWNoQmFySXRlbSAqKWZv
dW5kSXRlbSBkaXNtaXNzUG9wb3ZlcjpuaWxdOworfQorCistIChOU0FycmF5PE5TU3RyaW5nICo+
ICopX3RleHRUb3VjaEJhckN1c3RvbWl6YXRpb25BbGxvd2VkSWRlbnRpZmllcnMKK3sKKyAgICBy
ZXR1cm4gQFsgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyQ2hhcmFjdGVyUGlja2VyLCBOU1RvdWNo
QmFySXRlbUlkZW50aWZpZXJUZXh0Q29sb3JQaWNrZXIsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmll
clRleHRTdHlsZSwgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEFsaWdubWVudCwgTlNUb3Vj
aEJhckl0ZW1JZGVudGlmaWVyVGV4dExpc3QsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckZsZXhp
YmxlU3BhY2UgXTsKK30KKworLSAoTlNBcnJheTxOU1N0cmluZyAqPiAqKV9wbGFpblRleHRUb3Vj
aEJhckN1c3RvbWl6YXRpb25EZWZhdWx0SXRlbUlkZW50aWZpZXJzCit7CisgICAgcmV0dXJuIEBb
IE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckNoYXJhY3RlclBpY2tlciwgTlNUb3VjaEJhckl0ZW1J
ZGVudGlmaWVyQ2FuZGlkYXRlTGlzdCBdOworfQorCistIChOU0FycmF5PE5TU3RyaW5nICo+ICop
X3JpY2hUZXh0VG91Y2hCYXJDdXN0b21pemF0aW9uRGVmYXVsdEl0ZW1JZGVudGlmaWVycworewor
ICAgIHJldHVybiBAWyBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJDaGFyYWN0ZXJQaWNrZXIsIE5T
VG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRGb3JtYXQsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmll
ckNhbmRpZGF0ZUxpc3QgXTsKK30KKworLSAodm9pZCl0b3VjaEJhckRpZEV4aXRDdXN0b21pemF0
aW9uOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIF9wcml2YXRlLT5faXND
dXN0b21pemluZ1RvdWNoQmFyID0gTk87CisgICAgW3NlbGYgdXBkYXRlVG91Y2hCYXJdOworfQor
CistICh2b2lkKXRvdWNoQmFyV2lsbEVudGVyQ3VzdG9taXphdGlvbjooTlNOb3RpZmljYXRpb24g
Kilub3RpZmljYXRpb24KK3sKKyAgICBfcHJpdmF0ZS0+X2lzQ3VzdG9taXppbmdUb3VjaEJhciA9
IFlFUzsKK30KKworLSAodm9pZClkaWRDaGFuZ2VBdXRvbWF0aWNUZXh0Q29tcGxldGlvbjooTlNO
b3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBpZiAoX3ByaXZhdGUtPl9yaWNoVGV4
dFRvdWNoQmFyKQorICAgICAgICBbc2VsZiBzZXRVcFRleHRUb3VjaEJhcjpfcHJpdmF0ZS0+X3Jp
Y2hUZXh0VG91Y2hCYXIuZ2V0KCldOworCisgICAgaWYgKF9wcml2YXRlLT5fcGxhaW5UZXh0VG91
Y2hCYXIpCisgICAgICAgIFtzZWxmIHNldFVwVGV4dFRvdWNoQmFyOl9wcml2YXRlLT5fcGxhaW5U
ZXh0VG91Y2hCYXIuZ2V0KCldOworCisgICAgW3NlbGYgdXBkYXRlVG91Y2hCYXJdOworfQorCist
ICh2b2lkKXNldFVwVGV4dFRvdWNoQmFyOihOU1RvdWNoQmFyICopdGV4dFRvdWNoQmFyCit7Cisg
ICAgQk9PTCBpc1JpY2hUZXh0VG91Y2hCYXIgPSB0ZXh0VG91Y2hCYXIgPT0gX3ByaXZhdGUtPl9y
aWNoVGV4dFRvdWNoQmFyOworICAgIFt0ZXh0VG91Y2hCYXIgc2V0RGVsZWdhdGU6c2VsZl07Cisg
ICAgW3RleHRUb3VjaEJhciBzZXREZWZhdWx0SXRlbXM6W05TTXV0YWJsZVNldCBzZXRXaXRoT2Jq
ZWN0czppc1JpY2hUZXh0VG91Y2hCYXIgPyBfcHJpdmF0ZS0+X3JpY2hUZXh0Q2FuZGlkYXRlTGlz
dFRvdWNoQmFySXRlbS5nZXQoKSA6IF9wcml2YXRlLT5fcGxhaW5UZXh0Q2FuZGlkYXRlTGlzdFRv
dWNoQmFySXRlbS5nZXQoKSwgbmlsXV07CisgICAgW3RleHRUb3VjaEJhciBzZXRDdXN0b21pemF0
aW9uQWxsb3dlZEl0ZW1JZGVudGlmaWVyczpbc2VsZiBfdGV4dFRvdWNoQmFyQ3VzdG9taXphdGlv
bkFsbG93ZWRJZGVudGlmaWVyc11dOworCisgICAgTlNBcnJheTxOU1N0cmluZyAqPiAqZGVmYXVs
dElkZW50aWZpZXJzID0gaXNSaWNoVGV4dFRvdWNoQmFyID8gW3NlbGYgX3JpY2hUZXh0VG91Y2hC
YXJDdXN0b21pemF0aW9uRGVmYXVsdEl0ZW1JZGVudGlmaWVyc10gOiBbc2VsZiBfcGxhaW5UZXh0
VG91Y2hCYXJDdXN0b21pemF0aW9uRGVmYXVsdEl0ZW1JZGVudGlmaWVyc107CisgICAgW3RleHRU
b3VjaEJhciBzZXRDdXN0b21pemF0aW9uRGVmYXVsdEl0ZW1JZGVudGlmaWVyczpkZWZhdWx0SWRl
bnRpZmllcnNdOworCisgICAgaWYgKE5TR3JvdXBUb3VjaEJhckl0ZW0gKnRleHRGb3JtYXRJdGVt
ID0gKE5TR3JvdXBUb3VjaEJhckl0ZW0gKilbdGV4dFRvdWNoQmFyIGl0ZW1Gb3JJZGVudGlmaWVy
Ok5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRGb3JtYXRdKQorICAgICAgICB0ZXh0Rm9ybWF0
SXRlbS5ncm91cFRvdWNoQmFyLmN1c3RvbWl6YXRpb25JZGVudGlmaWVyID0gQCJXZWJUZXh0Rm9y
bWF0VG91Y2hCYXIiOworfQorCistIChCT09MKV9pc1JpY2hseUVkaXRhYmxlCit7CisgICAgTlNW
aWV3ICpkb2N1bWVudFZpZXcgPSBzZWxmLl9zZWxlY3RlZE9yTWFpbkZyYW1lLmZyYW1lVmlldy5k
b2N1bWVudFZpZXc7CisgICAgaWYgKCFbZG9jdW1lbnRWaWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhU
TUxWaWV3IGNsYXNzXV0pCisgICAgICAgIHJldHVybiBOTzsKKworICAgIFdlYkhUTUxWaWV3ICp3
ZWJIVE1MVmlldyA9IChXZWJIVE1MVmlldyAqKWRvY3VtZW50VmlldzsKKyAgICByZXR1cm4gd2Vi
SFRNTFZpZXcuX2lzRWRpdGFibGUgJiYgd2ViSFRNTFZpZXcuX2NhbkVkaXRSaWNobHk7Cit9CisK
Ky0gKE5TVG91Y2hCYXIgKil0ZXh0VG91Y2hCYXIKK3sKKyAgICBpZiAoc2VsZi5faXNSaWNobHlF
ZGl0YWJsZSkKKyAgICAgICAgcmV0dXJuIF9wcml2YXRlLT5fcmljaFRleHRUb3VjaEJhci5nZXQo
KTsKKworICAgIHJldHVybiBfcHJpdmF0ZS0+X3BsYWluVGV4dFRvdWNoQmFyLmdldCgpOworfQor
CistICh2b2lkKXVwZGF0ZVRleHRUb3VjaEJhcgoreworICAgIGlmIChfcHJpdmF0ZS0+X2lzRGVm
ZXJyaW5nVGV4dFRvdWNoQmFyVXBkYXRlcykgeworICAgICAgICBfcHJpdmF0ZS0+X25lZWRzRGVm
ZXJyZWRUZXh0VG91Y2hCYXJVcGRhdGUgPSBZRVM7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBOU1ZpZXcgKmRvY3VtZW50VmlldyA9IFtbW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVd
IGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsKKyAgICBpZiAoIVtkb2N1bWVudFZpZXcgaXNLaW5k
T2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IFdlYkhUTUxWaWV3ICp3ZWJIVE1MVmlldyA9IChXZWJIVE1MVmlldyAqKWRvY3VtZW50VmlldzsK
KyAgICBpZiAoIVt3ZWJIVE1MVmlldyBfaXNFZGl0YWJsZV0pCisgICAgICAgIHJldHVybjsKKwor
ICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXSk7
CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChfcHJpdmF0
ZS0+X2lzVXBkYXRpbmdUZXh0VG91Y2hCYXIpCisgICAgICAgIHJldHVybjsKKworICAgIFRlbXBv
cmFyeUNoYW5nZTxCT09MPiBpc1VwZGF0aW5nVGV4dFRvdWNoQmFyKF9wcml2YXRlLT5faXNVcGRh
dGluZ1RleHRUb3VjaEJhciwgWUVTKTsKKworICAgIGlmICghX3ByaXZhdGUtPl90ZXh0VG91Y2hC
YXJJdGVtQ29udHJvbGxlcikKKyAgICAgICAgX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29u
dHJvbGxlciA9IGFkb3B0TlMoW1tXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBhbGxvY10g
aW5pdFdpdGhXZWJWaWV3OnNlbGZdKTsKKworICAgIGlmICghX3ByaXZhdGUtPl9zdGFydGVkTGlz
dGVuaW5nVG9DdXN0b21pemF0aW9uRXZlbnRzKSB7CisgICAgICAgIFtbTlNOb3RpZmljYXRpb25D
ZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Io
dG91Y2hCYXJEaWRFeGl0Q3VzdG9taXphdGlvbjopIG5hbWU6TlNUb3VjaEJhckRpZEV4aXRDdXN0
b21pemF0aW9uIG9iamVjdDpuaWxdOworICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRl
ZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHRvdWNoQmFy
V2lsbEVudGVyQ3VzdG9taXphdGlvbjopIG5hbWU6TlNUb3VjaEJhcldpbGxFbnRlckN1c3RvbWl6
YXRpb24gb2JqZWN0Om5pbF07CisgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVs
dENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoZGlkQ2hhbmdlQXV0
b21hdGljVGV4dENvbXBsZXRpb246KSBuYW1lOk5TU3BlbGxDaGVja2VyRGlkQ2hhbmdlQXV0b21h
dGljVGV4dENvbXBsZXRpb25Ob3RpZmljYXRpb24gb2JqZWN0Om5pbF07CisgICAgICAgIF9wcml2
YXRlLT5fc3RhcnRlZExpc3RlbmluZ1RvQ3VzdG9taXphdGlvbkV2ZW50cyA9IFlFUzsKKyAgICB9
CisKKyAgICBpZiAoIV9wcml2YXRlLT5fcGxhaW5UZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRl
bSB8fCAhX3ByaXZhdGUtPl9yaWNoVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0pIHsKKyAg
ICAgICAgX3ByaXZhdGUtPl9wbGFpblRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtID0gYWRv
cHROUyhbW05TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSBhbGxvY10gaW5pdFdpdGhJZGVudGlm
aWVyOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckNhbmRpZGF0ZUxpc3RdKTsKKyAgICAgICAgW19w
cml2YXRlLT5fcGxhaW5UZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSBzZXREZWxlZ2F0ZTpz
ZWxmXTsKKyAgICAgICAgX3ByaXZhdGUtPl9yaWNoVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0
ZW0gPSBhZG9wdE5TKFtbTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtIGFsbG9jXSBpbml0V2l0
aElkZW50aWZpZXI6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyQ2FuZGlkYXRlTGlzdF0pOworICAg
ICAgICBbX3ByaXZhdGUtPl9yaWNoVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gc2V0RGVs
ZWdhdGU6c2VsZl07CisgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPnJlcXVl
c3RDYW5kaWRhdGVzRm9yU2VsZWN0aW9uKGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkpOworICAgIH0KKworICAgIGlmICghX3ByaXZhdGUtPl9yaWNoVGV4dFRvdWNoQmFyKSB7Cisg
ICAgICAgIF9wcml2YXRlLT5fcmljaFRleHRUb3VjaEJhciA9IGFkb3B0TlMoW1tOU1RvdWNoQmFy
IGFsbG9jXSBpbml0XSk7CisgICAgICAgIFtzZWxmIHNldFVwVGV4dFRvdWNoQmFyOl9wcml2YXRl
LT5fcmljaFRleHRUb3VjaEJhci5nZXQoKV07CisgICAgICAgIFtfcHJpdmF0ZS0+X3JpY2hUZXh0
VG91Y2hCYXIgc2V0Q3VzdG9taXphdGlvbklkZW50aWZpZXI6QCJXZWJSaWNoVGV4dFRvdWNoQmFy
Il07CisgICAgfQorCisgICAgaWYgKCFfcHJpdmF0ZS0+X3BsYWluVGV4dFRvdWNoQmFyKSB7Cisg
ICAgICAgIF9wcml2YXRlLT5fcGxhaW5UZXh0VG91Y2hCYXIgPSBhZG9wdE5TKFtbTlNUb3VjaEJh
ciBhbGxvY10gaW5pdF0pOworICAgICAgICBbc2VsZiBzZXRVcFRleHRUb3VjaEJhcjpfcHJpdmF0
ZS0+X3BsYWluVGV4dFRvdWNoQmFyLmdldCgpXTsKKyAgICAgICAgW19wcml2YXRlLT5fcGxhaW5U
ZXh0VG91Y2hCYXIgc2V0Q3VzdG9taXphdGlvbklkZW50aWZpZXI6QCJXZWJQbGFpblRleHRUb3Vj
aEJhciJdOworICAgIH0KKworICAgIGlmIChbTlNTcGVsbENoZWNrZXIgaXNBdXRvbWF0aWNUZXh0
Q29tcGxldGlvbkVuYWJsZWRdICYmICFfcHJpdmF0ZS0+X2lzQ3VzdG9taXppbmdUb3VjaEJhcikg
eworICAgICAgICBCT09MIHNob3VsZFNob3dDYW5kaWRhdGVMaXN0ID0gIWNvcmVGcmFtZS0+c2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNSYW5nZSgpIHx8IGNvcmVGcmFtZS0+ZWRpdG9yKCkuaWdu
b3JlQ29tcG9zaXRpb25TZWxlY3Rpb25DaGFuZ2UoKTsKKyAgICAgICAgW3NlbGYuY2FuZGlkYXRl
TGlzdCB1cGRhdGVXaXRoSW5zZXJ0aW9uUG9pbnRWaXNpYmlsaXR5OnNob3VsZFNob3dDYW5kaWRh
dGVMaXN0XTsKKyAgICB9CisKKyAgICBpZiAoY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKSB7CisgICAgICAgIC8vIFdlIGRvbid0IHJlcXVlc3Qg
Y2FuZGlkYXRlcyBmb3IgcGFzc3dvcmQgZmllbGRzLiBJZiB0aGUgdXNlciB3YXMgcHJldmlvdXNs
eSBpbiBhIG5vbi1wYXNzd29yZCBmaWVsZCwgdGhlbiB0aGUKKyAgICAgICAgLy8gb2xkIGNhbmRp
ZGF0ZXMgd2lsbCBzdGlsbCBzaG93IGJ5IGRlZmF1bHQsIHNvIHdlIGNsZWFyIHRoZW0gaGVyZSBi
eSBzZXR0aW5nIGFuIGVtcHR5IGFycmF5IG9mIGNhbmRpZGF0ZXMuCisgICAgICAgIGlmICghX3By
aXZhdGUtPl9lbXB0eUNhbmRpZGF0ZXNBcnJheSkKKyAgICAgICAgICAgIF9wcml2YXRlLT5fZW1w
dHlDYW5kaWRhdGVzQXJyYXkgPSBhZG9wdE5TKFtbTlNBcnJheSBhbGxvY10gaW5pdF0pOworICAg
ICAgICBbc2VsZi5jYW5kaWRhdGVMaXN0IHNldENhbmRpZGF0ZXM6X3ByaXZhdGUtPl9lbXB0eUNh
bmRpZGF0ZXNBcnJheS5nZXQoKSBmb3JTZWxlY3RlZFJhbmdlOk5TTWFrZVJhbmdlKDAsIDApIGlu
U3RyaW5nOm5pbF07CisgICAgfQorCisgICAgTlNUb3VjaEJhciAqdGV4dFRvdWNoQmFyID0gc2Vs
Zi50ZXh0VG91Y2hCYXI7CisgICAgTlNBcnJheTxOU1N0cmluZyAqPiAqaXRlbUlkZW50aWZpZXJz
ID0gdGV4dFRvdWNoQmFyLml0ZW1JZGVudGlmaWVyczsKKyAgICBCT09MIGlzU2hvd2luZ0NvbWJp
bmVkVGV4dEZvcm1hdEl0ZW0gPSBbaXRlbUlkZW50aWZpZXJzIGNvbnRhaW5zT2JqZWN0Ok5TVG91
Y2hCYXJJdGVtSWRlbnRpZmllclRleHRGb3JtYXRdOworICAgIFt0ZXh0VG91Y2hCYXIgc2V0UHJp
bmNpcGFsSXRlbUlkZW50aWZpZXI6aXNTaG93aW5nQ29tYmluZWRUZXh0Rm9ybWF0SXRlbSA/IE5T
VG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRGb3JtYXQgOiBuaWxdOworCisgICAgLy8gU2V0IGN1
cnJlbnQgdHlwaW5nIGF0dHJpYnV0ZXMgZm9yIHJpY2ggdGV4dC4gVGhpcyB3aWxsIGVuc3VyZSB0
aGF0IHRoZSBidXR0b25zIHJlZmxlY3QgdGhlIHN0YXRlIG9mCisgICAgLy8gdGhlIHRleHQgd2hl
biBjaGFuZ2luZyBzZWxlY3Rpb24gdGhyb3VnaG91dCB0aGUgZG9jdW1lbnQuCisgICAgaWYgKHdl
YkhUTUxWaWV3Ll9jYW5FZGl0UmljaGx5KSB7CisgICAgICAgIGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIHNlbGVjdGlvbiA9IGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAg
ICAgIGlmICghc2VsZWN0aW9uLmlzTm9uZSgpKSB7CisgICAgICAgICAgICBOb2RlKiBub2RlVG9S
ZW1vdmU7CisgICAgICAgICAgICBpZiAoYXV0byogc3R5bGUgPSBFZGl0b3I6OnN0eWxlRm9yU2Vs
ZWN0aW9uU3RhcnQoY29yZUZyYW1lLCBub2RlVG9SZW1vdmUpKSB7CisgICAgICAgICAgICAgICAg
W19wcml2YXRlLT5fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzQm9sZDooc3R5
bGUtPmZvbnRDYXNjYWRlKCkud2VpZ2h0KCkgPj0gRm9udFdlaWdodEJvbGQpXTsKKyAgICAgICAg
ICAgICAgICBbX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRUZXh0SXNJ
dGFsaWM6KHN0eWxlLT5mb250Q2FzY2FkZSgpLml0YWxpYygpID09IEZvbnRJdGFsaWNPbildOwor
CisgICAgICAgICAgICAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBjb3Jl
RnJhbWUtPnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCk7CisgICAgICAgICAgICAgICAgaWYgKHR5
cGluZ1N0eWxlICYmIHR5cGluZ1N0eWxlLT5zdHlsZSgpKSB7CisgICAgICAgICAgICAgICAgICAg
IFN0cmluZyB2YWx1ZSA9IHR5cGluZ1N0eWxlLT5zdHlsZSgpLT5nZXRQcm9wZXJ0eVZhbHVlKENT
U1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QpOworICAgICAgICAgICAgICAg
ICAgICBbX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRUZXh0SXNVbmRl
cmxpbmVkOnZhbHVlLmNvbnRhaW5zKCJ1bmRlcmxpbmUiKV07CisgICAgICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgICAgIFtfcHJpdmF0ZS0+X3RleHRUb3VjaEJhckl0ZW1Db250
cm9sbGVyIHNldFRleHRJc1VuZGVybGluZWQ6KHN0eWxlLT50ZXh0RGVjb3JhdGlvbnNJbkVmZmVj
dCgpICYgVGV4dERlY29yYXRpb25VbmRlcmxpbmUpXTsKKworICAgICAgICAgICAgICAgIGlmIChz
dHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLmlzVmFsaWQoKSkK
KyAgICAgICAgICAgICAgICAgICAgW19wcml2YXRlLT5fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xs
ZXIgc2V0VGV4dENvbG9yOm5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eUNvbG9yKSldOworCisgICAgICAgICAgICAgICAgTlNUZXh0QWxpZ25tZW50IHRleHRB
bGlnbm1lbnQ7CisgICAgICAgICAgICAgICAgc3dpdGNoIChzdHlsZS0+dGV4dEFsaWduKCkpIHsK
KyAgICAgICAgICAgICAgICBjYXNlIFJJR0hUOgorICAgICAgICAgICAgICAgIGNhc2UgV0VCS0lU
X1JJR0hUOgorICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25t
ZW50UmlnaHQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgTEVGVDoKKyAgICAgICAgICAgICAgICBjYXNlIFdFQktJVF9MRUZUOgorICAgICAgICAgICAg
ICAgICAgICB0ZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25tZW50TGVmdDsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDRU5URVI6CisgICAgICAgICAg
ICAgICAgY2FzZSBXRUJLSVRfQ0VOVEVSOgorICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ25t
ZW50ID0gTlNUZXh0QWxpZ25tZW50Q2VudGVyOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlIEpVU1RJRlk6CisgICAgICAgICAgICAgICAgICAgIHRleHRB
bGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRKdXN0aWZpZWQ7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVEFTVEFSVDoKKyAgICAgICAgICAgICAgICAg
ICAgdGV4dEFsaWdubWVudCA9IHN0eWxlLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBOU1Rl
eHRBbGlnbm1lbnRMZWZ0IDogTlNUZXh0QWxpZ25tZW50UmlnaHQ7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVEFFTkQ6CisgICAgICAgICAgICAgICAg
ICAgIHRleHRBbGlnbm1lbnQgPSBzdHlsZS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gTlNU
ZXh0QWxpZ25tZW50UmlnaHQgOiBOU1RleHRBbGlnbm1lbnRMZWZ0OworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgW19wcml2YXRl
LT5fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0Q3VycmVudFRleHRBbGlnbm1lbnQ6dGV4
dEFsaWdubWVudF07CisKKyAgICAgICAgICAgICAgICBIVE1MRWxlbWVudCogZW5jbG9zaW5nTGlz
dEVsZW1lbnQgPSBlbmNsb3NpbmdMaXN0KHNlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2Rl
KCkpOworICAgICAgICAgICAgICAgIGlmIChlbmNsb3NpbmdMaXN0RWxlbWVudCkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoaXM8SFRNTFVMaXN0RWxlbWVudD4oKmVuY2xvc2luZ0xpc3RFbGVt
ZW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIFtbX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJ
dGVtQ29udHJvbGxlciB3ZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXJdIHNldEN1cnJl
bnRMaXN0VHlwZTpXZWJMaXN0VHlwZTo6VW5vcmRlcmVkXTsKKyAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoaXM8SFRNTE9MaXN0RWxlbWVudD4oKmVuY2xvc2luZ0xpc3RFbGVtZW50KSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFtbX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJv
bGxlciB3ZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXJdIHNldEN1cnJlbnRMaXN0VHlw
ZTpXZWJMaXN0VHlwZTo6T3JkZXJlZF07CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBbW19wcml2YXRlLT5fdGV4dFRvdWNoQmFySXRl
bUNvbnRyb2xsZXIgd2ViVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyXSBzZXRDdXJyZW50
TGlzdFR5cGU6V2ViTGlzdFR5cGU6Ok5vbmVdOworCisgICAgICAgICAgICAgICAgaWYgKG5vZGVU
b1JlbW92ZSkKKyAgICAgICAgICAgICAgICAgICAgbm9kZVRvUmVtb3ZlLT5yZW1vdmUoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBCT09MIGlzU2hvd2luZ0NhbmRpZGF0ZUxp
c3RJdGVtID0gW2l0ZW1JZGVudGlmaWVycyBjb250YWluc09iamVjdDpOU1RvdWNoQmFySXRlbUlk
ZW50aWZpZXJDYW5kaWRhdGVMaXN0XSAmJiBbTlNTcGVsbENoZWNrZXIgaXNBdXRvbWF0aWNUZXh0
Q29tcGxldGlvbkVuYWJsZWRdOworICAgICAgICBbX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVt
Q29udHJvbGxlciBzZXRVc2VzTmFycm93VGV4dFN0eWxlSXRlbTppc1Nob3dpbmdDb21iaW5lZFRl
eHRGb3JtYXRJdGVtICYmIGlzU2hvd2luZ0NhbmRpZGF0ZUxpc3RJdGVtXTsKKyAgICB9Cit9CisK
Ky0gKHZvaWQpdXBkYXRlTWVkaWFUb3VjaEJhcgoreworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tf
Q09OVFJPTFNfTUFOQUdFUikKKyAgICBpZiAoIV9wcml2YXRlLT5tZWRpYVRvdWNoQmFyUHJvdmlk
ZXIpCisgICAgICAgIF9wcml2YXRlLT5tZWRpYVRvdWNoQmFyUHJvdmlkZXIgPSBhZG9wdE5TKFth
bGxvY0FWRnVuY3Rpb25CYXJQbGF5YmFja0NvbnRyb2xzUHJvdmlkZXJJbnN0YW5jZSgpIGluaXRd
KTsKKworICAgIGlmICghW19wcml2YXRlLT5tZWRpYVRvdWNoQmFyUHJvdmlkZXIgcGxheWJhY2tD
b250cm9sc0NvbnRyb2xsZXJdKSB7CisgICAgICAgIEFTU0VSVChfcHJpdmF0ZS0+cGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlKTsKKyAgICAgICAgV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgKm1h
bmFnZXIgPSBfcHJpdmF0ZS0+cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5QmFja0NvbnRy
b2xzTWFuYWdlcigpOworICAgICAgICBbX3ByaXZhdGUtPm1lZGlhVG91Y2hCYXJQcm92aWRlciBz
ZXRQbGF5YmFja0NvbnRyb2xzQ29udHJvbGxlcjooaWQgPEFWRnVuY3Rpb25CYXJQbGF5YmFja0Nv
bnRyb2xzQ29udHJvbGxpbmc+KW1hbmFnZXJdOworICAgICAgICBbX3ByaXZhdGUtPm1lZGlhUGxh
eWJhY2tDb250cm9sc1ZpZXcgc2V0UGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXI6KGlkIDxBVkZ1
bmN0aW9uQmFyUGxheWJhY2tDb250cm9sc0NvbnRyb2xsaW5nPiltYW5hZ2VyXTsKKyAgICB9Cisj
ZW5kaWYKK30KKworLSAodm9pZCl1cGRhdGVUb3VjaEJhcgoreworICAgIGlmICghX3ByaXZhdGUt
Pl9jYW5DcmVhdGVUb3VjaEJhcnMpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lKiBjb3Jl
RnJhbWUgPSBjb3JlKFtzZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXSk7CisgICAgaWYgKCFjb3Jl
RnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIE5TVG91Y2hCYXIgKnRvdWNoQmFyID0gbmls
OworICAgIE5TVmlldyAqZG9jdW1lbnRWaWV3ID0gW1tbc2VsZiBfc2VsZWN0ZWRPck1haW5GcmFt
ZV0gZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOworICAgIGlmIChbZG9jdW1lbnRWaWV3IGlzS2lu
ZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pIHsKKyAgICAgICAgV2ViSFRNTFZpZXcgKndl
YkhUTUxWaWV3ID0gKFdlYkhUTUxWaWV3ICopZG9jdW1lbnRWaWV3OworICAgICAgICBpZiAoW3dl
YkhUTUxWaWV3IF9pc0VkaXRhYmxlXSkgeworICAgICAgICAgICAgW3NlbGYgdXBkYXRlVGV4dFRv
dWNoQmFyXTsKKyAgICAgICAgICAgIHRvdWNoQmFyID0gW3NlbGYgdGV4dFRvdWNoQmFyXTsKKyAg
ICAgICAgfQorI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICAg
ICAgZWxzZSBpZiAoW3NlbGYgX2hhc0FjdGl2ZVZpZGVvRm9yQ29udHJvbHNJbnRlcmZhY2VdKSB7
CisgICAgICAgICAgICBbc2VsZiB1cGRhdGVNZWRpYVRvdWNoQmFyXTsKKyAgICAgICAgICAgIHRv
dWNoQmFyID0gW19wcml2YXRlLT5tZWRpYVRvdWNoQmFyUHJvdmlkZXIgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3Rvcih0b3VjaEJhcildID8gWyhpZClfcHJpdmF0ZS0+bWVkaWFUb3VjaEJhclBy
b3ZpZGVyIHRvdWNoQmFyXSA6IFsoaWQpX3ByaXZhdGUtPm1lZGlhVG91Y2hCYXJQcm92aWRlciB0
b3VjaEJhcl07CisgICAgICAgIH0gZWxzZSBpZiAoW19wcml2YXRlLT5tZWRpYVRvdWNoQmFyUHJv
dmlkZXIgcGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXJdKSB7CisgICAgICAgICAgICBbX3ByaXZh
dGUtPm1lZGlhVG91Y2hCYXJQcm92aWRlciBzZXRQbGF5YmFja0NvbnRyb2xzQ29udHJvbGxlcjpu
aWxdOworICAgICAgICAgICAgW19wcml2YXRlLT5tZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3IHNl
dFBsYXliYWNrQ29udHJvbHNDb250cm9sbGVyOm5pbF07CisgICAgICAgIH0KKyNlbmRpZgorICAg
IH0KKworICAgIGlmICh0b3VjaEJhciA9PSBfcHJpdmF0ZS0+X2N1cnJlbnRUb3VjaEJhcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgX3ByaXZhdGUtPl9jdXJyZW50VG91Y2hCYXIgPSB0b3VjaEJh
cjsKKyAgICBbc2VsZiB3aWxsQ2hhbmdlVmFsdWVGb3JLZXk6QCJ0b3VjaEJhciJdOworICAgIFtz
ZWxmIHNldFRvdWNoQmFyOl9wcml2YXRlLT5fY3VycmVudFRvdWNoQmFyLmdldCgpXTsKKyAgICBb
c2VsZiBkaWRDaGFuZ2VWYWx1ZUZvcktleTpAInRvdWNoQmFyIl07Cit9CisKKy0gKHZvaWQpcHJl
cGFyZUZvck1vdXNlRG93bgoreworICAgIF9wcml2YXRlLT5fbmVlZHNEZWZlcnJlZFRleHRUb3Vj
aEJhclVwZGF0ZSA9IE5POworICAgIF9wcml2YXRlLT5faXNEZWZlcnJpbmdUZXh0VG91Y2hCYXJV
cGRhdGVzID0gWUVTOworfQorCistICh2b2lkKXByZXBhcmVGb3JNb3VzZVVwCit7CisgICAgaWYg
KCFfcHJpdmF0ZS0+X2lzRGVmZXJyaW5nVGV4dFRvdWNoQmFyVXBkYXRlcykKKyAgICAgICAgcmV0
dXJuOworCisgICAgX3ByaXZhdGUtPl9pc0RlZmVycmluZ1RleHRUb3VjaEJhclVwZGF0ZXMgPSBO
TzsKKyAgICBpZiAoX3ByaXZhdGUtPl9uZWVkc0RlZmVycmVkVGV4dFRvdWNoQmFyVXBkYXRlKSB7
CisgICAgICAgIC8vIE9ubHkgdHJpZ2dlciBhbm90aGVyIHVwZGF0ZSBpZiB3ZSBhdHRlbXB0ZWQg
YW5kIGJhaWxlZCBmcm9tIGFuIHVwZGF0ZSBkdXJpbmcgdGhlIGRlZmVycmFsLgorICAgICAgICBb
c2VsZiB1cGRhdGVUb3VjaEJhcl07CisgICAgfQorfQorCistICh2b2lkKXdlYlZpZXdBZGRpdGlv
bnNXaWxsRGVzdHJveVZpZXcKK3sKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRD
ZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGZdOworfQorCistIChOU0NhbmRpZGF0ZUxpc3RUb3Vj
aEJhckl0ZW0gKiljYW5kaWRhdGVMaXN0Cit7CisgICAgcmV0dXJuIHNlbGYuX2lzUmljaGx5RWRp
dGFibGUgPyBfcHJpdmF0ZS0+X3JpY2hUZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbS5nZXQo
KSA6IF9wcml2YXRlLT5fcGxhaW5UZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbS5nZXQoKTsK
K30KKyNlbHNlCisKKy0gKHZvaWQpdXBkYXRlVG91Y2hCYXIKK3sKK30KKworLSAodm9pZClwcmVw
YXJlRm9yTW91c2VEb3duCit7Cit9CisKKy0gKHZvaWQpcHJlcGFyZUZvck1vdXNlVXAKK3sKK30K
KworLSAodm9pZCl3ZWJWaWV3QWRkaXRpb25zV2lsbERlc3Ryb3lWaWV3Cit7Cit9CisKKy0gKGlk
KWNhbmRpZGF0ZUxpc3QKK3sKKyAgICByZXR1cm4gbmlsOworfQorCisjZW5kaWYKKwogQGVuZAog
CiBAaW1wbGVtZW50YXRpb24gV2ViVmlldyAoV2ViVmlld0RldmljZU9yaWVudGF0aW9uKQpJbmRl
eDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEuaAkocmV2aXNpb24gMjA4NDA1
KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDEsOCArMTAxLDEwIEBAIGNsYXNzIFdlYlZpZXdHcm91cDsKIGNsYXNzIFdlYlNl
bGVjdGlvblNlcnZpY2VDb250cm9sbGVyOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpICYm
IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwICYmIFVTRShBUFBMRV9J
TlRFUk5BTF9TREspCi0jaW1wb3J0IDxXZWJLaXRBZGRpdGlvbnMvV2ViVmlld0RhdGFBZGRpdGlv
bnNEZWNsYXJhdGlvbnMuaD4KKyNpZiBIQVZFKFRPVUNIX0JBUikKK0BjbGFzcyBXZWJUZXh0VG91
Y2hCYXJJdGVtQ29udHJvbGxlcjsKK0BjbGFzcyBBVkZ1bmN0aW9uQmFyUGxheWJhY2tDb250cm9s
c1Byb3ZpZGVyOworQGNsYXNzIEFWRnVuY3Rpb25CYXJTY3J1YmJlcjsKICNlbmRpZgogCiBjbGFz
cyBXZWJWaWV3TGF5ZXJGbHVzaFNjaGVkdWxlciA6IHB1YmxpYyBXZWJDb3JlOjpMYXllckZsdXNo
U2NoZWR1bGVyIHsKQEAgLTE3OCw5ICsxODAsMjQgQEAgQGludGVyZmFjZSBXZWJWaWV3UHJpdmF0
ZSA6IE5TT2JqZWN0IHsKICNpZiBQTEFURk9STShNQUMpCiAgICAgV2ViSW1tZWRpYXRlQWN0aW9u
Q29udHJvbGxlciAqaW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlcjsKIAotI2lmIF9fTUFDX09TX1hf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREsp
Ci0jaW1wb3J0IDxXZWJLaXRBZGRpdGlvbnMvV2ViVmlld0RhdGFBZGRpdGlvbnMuaD4KLSNlbmRp
ZgorI2lmIEhBVkUoVE9VQ0hfQkFSKQorICAgIFJldGFpblB0cjxOU1RvdWNoQmFyPiBfY3VycmVu
dFRvdWNoQmFyOworICAgIFJldGFpblB0cjxOU1RvdWNoQmFyPiBfcGxhaW5UZXh0VG91Y2hCYXI7
CisgICAgUmV0YWluUHRyPE5TVG91Y2hCYXI+IF9yaWNoVGV4dFRvdWNoQmFyOworICAgIFJldGFp
blB0cjxXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlcj4gX3RleHRUb3VjaEJhckl0ZW1Db250
cm9sbGVyOworICAgIFJldGFpblB0cjxOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0+IF9yaWNo
VGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW07CisgICAgUmV0YWluUHRyPE5TQ2FuZGlkYXRl
TGlzdFRvdWNoQmFySXRlbT4gX3BsYWluVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW07Cisg
ICAgUmV0YWluUHRyPE5TQXJyYXk+IF9lbXB0eUNhbmRpZGF0ZXNBcnJheTsKKyAgICBSZXRhaW5Q
dHI8QVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNQcm92aWRlcj4gbWVkaWFUb3VjaEJhclBy
b3ZpZGVyOworICAgIFJldGFpblB0cjxBVkZ1bmN0aW9uQmFyU2NydWJiZXI+IG1lZGlhUGxheWJh
Y2tDb250cm9sc1ZpZXc7CisKKyAgICBCT09MIF9jYW5DcmVhdGVUb3VjaEJhcnM7CisgICAgQk9P
TCBfaXNVcGRhdGluZ1RleHRUb3VjaEJhcjsKKyAgICBCT09MIF9zdGFydGVkTGlzdGVuaW5nVG9D
dXN0b21pemF0aW9uRXZlbnRzOworICAgIEJPT0wgX2lzQ3VzdG9taXppbmdUb3VjaEJhcjsKKyAg
ICBCT09MIF9pc0RlZmVycmluZ1RleHRUb3VjaEJhclVwZGF0ZXM7CisgICAgQk9PTCBfbmVlZHNE
ZWZlcnJlZFRleHRUb3VjaEJhclVwZGF0ZTsKKyNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikKIAog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpUZXh0SW5kaWNhdG9yV2luZG93PiB0ZXh0SW5k
aWNhdG9yV2luZG93OwogICAgIEJPT0wgaGFzSW5pdGlhbGl6ZWRMb29rdXBPYnNlcnZlcjsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaAkocmV2aXNp
b24gMjA4NDA1KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwu
aAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsNyBAQCBjbGFzcyBXZWJTZWxlY3Rpb25TZXJ2
aWNlQ29udHJvbGxlcjsKIAogI2VuZGlmCiAKK0BjbGFzcyBOU0NhbmRpZGF0ZUxpc3RUb3VjaEJh
ckl0ZW07CiBAY2xhc3MgV2ViQmFzZVBsdWdpblBhY2thZ2U7CiBAY2xhc3MgV2ViRG93bmxvYWQ7
CiBAY2xhc3MgV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlcjsKQEAgLTI5MywxMiArMjk0LDEx
IEBAIEBpbnRlcmZhY2UgV2ViVmlldyAoV2ViVmlld090aGVySW50ZXJuYWwKIC0gKHZvaWQpX3Nl
dE1vY2tNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTmFtZTooTlNTdHJpbmcgKiluYW1lIHN0YXRl
OihXZWJDb3JlOjpNZWRpYVBsYXliYWNrVGFyZ2V0Q29udGV4dDo6U3RhdGUpc3RhdGU7CiAjZW5k
aWYKIAotQGVuZAotCi1AaW50ZXJmYWNlIFdlYlZpZXcgKFdlYlVwZGF0ZVdlYlZpZXdBZGRpdGlv
bnMpCiAtICh2b2lkKXByZXBhcmVGb3JNb3VzZVVwOwogLSAodm9pZClwcmVwYXJlRm9yTW91c2VE
b3duOwotLSAodm9pZCl1cGRhdGVXZWJWaWV3QWRkaXRpb25zOworLSAodm9pZCl1cGRhdGVUb3Vj
aEJhcjsKIC0gKHZvaWQpd2ViVmlld0FkZGl0aW9uc1dpbGxEZXN0cm95VmlldzsKLS0gKGlkKWNh
bmRpZGF0ZUxpc3Q7CistICh2b2lkKV9kaXNtaXNzVGV4dFRvdWNoQmFyUG9wb3Zlckl0ZW1XaXRo
SWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyOworLSAoTlNDYW5kaWRhdGVMaXN0VG91
Y2hCYXJJdGVtICopY2FuZGlkYXRlTGlzdDsKKwogQGVuZApJbmRleDogU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJWaWV3UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViVmlld1ByaXZhdGUuaAkocmV2aXNpb24gMjA4NDA1KQorKysgU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04
ODksNiArODg5LDEwIEBAIENvdWxkIGJlIHdvcnRoIGFkZGluZyB0byB0aGUgQVBJLgogCiAtICh2
b2lkKV9zZXRGb250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHM6KEJPT0wpZmxhZzsKIAorLSAo
dm9pZClzaG93Q2FuZGlkYXRlczooTlNBcnJheSAqKWNhbmRpZGF0ZXMgZm9yU3RyaW5nOihOU1N0
cmluZyAqKXN0cmluZyBpblJlY3Q6KE5TUmVjdClyZWN0T2ZUeXBlZFN0cmluZyBmb3JTZWxlY3Rl
ZFJhbmdlOihOU1JhbmdlKXJhbmdlIHZpZXc6KE5TVmlldyAqKXZpZXcgY29tcGxldGlvbkhhbmRs
ZXI6KHZvaWQgKF4pKE5TVGV4dENoZWNraW5nUmVzdWx0ICphY2NlcHRlZENhbmRpZGF0ZSkpY29t
cGxldGlvbkJsb2NrOworLSAodm9pZClmb3JjZVJlcXVlc3RDYW5kaWRhdGVzRm9yVGVzdGluZzsK
Ky0gKEJPT0wpc2hvdWxkUmVxdWVzdENhbmRpZGF0ZXM7CisKIEBlbmQKIAogI2lmICFUQVJHRVRf
T1NfSVBIT05FCkBAIC0xMDYxLDEyICsxMDY1LDYgQEAgQGludGVyZmFjZSBOU09iamVjdCAoV2Vi
Vmlld1Jlc291cmNlTG9hZAogLSAoTlNDYWNoZWRVUkxSZXNwb25zZSAqKXdlYlZpZXc6KFdlYlZp
ZXcgKilzZW5kZXIgcmVzb3VyY2U6KGlkKWlkZW50aWZpZXIgd2lsbENhY2hlUmVzcG9uc2U6KE5T
Q2FjaGVkVVJMUmVzcG9uc2UgKilyZXNwb25zZSBmcm9tRGF0YVNvdXJjZTooV2ViRGF0YVNvdXJj
ZSAqKWRhdGFTb3VyY2U7CiBAZW5kCiAKLUBpbnRlcmZhY2UgV2ViVmlldyAoV2ViU2hvd0NhbmRp
ZGF0ZXMpCi0tICh2b2lkKXNob3dDYW5kaWRhdGVzOihOU0FycmF5ICopY2FuZGlkYXRlcyBmb3JT
dHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIGluUmVjdDooTlNSZWN0KXJlY3RPZlR5cGVkU3RyaW5n
IGZvclNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UgdmlldzooTlNWaWV3ICopdmlldyBjb21w
bGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNUZXh0Q2hlY2tpbmdSZXN1bHQgKmFjY2VwdGVkQ2Fu
ZGlkYXRlKSljb21wbGV0aW9uQmxvY2s7Ci0tICh2b2lkKWZvcmNlUmVxdWVzdENhbmRpZGF0ZXNG
b3JUZXN0aW5nOwotLSAoQk9PTClzaG91bGRSZXF1ZXN0Q2FuZGlkYXRlczsKLUBlbmQKLQogI2lm
ZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgpJbmRleDogVG9vbHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4NDA1KQorKysg
VG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTYtMTEt
MDQgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIFN1cHBvcnQgVG91
Y2hCYXIgaW4gV2ViS2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjQ0MzcKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAgICByZGFy
Oi8vcHJvYmxlbS8yODg3NjUyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoaXMgbWFrZXMgTWluaUJyb3dzZXIgc3VwcG9ydCBUb3VjaEJhciBjdXN0
b21pemF0aW9uLiAKKworICAgICAgICAqIE1pbmlCcm93c2VyL21hYy9BcHBEZWxlZ2F0ZS5tOgor
ICAgICAgICAoLVtCcm93c2VyQXBwRGVsZWdhdGUgYXdha2VGcm9tTmliXSk6CisKIDIwMTYtMTEt
MDQgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAg
ICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjA4MjkzLgpJbmRleDogVG9vbHMvTWluaUJyb3dz
ZXIvbWFjL0FwcERlbGVnYXRlLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTWluaUJyb3dzZXIvbWFj
L0FwcERlbGVnYXRlLm0JKHJldmlzaW9uIDIwODQwNSkKKysrIFRvb2xzL01pbmlCcm93c2VyL21h
Yy9BcHBEZWxlZ2F0ZS5tCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw5IEBAIC0gKHZvaWQp
YXdha2VGcm9tTmliCiAjZW5kaWYKIAogICAgIFtbTlNBcHAgbWFpbk1lbnVdIGluc2VydEl0ZW06
W2l0ZW0gYXV0b3JlbGVhc2VdIGF0SW5kZXg6W1tOU0FwcCBtYWluTWVudV0gaW5kZXhPZkl0ZW1X
aXRoVGl0bGU6QCJEZWJ1ZyJdXTsKKworICAgIGlmIChbTlNBcHAgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3RvcihzZXRBdXRvbWF0aWNDdXN0b21pemVUb3VjaEJhck1lbnVJdGVtRW5hYmxlZDop
XSkKKyAgICAgICAgW05TQXBwIHNldEF1dG9tYXRpY0N1c3RvbWl6ZVRvdWNoQmFyTWVudUl0ZW1F
bmFibGVkOllFU107CiB9CiAKICNpZiBXS19BUElfRU5BQkxFRAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293988</attachid>
            <date>2016-11-04 23:39:21 -0700</date>
            <delta_ts>2016-11-04 23:47:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-6.txt</filename>
            <type>text/plain</type>
            <size>117652</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE2LTExLTA0ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBTdXBwb3J0IFRvdWNoQmFyIGluIFdl
YktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0
NDM3CisgICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0v
Mjg4NzY1MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9y
bS9zcGkvY29jb2EvQVZLaXRTUEkuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcGkvY29jb2EvTlNU
b3VjaEJhclNQSS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxD
aGVja2VyU1BJLmg6CisKIDIwMTYtMTEtMDQgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgogCiAgICAgICAgIEluZGV4ZWREQiAyLjA6IENsZWFuIHVwIG1vcmUgdHJhbnNhY3Rpb24g
YWJvcnQgYW5kIGV4Y2VwdGlvbiB0aHJvd2luZyBiZWhhdmlvciBmcm9tIElEQk9iamVjdFN0b3Jl
LgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMjA4NDA1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNTY0LDEwICsxNTY0LDEw
IEBACiAJCTQxNjJBNDU3MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQxNjJBNDU1MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
LmNwcCAqLzsgfTsKIAkJNDE2MkE0NTgxMDExNDY0NzAwREZGM0VEIC8qIEpTRGVkaWNhdGVkV29y
a2VyR2xvYmFsU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQxNjJBNDU2MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlLmggKi87IH07CiAJCTQxNkUyOUE2MTAyRkE5NjIwMDdGQzE0RSAvKiBXb3JrZXJSZXBv
cnRpbmdQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDE2RTI5QTUxMDJGQTk2MjAwN0ZDMTRFIC8qIFdvcmtlclJlcG9ydGluZ1Byb3h5LmggKi87
IH07CisJCTQxNkU2RkU4MUJCRDEyREYwMDBBM0Y2NCAvKiBSZWFkYWJsZVN0cmVhbUludGVybmFs
c0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTQxNkU2RkU4MUJCRDEyREYwMDBBNjAyMyAvKiBGZXRjaEludGVybmFsc0J1aWx0aW5zLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMx
MTBEMDBCNzY0QjkgLyogRmV0Y2hJbnRlcm5hbHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjAz
MyAvKiBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEM5IC8qIFN0cmVhbUlu
dGVybmFsc0J1aWx0aW5zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJNDE2RTZGRTgxQkJEMTJERjAwMEEzRjY0IC8qIFJlYWRhYmxlQnl0ZVN0cmVh
bUludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVCeXRlU3RyZWFt
SW50ZXJuYWxzQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQk0MTZFNkZFODFCQkQxMkRGMDAwQTYwNDMgLyogUmVhZGFibGVTdHJlYW1J
bnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOUIwM0Q4MDYxQkIzMTEwRDAwQjczRjY0IC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJu
YWxzQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk0MTZFNkZFODFCQkQxMkRGMDAwQTYwNDMgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50
ZXJuYWxzQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRl
cm5hbHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjA1MyAvKiBXcml0YWJsZVN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RTkgLyogV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNC
dWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTQxNkU2RkU5MUJCRDEyRTUwMDBBNjA0MyAvKiBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFC
QjMxMTBEMDBCNzY0RDggLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxNkU2RkU5MUJCRDEyRTUwMDBB
NjA1MyAvKiBXcml0YWJsZVN0cmVhbUJ1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RTggLyogV3JpdGFi
bGVTdHJlYW1CdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0yNTkwLDggKzI1OTAsOCBAQAogCQk2QjY5M0EyRTFDNTFBODJFMDBCMDNC
RUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZCNjkzQTJEMUM1MUE4MkUwMEIwM0JFRiAvKiBSZXNvdXJjZUxv
YWRPYnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTZCNjkzQTM0MUM1MUE5NUQwMEIwM0JFRiAvKiBSZXNvdXJjZUxvYWRPYnNlcnZlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QjY5M0Ez
MzFDNTFBOTVEMDBCMDNCRUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwICovOyB9OwogCQk2
QzRDOTZERTFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNEM5
NkRBMUFENDQ4MzUwMDM2M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuY3Bw
ICovOyB9OwotCQk2QzRDOTZERjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJl
YW1Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2QzRDOTZEQjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250
cm9sbGVyLmggKi87IH07CiAJCTZDNEM5NkRFMUFENDQ4MzUwMDM2NUE1MCAvKiBKU1JlYWRhYmxl
U3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkM0Qzk2REExQUQ0NDgzNTAwMzY1QTUwIC8qIEpTUmVhZGFibGVT
dHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHAgKi87IH07CisJCTZDNEM5NkRGMUFENDQ4MzUwMDM2
M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNEM5NkRCMUFENDQ4MzUwMDM2M0Y2NCAv
KiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaCAqLzsgfTsKIAkJNkM0Qzk2REYxQUQ0
NDgzNTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0Qzk2REIxQUQ0NDgz
NTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5oICovOyB9Owog
CQk2QzYzODg5NUE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlh
dG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM2
Mzg4OTNBOTZDQ0VFNTBDOEM5NDZDIC8qIENhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2QzYz
ODg5NkE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzYzODg5
NEE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5jcHAg
Ki87IH07CkBAIC0zMjc0LDYgKzMyNzQsNyBAQAogCQk5MzMwOUVBMzA5OUVCNzhDMDA1NkU1ODEg
LyogU2hhcmVkVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzMzA5RUEwMDk5RUI3OEMwMDU2RTU4MSAvKiBTaGFyZWRUaW1lci5oICovOyB9Owog
CQk5MzMwOUVBNDA5OUVCNzhDMDA1NkU1ODEgLyogVGltZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlFQTEwOTlFQjc4QzAwNTZFNTgxIC8q
IFRpbWVyLmNwcCAqLzsgfTsKIAkJOTMzNTRBM0MwQjI0RjhDOTAwM0Y2REVBIC8qIFVJRXZlbnRX
aXRoS2V5U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTMzNTRBM0IwQjI0RjhDOTAwM0Y2REVBIC8qIFVJRXZlbnRXaXRoS2V5U3RhdGUuY3Bw
ICovOyB9OworCQk5MzM1QjQ5RDFEQ0JFRjdDMDBFRDQ2OEUgLyogTlNUb3VjaEJhclNQSS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzNUI0OUIxRENC
RUY3MTAwRUQ0NjhFIC8qIE5TVG91Y2hCYXJTUEkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5MzNBMTQyRTBCN0QxODg2MDBBNTNGRkQgLyogVGV4
dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzM0ExNDJCMEI3RDE4ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuY3BwICovOyB9OwogCQk5MzNB
MTQzMDBCN0QxODg2MDBBNTNGRkQgLyogVGV4dEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzNBMTQyRDBCN0QxODg2MDBBNTNGRkQgLyogVGV4
dEV2ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJOTMzQTE0QjgwQjdEMUQ1MjAwQTUzRkZEIC8qIEpTVGV4dEV2ZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzM0ExNEI2MEI3RDFENTIwMEE1
M0ZGRCAvKiBKU1RleHRFdmVudC5jcHAgKi87IH07CkBAIC05NzgyLDggKzk3ODMsOCBAQAogCQk2
QjY5M0EyRDFDNTFBODJFMDBCMDNCRUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkI2OTNBMzMxQzUxQTk1RDAwQjAzQkVGIC8qIFJlc291
cmNlTG9hZE9ic2VydmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlc291cmNlTG9hZE9ic2VydmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NkM0Qzk2REExQUQ0NDgzNTAwMzYzRjY0IC8qIEpTUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1JlYWRhYmxlQnl0
ZVN0cmVhbUNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzRD
OTZEQjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUmVhZGFibGVCeXRlU3RyZWFtQ29u
dHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QzRDOTZEQTFBRDQ0ODM1
MDAzNjVBNTAgLyogSlNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29u
dHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZDNEM5NkRCMUFENDQ4
MzUwMDM2M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZDNEM5NkRCMUFENDQ4MzUwMDM2NUE1MCAv
KiBKU1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZDNjM4ODkzQTk2Q0NFRTUwQzhDOTQ2QyAvKiBDYWNo
ZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTZDNjM4ODk0QTk2Q0NFRTUwQzhDOTQ2QyAvKiBDYWNoZWRSZXNvdXJj
ZVJlcXVlc3RJbml0aWF0b3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTEwNzIyLDYgKzEwNzIzLDcgQEAKIAkJOTMzMkFCOEIxNjUzQTk3OTAw
RDgyN0VDIC8qIEZFTGlnaHRpbmdORU9OLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZFTGlnaHRpbmdORU9OLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMzJB
QjhDMTY1M0E5NzkwMEQ4MjdFQyAvKiBORU9OSGVscGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBORU9OSGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5MzM1NEEzQjBCMjRGOEM5MDAzRjZERUEgLyogVUlFdmVudFdpdGhLZXlTdGF0ZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVSUV2ZW50V2l0aEtleVN0YXRlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTMzNUI0OUIxRENCRUY3MTAwRUQ0NjhF
IC8qIE5TVG91Y2hCYXJTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTlNU
b3VjaEJhclNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzNBMTQyQjBCN0Qx
ODg2MDBBNTNGRkQgLyogVGV4dEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFRleHRFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkz
M0ExNDJDMEI3RDE4ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFRleHRFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzM0Ex
NDJEMEI3RDE4ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGV4dEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MTE3NSw4ICsxMTE3Nyw4IEBACiAJCTk5MDhCMEYwMUJDQUNGOTEwMEVEM0Y2NCAvKiBSZWFkYWJs
ZUJ5dGVTdHJlYW1Db250cm9sbGVyLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0
OyBwYXRoID0gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlci5qczsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTkwOEIwRjExQkNBQ0Y5MTAwRUQwRjU1IC8qIFN0cmVhbUludGVybmFs
cy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFN0cmVhbUludGVy
bmFscy5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkwOEIwRjExQkNBQ0Y5MTAw
RUQwRjY1IC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzLmpzICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVhZGFibGVTdHJlYW1JbnRlcm5hbHMuanM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk5MDhCMEYxMUJDQUNGOTEwMEVEM0Y2NCAvKiBSZWFkYWJs
ZUJ5dGVTdHJlYW1JbnRlcm5hbHMuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7
IHBhdGggPSBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHMuanM7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTk5MDhCMEYxMUJDQUNGOTEwMEVEMEY3NSAvKiBXcml0YWJsZVN0cmVhbUlu
dGVybmFscy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFdyaXRh
YmxlU3RyZWFtSW50ZXJuYWxzLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OTA4
QjBGMTFCQ0FDRjkxMDBFRDNGNjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzLmpzICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVhZGFibGVCeXRlU3RyZWFt
SW50ZXJuYWxzLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGMjFCQ0FD
RjkxMDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyLmpzICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVy
LmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGMzFCQ0FDRkZFMDBFRDBG
NjUgLyogQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJ5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3lCdWlsdGlu
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5MDhCMEY1MUJDQUQwN0QwMEVE
MEY2NSAvKiBCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5QnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTE4NCwxNSArMTExODYsMTMgQEAKIAkJ
OTkwOEIwRjcxQkNBRDA3RDAwRUQwRjY1IC8qIENvdW50UXVldWluZ1N0cmF0ZWd5QnVpbHRpbnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ291bnRRdWV1aW5nU3RyYXRlZ3lC
dWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGOTFCQ0FEMDdE
MDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkwOEIwRjkxQkNBRDA3RDAwRUQwRjc1IC8qIFdyaXRhYmxl
U3RyZWFtQnVpbHRpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V3JpdGFibGVTdHJlYW1CdWlsdGlucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTk5MDhCMEZBMUJDQUQwN0QwMEVEM0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVy
QnVpbHRpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFi
bGVCeXRlU3RyZWFtQ29udHJvbGxlckJ1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJOTkwOEIwRkIxQkNBRDA3RDAwRUQzRjY0IC8qIFJlYWRhYmxlQnl0ZVN0cmVhbUNv
bnRyb2xsZXJCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFk
YWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQnVpbHRpbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTkwOEIwRkExQkNBRDA3RDAwRUQwRjY1IC8qIFJlYWRhYmxlU3RyZWFtRGVmYXVs
dENvbnRyb2xsZXJCdWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQnVpbHRpbnMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGQjFCQ0FEMDdEMDBFRDBGNjUgLyogUmVhZGFi
bGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckJ1aWx0aW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJCdWlsdGlucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGRDFCQ0FEMDdEMDBFRDBGNDUgLyog
RmV0Y2hJbnRlcm5hbHNCdWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGZXRjaEludGVybmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTkwOEIwRkQxQkNBRDA3RDAwRUQwRjU1IC8qIFN0cmVhbUludGVybmFsc0J1aWx0
aW5zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTkwOEIwRkQx
QkNBRDA3RDAwRUQzRjY0IC8qIFJlYWRhYmxlQnl0ZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlYWRhYmxlQnl0ZVN0cmVh
bUludGVybmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkw
OEIwRkQxQkNBRDA3RDAwRUQwRjY1IC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFibGVTdHJlYW1J
bnRlcm5hbHNCdWlsdGlucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5MDhC
MEZEMUJDQUQwN0QwMEVEMEY3NSAvKiBXcml0YWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdyaXRhYmxlU3RyZWFtSW50
ZXJuYWxzQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OTA4QjBG
RDFCQ0FEMDdEMDBFRDNGNjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFibGVCeXRlU3Ry
ZWFtSW50ZXJuYWxzQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
OTA4QjBGRTFCQ0FEMDdEMDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyQnVp
bHRpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFibGVT
dHJlYW1EZWZhdWx0UmVhZGVyQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5OTA4QjBGRjFCQ0FEMDdEMDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVh
ZGVyQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVhZGFibGVT
dHJlYW1EZWZhdWx0UmVhZGVyQnVpbHRpbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTkyMDM5ODAxOEI5NUJDNjAwQjM5QUY5IC8qIFVzZXJJbnB1dEJyaWRnZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVc2VySW5wdXRCcmlkZ2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEyMzAsMTAgKzExMjMwLDEwIEBACiAJCTlBNTI4
RTgyMTdEN0Y1MkYwMEFBOTUxOCAvKiBGbG9hdGluZ09iamVjdHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRmxvYXRpbmdPYmplY3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTlBQjFGMzdFMThFMjQ4OUEwMDUzNDc0MyAvKiBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUFCMUYzN0YxOEUy
NDg5QTAwNTM0NzQzIC8qIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAv
KiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0QjkgLyog
RmV0Y2hJbnRlcm5hbHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGZXRjaEludGVybmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTlCMDNEODA2MUJCMzExMEQwMEI3NjRDOSAvKiBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDgg
LyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5h
bHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZUJ5
dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZVN0cmVhbUlu
dGVybmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMDNEODA2
MUJCMzExMEQwMEI3NjRFOCAvKiBXcml0YWJsZVN0cmVhbUJ1aWx0aW5zLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyaXRhYmxlU3RyZWFtQnVpbHRpbnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEU5IC8qIFdyaXRhYmxl
U3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTcyNTcsNiArMTcyNTcsNyBAQAogCQkJCTJEREI5N0YzMTlGOUFFQ0EwMDIw
MjVEOCAvKiBOU0V4dGVuc2lvblNQSS5oICovLAogCQkJCUNFMTI1MjNBMUExNjcxMTAwMDg2NDQ4
MCAvKiBOU0ZpbGVNYW5hZ2VyU1BJLmggKi8sCiAJCQkJQ0UxMjUyNTIxQTFCRUMwNjAwODY0NDgw
IC8qIE5TU3RyaW5nU1BJLmggKi8sCisJCQkJOTMzNUI0OUIxRENCRUY3MTAwRUQ0NjhFIC8qIE5T
VG91Y2hCYXJTUEkuaCAqLywKIAkJCQkzMUIzMTNEQTFCNjk4NzE2MDBGMkFBQkMgLyogTlNVUkxD
b25uZWN0aW9uU1BJLmggKi8sCiAJCQkJQ0UxMjUyNTQxQTFCRUMwRTAwODY0NDgwIC8qIE5TVVJM
RG93bmxvYWRTUEkuaCAqLywKIAkJCQk2NTNFRjgzODE5QTA0M0FFMDA1MjIwMkMgLyogTlNVUkxG
aWxlVHlwZU1hcHBpbmdzU1BJLmggKi8sCkBAIC0xNzMzMyw4ICsxNzMzNCw2IEBACiAJCQkJNDRB
MjhBQUUxMkRGQjhCRjAwQUU5MjNCIC8qIE1hdGhNTE5hbWVzLmggKi8sCiAJCQkJNzFFMjE4Mzgx
NzM1OUZCODAwNkU2RTREIC8qIFBsdWdJbnNSZXNvdXJjZXMuaCAqLywKIAkJCQk3MUUyMTgzOTE3
MzU5RkI4MDA2RTZFNEQgLyogUGx1Z0luc1Jlc291cmNlc0RhdGEuY3BwICovLAotCQkJCTk5MDhC
MEZBMUJDQUQwN0QwMDc2M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQnVpbHRp
bnMuY3BwICovLAotCQkJCTk5MDhCMEZCMUJDQUQwN0QwMDc2M0Y2NCAvKiBSZWFkYWJsZUJ5dGVT
dHJlYW1Db250cm9sbGVyQnVpbHRpbnMuaCAqLywKIAkJCQk5OTA4QjBGRDFCQ0FEMDdEMDBFRDNG
NjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuY3BwICovLAogCQkJCTlC
MDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oICovLAogCQkJCTk5MDhCMEY5MUJDQUQwN0QwMEVEMEY2NSAvKiBSZWFkYWJsZVN0cmVh
bUJ1aWx0aW5zLmNwcCAqLywKQEAgLTI1MDc3LDcgKzI1MDc2LDYgQEAKIAkJCQlCQzFCREYyNTE1
NkMxOEM3MDAxQzEyNDMgLyogRE9NRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTJFRDYwOUJE
MTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgx
ODVGM0IwOTc2NTc2NjAwNTgyNkQ5IC8qIERPTUltcGxlbWVudGF0aW9uLmggaW4gSGVhZGVycyAq
LywKLQkJCQlFMzVDQTE0RTFEQkMzQTQyMDBGODM1MTYgLyogRE9NSklUQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMxNTBFQTcxREE3MjE5MzAwMTk0MDEyIC8q
IERPTUpJVEhlbHBlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE5QzZFNEU0MEQ3NDVFMDUwMDY0
NDJFOSAvKiBET01NaW1lVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTlDNkU0RTgwRDc0NUUx
ODAwNjQ0MkU5IC8qIERPTU1pbWVUeXBlQXJyYXkuaCBpbiBIZWFkZXJzICovLApAQCAtMjY3OTEs
OSArMjY3ODksOSBAQAogCQkJCUY1NUIzRENFMTI1MUYxMkQwMDNFRjI2OSAvKiBSYW5nZUlucHV0
VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU4NEU5RTExNzY2OEJGMTAwODE1QjY4IC8qIFJh
c3RlclNoYXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODREODI3QzExRDMzM0VEMDA5NzI5OTAg
LyogUmF3RGF0YURvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQk0MTZFNkZFODFC
QkQxMkRGMDAwQTNGNjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCBp
biBIZWFkZXJzICovLAorCQkJCTQxNkU2RkU4MUJCRDEyREYwMDBBM0Y2NCAvKiBSZWFkYWJsZVN0
cmVhbUludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTZFNkZFOTFCQkQx
MkU1MDAwQTYwNDMgLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJNDE2RTZGRTgxQkJEMTJERjAwMEE2MDQzIC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVp
bHRpbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjA0MyAvKiBS
ZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkQzMTYwM0MxMkIwMjY3NjAwQzFBMzU5IC8qIFJlYWx0aW1lQW5hbHlzZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTRBNEY2NTcxMUFBOTk3RjEwMEUzOENERCAvKiBSZWFsdGltZU1lZGlhU291cmNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0QTRGNjU3MjFBQTk5N0YxMDBFMzhDREQgLyogUmVhbHRp
bWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzg3NSw2ICsy
Nzg3Myw3IEBACiAJCQkJMUNBRjM0ODEwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVj
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUNBRjM0ODMwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNj
cmlwdE9iamVjdFByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNTY5RDFCMEQ3RTJCODIw
MDdDMzk4MyAvKiBXZWJTY3JpcHRPYmplY3RQcm90b2NvbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
OTMzNUI0OUQxRENCRUY3QzAwRUQ0NjhFIC8qIE5TVG91Y2hCYXJTUEkuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk3QUFCRDFCMTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk3QUFCRDFFMTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXRDaGFubmVsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5N0FBQkQxRjE0RkEwOUQ1MDA3NDU3QUUgLyogV2ViU29ja2V0
Q2hhbm5lbENsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODgzNCw3ICsyODgzMyw2IEBACiAJ
CQkJQkMxQkRGMjQxNTZDMTg4MzAwMUMxMjQzIC8qIERPTUVycm9yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTJFRDYwOUJDMTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBODE4NUYzRTA5NzY1NzY2MDA1ODI2RDkgLyogRE9NSW1wbGVtZW50YXRp
b24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRTM1Q0ExNEQxREJDM0EzRjAwRjgzNTE2IC8qIERP
TUpJVEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTlDNkU0
RTMwRDc0NUUwNTAwNjQ0MkU5IC8qIERPTU1pbWVUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE5QzZFNEU3MEQ3NDVFMTgwMDY0NDJFOSAvKiBET01NaW1lVHlwZUFycmF5LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTUyQjZDOUMyMTVFM0Y0REYwMDY5MEIwNSAvKiBET01OYW1lZEZsb3dDb2xs
ZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
c3BpL2NvY29hL0FWS2l0U1BJLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vc3BpL2NvY29hL0FWS2l0U1BJLmgJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3NwaS9jb2NvYS9BVktpdFNQSS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIs
NiArMTMyLDggQEAgTlNfQ0xBU1NfQVZBSUxBQkxFX01BQygxMF8xMSkKIAogI2VuZGlmIC8vIEVO
QUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICYmICFQTEFURk9STShJT1MpCiAKK05TX0FT
U1VNRV9OT05OVUxMX0JFR0lOCisKIEBpbnRlcmZhY2UgQVZWYWx1ZVRpbWluZyA6IE5TT2JqZWN0
IDxOU0NvZGluZywgTlNDb3B5aW5nLCBOU011dGFibGVDb3B5aW5nPiAKIEBlbmQKIApAQCAtMTM5
LDMgKzE0MSwzMiBAQCBOU19DTEFTU19BVkFJTEFCTEVfTUFDKDEwXzExKQogKyAoQVZWYWx1ZVRp
bWluZyAqKXZhbHVlVGltaW5nV2l0aEFuY2hvclZhbHVlOihkb3VibGUpYW5jaG9yVmFsdWUgYW5j
aG9yVGltZVN0YW1wOihOU1RpbWVJbnRlcnZhbCl0aW1lU3RhbXAgcmF0ZTooZG91YmxlKXJhdGU7
CiBAcHJvcGVydHkgKE5TX05PTkFUT01JQ19JT1NPTkxZLCByZWFkb25seSkgZG91YmxlIGN1cnJl
bnRWYWx1ZTsKIEBlbmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECisKKyNpZiBQTEFURk9STShN
QUMpCisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorI2ltcG9ydCA8
QVZLaXQvQVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNQcm92aWRlci5oPgorI2ltcG9ydCA8
QVZLaXQvQVZGdW5jdGlvbkJhclNjcnViYmVyLmg+CisjZWxzZQorCitOU19BU1NVTUVfTk9OTlVM
TF9CRUdJTgorCitAcHJvdG9jb2wgQVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNDb250cm9s
bGluZyA8TlNPYmplY3Q+CitAcHJvcGVydHkgKHJlYWRvbmx5KSBOU1RpbWVJbnRlcnZhbCBjb250
ZW50RHVyYXRpb247CitAcHJvcGVydHkgKHJlYWRvbmx5LCBudWxsYWJsZSkgQVZWYWx1ZVRpbWlu
ZyAqdGltaW5nOworQHByb3BlcnR5IChyZWFkb25seSwgZ2V0dGVyPWlzU2Vla2luZykgQk9PTCBz
ZWVraW5nOworQHByb3BlcnR5IChyZWFkb25seSkgTlNUaW1lSW50ZXJ2YWwgc2Vla1RvVGltZTsK
Ky0gKHZvaWQpc2Vla1RvVGltZTooTlNUaW1lSW50ZXJ2YWwpdGltZSB0b2xlcmFuY2VCZWZvcmU6
KE5TVGltZUludGVydmFsKXRvbGVyYW5jZUJlZm9yZSB0b2xlcmFuY2VBZnRlcjooTlNUaW1lSW50
ZXJ2YWwpdG9sZXJhbmNlQWZ0ZXI7CitAcHJvcGVydHkgKHJlYWRvbmx5KSBCT09MIGhhc0VuYWJs
ZWRBdWRpbzsKK0Bwcm9wZXJ0eSAocmVhZG9ubHkpIEJPT0wgaGFzRW5hYmxlZFZpZGVvOworQGVu
ZAorCitAaW50ZXJmYWNlIEFWRnVuY3Rpb25CYXJTY3J1YmJlciA6IE5TVmlldworQHByb3BlcnR5
IChhc3NpZ24sIG51bGxhYmxlKSBpZDxBVkZ1bmN0aW9uQmFyUGxheWJhY2tDb250cm9sc0NvbnRy
b2xsaW5nPiBwbGF5YmFja0NvbnRyb2xzQ29udHJvbGxlcjsKK0BlbmQKKworTlNfQVNTVU1FX05P
Tk5VTExfRU5ECisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFH
RVIpCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vc3BpL2NvY29hL05TVG91Y2hCYXJTUEkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9zcGkvY29jb2EvTlNUb3VjaEJhclNQSS5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9jb2NvYS9OU1RvdWNoQmFyU1BJLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBQTEFURk9STShNQUMpCisj
aWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykgJiYgSEFWRShUT1VDSF9CQVIpCisKKyNpbXBvcnQg
PEFwcEtpdC9OU0Z1bmN0aW9uQmFyX1ByaXZhdGUuaD4KKyNpbXBvcnQgPEFwcEtpdC9OU1RleHRU
b3VjaEJhckl0ZW1Db250cm9sbGVyX1dlYktpdFNQSS5oPgorI2ltcG9ydCA8QXBwS2l0L05TVG91
Y2hCYXJfUHJpdmF0ZS5oPgorCisjZWxzZQorCitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCitA
aW50ZXJmYWNlIE5TVG91Y2hCYXJJdGVtIDogTlNPYmplY3QKK0BlbmQKKworQGludGVyZmFjZSBO
U0NvbG9yUGlja2VyVG91Y2hCYXJJdGVtIDogTlNUb3VjaEJhckl0ZW0KK0BlbmQKKworQGludGVy
ZmFjZSBOU1RvdWNoQmFyIDogTlNPYmplY3QKK0Bwcm9wZXJ0eSAocmVhZG9ubHksIGNvcHksIG51
bGxhYmxlKSBOU0FycmF5PE5TVG91Y2hCYXJJdGVtICo+ICppdGVtczsKK0Bwcm9wZXJ0eSAoc3Ry
b25nLCBudWxsYWJsZSkgTlNUb3VjaEJhckl0ZW0gKmVzY2FwZUtleVJlcGxhY2VtZW50SXRlbTsK
K0BlbmQKKworQGludGVyZmFjZSBOU1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIDogTlNPYmpl
Y3QKKworQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nLCBudWxsYWJsZSkgTlNDb2xvclBpY2tl
clRvdWNoQmFySXRlbSAqY29sb3JQaWNrZXJJdGVtOworQHByb3BlcnR5IChyZWFkb25seSwgc3Ry
b25nLCBudWxsYWJsZSkgTlNTZWdtZW50ZWRDb250cm9sICp0ZXh0U3R5bGU7CitAcHJvcGVydHkg
KHJlYWRvbmx5LCBzdHJvbmcsIG51bGxhYmxlKSBOU1NlZ21lbnRlZENvbnRyb2wgKnRleHRBbGln
bm1lbnRzOworQHByb3BlcnR5IChudWxsYWJsZSwgc3Ryb25nKSBOU1ZpZXdDb250cm9sbGVyICp0
ZXh0TGlzdFZpZXdDb250cm9sbGVyOworQHByb3BlcnR5IEJPT0wgdXNlc05hcnJvd1RleHRTdHls
ZUl0ZW07CisKKy0gKG51bGxhYmxlIE5TVG91Y2hCYXJJdGVtICopaXRlbUZvcklkZW50aWZpZXI6
KG51bGxhYmxlIE5TU3RyaW5nICopaWRlbnRpZmllcjsKKworQGVuZAorCisjZGVmaW5lIE5TVG91
Y2hCYXJXaWxsRW50ZXJDdXN0b21pemF0aW9uIEAiTlNUb3VjaEJhcldpbGxFbnRlckN1c3RvbWl6
YXRpb24iCisjZGVmaW5lIE5TVG91Y2hCYXJEaWRFeGl0Q3VzdG9taXphdGlvbiBAIk5TVG91Y2hC
YXJEaWRFeGl0Q3VzdG9taXphdGlvbiIKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECisKKyNlbmRp
ZiAvLyBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKSAmJiBIQVZFKFRPVUNIX0JBUikKKyNlbmRpZiAv
LyBQTEFURk9STShNQUMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvbWFjL05T
U3BlbGxDaGVja2VyU1BJLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
c3BpL21hYy9OU1NwZWxsQ2hlY2tlclNQSS5oCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxDaGVja2VyU1BJLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDYgKzMwLDcgQEAKIC8vIEZJWE1FOiBUaGlzIGhlYWRlciBzaG91bGQgaW5jbHVk
ZSBzeXN0ZW0gaGVhZGVycyB3aGVuIHBvc3NpYmxlLgogCiBleHRlcm4gTlNTdHJpbmcgKk5TVGV4
dENoZWNraW5nSW5zZXJ0aW9uUG9pbnRLZXk7CitleHRlcm4gTlNOb3RpZmljYXRpb25OYW1lIGNv
bnN0IE5TU3BlbGxDaGVja2VyRGlkQ2hhbmdlQXV0b21hdGljVGV4dENvbXBsZXRpb25Ob3RpZmlj
YXRpb247CiAKIEBpbnRlcmZhY2UgTlNTcGVsbENoZWNrZXIgKCkKIC0gKE5TSW50ZWdlcilyZXF1
ZXN0Q2FuZGlkYXRlc0ZvclNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2Upc2VsZWN0ZWRSYW5nZSBpblN0
cmluZzooTlNTdHJpbmcgKilzdHJpbmdUb0NoZWNrIHR5cGVzOihOU1RleHRDaGVja2luZ1R5cGVz
KWNoZWNraW5nVHlwZXMgb3B0aW9uczooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKW9w
dGlvbnMgaW5TcGVsbERvY3VtZW50V2l0aFRhZzooTlNJbnRlZ2VyKXRhZyBjb21wbGV0aW9uSGFu
ZGxlcjoodm9pZCAoXikoTlNJbnRlZ2VyIHNlcXVlbmNlTnVtYmVyLCBOU0FycmF5PE5TVGV4dENo
ZWNraW5nUmVzdWx0ICo+ICpjYW5kaWRhdGVzKSljb21wbGV0aW9uSGFuZGxlcjsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDkwIEBACisyMDE2LTExLTA0ICBCZXRoIERha2luICA8YmRh
a2luQGFwcGxlLmNvbT4KKworICAgICAgICBTdXBwb3J0IFRvdWNoQmFyIGluIFdlYktpdAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NDM3CisgICAg
ICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjg4NzY1MjQK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tWaWV3UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJWaWV3Lm1tOgorICAgICAgICAoLVtXS1dlYlZpZXcgbWFrZVRvdWNoQmFyXSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtXSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfd2ViX2RpZEFkZE1lZGlhQ29udHJvbHNNYW5hZ2VyOl0pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX3dlYl9kaWRSZW1vdmVNZWRpYUNvbnRyb2xzTWFuYWdlcl0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX2ludGVyYWN0V2l0aE1lZGlhQ29udHJvbHNGb3JUZXN0aW5n
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNW
aWV3Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXdd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9hZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Ol0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX3JlbW92ZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXdd
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAgICgtW1dLVmlldyBt
YWtlVG91Y2hCYXJdKToKKyAgICAgICAgKC1bV0tWaWV3IGNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0
ZW1dKToKKyAgICAgICAgKC1bV0tWaWV3IF93ZWJfZGlkQWRkTWVkaWFDb250cm9sc01hbmFnZXI6
XSk6CisgICAgICAgICgtW1dLVmlldyBfd2ViX2RpZFJlbW92ZU1lZGlhQ29udHJvbHNNYW5hZ2Vy
XSk6CisgICAgICAgICgtW1dLVmlldyBfd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3XSk6
CisgICAgICAgICgtW1dLVmlldyBfc2V0V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Ol0p
OgorICAgICAgICAoLVtXS1ZpZXcgX21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXddKToKKyAgICAg
ICAgKC1bV0tWaWV3IF9hZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Ol0pOgorICAgICAgICAo
LVtXS1ZpZXcgX3JlbW92ZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXddKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0lt
cGw6OmN1cnJlbnRUb3VjaEJhcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjbGll
bnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3SW1wbDo6c2V0Q2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldElzQ3VzdG9taXppbmdUb3VjaEJhcik6CisgICAg
ICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tOgorICAgICAgICAoLVtXS1RleHRM
aXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciBpbml0V2l0aFdlYlZpZXdJbXBsOl0pOgorICAgICAg
ICAoLVtXS1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciBkaWREZXN0cm95Vmlld10pOgor
ICAgICAgICAoLVtXS1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciBfc2VsZWN0TGlzdDpd
KToKKyAgICAgICAgKC1bV0tUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgc2V0Q3VycmVu
dExpc3RUeXBlOl0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIGlu
aXRXaXRoV2ViVmlld0ltcGw6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRy
b2xsZXIgZGlkRGVzdHJveVZpZXddKToKKyAgICAgICAgKC1bV0tUZXh0VG91Y2hCYXJJdGVtQ29u
dHJvbGxlciB0b3VjaEJhcjptYWtlSXRlbUZvcklkZW50aWZpZXI6XSk6CisgICAgICAgICgtW1dL
VGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgaXRlbUZvcklkZW50aWZpZXI6XSk6CisgICAgICAg
ICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRl
bTplbmRTZWxlY3RpbmdDYW5kaWRhdGVBdEluZGV4Ol0pOgorICAgICAgICAoLVtXS1RleHRUb3Vj
aEJhckl0ZW1Db250cm9sbGVyIGNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW06Y2hhbmdlZENhbmRp
ZGF0ZUxpc3RWaXNpYmlsaXR5Ol0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250
cm9sbGVyIHRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlcl0pOgorICAgICAgICAoLVtXS1Rl
eHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFRleHRJc0JvbGQ6XSk6CisgICAgICAgICgtW1dL
VGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzSXRhbGljOl0pOgorICAgICAgICAo
LVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFRleHRJc1VuZGVybGluZWQ6XSk6Cisg
ICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgX3drQ2hhbmdlVGV4dFN0eWxl
Ol0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldEN1cnJlbnRU
ZXh0QWxpZ25tZW50Ol0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVy
IF93a0NoYW5nZVRleHRBbGlnbm1lbnQ6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRl
bUNvbnRyb2xsZXIgdGV4dENvbG9yXSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNv
bnRyb2xsZXIgc2V0VGV4dENvbG9yOl0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1D
b250cm9sbGVyIF93a0NoYW5nZUNvbG9yOl0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0
ZW1Db250cm9sbGVyIHRleHRMaXN0Vmlld0NvbnRyb2xsZXJdKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6Om1ha2VUb3VjaEJhcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBs
OjpjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0lt
cGw6Om1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6dXNlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjpkaXNtaXNzVGV4dFRvdWNoQmFyUG9wb3Zlckl0ZW1XaXRoSWRlbnRpZmllcik6
CisgICAgICAgIChXZWJLaXQ6OnRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25BbGxvd2VkSWRlbnRp
ZmllcnMpOgorICAgICAgICAoV2ViS2l0OjpwbGFpblRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25E
ZWZhdWx0SXRlbUlkZW50aWZpZXJzKToKKyAgICAgICAgKFdlYktpdDo6cmljaFRleHRUb3VjaEJh
ckN1c3RvbWl6YXRpb25EZWZhdWx0SXRlbUlkZW50aWZpZXJzKToKKyAgICAgICAgKFdlYktpdDo6
dG91Y2hCYXJEaWRFeGl0Q3VzdG9taXphdGlvbik6CisgICAgICAgIChXZWJLaXQ6OnRvdWNoQmFy
V2lsbEVudGVyQ3VzdG9taXphdGlvbik6CisgICAgICAgIChXZWJLaXQ6OmRpZENoYW5nZUF1dG9t
YXRpY1RleHRDb21wbGV0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0
ZVRvdWNoQmFyQW5kUmVmcmVzaFRleHRCYXJJZGVudGlmaWVycyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXdJbXBsOjpzZXRVcFRleHRUb3VjaEJhcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjppc1JpY2hseUVkaXRhYmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OnRleHRUb3VjaEJhcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVUZXh0
VG91Y2hCYXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dXBkYXRlTWVkaWFUb3Vj
aEJhcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpmb3JjZVJlcXVlc3RDYW5kaWRh
dGVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVUb3Vj
aEJhcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzaG91bGRSZXF1ZXN0Q2FuZGlk
YXRlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzaG93Q2FuZGlkYXRlcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp3ZWJWaWV3SW1wbEFkZGl0aW9uc1dpbGxEZXN0
cm95Vmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRFZGl0YWJsZUVsZW1l
bnRJc0ZvY3VzZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YmVjb21lRmlyc3RS
ZXNwb25kZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2VsZWN0aW9uRGlkQ2hh
bmdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnZpZGVvQ29udHJvbHNNYW5hZ2Vy
RGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0ZVdlYlZpZXdJ
bXBsQWRkaXRpb25zKTogRGVsZXRlZC4KKwogMjAxNi0xMS0wNCAgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcg
b3V0IHIyMDgyOTMuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
Vmlld1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLVmlld1ByaXZhdGUuaAkocmV2aXNpb24gMjA4NDA1KQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ZpZXdQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDYgKzMxLDggQEAKICNpbXBvcnQgPFdlYktpdC9XS1ZpZXcuaD4KICNpbXBvcnQgPFdlYktp
dC9fV0tPdmVybGF5U2Nyb2xsYmFyU3R5bGUuaD4KIAorQGNsYXNzIEFWRnVuY3Rpb25CYXJTY3J1
YmJlcjsKKwogQGludGVyZmFjZSBXS1ZpZXcgKFByaXZhdGUpCiAKIC8qIEMgU1BJIHN1cHBvcnQu
ICovCkBAIC0xMzIsNiArMTM0LDExIEBACiAKIC0gKHZvaWQpX2dlc3R1cmVFdmVudFdhc05vdEhh
bmRsZWRCeVdlYkNvcmU6KE5TRXZlbnQgKilldmVudDsKIAorQHByb3BlcnR5IChub25hdG9taWMs
IHJlYWR3cml0ZSwgc2V0dGVyPV9zZXRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6KSBC
T09MIF93YW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc7CitAcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIEFWRnVuY3Rpb25CYXJTY3J1YmJlciAqX21lZGlhUGxheWJhY2tDb250cm9s
c1ZpZXc7CistICh2b2lkKV9hZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OihBVkZ1bmN0aW9u
QmFyU2NydWJiZXIgKiltZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OworLSAodm9pZClfcmVtb3Zl
TWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzsKKwogQGVuZAogCiAjZW5kaWYgLy8gIVRBUkdFVF9P
U19JUEhPTkUKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJW
aWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJWaWV3Lm1tCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTc0LDcgKzE3NCwx
MiBAQCBzdGF0aWMgY29uc3QgdWludDMyX3QgZmlyc3RTREtWZXJzaW9uV2l0CiAKIEBpbnRlcmZh
Y2UgV0tXZWJWaWV3ICgpIDxXZWJWaWV3SW1wbERlbGVnYXRlLCBOU1RleHRJbnB1dENsaWVudD4K
IEBlbmQKLSNlbmRpZgorCisjaWYgSEFWRShUT1VDSF9CQVIpCitAaW50ZXJmYWNlIFdLV2ViVmll
dyAoKSA8TlNUb3VjaEJhclByb3ZpZGVyPgorQGVuZAorI2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFS
KQorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogc3RhdGljIEhhc2hNYXA8V2ViS2l0OjpXZWJQ
YWdlUHJveHkqLCBXS1dlYlZpZXcgKj4mIHBhZ2VUb1ZpZXdNYXAoKQogewpAQCAtMzE1NSw2ICsz
MTYwLDM4IEBAIC0gKHZvaWQpX3dlYl9nZXN0dXJlRXZlbnRXYXNOb3RIYW5kbGVkQnkKIAogI2Vu
ZGlmIC8vIFBMQVRGT1JNKE1BQykKIAorI2lmIEhBVkUoVE9VQ0hfQkFSKQorCitAZHluYW1pYyB0
b3VjaEJhcjsKKworLSAoTlNUb3VjaEJhciAqKW1ha2VUb3VjaEJhcgoreworICAgIHJldHVybiBf
aW1wbC0+bWFrZVRvdWNoQmFyKCk7Cit9CisKKy0gKE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRl
bSAqKWNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0KK3sKKyAgICByZXR1cm4gX2ltcGwtPmNhbmRp
ZGF0ZUxpc3RUb3VjaEJhckl0ZW0oKTsKK30KKworLSAodm9pZClfd2ViX2RpZEFkZE1lZGlhQ29u
dHJvbHNNYW5hZ2VyOihpZCljb250cm9sc01hbmFnZXIKK3sKKyAgICBbc2VsZiBfYWRkTWVkaWFQ
bGF5YmFja0NvbnRyb2xzVmlldzpjb250cm9sc01hbmFnZXJdOworfQorCistICh2b2lkKV93ZWJf
ZGlkUmVtb3ZlTWVkaWFDb250cm9sc01hbmFnZXIKK3sKKyAgICBbc2VsZiBfcmVtb3ZlTWVkaWFQ
bGF5YmFja0NvbnRyb2xzVmlld107Cit9CisKKy0gKHZvaWQpX2ludGVyYWN0V2l0aE1lZGlhQ29u
dHJvbHNGb3JUZXN0aW5nCit7CisgICAgW3NlbGYgX3NldFdhbnRzTWVkaWFQbGF5YmFja0NvbnRy
b2xzVmlldzpZRVNdOworICAgIFtzZWxmIG1ha2VUb3VjaEJhcl07Cit9CisKKyNlbmRpZiAvLyBI
QVZFKFRPVUNIX0JBUikKKwogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV0tXZWJWaWV3IChXS1By
aXZhdGUpCkBAIC00NTI5LDYgKzQ1NjYsNDEgQEAgLSAodm9pZClzZXRVc2VySW50ZXJmYWNlTGF5
b3V0RGlyZWN0aW9uOgogICAgIF9pbXBsLT5zZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9u
KHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24pOwogfQogCistIChCT09MKV93YW50c01lZGlh
UGxheWJhY2tDb250cm9sc1ZpZXcKK3sKKyNpZiBIQVZFKFRPVUNIX0JBUikKKyAgICByZXR1cm4g
X2ltcGwtPmNsaWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpOworI2Vsc2UKKyAg
ICByZXR1cm4gTk87CisjZW5kaWYKK30KKworLSAodm9pZClfc2V0V2FudHNNZWRpYVBsYXliYWNr
Q29udHJvbHNWaWV3OihCT09MKXdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldworeworI2lm
IEhBVkUoVE9VQ0hfQkFSKQorICAgIF9pbXBsLT5zZXRDbGllbnRXYW50c01lZGlhUGxheWJhY2tD
b250cm9sc1ZpZXcod2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KTsKKyNlbmRpZgorfQor
CistIChBVkZ1bmN0aW9uQmFyU2NydWJiZXIgKilfbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldwor
eworI2lmIEhBVkUoVE9VQ0hfQkFSKQorICAgIGlmICghX2ltcGwtPmNsaWVudFdhbnRzTWVkaWFQ
bGF5YmFja0NvbnRyb2xzVmlldygpKQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBf
aW1wbC0+bWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpOworI2Vsc2UKKyAgICByZXR1cm4gbmls
OworI2VuZGlmCit9CisKKy0gKHZvaWQpX2FkZE1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6KEFW
RnVuY3Rpb25CYXJTY3J1YmJlciAqKW1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcKK3sKK30KKwor
LSAodm9pZClfcmVtb3ZlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldworeworfQorCiAjZW5kaWYK
IAogQGVuZApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZp
ZXdQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYlZpZXdQcml2YXRlLmgJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Miw2ICs1Miw3IEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9XS0ltbWVkaWF0
ZUEKIAogI2VuZGlmCiAKK0BjbGFzcyBBVkZ1bmN0aW9uQmFyU2NydWJiZXI7CiBAY2xhc3MgV0tC
cm93c2luZ0NvbnRleHRIYW5kbGU7CiBAY2xhc3MgX1dLRnJhbWVIYW5kbGU7CiBAY2xhc3MgX1dL
SGl0VGVzdFJlc3VsdDsKQEAgLTIwMiw2ICsyMDMsMTIgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50
ZWdlciwgX1dLSW1tZWRpYXRlQQogLSAoTlNQcmludE9wZXJhdGlvbiAqKV9wcmludE9wZXJhdGlv
bldpdGhQcmludEluZm86KE5TUHJpbnRJbmZvICopcHJpbnRJbmZvOwogLSAoTlNQcmludE9wZXJh
dGlvbiAqKV9wcmludE9wZXJhdGlvbldpdGhQcmludEluZm86KE5TUHJpbnRJbmZvICopcHJpbnRJ
bmZvIGZvckZyYW1lOihfV0tGcmFtZUhhbmRsZSAqKWZyYW1lSGFuZGxlIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3N4KDEwLjEyKSwgaW9zKDEwLjApKTsKIAorLy8gRklYTUU6IFRoaXMgU1BJIHNob3Vs
ZCBiZWNvbWUgYSBwYXJ0IG9mIHRoZSBXS1VJRGVsZWdhdGUuIHJkYXI6Ly9wcm9ibGVtLzI2NTYx
NTM3CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZHdyaXRlLCBzZXR0ZXI9X3NldFdhbnRzTWVk
aWFQbGF5YmFja0NvbnRyb2xzVmlldzopIEJPT0wgX3dhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xz
VmlldyBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSk7CitAcHJvcGVydHkgKG5v
bmF0b21pYywgcmVhZG9ubHkpIEFWRnVuY3Rpb25CYXJTY3J1YmJlciAqX21lZGlhUGxheWJhY2tD
b250cm9sc1ZpZXcgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSkpOworLSAodm9p
ZClfYWRkTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzooQVZGdW5jdGlvbkJhclNjcnViYmVyICop
bWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNf
VEJBKSk7CistICh2b2lkKV9yZW1vdmVNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3IFdLX0FQSV9B
VkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpKTsKKwogI2VuZGlmCiAKIC0gKFdLTmF2aWdhdGlv
biAqKV9yZWxvYWRXaXRob3V0Q29udGVudEJsb2NrZXJzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4
KDEwLjEyKSwgaW9zKDEwLjApKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
bWFjL1dLVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L21hYy9XS1ZpZXcubW0JKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsMTEgQEAg
QGludGVyZmFjZSBXS1ZpZXdEYXRhIDogTlNPYmplY3QgewogQGludGVyZmFjZSBXS1ZpZXcgKCkg
PFdlYlZpZXdJbXBsRGVsZWdhdGU+CiBAZW5kCiAKKyNpZiBIQVZFKFRPVUNIX0JBUikKK0BpbnRl
cmZhY2UgV0tWaWV3ICgpIDxOU1RvdWNoQmFyUHJvdmlkZXI+CitAZW5kCisjZW5kaWYKKwogQGlt
cGxlbWVudGF0aW9uIFdLVmlldwogCiAjaWYgV0tfQVBJX0VOQUJMRUQKQEAgLTk3Nyw2ICs5ODIs
MzIgQEAgLSAodm9pZClfZGlkVXBkYXRlQ2FuZGlkYXRlTGlzdFZpc2liaWxpdAogewogfQogCisj
aWYgSEFWRShUT1VDSF9CQVIpCisKK0BkeW5hbWljIHRvdWNoQmFyOworCistIChOU1RvdWNoQmFy
ICopbWFrZVRvdWNoQmFyCit7CisgICAgcmV0dXJuIF9kYXRhLT5faW1wbC0+bWFrZVRvdWNoQmFy
KCk7Cit9CisKKy0gKE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSAqKWNhbmRpZGF0ZUxpc3RU
b3VjaEJhckl0ZW0KK3sKKyAgICByZXR1cm4gX2RhdGEtPl9pbXBsLT5jYW5kaWRhdGVMaXN0VG91
Y2hCYXJJdGVtKCk7Cit9CisKKy0gKHZvaWQpX3dlYl9kaWRBZGRNZWRpYUNvbnRyb2xzTWFuYWdl
cjooaWQpY29udHJvbHNNYW5hZ2VyCit7CisgICAgW3NlbGYgX2FkZE1lZGlhUGxheWJhY2tDb250
cm9sc1ZpZXc6Y29udHJvbHNNYW5hZ2VyXTsKK30KKworLSAodm9pZClfd2ViX2RpZFJlbW92ZU1l
ZGlhQ29udHJvbHNNYW5hZ2VyCit7CisgICAgW3NlbGYgX3JlbW92ZU1lZGlhUGxheWJhY2tDb250
cm9sc1ZpZXddOworfQorCisjZW5kaWYgLy8gSEFWRShUT1VDSF9CQVIpCisKIEBlbmQKIAogQGlt
cGxlbWVudGF0aW9uIFdLVmlldyAoUHJpdmF0ZSkKQEAgLTE0NjcsMTAgKzE0OTgsNDEgQEAgLSAo
dm9pZClzZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOgogICAgIF9kYXRhLT5faW1wbC0+
c2V0VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbih1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0
aW9uKTsKIH0KIAotQGVuZAorLSAoQk9PTClfd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3
Cit7CisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgcmV0dXJuIF9kYXRhLT5faW1wbC0+Y2xpZW50
V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCk7CisjZWxzZQorICAgIHJldHVybiBOTzsK
KyNlbmRpZgorfQorCistICh2b2lkKV9zZXRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6
KEJPT0wpd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Cit7CisjaWYgSEFWRShUT1VDSF9C
QVIpCisgICAgX2RhdGEtPl9pbXBsLT5zZXRDbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9s
c1ZpZXcod2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KTsKKyNlbmRpZgorfQogCi0jaWYg
UExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIw
MCAmJiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2ltcG9ydCA8V2ViS2l0QWRkaXRpb25zL1dL
Vmlld0FkZGl0aW9ucy5tbT4KKy0gKEFWRnVuY3Rpb25CYXJTY3J1YmJlciAqKV9tZWRpYVBsYXli
YWNrQ29udHJvbHNWaWV3Cit7CisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgaWYgKCFfZGF0YS0+
X2ltcGwtPmNsaWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpKQorICAgICAgICBy
ZXR1cm4gbmlsOworICAgIHJldHVybiBfZGF0YS0+X2ltcGwtPm1lZGlhUGxheWJhY2tDb250cm9s
c1ZpZXcoKTsKKyNlbHNlCisgICAgcmV0dXJuIG5pbDsKICNlbmRpZgorfQorCistICh2b2lkKV9h
ZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OihBVkZ1bmN0aW9uQmFyU2NydWJiZXIgKiltZWRp
YVBsYXliYWNrQ29udHJvbHNWaWV3Cit7Cit9CisKKy0gKHZvaWQpX3JlbW92ZU1lZGlhUGxheWJh
Y2tDb250cm9sc1ZpZXcKK3sKK30KKworQGVuZAogCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLmgJKHJl
dmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1MiwxNyBAQCBPQkpDX0NMQVNTIFdLV2Vi
VmlldzsKIE9CSkNfQ0xBU1MgV0tXaW5kb3dWaXNpYmlsaXR5T2JzZXJ2ZXI7CiBPQkpDX0NMQVNT
IF9XS1RodW1ibmFpbFZpZXc7CiAKLSNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKSAmJiBfX01B
Q19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMAotI2ltcG9ydCA8V2ViS2l0QWRk
aXRpb25zL1dlYlZpZXdJbXBsQWRkaXRpb25zRGVjbGFyYXRpb25zLmg+Ci0jZW5kaWYKKyNpZiBI
QVZFKFRPVUNIX0JBUikKK09CSkNfQ0xBU1MgQVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNQ
cm92aWRlcjsKK09CSkNfQ0xBU1MgQVZGdW5jdGlvbkJhclNjcnViYmVyOworT0JKQ19DTEFTUyBO
U0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW07CitPQkpDX0NMQVNTIE5TQ3VzdG9tVG91Y2hCYXJJ
dGVtOworT0JKQ19DTEFTUyBOU1RvdWNoQmFyOworT0JKQ19DTEFTUyBOU1RvdWNoQmFySXRlbTsK
K09CSkNfQ0xBU1MgTlNQb3BvdmVyVG91Y2hCYXJJdGVtOworT0JKQ19DTEFTUyBXS1RleHRUb3Vj
aEJhckl0ZW1Db250cm9sbGVyOworT0JKQ19DTEFTUyBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdl
cjsKKyNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikKIAogQHByb3RvY29sIFdlYlZpZXdJbXBsRGVs
ZWdhdGUKIApAQCAtNDgwLDcgKzQ4OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJpZ2h0TW91c2VE
cmFnZ2VkKE5TRXZlbnQgKik7CiAgICAgdm9pZCByaWdodE1vdXNlVXAoTlNFdmVudCAqKTsKIAot
ICAgIHZvaWQgdXBkYXRlV2ViVmlld0ltcGxBZGRpdGlvbnMoKTsKKyAgICB2b2lkIHVwZGF0ZVRv
dWNoQmFyKCk7CiAgICAgdm9pZCBmb3JjZVJlcXVlc3RDYW5kaWRhdGVzRm9yVGVzdGluZygpOwog
ICAgIGJvb2wgc2hvdWxkUmVxdWVzdENhbmRpZGF0ZXMoKSBjb25zdDsKICAgICB2b2lkIHNob3dD
YW5kaWRhdGVzKE5TQXJyYXkgKmNhbmRpZGF0ZXMsIE5TU3RyaW5nICosIE5TUmVjdCByZWN0T2ZU
eXBlZFN0cmluZywgTlNSYW5nZSBzZWxlY3RlZFJhbmdlLCBOU1ZpZXcgKiwgdm9pZCAoXmNvbXBs
ZXRpb25IYW5kbGVyKShOU1RleHRDaGVja2luZ1Jlc3VsdCAqYWNjZXB0ZWRDYW5kaWRhdGUpKTsK
QEAgLTQ5NiwxMiArNTA0LDU0IEBAIHB1YmxpYzoKIAogI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9N
SU5fUkVRVUlSRUQgPj0gMTAxMjAwIAogICAgIHZvaWQgaGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUo
TlNUZXh0Q2hlY2tpbmdSZXN1bHQgKmFjY2VwdGVkQ2FuZGlkYXRlKTsKLSNpZiBVU0UoQVBQTEVf
SU5URVJOQUxfU0RLKQotI2ltcG9ydCA8V2ViS2l0QWRkaXRpb25zL1dlYlZpZXdJbXBsQWRkaXRp
b25zLmg+Ci0jZW5kaWYKICNlbmRpZgogCisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgTlNUb3Vj
aEJhciAqbWFrZVRvdWNoQmFyKCk7CisgICAgTlNUb3VjaEJhciAqY3VycmVudFRvdWNoQmFyKCkg
Y29uc3QgeyByZXR1cm4gbV9jdXJyZW50VG91Y2hCYXIuZ2V0KCk7IH0KKyAgICBOU0NhbmRpZGF0
ZUxpc3RUb3VjaEJhckl0ZW0gKmNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0oKSBjb25zdDsKKyAg
ICBBVkZ1bmN0aW9uQmFyU2NydWJiZXIgKm1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSBjb25z
dDsKKyAgICBOU1RvdWNoQmFyICp0ZXh0VG91Y2hCYXIoKSBjb25zdDsKKyAgICB2b2lkIGRpc21p
c3NUZXh0VG91Y2hCYXJQb3BvdmVySXRlbVdpdGhJZGVudGlmaWVyKE5TU3RyaW5nICopOworCisg
ICAgYm9vbCBjbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSBjb25zdCB7IHJl
dHVybiBtX2NsaWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzsgfQorICAgIHZvaWQg
c2V0Q2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KGJvb2wgY2xpZW50V2FudHNN
ZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KSB7IG1fY2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29u
dHJvbHNWaWV3ID0gY2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OyB9CisKKyAg
ICB2b2lkIHVwZGF0ZVRvdWNoQmFyQW5kUmVmcmVzaFRleHRCYXJJZGVudGlmaWVycygpOworICAg
IHZvaWQgc2V0SXNDdXN0b21pemluZ1RvdWNoQmFyKGJvb2wgaXNDdXN0b21pemluZ1RvdWNoQmFy
KSB7IG1faXNDdXN0b21pemluZ1RvdWNoQmFyID0gaXNDdXN0b21pemluZ1RvdWNoQmFyOyB9Owor
I2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFSKQorCiBwcml2YXRlOgorI2lmIEhBVkUoVE9VQ0hfQkFS
KQorICAgIHZvaWQgc2V0VXBUZXh0VG91Y2hCYXIoTlNUb3VjaEJhciAqKTsKKyAgICB2b2lkIHVw
ZGF0ZVRleHRUb3VjaEJhcigpOworICAgIHZvaWQgdXBkYXRlTWVkaWFUb3VjaEJhcigpOworCisg
ICAgYm9vbCB1c2VNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCkgY29uc3Q7CisgICAgYm9vbCBp
c1JpY2hseUVkaXRhYmxlKCkgY29uc3Q7CisKKyAgICBib29sIG1fY2xpZW50V2FudHNNZWRpYVBs
YXliYWNrQ29udHJvbHNWaWV3IHsgZmFsc2UgfTsKKyAgICBib29sIG1fY2FuQ3JlYXRlVG91Y2hC
YXJzIHsgZmFsc2UgfTsKKyAgICBib29sIG1fc3RhcnRlZExpc3RlbmluZ1RvQ3VzdG9taXphdGlv
bkV2ZW50cyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzVXBkYXRpbmdUZXh0VG91Y2hCYXIgeyBm
YWxzZSB9OworICAgIGJvb2wgbV9pc0N1c3RvbWl6aW5nVG91Y2hCYXIgeyBmYWxzZSB9OworCisg
ICAgUmV0YWluUHRyPE5TVG91Y2hCYXI+IG1fY3VycmVudFRvdWNoQmFyOworICAgIFJldGFpblB0
cjxOU1RvdWNoQmFyPiBtX3JpY2hUZXh0VG91Y2hCYXI7CisgICAgUmV0YWluUHRyPE5TVG91Y2hC
YXI+IG1fcGxhaW5UZXh0VG91Y2hCYXI7CisgICAgUmV0YWluUHRyPFdLVGV4dFRvdWNoQmFySXRl
bUNvbnRyb2xsZXI+IG1fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXI7CisgICAgUmV0YWluUHRy
PE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbT4gbV9yaWNoVGV4dENhbmRpZGF0ZUxpc3RUb3Vj
aEJhckl0ZW07CisgICAgUmV0YWluUHRyPE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbT4gbV9w
bGFpblRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtOworICAgIFJldGFpblB0cjxOU0FycmF5
PiBtX2VtcHR5Q2FuZGlkYXRlc0FycmF5OworICAgIFJldGFpblB0cjxXZWJQbGF5YmFja0NvbnRy
b2xzTWFuYWdlcj4gbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlcjsKKyAgICBSZXRhaW5QdHI8TlND
dXN0b21Ub3VjaEJhckl0ZW0+IG1fZXhpdEZ1bGxTY3JlZW5CdXR0b247CisKKyNpZiBFTkFCTEUo
V0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgUmV0YWluUHRyPEFWRnVuY3Rpb25C
YXJQbGF5YmFja0NvbnRyb2xzUHJvdmlkZXI+IG1fbWVkaWFUb3VjaEJhclByb3ZpZGVyOworICAg
IFJldGFpblB0cjxBVkZ1bmN0aW9uQmFyU2NydWJiZXI+IG1fbWVkaWFQbGF5YmFja0NvbnRyb2xz
VmlldzsKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisj
ZW5kaWYgLy8gSEFWRShUT1VDSF9CQVIpCisKICAgICBXZWFrUHRyPFdlYlZpZXdJbXBsPiBjcmVh
dGVXZWFrUHRyKCkgeyByZXR1cm4gbV93ZWFrUHRyRmFjdG9yeS5jcmVhdGVXZWFrUHRyKCk7IH0K
IAogICAgIGJvb2wgc3VwcG9ydHNBcmJpdHJhcnlMYXlvdXRNb2RlcygpIGNvbnN0OwpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQkocmV2aXNp
b24gMjA4NDA1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBs
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxMSArNjAsMTMgQEAKICNpbXBvcnQgIldlYkV2ZW50
RmFjdG9yeS5oIgogI2ltcG9ydCAiV2ViSW5zcGVjdG9yUHJveHkuaCIKICNpbXBvcnQgIldlYlBh
Z2VQcm94eS5oIgorI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCiAj
aW1wb3J0ICJXZWJQcm9jZXNzUG9vbC5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAj
aW1wb3J0ICJfV0tSZW1vdGVPYmplY3RSZWdpc3RyeUludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tU
aHVtYm5haWxWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgPEhJVG9vbGJveC9DYXJib25FdmVudHND
b3JlLmg+CisjaW1wb3J0IDxXZWJDb3JlL0FWS2l0U1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0FY
T2JqZWN0Q2FjaGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvQWN0aXZpdHlTdGF0ZS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9Db2xvck1hYy5oPgpAQCAtODAsNiArODIsNyBAQAogI2ltcG9ydCA8V2ViQ29y
ZS9OU0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyU1BJLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL05TU3BlbGxDaGVja2VyU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05TVGV4dEZpbmRlclNQ
SS5oPgorI2ltcG9ydCA8V2ViQ29yZS9OU1RvdWNoQmFyU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L05TV2luZG93U1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtRXZlbnRGYWN0b3J5TWFj
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+CkBAIC05MCwxMyArOTMsMTkgQEAK
ICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcuaD4KICNp
bXBvcnQgPFdlYkNvcmUvV2ViQ29yZUZ1bGxTY3JlZW5XaW5kb3cuaD4KICNpbXBvcnQgPFdlYkNv
cmUvV2ViQ29yZU5TU3RyaW5nRXh0cmFzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1dlYlBsYXliYWNr
Q29udHJvbHNNYW5hZ2VyLmg+CiAjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KICNp
bXBvcnQgPHN5cy9zdGF0Lmg+CiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbXBv
cnQgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KIAotI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREsp
Ci0jaW1wb3J0IDxXZWJLaXRBZGRpdGlvbnMvV2ViVmlld0ltcGxJbmNsdWRlcy5oPgotI2VuZGlm
CisjaWYgSEFWRShUT1VDSF9CQVIpICYmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFO
QUdFUikKK1NPRlRfTElOS19GUkFNRVdPUksoQVZLaXQpCitTT0ZUX0xJTktfQ0xBU1MoQVZLaXQs
IEFWRnVuY3Rpb25CYXJQbGF5YmFja0NvbnRyb2xzUHJvdmlkZXIpCitTT0ZUX0xJTktfQ0xBU1Mo
QVZLaXQsIEFWRnVuY3Rpb25CYXJTY3J1YmJlcikKKworTlNTdHJpbmcgKiBjb25zdCBXS01lZGlh
RXhpdEZ1bGxTY3JlZW5JdGVtID0gQCJXS01lZGlhRXhpdEZ1bGxTY3JlZW5JdGVtIjsKKyNlbmRp
ZiAvLyBIQVZFKFRPVUNIX0JBUikgJiYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5B
R0VSKQogCiBTT0ZUX0xJTktfQ09OU1RBTlRfTUFZX0ZBSUwoTG9va3VwLCBMVU5vdGlmaWNhdGlv
blBvcG92ZXJXaWxsQ2xvc2UsIE5TU3RyaW5nICopCiAKQEAgLTQzMywxMiArNDQyLDY5NiBAQCAt
IChCT09MKXRyeVRvUGVyZm9ybTooU0VMKWFjdGlvbiB3aXRoOihpCiAKIEBlbmQKIAotI2lmIF9f
TUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwICYmIFVTRShBUFBMRV9JTlRF
Uk5BTF9TREspCi0jaW1wb3J0IDxXZWJLaXRBZGRpdGlvbnMvV2ViVmlld0ltcGxBZGRpdGlvbnMu
bW0+Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCisjaWYgSEFWRShUT1VDSF9CQVIpCisKK0Bp
bnRlcmZhY2UgV0tUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgOiBOU1ZpZXdDb250cm9s
bGVyIHsKKyAgICBMaXN0VHlwZSBfY3VycmVudExpc3RUeXBlOworCitAcHJpdmF0ZQorICAgIFdl
YlZpZXdJbXBsKiBfd2ViVmlld0ltcGw7Cit9CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBMaXN0
VHlwZSBjdXJyZW50TGlzdFR5cGU7CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZpZXdJ
bXBsOihXZWJWaWV3SW1wbCopd2ViVmlld0ltcGw7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9u
IFdLVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyCisKK0BzeW50aGVzaXplIGN1cnJlbnRM
aXN0VHlwZT1fY3VycmVudExpc3RUeXBlOworCitzdGF0aWMgY29uc3QgZG91YmxlIGxpc3RDb250
cm9sU2VnbWVudFdpZHRoID0gNjc7CitzdGF0aWMgY29uc3QgZG91YmxlIGV4aXRGdWxsU2NyZWVu
QnV0dG9uV2lkdGggPSA2NDsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIG5vTGlzdFNlZ21lbnQg
PSAwOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHVub3JkZXJlZExpc3RTZWdtZW50ID0gMTsKK3N0
YXRpYyBjb25zdCB1bnNpZ25lZCBvcmRlcmVkTGlzdFNlZ21lbnQgPSAyOworCistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhXZWJWaWV3SW1wbDooV2ViVmlld0ltcGwqKXdlYlZpZXdJbXBsCit7Cisg
ICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAg
ICBfd2ViVmlld0ltcGwgPSB3ZWJWaWV3SW1wbDsKKworICAgIE5TU2VnbWVudGVkQ29udHJvbCAq
aW5zZXJ0TGlzdENvbnRyb2wgPSBbTlNTZWdtZW50ZWRDb250cm9sIHNlZ21lbnRlZENvbnRyb2xX
aXRoTGFiZWxzOkBbIFdlYkNvcmU6Omluc2VydExpc3RUeXBlTm9uZSgpLCBXZWJDb3JlOjppbnNl
cnRMaXN0VHlwZUJ1bGxldGVkKCksIFdlYkNvcmU6Omluc2VydExpc3RUeXBlTnVtYmVyZWQoKSBd
IHRyYWNraW5nTW9kZTpOU1NlZ21lbnRTd2l0Y2hUcmFja2luZ1NlbGVjdE9uZSB0YXJnZXQ6c2Vs
ZiBhY3Rpb246QHNlbGVjdG9yKF9zZWxlY3RMaXN0OildOworICAgIFtpbnNlcnRMaXN0Q29udHJv
bCBzZXRXaWR0aDpsaXN0Q29udHJvbFNlZ21lbnRXaWR0aCBmb3JTZWdtZW50Om5vTGlzdFNlZ21l
bnRdOworICAgIFtpbnNlcnRMaXN0Q29udHJvbCBzZXRXaWR0aDpsaXN0Q29udHJvbFNlZ21lbnRX
aWR0aCBmb3JTZWdtZW50OnVub3JkZXJlZExpc3RTZWdtZW50XTsKKyAgICBbaW5zZXJ0TGlzdENv
bnRyb2wgc2V0V2lkdGg6bGlzdENvbnRyb2xTZWdtZW50V2lkdGggZm9yU2VnbWVudDpvcmRlcmVk
TGlzdFNlZ21lbnRdOworICAgIGluc2VydExpc3RDb250cm9sLmZvbnQgPSBbTlNGb250IHN5c3Rl
bUZvbnRPZlNpemU6MTVdOworCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisg
ICAgaWQgc2VnbWVudEVsZW1lbnQgPSBOU0FjY2Vzc2liaWxpdHlVbmlnbm9yZWREZXNjZW5kYW50
KGluc2VydExpc3RDb250cm9sKTsKKyAgICBOU0FycmF5ICpzZWdtZW50cyA9IFtzZWdtZW50RWxl
bWVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5B
dHRyaWJ1dGVdOworICAgIEFTU0VSVChzZWdtZW50cy5jb3VudCA9PSAzKTsKKyAgICBbW3NlZ21l
bnRzIG9iamVjdEF0SW5kZXg6bm9MaXN0U2VnbWVudF0gYWNjZXNzaWJpbGl0eVNldE92ZXJyaWRl
VmFsdWU6V2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVOb25lKCkgZm9yQXR0cmlidXRlOk5TQWNjZXNz
aWJpbGl0eURlc2NyaXB0aW9uQXR0cmlidXRlXTsKKyAgICBbW3NlZ21lbnRzIG9iamVjdEF0SW5k
ZXg6dW5vcmRlcmVkTGlzdFNlZ21lbnRdIGFjY2Vzc2liaWxpdHlTZXRPdmVycmlkZVZhbHVlOldl
YkNvcmU6Omluc2VydExpc3RUeXBlQnVsbGV0ZWRBY2Nlc3NpYmlsaXR5VGl0bGUoKSBmb3JBdHRy
aWJ1dGU6TlNBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25BdHRyaWJ1dGVdOworICAgIFtbc2VnbWVu
dHMgb2JqZWN0QXRJbmRleDpvcmRlcmVkTGlzdFNlZ21lbnRdIGFjY2Vzc2liaWxpdHlTZXRPdmVy
cmlkZVZhbHVlOldlYkNvcmU6Omluc2VydExpc3RUeXBlTnVtYmVyZWRBY2Nlc3NpYmlsaXR5VGl0
bGUoKSBmb3JBdHRyaWJ1dGU6TlNBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25BdHRyaWJ1dGVdOwor
I3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorCisgICAgc2VsZi52aWV3ID0gaW5zZXJ0TGlz
dENvbnRyb2w7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkaWREZXN0cm95Vmll
dworeworICAgIF93ZWJWaWV3SW1wbCA9IG51bGxwdHI7Cit9CisKKy0gKHZvaWQpX3NlbGVjdExp
c3Q6KGlkKXNlbmRlcgoreworICAgIGlmICghX3dlYlZpZXdJbXBsKQorICAgICAgICByZXR1cm47
CisKKyAgICBOU1NlZ21lbnRlZENvbnRyb2wgKmluc2VydExpc3RDb250cm9sID0gKE5TU2VnbWVu
dGVkQ29udHJvbCAqKXNlbGYudmlldzsKKyAgICBpZiAoaW5zZXJ0TGlzdENvbnRyb2wuc2VsZWN0
ZWRTZWdtZW50ID09IG5vTGlzdFNlZ21lbnQpIHsKKyAgICAgICAgLy8gVGhlcmUgaXMgbm8gInJl
bW92ZSBsaXN0IiBlZGl0IGNvbW1hbmQsIGJ1dCBJbnNlcnRPcmRlcmVkTGlzdCBhbmQgSW5zZXJ0
VW5vcmRlcmVkTGlzdCBib3RoCisgICAgICAgIC8vIGJlaGF2ZSBhcyB0b2dnbGVzLCBzbyB3ZSBj
YW4gaW52b2tlIHRoZSBhcHByb3ByaWF0ZSBlZGl0IGNvbW1hbmQgZGVwZW5kaW5nIG9uIG91ciBf
Y3VycmVudExpc3RUeXBlCisgICAgICAgIC8vIHRvIHJlbW92ZSBhbiBleGlzdGluZyBsaXN0LiBX
ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIGlmIF9jdXJyZW50TGlzdFR5cGUgaXMgTm9MaXN0
LgorICAgICAgICBpZiAoX2N1cnJlbnRMaXN0VHlwZSA9PSBPcmRlcmVkTGlzdCkKKyAgICAgICAg
ICAgIF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZChAIkluc2VydE9yZGVy
ZWRMaXN0IiwgQCIiKTsKKyAgICAgICAgZWxzZSBpZiAoX2N1cnJlbnRMaXN0VHlwZSA9PSBVbm9y
ZGVyZWRMaXN0KQorICAgICAgICAgICAgX3dlYlZpZXdJbXBsLT5wYWdlKCkuZXhlY3V0ZUVkaXRD
b21tYW5kKEAiSW5zZXJ0VW5vcmRlcmVkTGlzdCIsIEAiIik7CisgICAgfSBlbHNlIGlmIChpbnNl
cnRMaXN0Q29udHJvbC5zZWxlY3RlZFNlZ21lbnQgPT0gdW5vcmRlcmVkTGlzdFNlZ21lbnQpCisg
ICAgICAgIF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZChAIkluc2VydFVu
b3JkZXJlZExpc3QiLCBAIiIpOworICAgIGVsc2UgaWYgKGluc2VydExpc3RDb250cm9sLnNlbGVj
dGVkU2VnbWVudCA9PSBvcmRlcmVkTGlzdFNlZ21lbnQpCisgICAgICAgIF93ZWJWaWV3SW1wbC0+
cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZChAIkluc2VydE9yZGVyZWRMaXN0IiwgQCIiKTsKKwor
ICAgIF93ZWJWaWV3SW1wbC0+ZGlzbWlzc1RleHRUb3VjaEJhclBvcG92ZXJJdGVtV2l0aElkZW50
aWZpZXIoTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dExpc3QpOworfQorCistICh2b2lkKXNl
dEN1cnJlbnRMaXN0VHlwZTooTGlzdFR5cGUpbGlzdFR5cGUKK3sKKyAgICBOU1NlZ21lbnRlZENv
bnRyb2wgKmluc2VydExpc3RDb250cm9sID0gKE5TU2VnbWVudGVkQ29udHJvbCAqKXNlbGYudmll
dzsKKyAgICBzd2l0Y2ggKGxpc3RUeXBlKSB7CisgICAgY2FzZSBOb0xpc3Q6CisgICAgICAgIFtp
bnNlcnRMaXN0Q29udHJvbCBzZXRTZWxlY3RlZDpZRVMgZm9yU2VnbWVudDpub0xpc3RTZWdtZW50
XTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBPcmRlcmVkTGlzdDoKKyAgICAgICAgW2luc2Vy
dExpc3RDb250cm9sIHNldFNlbGVjdGVkOllFUyBmb3JTZWdtZW50Om9yZGVyZWRMaXN0U2VnbWVu
dF07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVW5vcmRlcmVkTGlzdDoKKyAgICAgICAgW2lu
c2VydExpc3RDb250cm9sIHNldFNlbGVjdGVkOllFUyBmb3JTZWdtZW50OnVub3JkZXJlZExpc3RT
ZWdtZW50XTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgX2N1cnJlbnRMaXN0VHlwZSA9
IGxpc3RUeXBlOworfQorCitAZW5kCisKK0BpbnRlcmZhY2UgV0tUZXh0VG91Y2hCYXJJdGVtQ29u
dHJvbGxlciA6IE5TVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgPE5TQ2FuZGlkYXRlTGlzdFRv
dWNoQmFySXRlbURlbGVnYXRlLCBOU1RvdWNoQmFyRGVsZWdhdGU+IHsKKyAgICBCT09MIF90ZXh0
SXNCb2xkOworICAgIEJPT0wgX3RleHRJc0l0YWxpYzsKKyAgICBCT09MIF90ZXh0SXNVbmRlcmxp
bmVkOworICAgIE5TVGV4dEFsaWdubWVudCBfY3VycmVudFRleHRBbGlnbm1lbnQ7CisgICAgUmV0
YWluUHRyPE5TQ29sb3I+IF90ZXh0Q29sb3I7CisgICAgUmV0YWluUHRyPFdLVGV4dExpc3RUb3Vj
aEJhclZpZXdDb250cm9sbGVyPiBfd2tUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXI7CisK
K0Bwcml2YXRlCisgICAgV2ViVmlld0ltcGwqIF93ZWJWaWV3SW1wbDsKK30KKworQHByb3BlcnR5
IChub25hdG9taWMpIEJPT0wgdGV4dElzQm9sZDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09M
IHRleHRJc0l0YWxpYzsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIHRleHRJc1VuZGVybGlu
ZWQ7CitAcHJvcGVydHkgKG5vbmF0b21pYykgTlNUZXh0QWxpZ25tZW50IGN1cnJlbnRUZXh0QWxp
Z25tZW50OworQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgcmVhZHdyaXRlKSBOU0NvbG9y
ICp0ZXh0Q29sb3I7CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZpZXdJbXBsOihXZWJW
aWV3SW1wbCopd2ViVmlld0ltcGw7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1RleHRUb3Vj
aEJhckl0ZW1Db250cm9sbGVyCisKK0BzeW50aGVzaXplIHRleHRJc0JvbGQ9X3RleHRJc0JvbGQ7
CitAc3ludGhlc2l6ZSB0ZXh0SXNJdGFsaWM9X3RleHRJc0l0YWxpYzsKK0BzeW50aGVzaXplIHRl
eHRJc1VuZGVybGluZWQ9X3RleHRJc1VuZGVybGluZWQ7CitAc3ludGhlc2l6ZSBjdXJyZW50VGV4
dEFsaWdubWVudD1fY3VycmVudFRleHRBbGlnbm1lbnQ7CisKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFdlYlZpZXdJbXBsOihXZWJWaWV3SW1wbCopd2ViVmlld0ltcGwKK3sKKyAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF93ZWJWaWV3
SW1wbCA9IHdlYlZpZXdJbXBsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGlk
RGVzdHJveVZpZXcKK3sKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJd
IHJlbW92ZU9ic2VydmVyOnNlbGZdOworICAgIF93ZWJWaWV3SW1wbCA9IG51bGxwdHI7CisgICAg
W193a1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciBkaWREZXN0cm95Vmlld107Cit9CisK
KyNwcmFnbWEgbWFyayBOU1RvdWNoQmFyRGVsZWdhdGUKKworLSAoTlNUb3VjaEJhckl0ZW0gKil0
b3VjaEJhcjooTlNUb3VjaEJhciAqKXRvdWNoQmFyIG1ha2VJdGVtRm9ySWRlbnRpZmllcjooTlNT
dHJpbmcgKilpZGVudGlmaWVyCit7CisgICAgcmV0dXJuIFtzZWxmIGl0ZW1Gb3JJZGVudGlmaWVy
OmlkZW50aWZpZXJdOworfQorCistIChudWxsYWJsZSBOU1RvdWNoQmFySXRlbSAqKWl0ZW1Gb3JJ
ZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIKK3sKKyAgICBOU1RvdWNoQmFySXRlbSAq
aXRlbSA9IFtzdXBlciBpdGVtRm9ySWRlbnRpZmllcjppZGVudGlmaWVyXTsKKyAgICBCT09MIGlz
VGV4dEZvcm1hdEl0ZW0gPSBbaWRlbnRpZmllciBpc0VxdWFsVG9TdHJpbmc6TlNUb3VjaEJhckl0
ZW1JZGVudGlmaWVyVGV4dEZvcm1hdF07CisKKyAgICBpZiAoaXNUZXh0Rm9ybWF0SXRlbSB8fCBb
aWRlbnRpZmllciBpc0VxdWFsVG9TdHJpbmc6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dFN0
eWxlXSkKKyAgICAgICAgc2VsZi50ZXh0U3R5bGUuYWN0aW9uID0gQHNlbGVjdG9yKF93a0NoYW5n
ZVRleHRTdHlsZTopOworCisgICAgaWYgKGlzVGV4dEZvcm1hdEl0ZW0gfHwgW2lkZW50aWZpZXIg
aXNFcXVhbFRvU3RyaW5nOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRBbGlnbm1lbnRdKQor
ICAgICAgICBzZWxmLnRleHRBbGlnbm1lbnRzLmFjdGlvbiA9IEBzZWxlY3Rvcihfd2tDaGFuZ2VU
ZXh0QWxpZ25tZW50Oik7CisKKyAgICBOU0NvbG9yUGlja2VyVG91Y2hCYXJJdGVtICpjb2xvclBp
Y2tlckl0ZW0gPSBuaWw7CisgICAgaWYgKFtpZGVudGlmaWVyIGlzRXF1YWxUb1N0cmluZzpOU1Rv
dWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Q29sb3JQaWNrZXJdICYmIFtpdGVtIGlzS2luZE9mQ2xh
c3M6W05TQ29sb3JQaWNrZXJUb3VjaEJhckl0ZW0gY2xhc3NdXSkKKyAgICAgICAgY29sb3JQaWNr
ZXJJdGVtID0gKE5TQ29sb3JQaWNrZXJUb3VjaEJhckl0ZW0gKilpdGVtOworICAgIGlmIChpc1Rl
eHRGb3JtYXRJdGVtKQorICAgICAgICBjb2xvclBpY2tlckl0ZW0gPSBzZWxmLmNvbG9yUGlja2Vy
SXRlbTsKKyAgICBpZiAoY29sb3JQaWNrZXJJdGVtKSB7CisgICAgICAgIGNvbG9yUGlja2VySXRl
bS50YXJnZXQgPSBzZWxmOworICAgICAgICBjb2xvclBpY2tlckl0ZW0uYWN0aW9uID0gQHNlbGVj
dG9yKF93a0NoYW5nZUNvbG9yOik7CisgICAgICAgIGNvbG9yUGlja2VySXRlbS5zaG93c0FscGhh
ID0gTk87CisgICAgfQorCisgICAgcmV0dXJuIGl0ZW07Cit9CisKKyNwcmFnbWEgbWFyayBOU0Nh
bmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW1EZWxlZ2F0ZQorCistICh2b2lkKWNhbmRpZGF0ZUxpc3RU
b3VjaEJhckl0ZW06KE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSAqKWFuSXRlbSBlbmRTZWxl
Y3RpbmdDYW5kaWRhdGVBdEluZGV4OihOU0ludGVnZXIpaW5kZXgKK3sKKyAgICBpZiAoaW5kZXgg
PT0gTlNOb3RGb3VuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFfd2ViVmlld0ltcGwp
CisgICAgICAgIHJldHVybjsKKworICAgIE5TQXJyYXkgKmNhbmRpZGF0ZXMgPSBhbkl0ZW0uY2Fu
ZGlkYXRlczsKKyAgICBpZiAoKE5TVUludGVnZXIpaW5kZXggPj0gY2FuZGlkYXRlcy5jb3VudCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWQgY2FuZGlkYXRlID0gY2FuZGlkYXRlc1tpbmRleF07
CisgICAgQVNTRVJUKFtjYW5kaWRhdGUgaXNLaW5kT2ZDbGFzczpbTlNUZXh0Q2hlY2tpbmdSZXN1
bHQgY2xhc3NdXSk7CisKKyAgICBfd2ViVmlld0ltcGwtPmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRl
KChOU1RleHRDaGVja2luZ1Jlc3VsdCAqKWNhbmRpZGF0ZSk7Cit9CisKKy0gKHZvaWQpY2FuZGlk
YXRlTGlzdFRvdWNoQmFySXRlbTooTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtICopYW5JdGVt
IGNoYW5nZWRDYW5kaWRhdGVMaXN0VmlzaWJpbGl0eTooQk9PTClpc1Zpc2libGUKK3sKKyAgICBp
ZiAoIV93ZWJWaWV3SW1wbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGlzVmlzaWJsZSkK
KyAgICAgICAgX3dlYlZpZXdJbXBsLT5yZXF1ZXN0Q2FuZGlkYXRlc0ZvclNlbGVjdGlvbklmTmVl
ZGVkKCk7CisKKyAgICBfd2ViVmlld0ltcGwtPnVwZGF0ZVRvdWNoQmFyKCk7Cit9CisKKyNwcmFn
bWEgbWFyayBOU05vdGlmaWNhdGlvbkNlbnRlciBvYnNlcnZlcnMKKworLSAodm9pZCl0b3VjaEJh
ckRpZEV4aXRDdXN0b21pemF0aW9uOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgorewor
ICAgIGlmICghX3dlYlZpZXdJbXBsKQorICAgICAgICByZXR1cm47CisKKyAgICBfd2ViVmlld0lt
cGwtPnNldElzQ3VzdG9taXppbmdUb3VjaEJhcihmYWxzZSk7CisgICAgX3dlYlZpZXdJbXBsLT51
cGRhdGVUb3VjaEJhcigpOworfQorCistICh2b2lkKXRvdWNoQmFyV2lsbEVudGVyQ3VzdG9taXph
dGlvbjooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBpZiAoIV93ZWJWaWV3
SW1wbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgX3dlYlZpZXdJbXBsLT5zZXRJc0N1c3RvbWl6
aW5nVG91Y2hCYXIodHJ1ZSk7Cit9CisKKy0gKHZvaWQpZGlkQ2hhbmdlQXV0b21hdGljVGV4dENv
bXBsZXRpb246KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgaWYgKCFfd2Vi
Vmlld0ltcGwpCisgICAgICAgIHJldHVybjsKKworICAgIF93ZWJWaWV3SW1wbC0+dXBkYXRlVG91
Y2hCYXJBbmRSZWZyZXNoVGV4dEJhcklkZW50aWZpZXJzKCk7Cit9CisKKworI3ByYWdtYSBtYXJr
IE5TVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIKKworLSAoV0tUZXh0TGlzdFRvdWNoQmFyVmll
d0NvbnRyb2xsZXIgKil0ZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIKK3sKKyAgICByZXR1
cm4gKFdLVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyICopW3NlbGYgdGV4dExpc3RWaWV3
Q29udHJvbGxlcl07Cit9CisKKy0gKHZvaWQpc2V0VGV4dElzQm9sZDooQk9PTClib2xkCit7Cisg
ICAgX3RleHRJc0JvbGQgPSBib2xkOworICAgIGlmIChbc2VsZi50ZXh0U3R5bGUgaXNTZWxlY3Rl
ZEZvclNlZ21lbnQ6MF0gIT0gX3RleHRJc0JvbGQpCisgICAgICAgIFtzZWxmLnRleHRTdHlsZSBz
ZXRTZWxlY3RlZDpfdGV4dElzQm9sZCBmb3JTZWdtZW50OjBdOworfQorCistICh2b2lkKXNldFRl
eHRJc0l0YWxpYzooQk9PTClpdGFsaWMKK3sKKyAgICBfdGV4dElzSXRhbGljID0gaXRhbGljOwor
ICAgIGlmIChbc2VsZi50ZXh0U3R5bGUgaXNTZWxlY3RlZEZvclNlZ21lbnQ6MV0gIT0gX3RleHRJ
c0l0YWxpYykKKyAgICAgICAgW3NlbGYudGV4dFN0eWxlIHNldFNlbGVjdGVkOl90ZXh0SXNJdGFs
aWMgZm9yU2VnbWVudDoxXTsKK30KKworLSAodm9pZClzZXRUZXh0SXNVbmRlcmxpbmVkOihCT09M
KXVuZGVybGluZWQKK3sKKyAgICBfdGV4dElzVW5kZXJsaW5lZCA9IHVuZGVybGluZWQ7CisgICAg
aWYgKFtzZWxmLnRleHRTdHlsZSBpc1NlbGVjdGVkRm9yU2VnbWVudDoyXSAhPSBfdGV4dElzVW5k
ZXJsaW5lZCkKKyAgICAgICAgW3NlbGYudGV4dFN0eWxlIHNldFNlbGVjdGVkOl90ZXh0SXNVbmRl
cmxpbmVkIGZvclNlZ21lbnQ6Ml07Cit9CisKKy0gKHZvaWQpX3drQ2hhbmdlVGV4dFN0eWxlOihp
ZClzZW5kZXIKK3sKKyAgICBpZiAoIV93ZWJWaWV3SW1wbCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKFtzZWxmLnRleHRTdHlsZSBpc1NlbGVjdGVkRm9yU2VnbWVudDowXSAhPSBfdGV4dElz
Qm9sZCkgeworICAgICAgICBfdGV4dElzQm9sZCA9ICFfdGV4dElzQm9sZDsKKyAgICAgICAgX3dl
YlZpZXdJbXBsLT5wYWdlKCkuZXhlY3V0ZUVkaXRDb21tYW5kKEAiVG9nZ2xlQm9sZCIsIEAiIik7
CisgICAgfQorCisgICAgaWYgKFtzZWxmLnRleHRTdHlsZSBpc1NlbGVjdGVkRm9yU2VnbWVudDox
XSAhPSBfdGV4dElzSXRhbGljKSB7CisgICAgICAgIF90ZXh0SXNJdGFsaWMgPSAhX3RleHRJc0l0
YWxpYzsKKyAgICAgICAgX3dlYlZpZXdJbXBsLT5wYWdlKCkuZXhlY3V0ZUVkaXRDb21tYW5kKCJU
b2dnbGVJdGFsaWMiLCBAIiIpOworICAgIH0KKworICAgIGlmIChbc2VsZi50ZXh0U3R5bGUgaXNT
ZWxlY3RlZEZvclNlZ21lbnQ6Ml0gIT0gX3RleHRJc1VuZGVybGluZWQpIHsKKyAgICAgICAgX3Rl
eHRJc1VuZGVybGluZWQgPSAhX3RleHRJc1VuZGVybGluZWQ7CisgICAgICAgIF93ZWJWaWV3SW1w
bC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZCgiVG9nZ2xlVW5kZXJsaW5lIiwgQCIiKTsKKyAg
ICB9Cit9CisKKy0gKHZvaWQpc2V0Q3VycmVudFRleHRBbGlnbm1lbnQ6KE5TVGV4dEFsaWdubWVu
dClhbGlnbm1lbnQKK3sKKyAgICBfY3VycmVudFRleHRBbGlnbm1lbnQgPSBhbGlnbm1lbnQ7Cisg
ICAgW3NlbGYudGV4dEFsaWdubWVudHMgc2VsZWN0U2VnbWVudFdpdGhUYWc6X2N1cnJlbnRUZXh0
QWxpZ25tZW50XTsKK30KKworLSAodm9pZClfd2tDaGFuZ2VUZXh0QWxpZ25tZW50OihpZClzZW5k
ZXIKK3sKKyAgICBpZiAoIV93ZWJWaWV3SW1wbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNU
ZXh0QWxpZ25tZW50IGFsaWdubWVudCA9IChOU1RleHRBbGlnbm1lbnQpW3NlbGYudGV4dEFsaWdu
bWVudHMuY2VsbCB0YWdGb3JTZWdtZW50OltzZWxmLnRleHRBbGlnbm1lbnRzIHNlbGVjdGVkU2Vn
bWVudF1dOworICAgIHN3aXRjaCAoYWxpZ25tZW50KSB7CisgICAgY2FzZSBOU1RleHRBbGlnbm1l
bnRMZWZ0OiB7CisgICAgICAgIF9jdXJyZW50VGV4dEFsaWdubWVudCA9IE5TVGV4dEFsaWdubWVu
dExlZnQ7CisgICAgICAgIF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZCgi
QWxpZ25MZWZ0IiwgQCIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgTlNUZXh0
QWxpZ25tZW50UmlnaHQ6IHsKKyAgICAgICAgX2N1cnJlbnRUZXh0QWxpZ25tZW50ID0gTlNUZXh0
QWxpZ25tZW50UmlnaHQ7CisgICAgICAgIF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0
Q29tbWFuZCgiQWxpZ25SaWdodCIsIEAiIik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIE5TVGV4dEFsaWdubWVudENlbnRlcjogeworICAgICAgICBfY3VycmVudFRleHRBbGlnbm1l
bnQgPSBOU1RleHRBbGlnbm1lbnRDZW50ZXI7CisgICAgICAgIF93ZWJWaWV3SW1wbC0+cGFnZSgp
LmV4ZWN1dGVFZGl0Q29tbWFuZCgiQWxpZ25DZW50ZXIiLCBAIiIpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBOU1RleHRBbGlnbm1lbnRKdXN0aWZpZWQ6IHsKKyAgICAgICAgX2N1
cnJlbnRUZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25tZW50SnVzdGlmaWVkOworICAgICAgICBf
d2ViVmlld0ltcGwtPnBhZ2UoKS5leGVjdXRlRWRpdENvbW1hbmQoIkFsaWduSnVzdGlmaWVkIiwg
QCIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIF93ZWJWaWV3SW1wbC0+ZGlzbWlzc1RleHRUb3VjaEJhclBvcG92ZXJJ
dGVtV2l0aElkZW50aWZpZXIoTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEFsaWdubWVudCk7
Cit9CisKKy0gKE5TQ29sb3IgKil0ZXh0Q29sb3IKK3sKKyAgICByZXR1cm4gX3RleHRDb2xvci5n
ZXQoKTsKK30KKworLSAodm9pZClzZXRUZXh0Q29sb3I6KE5TQ29sb3IgKiljb2xvcgoreworICAg
IF90ZXh0Q29sb3IgPSBjb2xvcjsKKyAgICBzZWxmLmNvbG9yUGlja2VySXRlbS5jb2xvciA9IF90
ZXh0Q29sb3IuZ2V0KCk7Cit9CisKKy0gKHZvaWQpX3drQ2hhbmdlQ29sb3I6KGlkKXNlbmRlcgor
eworICAgIGlmICghX3dlYlZpZXdJbXBsKQorICAgICAgICByZXR1cm47CisKKyAgICBfdGV4dENv
bG9yID0gc2VsZi5jb2xvclBpY2tlckl0ZW0uY29sb3I7CisgICAgX3dlYlZpZXdJbXBsLT5wYWdl
KCkuZXhlY3V0ZUVkaXRDb21tYW5kKCJGb3JlQ29sb3IiLCBXZWJDb3JlOjpjb2xvckZyb21OU0Nv
bG9yKF90ZXh0Q29sb3IuZ2V0KCkpLnNlcmlhbGl6ZWQoKSk7Cit9CisKKy0gKE5TVmlld0NvbnRy
b2xsZXIgKil0ZXh0TGlzdFZpZXdDb250cm9sbGVyCit7CisgICAgaWYgKCFfd2tUZXh0TGlzdFRv
dWNoQmFyVmlld0NvbnRyb2xsZXIpCisgICAgICAgIF93a1RleHRMaXN0VG91Y2hCYXJWaWV3Q29u
dHJvbGxlciA9IGFkb3B0TlMoW1tXS1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciBhbGxv
Y10gaW5pdFdpdGhXZWJWaWV3SW1wbDpfd2ViVmlld0ltcGxdKTsKKyAgICByZXR1cm4gX3drVGV4
dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyLmdldCgpOworfQorCitAZW5kCisKK25hbWVzcGFj
ZSBXZWJLaXQgeworTlNUb3VjaEJhciAqV2ViVmlld0ltcGw6Om1ha2VUb3VjaEJhcigpCit7Cisg
ICAgaWYgKCFtX2NhbkNyZWF0ZVRvdWNoQmFycykgeworICAgICAgICBtX2NhbkNyZWF0ZVRvdWNo
QmFycyA9IHRydWU7CisgICAgICAgIHVwZGF0ZVRvdWNoQmFyKCk7CisgICAgfQorICAgIHJldHVy
biBtX2N1cnJlbnRUb3VjaEJhci5nZXQoKTsKK30KKworTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJ
dGVtICpXZWJWaWV3SW1wbDo6Y2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGlzUmljaGx5RWRpdGFibGUoKSA/IG1fcmljaFRleHRDYW5kaWRhdGVMaXN0VG91
Y2hCYXJJdGVtLmdldCgpIDogbV9wbGFpblRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtLmdl
dCgpOworfQorCitBVkZ1bmN0aW9uQmFyU2NydWJiZXIgKldlYlZpZXdJbXBsOjptZWRpYVBsYXli
YWNrQ29udHJvbHNWaWV3KCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRS
T0xTX01BTkFHRVIpCisgICAgaWYgKG1fcGFnZS0+aGFzQWN0aXZlVmlkZW9Gb3JDb250cm9sc01h
bmFnZXIoKSkKKyAgICAgICAgcmV0dXJuIG1fbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldy5nZXQo
KTsKKyNlbmRpZgorICAgIHJldHVybiBuaWw7Cit9CisKK2Jvb2wgV2ViVmlld0ltcGw6OnVzZU1l
ZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSBjb25zdAoreworI2lmIEVOQUJMRShGVUxMU0NSRUVO
X0FQSSkKKyAgICBpZiAoaGFzRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIoKSkKKyAgICAgICAg
cmV0dXJuICFbbV9mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBpc0Z1bGxTY3JlZW5dOworI2Vu
ZGlmCisgICAgcmV0dXJuIG1fY2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Owor
fQorCit2b2lkIFdlYlZpZXdJbXBsOjpkaXNtaXNzVGV4dFRvdWNoQmFyUG9wb3Zlckl0ZW1XaXRo
SWRlbnRpZmllcihOU1N0cmluZyAqaWRlbnRpZmllcikKK3sKKyAgICBOU1RvdWNoQmFySXRlbSAq
Zm91bmRJdGVtID0gbmlsOworICAgIGZvciAoTlNUb3VjaEJhckl0ZW0gKml0ZW0gaW4gdGV4dFRv
dWNoQmFyKCkuaXRlbXMpIHsKKyAgICAgICAgaWYgKFtpdGVtLmlkZW50aWZpZXIgaXNFcXVhbFRv
U3RyaW5nOmlkZW50aWZpZXJdKSB7CisgICAgICAgICAgICBmb3VuZEl0ZW0gPSBpdGVtOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoW1tpdGVtIGlkZW50aWZp
ZXJdIGlzRXF1YWxUb1N0cmluZzpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Rm9ybWF0XSkg
eworICAgICAgICAgICAgZm9yIChOU1RvdWNoQmFySXRlbSAqY2hpbGRJdGVtIGluIFsoTlNHcm91
cFRvdWNoQmFySXRlbSAqKWl0ZW0gZ3JvdXBUb3VjaEJhcl0uaXRlbXMpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoW2NoaWxkSXRlbS5pZGVudGlmaWVyIGlzRXF1YWxUb1N0cmluZzppZGVudGlmaWVy
XSkgeworICAgICAgICAgICAgICAgICAgICBmb3VuZEl0ZW0gPSBjaGlsZEl0ZW07CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKFtmb3VuZEl0ZW0g
aXNLaW5kT2ZDbGFzczpbTlNQb3BvdmVyVG91Y2hCYXJJdGVtIGNsYXNzXV0pCisgICAgICAgIFso
TlNQb3BvdmVyVG91Y2hCYXJJdGVtICopZm91bmRJdGVtIGRpc21pc3NQb3BvdmVyOm5pbF07Cit9
CisKK3N0YXRpYyBOU0FycmF5PE5TU3RyaW5nICo+ICp0ZXh0VG91Y2hCYXJDdXN0b21pemF0aW9u
QWxsb3dlZElkZW50aWZpZXJzKCkKK3sKKyAgICByZXR1cm4gQFsgTlNUb3VjaEJhckl0ZW1JZGVu
dGlmaWVyQ2hhcmFjdGVyUGlja2VyLCBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Q29sb3JQ
aWNrZXIsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRTdHlsZSwgTlNUb3VjaEJhckl0ZW1J
ZGVudGlmaWVyVGV4dEFsaWdubWVudCwgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dExpc3Qs
IE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckZsZXhpYmxlU3BhY2UgXTsKK30KKworc3RhdGljIE5T
QXJyYXk8TlNTdHJpbmcgKj4gKnBsYWluVGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkRlZmF1bHRJ
dGVtSWRlbnRpZmllcnMoKQoreworICAgIHJldHVybiBAWyBOU1RvdWNoQmFySXRlbUlkZW50aWZp
ZXJDaGFyYWN0ZXJQaWNrZXIsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckNhbmRpZGF0ZUxpc3Qg
XTsKK30KKworc3RhdGljIE5TQXJyYXk8TlNTdHJpbmcgKj4gKnJpY2hUZXh0VG91Y2hCYXJDdXN0
b21pemF0aW9uRGVmYXVsdEl0ZW1JZGVudGlmaWVycygpCit7CisgICAgcmV0dXJuIEBbIE5TVG91
Y2hCYXJJdGVtSWRlbnRpZmllckNoYXJhY3RlclBpY2tlciwgTlNUb3VjaEJhckl0ZW1JZGVudGlm
aWVyVGV4dEZvcm1hdCwgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyQ2FuZGlkYXRlTGlzdCBdOwor
fQorCit2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVUb3VjaEJhckFuZFJlZnJlc2hUZXh0QmFySWRl
bnRpZmllcnMoKQoreworICAgIGlmIChtX3JpY2hUZXh0VG91Y2hCYXIpCisgICAgICAgIHNldFVw
VGV4dFRvdWNoQmFyKG1fcmljaFRleHRUb3VjaEJhci5nZXQoKSk7CisKKyAgICBpZiAobV9wbGFp
blRleHRUb3VjaEJhcikKKyAgICAgICAgc2V0VXBUZXh0VG91Y2hCYXIobV9wbGFpblRleHRUb3Vj
aEJhci5nZXQoKSk7CisKKyAgICB1cGRhdGVUb3VjaEJhcigpOworfQorCit2b2lkIFdlYlZpZXdJ
bXBsOjpzZXRVcFRleHRUb3VjaEJhcihOU1RvdWNoQmFyICp0b3VjaEJhcikKK3sKKyAgICBib29s
IGlzUmljaFRleHRUb3VjaEJhciA9IHRvdWNoQmFyID09IG1fcmljaFRleHRUb3VjaEJhci5nZXQo
KTsKKyAgICBbdG91Y2hCYXIgc2V0RGVsZWdhdGU6bV90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxl
ci5nZXQoKV07CisgICAgW3RvdWNoQmFyIHNldERlZmF1bHRJdGVtczpbTlNNdXRhYmxlU2V0IHNl
dFdpdGhPYmplY3RzOmlzUmljaFRleHRUb3VjaEJhciA/IG1fcmljaFRleHRDYW5kaWRhdGVMaXN0
VG91Y2hCYXJJdGVtLmdldCgpIDogbV9wbGFpblRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVt
LmdldCgpLCBuaWxdXTsKKyAgICBbdG91Y2hCYXIgc2V0Q3VzdG9taXphdGlvbkFsbG93ZWRJdGVt
SWRlbnRpZmllcnM6dGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkFsbG93ZWRJZGVudGlmaWVycygp
XTsKKyAgICBbdG91Y2hCYXIgc2V0Q3VzdG9taXphdGlvbkRlZmF1bHRJdGVtSWRlbnRpZmllcnM6
aXNSaWNoVGV4dFRvdWNoQmFyID8gcmljaFRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25EZWZhdWx0
SXRlbUlkZW50aWZpZXJzKCkgOiBwbGFpblRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25EZWZhdWx0
SXRlbUlkZW50aWZpZXJzKCldOworCisgICAgaWYgKE5TR3JvdXBUb3VjaEJhckl0ZW0gKnRleHRG
b3JtYXRJdGVtID0gKE5TR3JvdXBUb3VjaEJhckl0ZW0gKilbdG91Y2hCYXIgaXRlbUZvcklkZW50
aWZpZXI6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEZvcm1hdF0pCisgICAgICAgIHRleHRG
b3JtYXRJdGVtLmdyb3VwVG91Y2hCYXIuY3VzdG9taXphdGlvbklkZW50aWZpZXIgPSBAIldLVGV4
dEZvcm1hdFRvdWNoQmFyIjsKK30KKworYm9vbCBXZWJWaWV3SW1wbDo6aXNSaWNobHlFZGl0YWJs
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0NvbnRlbnRS
aWNobHlFZGl0YWJsZSAmJiAhbV9wYWdlLT5uZWVkc1BsYWluVGV4dFF1aXJrKCk7Cit9CisKK05T
VG91Y2hCYXIgKldlYlZpZXdJbXBsOjp0ZXh0VG91Y2hCYXIoKSBjb25zdAoreworICAgIHJldHVy
biBpc1JpY2hseUVkaXRhYmxlKCkgPyBtX3JpY2hUZXh0VG91Y2hCYXIuZ2V0KCkgOiBtX3BsYWlu
VGV4dFRvdWNoQmFyLmdldCgpOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVUZXh0VG91
Y2hCYXIoKQoreworICAgIGlmICghbV9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRh
YmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9pc1VwZGF0aW5nVGV4dFRvdWNoQmFy
KQorICAgICAgICByZXR1cm47CisKKyAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gaXNVcGRhdGlu
Z1RleHRGdW5jdGlvbkJhcihtX2lzVXBkYXRpbmdUZXh0VG91Y2hCYXIsIHRydWUpOworCisgICAg
aWYgKCFtX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyKQorICAgICAgICBtX3RleHRUb3VjaEJh
ckl0ZW1Db250cm9sbGVyID0gYWRvcHROUyhbW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIg
YWxsb2NdIGluaXRXaXRoV2ViVmlld0ltcGw6dGhpc10pOworCisgICAgaWYgKCFtX3N0YXJ0ZWRM
aXN0ZW5pbmdUb0N1c3RvbWl6YXRpb25FdmVudHMpIHsKKyAgICAgICAgW1tOU05vdGlmaWNhdGlv
bkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjptX3RleHRUb3VjaEJhckl0ZW1Db250
cm9sbGVyLmdldCgpIHNlbGVjdG9yOkBzZWxlY3Rvcih0b3VjaEJhckRpZEV4aXRDdXN0b21pemF0
aW9uOikgbmFtZTpOU1RvdWNoQmFyRGlkRXhpdEN1c3RvbWl6YXRpb24gb2JqZWN0Om5pbF07Cisg
ICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6
bV90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlci5nZXQoKSBzZWxlY3RvcjpAc2VsZWN0b3IodG91
Y2hCYXJXaWxsRW50ZXJDdXN0b21pemF0aW9uOikgbmFtZTpOU1RvdWNoQmFyV2lsbEVudGVyQ3Vz
dG9taXphdGlvbiBvYmplY3Q6bmlsXTsKKyAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBk
ZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjptX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyLmdl
dCgpIHNlbGVjdG9yOkBzZWxlY3RvcihkaWRDaGFuZ2VBdXRvbWF0aWNUZXh0Q29tcGxldGlvbjop
IG5hbWU6TlNTcGVsbENoZWNrZXJEaWRDaGFuZ2VBdXRvbWF0aWNUZXh0Q29tcGxldGlvbk5vdGlm
aWNhdGlvbiBvYmplY3Q6bmlsXTsKKworICAgICAgICBtX3N0YXJ0ZWRMaXN0ZW5pbmdUb0N1c3Rv
bWl6YXRpb25FdmVudHMgPSB0cnVlOworICAgIH0KKworICAgIGlmICghbV9yaWNoVGV4dENhbmRp
ZGF0ZUxpc3RUb3VjaEJhckl0ZW0gfHwgIW1fcGxhaW5UZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFy
SXRlbSkgeworICAgICAgICBtX3JpY2hUZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSA9IGFk
b3B0TlMoW1tOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gYWxsb2NdIGluaXRXaXRoSWRlbnRp
ZmllcjpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJDYW5kaWRhdGVMaXN0XSk7CisgICAgICAgIFtt
X3JpY2hUZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSBzZXREZWxlZ2F0ZTptX3RleHRUb3Vj
aEJhckl0ZW1Db250cm9sbGVyLmdldCgpXTsKKyAgICAgICAgbV9wbGFpblRleHRDYW5kaWRhdGVM
aXN0VG91Y2hCYXJJdGVtID0gYWRvcHROUyhbW05TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSBh
bGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckNhbmRpZGF0
ZUxpc3RdKTsKKyAgICAgICAgW21fcGxhaW5UZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSBz
ZXREZWxlZ2F0ZTptX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyLmdldCgpXTsKKyAgICAgICAg
cmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb25JZk5lZWRlZCgpOworICAgIH0KKworICAgIGlm
ICghbV9yaWNoVGV4dFRvdWNoQmFyKSB7CisgICAgICAgIG1fcmljaFRleHRUb3VjaEJhciA9IGFk
b3B0TlMoW1tOU1RvdWNoQmFyIGFsbG9jXSBpbml0XSk7CisgICAgICAgIHNldFVwVGV4dFRvdWNo
QmFyKG1fcmljaFRleHRUb3VjaEJhci5nZXQoKSk7CisgICAgICAgIFttX3JpY2hUZXh0VG91Y2hC
YXIgc2V0Q3VzdG9taXphdGlvbklkZW50aWZpZXI6QCJXS1JpY2hUZXh0VG91Y2hCYXIiXTsKKyAg
ICB9CisKKyAgICBpZiAoIW1fcGxhaW5UZXh0VG91Y2hCYXIpIHsKKyAgICAgICAgbV9wbGFpblRl
eHRUb3VjaEJhciA9IGFkb3B0TlMoW1tOU1RvdWNoQmFyIGFsbG9jXSBpbml0XSk7CisgICAgICAg
IHNldFVwVGV4dFRvdWNoQmFyKG1fcGxhaW5UZXh0VG91Y2hCYXIuZ2V0KCkpOworICAgICAgICBb
bV9wbGFpblRleHRUb3VjaEJhciBzZXRDdXN0b21pemF0aW9uSWRlbnRpZmllcjpAIldLUGxhaW5U
ZXh0VG91Y2hCYXIiXTsKKyAgICB9CisKKyAgICBpZiAoW05TU3BlbGxDaGVja2VyIGlzQXV0b21h
dGljVGV4dENvbXBsZXRpb25FbmFibGVkXSAmJiAhbV9pc0N1c3RvbWl6aW5nVG91Y2hCYXIpIHsK
KyAgICAgICAgQk9PTCBzaG93Q2FuZGlkYXRlc0xpc3QgPSAhbV9wYWdlLT5lZGl0b3JTdGF0ZSgp
LnNlbGVjdGlvbklzUmFuZ2UgfHwgbV9pc0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRhdGU7CisgICAg
ICAgIFtjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtKCkgdXBkYXRlV2l0aEluc2VydGlvblBvaW50
VmlzaWJpbGl0eTpzaG93Q2FuZGlkYXRlc0xpc3RdOworICAgICAgICBbbV92aWV3IF9kaWRVcGRh
dGVDYW5kaWRhdGVMaXN0VmlzaWJpbGl0eTpzaG93Q2FuZGlkYXRlc0xpc3RdOworICAgIH0KKwor
ICAgIGlmIChtX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNJblBhc3N3b3JkRmllbGQpIHsKKyAgICAg
ICAgLy8gV2UgZG9uJ3QgcmVxdWVzdCBjYW5kaWRhdGVzIGZvciBwYXNzd29yZCBmaWVsZHMuIElm
IHRoZSB1c2VyIHdhcyBwcmV2aW91c2x5IGluIGEgbm9uLXBhc3N3b3JkIGZpZWxkLCB0aGVuIHRo
ZQorICAgICAgICAvLyBvbGQgY2FuZGlkYXRlcyB3aWxsIHN0aWxsIHNob3cgYnkgZGVmYXVsdCwg
c28gd2UgY2xlYXIgdGhlbSBoZXJlIGJ5IHNldHRpbmcgYW4gZW1wdHkgYXJyYXkgb2YgY2FuZGlk
YXRlcy4KKyAgICAgICAgaWYgKCFtX2VtcHR5Q2FuZGlkYXRlc0FycmF5KQorICAgICAgICAgICAg
bV9lbXB0eUNhbmRpZGF0ZXNBcnJheSA9IGFkb3B0TlMoW1tOU0FycmF5IGFsbG9jXSBpbml0XSk7
CisgICAgICAgIFtjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtKCkgc2V0Q2FuZGlkYXRlczptX2Vt
cHR5Q2FuZGlkYXRlc0FycmF5LmdldCgpIGZvclNlbGVjdGVkUmFuZ2U6TlNNYWtlUmFuZ2UoMCwg
MCkgaW5TdHJpbmc6bmlsXTsKKyAgICB9CisKKyAgICBOU1RvdWNoQmFyICp0ZXh0VG91Y2hCYXIg
PSB0aGlzLT50ZXh0VG91Y2hCYXIoKTsKKyAgICBCT09MIGlzU2hvd2luZ0NvbWJpbmVkVGV4dEZv
cm1hdEl0ZW0gPSBbdGV4dFRvdWNoQmFyLml0ZW1JZGVudGlmaWVycyBjb250YWluc09iamVjdDpO
U1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Rm9ybWF0XTsKKyAgICBbdGV4dFRvdWNoQmFyIHNl
dFByaW5jaXBhbEl0ZW1JZGVudGlmaWVyOmlzU2hvd2luZ0NvbWJpbmVkVGV4dEZvcm1hdEl0ZW0g
PyBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Rm9ybWF0IDogbmlsXTsKKworICAgIC8vIFNl
dCBjdXJyZW50IHR5cGluZyBhdHRyaWJ1dGVzIGZvciByaWNoIHRleHQuIFRoaXMgd2lsbCBlbnN1
cmUgdGhhdCB0aGUgYnV0dG9ucyByZWZsZWN0IHRoZSBzdGF0ZSBvZgorICAgIC8vIHRoZSB0ZXh0
IHdoZW4gY2hhbmdpbmcgc2VsZWN0aW9uIHRocm91Z2hvdXQgdGhlIGRvY3VtZW50LgorICAgIGlm
IChpc1JpY2hseUVkaXRhYmxlKCkpIHsKKyAgICAgICAgY29uc3QgRWRpdG9yU3RhdGUmIGVkaXRv
clN0YXRlID0gbV9wYWdlLT5lZGl0b3JTdGF0ZSgpOworICAgICAgICBpZiAoIWVkaXRvclN0YXRl
LmlzTWlzc2luZ1Bvc3RMYXlvdXREYXRhKSB7CisgICAgICAgICAgICBbbV90ZXh0VG91Y2hCYXJJ
dGVtQ29udHJvbGxlciBzZXRUZXh0SXNCb2xkOihib29sKShtX3BhZ2UtPmVkaXRvclN0YXRlKCku
cG9zdExheW91dERhdGEoKS50eXBpbmdBdHRyaWJ1dGVzICYgQXR0cmlidXRlQm9sZCldOworICAg
ICAgICAgICAgW21fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzSXRhbGljOihi
b29sKShtX3BhZ2UtPmVkaXRvclN0YXRlKCkucG9zdExheW91dERhdGEoKS50eXBpbmdBdHRyaWJ1
dGVzICYgQXR0cmlidXRlSXRhbGljcyldOworICAgICAgICAgICAgW21fdGV4dFRvdWNoQmFySXRl
bUNvbnRyb2xsZXIgc2V0VGV4dElzVW5kZXJsaW5lZDooYm9vbCkobV9wYWdlLT5lZGl0b3JTdGF0
ZSgpLnBvc3RMYXlvdXREYXRhKCkudHlwaW5nQXR0cmlidXRlcyAmIEF0dHJpYnV0ZVVuZGVybGlu
ZSldOworICAgICAgICAgICAgW21fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dENv
bG9yOm5zQ29sb3IoZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEoKS50ZXh0Q29sb3IpXTsKKyAg
ICAgICAgICAgIFtbbV90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciB0ZXh0TGlzdFRvdWNoQmFy
Vmlld0NvbnRyb2xsZXJdIHNldEN1cnJlbnRMaXN0VHlwZTooTGlzdFR5cGUpbV9wYWdlLT5lZGl0
b3JTdGF0ZSgpLnBvc3RMYXlvdXREYXRhKCkuZW5jbG9zaW5nTGlzdFR5cGVdOworCisgICAgICAg
ICAgICBOU1RleHRBbGlnbm1lbnQgdGV4dEFsaWdubWVudDsKKyAgICAgICAgICAgIHN3aXRjaCAo
ZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEoKS50ZXh0QWxpZ25tZW50KSB7CisgICAgICAgICAg
ICBjYXNlIE5vQWxpZ25tZW50OgorICAgICAgICAgICAgICAgIHRleHRBbGlnbm1lbnQgPSBOU1Rl
eHRBbGlnbm1lbnROYXR1cmFsOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBMZWZ0QWxpZ25tZW50OgorICAgICAgICAgICAgICAgIHRleHRBbGlnbm1lbnQgPSBOU1Rl
eHRBbGlnbm1lbnRMZWZ0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBSaWdodEFsaWdubWVudDoKKyAgICAgICAgICAgICAgICB0ZXh0QWxpZ25tZW50ID0gTlNUZXh0
QWxpZ25tZW50UmlnaHQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IENlbnRlckFsaWdubWVudDoKKyAgICAgICAgICAgICAgICB0ZXh0QWxpZ25tZW50ID0gTlNUZXh0
QWxpZ25tZW50Q2VudGVyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBKdXN0aWZpZWRBbGlnbm1lbnQ6CisgICAgICAgICAgICAgICAgdGV4dEFsaWdubWVudCA9IE5T
VGV4dEFsaWdubWVudEp1c3RpZmllZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIFttX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldEN1cnJl
bnRUZXh0QWxpZ25tZW50OnRleHRBbGlnbm1lbnRdOworICAgICAgICB9CisgICAgICAgIEJPT0wg
aXNTaG93aW5nQ2FuZGlkYXRlTGlzdEl0ZW0gPSBbdGV4dFRvdWNoQmFyLml0ZW1JZGVudGlmaWVy
cyBjb250YWluc09iamVjdDpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJDYW5kaWRhdGVMaXN0XSAm
JiBbTlNTcGVsbENoZWNrZXIgaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkXTsKKyAg
ICAgICAgW21fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VXNlc05hcnJvd1RleHRTdHls
ZUl0ZW06aXNTaG93aW5nQ29tYmluZWRUZXh0Rm9ybWF0SXRlbSAmJiBpc1Nob3dpbmdDYW5kaWRh
dGVMaXN0SXRlbV07CisgICAgfQorfQorCit2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVNZWRpYVRv
dWNoQmFyKCkKK3sKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisg
ICAgaWYgKCFtX21lZGlhVG91Y2hCYXJQcm92aWRlcikKKyAgICAgICAgbV9tZWRpYVRvdWNoQmFy
UHJvdmlkZXIgPSBhZG9wdE5TKFthbGxvY0FWRnVuY3Rpb25CYXJQbGF5YmFja0NvbnRyb2xzUHJv
dmlkZXJJbnN0YW5jZSgpIGluaXRdKTsKKworICAgIGlmICghbV9tZWRpYVBsYXliYWNrQ29udHJv
bHNWaWV3KQorICAgICAgICBtX21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcgPSBhZG9wdE5TKFth
bGxvY0FWRnVuY3Rpb25CYXJTY3J1YmJlckluc3RhbmNlKCkgaW5pdF0pOworCisgICAgaWYgKCFt
X3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyKQorICAgICAgICBtX3BsYXliYWNrQ29udHJvbHNNYW5h
Z2VyID0gYWRvcHROUyhbW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIGFsbG9jXSBpbml0XSk7
CisKKyAgICBpZiAoUGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UqIGludGVyZmFj
ZSA9IG1fcGFnZS0+cGxheWJhY2tTZXNzaW9uTWFuYWdlcigpLT5jb250cm9sc01hbmFnZXJJbnRl
cmZhY2UoKSkKKyAgICAgICAgW21fcGxheWJhY2tDb250cm9sc01hbmFnZXIgc2V0V2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjOmludGVyZmFjZV07CisKKyAgICBbbV9tZWRpYVRvdWNoQmFy
UHJvdmlkZXIgc2V0UGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXI6bV9wbGF5YmFja0NvbnRyb2xz
TWFuYWdlci5nZXQoKV07CisgICAgW21fbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyBzZXRQbGF5
YmFja0NvbnRyb2xzQ29udHJvbGxlcjptX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmdldCgpXTsK
KworICAgIGlmICghdXNlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpKSB7CisjaWYgRU5BQkxF
KEZVTExTQ1JFRU5fQVBJKQorICAgICAgICAvLyBJZiB3ZSBjYW4ndCBoYXZlIGEgbWVkaWEgcG9w
b3ZlciBmdW5jdGlvbiBiYXIgaXRlbSwgaXQgbWlnaHQgYmUgYmVjYXVzZSB3ZSBhcmUgaW4gZnVs
bCBzY3JlZW4uCisgICAgICAgIC8vIElmIHNvLCBjdXN0b21pemUgdGhlIGVzY2FwZSBrZXkuCisg
ICAgICAgIE5TVG91Y2hCYXIgKnRvdWNoQmFyID0gW21fbWVkaWFUb3VjaEJhclByb3ZpZGVyIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IodG91Y2hCYXIpXSA/IFsoaWQpbV9tZWRpYVRvdWNo
QmFyUHJvdmlkZXIuZ2V0KCkgdG91Y2hCYXJdIDogWyhpZCltX21lZGlhVG91Y2hCYXJQcm92aWRl
ci5nZXQoKSB0b3VjaEJhcl07CisgICAgICAgIGlmIChoYXNGdWxsU2NyZWVuV2luZG93Q29udHJv
bGxlcigpICYmIFttX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGlzRnVsbFNjcmVlbl0pIHsK
KyAgICAgICAgICAgIGlmICghbV9leGl0RnVsbFNjcmVlbkJ1dHRvbikgeworICAgICAgICAgICAg
ICAgIG1fZXhpdEZ1bGxTY3JlZW5CdXR0b24gPSBhZG9wdE5TKFtbTlNDdXN0b21Ub3VjaEJhckl0
ZW0gYWxsb2NdIGluaXRXaXRoSWRlbnRpZmllcjpXS01lZGlhRXhpdEZ1bGxTY3JlZW5JdGVtXSk7
CisKKyAgICAgICAgICAgICAgICBOU0ltYWdlICppbWFnZSA9IFtOU0ltYWdlIGltYWdlTmFtZWQ6
TlNJbWFnZU5hbWVUb3VjaEJhckV4aXRGdWxsU2NyZWVuVGVtcGxhdGVdOworICAgICAgICAgICAg
ICAgIFtpbWFnZSBzZXRUZW1wbGF0ZTpZRVNdOworCisgICAgICAgICAgICAgICAgTlNCdXR0b24g
KmV4aXRGdWxsU2NyZWVuQnV0dG9uID0gW05TQnV0dG9uIGJ1dHRvbldpdGhUaXRsZTppbWFnZSA/
IEAiIiA6IEAiRXhpdCIgaW1hZ2U6aW1hZ2UgdGFyZ2V0Om1fZnVsbFNjcmVlbldpbmRvd0NvbnRy
b2xsZXIuZ2V0KCkgYWN0aW9uOkBzZWxlY3RvcihyZXF1ZXN0RXhpdEZ1bGxTY3JlZW4pXTsKKyAg
ICAgICAgICAgICAgICBbZXhpdEZ1bGxTY3JlZW5CdXR0b24gc2V0QWNjZXNzaWJpbGl0eVRpdGxl
OldlYkNvcmU6OmV4aXRGdWxsU2NyZWVuQnV0dG9uQWNjZXNzaWJpbGl0eVRpdGxlKCldOworCisg
ICAgICAgICAgICAgICAgW1tleGl0RnVsbFNjcmVlbkJ1dHRvbi53aWR0aEFuY2hvciBjb25zdHJh
aW50TGVzc1RoYW5PckVxdWFsVG9Db25zdGFudDpleGl0RnVsbFNjcmVlbkJ1dHRvbldpZHRoXSBz
ZXRBY3RpdmU6WUVTXTsKKyAgICAgICAgICAgICAgICBbbV9leGl0RnVsbFNjcmVlbkJ1dHRvbiBz
ZXRWaWV3OmV4aXRGdWxsU2NyZWVuQnV0dG9uXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHRvdWNoQmFyLmVzY2FwZUtleVJlcGxhY2VtZW50SXRlbSA9IG1fZXhpdEZ1bGxTY3JlZW5CdXR0
b24uZ2V0KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdG91Y2hCYXIuZXNjYXBlS2V5
UmVwbGFjZW1lbnRJdGVtID0gbmlsOworI2VuZGlmCisgICAgICAgIC8vIFRoZSByZXN0IG9mIHRo
ZSB3b3JrIHRvIHVwZGF0ZSB0aGUgbWVkaWEgZnVuY3Rpb24gYmFyIG9ubHkgYXBwbGllcyB0byB0
aGUgcG9wb3ZlciB2ZXJzaW9uLCBzbyByZXR1cm4gZWFybHkuCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAobV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlciAmJiBtX3ZpZXcgPT0gbV92
aWV3LndpbmRvdy5maXJzdFJlc3BvbmRlciAmJiBbbV92aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IoX3dlYl9kaWRBZGRNZWRpYUNvbnRyb2xzTWFuYWdlcjopXSkKKyAgICAgICAgW21f
dmlldyBfd2ViX2RpZEFkZE1lZGlhQ29udHJvbHNNYW5hZ2VyOm1fbWVkaWFQbGF5YmFja0NvbnRy
b2xzVmlldy5nZXQoKV07CisjZW5kaWYKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6Zm9yY2VSZXF1
ZXN0Q2FuZGlkYXRlc0ZvclRlc3RpbmcoKQoreworICAgIG1fY2FuQ3JlYXRlVG91Y2hCYXJzID0g
dHJ1ZTsKKyAgICB1cGRhdGVUb3VjaEJhcigpOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjp1cGRh
dGVUb3VjaEJhcigpCit7CisgICAgaWYgKCFtX2NhbkNyZWF0ZVRvdWNoQmFycykKKyAgICAgICAg
cmV0dXJuOworCisgICAgTlNUb3VjaEJhciAqdG91Y2hCYXIgPSBuaWw7CisgICAgYm9vbCB1c2Vy
QWN0aW9uUmVxdWlyZW1lbnRzSGF2ZUJlZW5NZXQgPSBtX3JlcXVpcmVzVXNlckFjdGlvbkZvckVk
aXRpbmdDb250cm9sc01hbmFnZXIgPyBtX3BhZ2UtPmhhc0hhZFNlbGVjdGlvbkNoYW5nZXNGcm9t
VXNlckludGVyYWN0aW9uKCkgOiB0cnVlOworICAgIGlmIChtX3BhZ2UtPmVkaXRvclN0YXRlKCku
aXNDb250ZW50RWRpdGFibGUgJiYgIW1fcGFnZS0+bmVlZHNIaWRkZW5Db250ZW50RWRpdGFibGVR
dWlyaygpKSB7CisgICAgICAgIHVwZGF0ZVRleHRUb3VjaEJhcigpOworICAgICAgICBpZiAodXNl
ckFjdGlvblJlcXVpcmVtZW50c0hhdmVCZWVuTWV0KQorICAgICAgICAgICAgdG91Y2hCYXIgPSB0
ZXh0VG91Y2hCYXIoKTsKKyAgICB9CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19N
QU5BR0VSKQorICAgIGVsc2UgaWYgKG1fcGFnZS0+aGFzQWN0aXZlVmlkZW9Gb3JDb250cm9sc01h
bmFnZXIoKSkgeworICAgICAgICB1cGRhdGVNZWRpYVRvdWNoQmFyKCk7CisgICAgICAgIC8vIElm
IHVzZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSBpcyB0cnVlLCB0aGVuIHdlIGFyZSByZWx5
aW5nIG9uIHRoZSBBUEkgY2xpZW50IHRvIGRpc3BsYXkgYSBwb3BvdmVyIHZlcnNpb24KKyAgICAg
ICAgLy8gb2YgdGhlIG1lZGlhIHRpbWVsaW5lIGluIHRoZWlyIG93biBmdW5jdGlvbiBiYXIuIElm
IGl0IGlzIGZhbHNlLCB0aGVuIHdlIHdpbGwgZGlzcGxheSB0aGUgbWVkaWEgdGltZWxpbmUgaW4g
b3VyCisgICAgICAgIC8vIGZ1bmN0aW9uIGJhci4KKyAgICAgICAgaWYgKCF1c2VNZWRpYVBsYXli
YWNrQ29udHJvbHNWaWV3KCkpCisgICAgICAgICAgICB0b3VjaEJhciA9IFttX21lZGlhVG91Y2hC
YXJQcm92aWRlciByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHRvdWNoQmFyKV0gPyBbKGlk
KW1fbWVkaWFUb3VjaEJhclByb3ZpZGVyLmdldCgpIHRvdWNoQmFyXSA6IFsoaWQpbV9tZWRpYVRv
dWNoQmFyUHJvdmlkZXIuZ2V0KCkgdG91Y2hCYXJdOworICAgIH0gZWxzZSBpZiAoW21fbWVkaWFU
b3VjaEJhclByb3ZpZGVyIHBsYXliYWNrQ29udHJvbHNDb250cm9sbGVyXSkgeworICAgICAgICBp
ZiAobV9jbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcpIHsKKyAgICAgICAgICAg
IGlmIChbbV92aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYl9kaWRSZW1vdmVN
ZWRpYUNvbnRyb2xzTWFuYWdlcildICYmIG1fdmlldyA9PSBtX3ZpZXcud2luZG93LmZpcnN0UmVz
cG9uZGVyKQorICAgICAgICAgICAgICAgIFttX3ZpZXcgX3dlYl9kaWRSZW1vdmVNZWRpYUNvbnRy
b2xzTWFuYWdlcl07CisgICAgICAgIH0KKyAgICAgICAgW21fbWVkaWFUb3VjaEJhclByb3ZpZGVy
IHNldFBsYXliYWNrQ29udHJvbHNDb250cm9sbGVyOm5pbF07CisgICAgICAgIFttX21lZGlhUGxh
eWJhY2tDb250cm9sc1ZpZXcgc2V0UGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXI6bmlsXTsKKyAg
ICB9CisjZW5kaWYKKworICAgIGlmICh0b3VjaEJhciA9PSBtX2N1cnJlbnRUb3VjaEJhcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gSWYgbV9lZGl0YWJsZUVsZW1lbnRJc0ZvY3VzZWQgaXMg
dHJ1ZSwgdGhlbiB3ZSBtYXkgaGF2ZSBhIG5vbi1lZGl0YWJsZSBzZWxlY3Rpb24gcmlnaHQgbm93
IGp1c3QgYmVjYXVzZQorICAgIC8vIHRoZSB1c2VyIGlzIGNsaWNraW5nIG9yIHRhYmJpbmcgYmV0
d2VlbiBlZGl0YWJsZSBmaWVsZHMuCisgICAgaWYgKG1fZWRpdGFibGVFbGVtZW50SXNGb2N1c2Vk
ICYmIHRvdWNoQmFyICE9IHRleHRUb3VjaEJhcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2N1cnJlbnRUb3VjaEJhciA9IHRvdWNoQmFyOworICAgIFttX3ZpZXcgd2lsbENoYW5nZVZhbHVl
Rm9yS2V5OkAidG91Y2hCYXIiXTsKKyAgICBbbV92aWV3IHNldFRvdWNoQmFyOm1fY3VycmVudFRv
dWNoQmFyLmdldCgpXTsKKyAgICBbbV92aWV3IGRpZENoYW5nZVZhbHVlRm9yS2V5OkAidG91Y2hC
YXIiXTsKK30KKworYm9vbCBXZWJWaWV3SW1wbDo6c2hvdWxkUmVxdWVzdENhbmRpZGF0ZXMoKSBj
b25zdAoreworICAgIHJldHVybiAhbV9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzSW5QYXNzd29yZEZp
ZWxkICYmIGNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0oKS5jYW5kaWRhdGVMaXN0VmlzaWJsZTsK
K30KKwordm9pZCBXZWJWaWV3SW1wbDo6c2hvd0NhbmRpZGF0ZXMoTlNBcnJheSAqY2FuZGlkYXRl
cywgTlNTdHJpbmcgKnN0cmluZywgTlNSZWN0IHJlY3RPZlR5cGVkU3RyaW5nLCBOU1JhbmdlIHNl
bGVjdGVkUmFuZ2UsIE5TVmlldyAqdmlldywgdm9pZCAoXmNvbXBsZXRpb25IYW5kbGVyKShOU1Rl
eHRDaGVja2luZ1Jlc3VsdCAqYWNjZXB0ZWRDYW5kaWRhdGUpKQoreworICAgIFtjYW5kaWRhdGVM
aXN0VG91Y2hCYXJJdGVtKCkgc2V0Q2FuZGlkYXRlczpjYW5kaWRhdGVzIGZvclNlbGVjdGVkUmFu
Z2U6c2VsZWN0ZWRSYW5nZSBpblN0cmluZzpzdHJpbmddOworfQorCit2b2lkIFdlYlZpZXdJbXBs
Ojp3ZWJWaWV3SW1wbEFkZGl0aW9uc1dpbGxEZXN0cm95VmlldygpCit7CisgICAgW21fdGV4dFRv
dWNoQmFySXRlbUNvbnRyb2xsZXIgZGlkRGVzdHJveVZpZXddOworCisjaWYgRU5BQkxFKFdFQl9Q
TEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIFttX21lZGlhVG91Y2hCYXJQcm92aWRlciBz
ZXRQbGF5YmFja0NvbnRyb2xzQ29udHJvbGxlcjpuaWxdOworICAgIFttX21lZGlhUGxheWJhY2tD
b250cm9sc1ZpZXcgc2V0UGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXI6bmlsXTsKKyNlbmRpZgor
fQorCit2b2lkIFdlYlZpZXdJbXBsOjpzZXRFZGl0YWJsZUVsZW1lbnRJc0ZvY3VzZWQoYm9vbCBl
ZGl0YWJsZUVsZW1lbnRJc0ZvY3VzZWQpCit7CisgICAgbV9lZGl0YWJsZUVsZW1lbnRJc0ZvY3Vz
ZWQgPSBlZGl0YWJsZUVsZW1lbnRJc0ZvY3VzZWQ7CisKKyAgICAvLyBJZiB0aGUgZWRpdGFibGUg
ZWxlbWVudHMgaGF2ZSBibHVycmVkLCB0aGVuIHdlIG1pZ2h0IG5lZWQgdG8gZ2V0IHJpZCBvZiB0
aGUgZWRpdGluZyBmdW5jdGlvbiBiYXIuCisgICAgaWYgKCFtX2VkaXRhYmxlRWxlbWVudElzRm9j
dXNlZCkKKyAgICAgICAgdXBkYXRlVG91Y2hCYXIoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CiAjZWxzZQogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXZvaWQgV2ViVmlld0ltcGw6OnVwZGF0
ZVdlYlZpZXdJbXBsQWRkaXRpb25zKCkKK3ZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZVRvdWNoQmFy
KCkKIHsKIH0KIApAQCAtNDY1LDcgKzExNTgsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRFZGl0
YWJsZUVsZW1lbnRJc0ZvCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAotI2VuZGlmIC8vIF9f
TUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwICYmIFVTRShBUFBMRV9JTlRF
Uk5BTF9TREspCisjZW5kaWYgLy8gSEFWRShUT1VDSF9CQVIpCiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCkBAIC02MTUsNyArMTMwOCw3IEBAIGJvb2wgV2ViVmlld0ltcGw6OmJlY29tZUZpcnN0UmVz
cG9uZGVyKCkKIAogICAgIG1faW5CZWNvbWVGaXJzdFJlc3BvbmRlciA9IGZhbHNlOwogCi0gICAg
dXBkYXRlV2ViVmlld0ltcGxBZGRpdGlvbnMoKTsKKyAgICB1cGRhdGVUb3VjaEJhcigpOwogCiAg
ICAgaWYgKGRpcmVjdGlvbiAhPSBOU0RpcmVjdFNlbGVjdGlvbikgewogICAgICAgICBOU0V2ZW50
ICpldmVudCA9IFtOU0FwcCBjdXJyZW50RXZlbnRdOwpAQCAtMTgwOCw3ICsyNTAxLDcgQEAgdm9p
ZCBXZWJWaWV3SW1wbDo6c2VsZWN0aW9uRGlkQ2hhbmdlKCkKICAgICBpZiAoIW1faXNIYW5kbGlu
Z0FjY2VwdGVkQ2FuZGlkYXRlKQogICAgICAgICBtX3NvZnRTcGFjZVJhbmdlID0gTlNNYWtlUmFu
Z2UoTlNOb3RGb3VuZCwgMCk7CiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+
PSAxMDEyMDAKLSAgICB1cGRhdGVXZWJWaWV3SW1wbEFkZGl0aW9ucygpOworICAgIHVwZGF0ZVRv
dWNoQmFyKCk7CiAgICAgaWYgKCFtX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNNaXNzaW5nUG9zdExh
eW91dERhdGEpCiAgICAgICAgIHJlcXVlc3RDYW5kaWRhdGVzRm9yU2VsZWN0aW9uSWZOZWVkZWQo
KTsKICNlbmRpZgpAQCAtMjQ0OCw3ICszMTQxLDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6ZGlkSGFu
ZGxlQWNjZXB0ZWRDYW5kaQogdm9pZCBXZWJWaWV3SW1wbDo6dmlkZW9Db250cm9sc01hbmFnZXJE
aWRDaGFuZ2UoKQogewogI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAx
MjAwCi0gICAgdXBkYXRlV2ViVmlld0ltcGxBZGRpdGlvbnMoKTsKKyAgICB1cGRhdGVUb3VjaEJh
cigpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODQwNSkK
KysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDY3IEBACisyMDE2LTExLTA0ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAg
ICAgICBTdXBwb3J0IFRvdWNoQmFyIGluIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NDM3CisgICAgICAgIC1hbmQgY29ycmVzcG9uZGlu
Zy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjg4NzY1MjQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5tbToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVj
dGlvbik6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OnVwZGF0ZUVkaXRvclN0YXRlQWZ0ZXJM
YXlvdXRJZkVkaXRhYmlsaXR5Q2hhbmdlZCk6CisgICAgICAgICogV2ViVmlldy9XZWJIVE1MVmll
dy5tbToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbV0p
OgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bX1dlYlRleHRMaXN0
VG91Y2hCYXJWaWV3Q29udHJvbGxlciBpbml0V2l0aFdlYlZpZXc6XSk6CisgICAgICAgICgtW19X
ZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgX3NlbGVjdExpc3Q6XSk6CisgICAgICAg
ICgtW19XZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgc2V0Q3VycmVudExpc3RUeXBl
Ol0pOgorICAgICAgICAoLVtXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBpbml0V2l0aFdl
YlZpZXc6XSk6CisgICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIGl0ZW1G
b3JJZGVudGlmaWVyOl0pOgorICAgICAgICAoLVtXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxl
ciB3ZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXJdKToKKyAgICAgICAgKC1bV2ViVGV4
dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzQm9sZDpdKToKKyAgICAgICAgKC1bV2Vi
VGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzSXRhbGljOl0pOgorICAgICAgICAo
LVtXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRUZXh0SXNVbmRlcmxpbmVkOl0pOgor
ICAgICAgICAoLVtXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBfd2ViQ2hhbmdlVGV4dFN0
eWxlOl0pOgorICAgICAgICAoLVtXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRDdXJy
ZW50VGV4dEFsaWdubWVudDpdKToKKyAgICAgICAgKC1bV2ViVGV4dFRvdWNoQmFySXRlbUNvbnRy
b2xsZXIgX3dlYkNoYW5nZVRleHRBbGlnbm1lbnQ6XSk6CisgICAgICAgICgtW1dlYlRleHRUb3Vj
aEJhckl0ZW1Db250cm9sbGVyIHRleHRDb2xvcl0pOgorICAgICAgICAoLVtXZWJUZXh0VG91Y2hC
YXJJdGVtQ29udHJvbGxlciBzZXRUZXh0Q29sb3I6XSk6CisgICAgICAgICgtW1dlYlRleHRUb3Vj
aEJhckl0ZW1Db250cm9sbGVyIF93ZWJDaGFuZ2VDb2xvcjpdKToKKyAgICAgICAgKC1bV2ViVGV4
dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgdGV4dExpc3RWaWV3Q29udHJvbGxlcl0pOgorICAgICAg
ICAoLVtXZWJWaWV3IF9jb21tb25Jbml0aWFsaXphdGlvbldpdGhGcmFtZU5hbWU6Z3JvdXBOYW1l
Ol0pOgorICAgICAgICAoLVtXZWJWaWV3IHNob3dDYW5kaWRhdGVzOmZvclN0cmluZzppblJlY3Q6
Zm9yU2VsZWN0ZWRSYW5nZTp2aWV3OmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtX
ZWJWaWV3IHNob3VsZFJlcXVlc3RDYW5kaWRhdGVzXSk6CisgICAgICAgICgtW1dlYlZpZXcgZm9y
Y2VSZXF1ZXN0Q2FuZGlkYXRlc0ZvclRlc3RpbmddKToKKyAgICAgICAgKC1bV2ViVmlldyBtYWtl
VG91Y2hCYXJdKToKKyAgICAgICAgKC1bV2ViVmlldyB0b3VjaEJhcjptYWtlSXRlbUZvcklkZW50
aWZpZXI6XSk6CisgICAgICAgICh0ZXh0Q2hlY2tpbmdSZXN1bHRGcm9tTlNUZXh0Q2hlY2tpbmdS
ZXN1bHQpOgorICAgICAgICAoLVtXZWJWaWV3IGNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW06ZW5k
U2VsZWN0aW5nQ2FuZGlkYXRlQXRJbmRleDpdKToKKyAgICAgICAgKC1bV2ViVmlldyBjYW5kaWRh
dGVMaXN0VG91Y2hCYXJJdGVtOmNoYW5nZWRDYW5kaWRhdGVMaXN0VmlzaWJpbGl0eTpdKToKKyAg
ICAgICAgKC1bV2ViVmlldyBfc2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlckZvck1lZGlhRWxl
bWVudDpdKToKKyAgICAgICAgKC1bV2ViVmlldyBfY2xlYXJQbGF5YmFja0NvbnRyb2xzTWFuYWdl
cl0pOgorICAgICAgICAoLVtXZWJWaWV3IF9kaXNtaXNzVGV4dFRvdWNoQmFyUG9wb3Zlckl0ZW1X
aXRoSWRlbnRpZmllcjpdKToKKyAgICAgICAgKC1bV2ViVmlldyBfdGV4dFRvdWNoQmFyQ3VzdG9t
aXphdGlvbkFsbG93ZWRJZGVudGlmaWVyc10pOgorICAgICAgICAoLVtXZWJWaWV3IF9wbGFpblRl
eHRUb3VjaEJhckN1c3RvbWl6YXRpb25EZWZhdWx0SXRlbUlkZW50aWZpZXJzXSk6CisgICAgICAg
ICgtW1dlYlZpZXcgX3JpY2hUZXh0VG91Y2hCYXJDdXN0b21pemF0aW9uRGVmYXVsdEl0ZW1JZGVu
dGlmaWVyc10pOgorICAgICAgICAoLVtXZWJWaWV3IHRvdWNoQmFyRGlkRXhpdEN1c3RvbWl6YXRp
b246XSk6CisgICAgICAgICgtW1dlYlZpZXcgdG91Y2hCYXJXaWxsRW50ZXJDdXN0b21pemF0aW9u
Ol0pOgorICAgICAgICAoLVtXZWJWaWV3IGRpZENoYW5nZUF1dG9tYXRpY1RleHRDb21wbGV0aW9u
Ol0pOgorICAgICAgICAoLVtXZWJWaWV3IHNldFVwVGV4dFRvdWNoQmFyOl0pOgorICAgICAgICAo
LVtXZWJWaWV3IF9pc1JpY2hseUVkaXRhYmxlXSk6CisgICAgICAgICgtW1dlYlZpZXcgdGV4dFRv
dWNoQmFyXSk6CisgICAgICAgICgtW1dlYlZpZXcgdXBkYXRlVGV4dFRvdWNoQmFyXSk6CisgICAg
ICAgICgtW1dlYlZpZXcgdXBkYXRlTWVkaWFUb3VjaEJhcl0pOgorICAgICAgICAoLVtXZWJWaWV3
IHVwZGF0ZVRvdWNoQmFyXSk6CisgICAgICAgICgtW1dlYlZpZXcgcHJlcGFyZUZvck1vdXNlRG93
bl0pOgorICAgICAgICAoLVtXZWJWaWV3IHByZXBhcmVGb3JNb3VzZVVwXSk6CisgICAgICAgICgt
W1dlYlZpZXcgd2ViVmlld0FkZGl0aW9uc1dpbGxEZXN0cm95Vmlld10pOgorICAgICAgICAoLVtX
ZWJWaWV3IGNhbmRpZGF0ZUxpc3RdKToKKyAgICAgICAgKC1bV2ViVmlldyB1cGRhdGVXZWJWaWV3
QWRkaXRpb25zXSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3RGF0YS5oOgor
ICAgICAgICAqIFdlYlZpZXcvV2ViVmlld0ludGVybmFsLmg6CisgICAgICAgICogV2ViVmlldy9X
ZWJWaWV3UHJpdmF0ZS5oOgorCiAyMDE2LTExLTA0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91
aGFsbGF3YUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEgc2V0dGluZyBhbmQgcHJlZmVyZW5j
ZXMgdG8gZW5hYmxlL2Rpc2FibGUgYXN5bmMgaW1hZ2UgZGVjb2RpbmcKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0JKHJl
dmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVk
aXRvckNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQ3LDcgKzM0Nyw3IEBAIHZvaWQgV2Vi
RWRpdG9yQ2xpZW50OjpyZXNwb25kVG9DaGFuZ2VkU2UKICAgICBOU1ZpZXc8V2ViRG9jdW1lbnRW
aWV3PiAqZG9jdW1lbnRWaWV3ID0gW1traXQoZnJhbWUpIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3
XTsKICAgICBpZiAoW2RvY3VtZW50VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFz
c11dKSB7CiAgICAgICAgIFsoV2ViSFRNTFZpZXcgKilkb2N1bWVudFZpZXcgX3NlbGVjdGlvbkNo
YW5nZWRdOwotICAgICAgICBbbV93ZWJWaWV3IHVwZGF0ZVdlYlZpZXdBZGRpdGlvbnNdOworICAg
ICAgICBbbV93ZWJWaWV3IHVwZGF0ZVRvdWNoQmFyXTsKICAgICAgICAgbV9sYXN0RWRpdG9yU3Rh
dGVXYXNDb250ZW50RWRpdGFibGUgPSBbKFdlYkhUTUxWaWV3ICopZG9jdW1lbnRWaWV3IF9pc0Vk
aXRhYmxlXSA/IEVkaXRvclN0YXRlSXNDb250ZW50RWRpdGFibGU6OlllcyA6IEVkaXRvclN0YXRl
SXNDb250ZW50RWRpdGFibGU6Ok5vOwogICAgIH0KIApAQCAtNjY3LDcgKzY2Nyw3IEBAIHZvaWQg
V2ViRWRpdG9yQ2xpZW50Ojp1cGRhdGVFZGl0b3JTdGF0ZUEKIAogICAgIEVkaXRvclN0YXRlSXND
b250ZW50RWRpdGFibGUgZWRpdG9yU3RhdGVJc0NvbnRlbnRFZGl0YWJsZSA9IFsoV2ViSFRNTFZp
ZXcgKilkb2N1bWVudFZpZXcgX2lzRWRpdGFibGVdID8gRWRpdG9yU3RhdGVJc0NvbnRlbnRFZGl0
YWJsZTo6WWVzIDogRWRpdG9yU3RhdGVJc0NvbnRlbnRFZGl0YWJsZTo6Tm87CiAgICAgaWYgKG1f
bGFzdEVkaXRvclN0YXRlV2FzQ29udGVudEVkaXRhYmxlICE9IGVkaXRvclN0YXRlSXNDb250ZW50
RWRpdGFibGUpCi0gICAgICAgIFttX3dlYlZpZXcgdXBkYXRlV2ViVmlld0FkZGl0aW9uc107Cisg
ICAgICAgIFttX3dlYlZpZXcgdXBkYXRlVG91Y2hCYXJdOwogfQogCiB2b2lkIFdlYkVkaXRvckNs
aWVudDo6cmVnaXN0ZXJVbmRvU3RlcChQYXNzUmVmUHRyPFVuZG9TdGVwPiBjbWQpCkluZGV4OiBT
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHJldmlzaW9uIDIwODQwNSkK
KysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTcyMzAsOCArNzIzMCwxMSBAQCAtICh2b2lkKV91cGRhdGVTZWxlY3Rpb25Gb3JJbnB1
dE1hbmFnZXIKICNlbmRpZiAvLyBQTEFURk9STShJT1MpCiB9CiAKLSNpZiBQTEFURk9STShNQUMp
ICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwICYmIFVTRShBUFBM
RV9JTlRFUk5BTF9TREspCi0jaW1wb3J0IDxXZWJLaXRBZGRpdGlvbnMvV2ViSFRNTFZpZXdXZWJO
U1RleHRJbnB1dFN1cHBvcnRBZGRpdGlvbnMubW0+CisjaWYgSEFWRShUT1VDSF9CQVIpCistIChO
U0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gKiljYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtCit7
CisgICAgcmV0dXJuIFtbc2VsZiBfd2ViVmlld10gY2FuZGlkYXRlTGlzdF07Cit9CiAjZW5kaWYK
IAogQGVuZApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24g
MjA4NDA1KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTgsNiArMTE4LDcgQEAKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FQSUNh
c3QuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0V4Y2VwdGlvbi5oPgogI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSlNWYWx1ZVJlZi5oPgorI2ltcG9ydCA8V2ViQ29yZS9BVktpdFNQSS5oPgog
I2ltcG9ydCA8V2ViQ29yZS9BbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIuaD4KICNpbXBvcnQg
PFdlYkNvcmUvQW5pbWF0aW9uQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9BcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZS5oPgpAQCAtMTQ0LDYgKzE0NSw4IEBACiAjaW1wb3J0IDxXZWJDb3Jl
L0dlb2xvY2F0aW9uQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9HZW9sb2NhdGlvbkVy
cm9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2ltcG9ydCA8V2ViQ29yZS9I
VE1MT0xpc3RFbGVtZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxVTGlzdEVsZW1lbnQuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvSFRNTFZpZGVvRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9I
aXN0b3J5Q29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9IaXN0b3J5SXRlbS5oPgpAQCAt
MTUzLDExICsxNTYsMTQgQEAKICNpbXBvcnQgPFdlYkNvcmUvSlNFbGVtZW50Lmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0pTTm9kZUxpc3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvSlNOb3RpZmljYXRpb24u
aD4KKyNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9Mb2dJbml0aWFsaXphdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9NSU1FVHlwZVJlZ2lzdHJ5
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL01haW5GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9NZW1v
cnlDYWNoZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvTlNTcGVsbENoZWNrZXJTUEkuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTlNU
b3VjaEJhclNQSS5oPgogI2ltcG9ydCA8V2ViQ29yZS9OU1VSTEZpbGVUeXBlTWFwcGluZ3NTUEku
aD4KICNpbXBvcnQgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL05vZGVMaXN0Lmg+CkBAIC0xOTIsNiArMTk4LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUv
V2ViQ29yZU9iakNFeHRyYXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVZpZXcuaD4KICNp
bXBvcnQgPFdlYkNvcmUvV2lkZ2V0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL2h0bWxlZGl0aW5nLmg+
CiAjaW1wb3J0IDxXZWJLaXRMZWdhY3kvRE9NLmg+CiAjaW1wb3J0IDxXZWJLaXRMZWdhY3kvRE9N
RXh0ZW5zaW9ucy5oPgogI2ltcG9ydCA8V2ViS2l0TGVnYWN5L0RPTVByaXZhdGUuaD4KQEAgLTIx
Myw2ICsyMjAsNyBAQAogI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgogI2ltcG9ydCA8d3RmL1J1bkxv
b3AuaD4KICNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbXBvcnQgPHd0Zi9UZW1wb3Jh
cnlDaGFuZ2UuaD4KICNpbXBvcnQgPHd0Zi9zcGkvZGFyd2luL2R5bGRTUEkuaD4KIAogI2lmICFQ
TEFURk9STShJT1MpCkBAIC0zMDcsNiArMzE1LDEyIEBACiAjaW1wb3J0IDxXZWJDb3JlL1dlYlBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lmg+CiAjZW5kaWYKIAorI2lmIEhBVkUoVE9V
Q0hfQkFSKSAmJiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCitTT0ZUX0xJ
TktfRlJBTUVXT1JLKEFWS2l0KQorU09GVF9MSU5LX0NMQVNTKEFWS2l0LCBBVkZ1bmN0aW9uQmFy
UGxheWJhY2tDb250cm9sc1Byb3ZpZGVyKQorU09GVF9MSU5LX0NMQVNTKEFWS2l0LCBBVkZ1bmN0
aW9uQmFyU2NydWJiZXIpCisjZW5kaWYgLy8gSEFWRShUT1VDSF9CQVIpICYmIEVOQUJMRShXRUJf
UExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKwogI2lmIFBMQVRGT1JNKE1BQykKIFNPRlRfTElO
S19DT05TVEFOVF9NQVlfRkFJTChMb29rdXAsIExVTm90aWZpY2F0aW9uUG9wb3ZlcldpbGxDbG9z
ZSwgTlNTdHJpbmcgKikKICNlbmRpZgpAQCAtNjYyLDYgKzY3NiwyODEgQEAgc3RhdGljIEJPT0wg
YXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYgogc3RhdGljIEJPT0wgYXV0b21hdGljU3BlbGxp
bmdDb3JyZWN0aW9uRW5hYmxlZDsKICNlbmRpZgogCisjaWYgSEFWRShUT1VDSF9CQVIpCisKK2Vu
dW0gY2xhc3MgV2ViTGlzdFR5cGUgeworICAgIE5vbmUgPSAwLAorICAgIE9yZGVyZWQsCisgICAg
VW5vcmRlcmVkCit9OworCitAaW50ZXJmYWNlIF9XZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRy
b2xsZXIgOiBOU1ZpZXdDb250cm9sbGVyIHsKKyAgICBXZWJMaXN0VHlwZSBfY3VycmVudExpc3RU
eXBlOworCitAcHJpdmF0ZQorICAgIFdlYlZpZXcgKl93ZWJWaWV3OworfQorCitAcHJvcGVydHkg
KG5vbmF0b21pYykgV2ViTGlzdFR5cGUgY3VycmVudExpc3RUeXBlOworCistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhXZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldzsKKworQGVuZAorCitAaW1wbGVt
ZW50YXRpb24gX1dlYlRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlcgorCitAc3ludGhlc2l6
ZSBjdXJyZW50TGlzdFR5cGU9X2N1cnJlbnRMaXN0VHlwZTsKKworc3RhdGljIGNvbnN0IGRvdWJs
ZSBsaXN0Q29udHJvbFNlZ21lbnRXaWR0aCA9IDY3LjA7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25l
ZCBub0xpc3RTZWdtZW50ID0gMDsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCB1bm9yZGVyZWRMaXN0
U2VnbWVudCA9IDE7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgb3JkZXJlZExpc3RTZWdtZW50ID0g
MjsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcK
K3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgIF93ZWJWaWV3ID0gd2ViVmlldzsKKworICAgIE5TU2VnbWVudGVkQ29udHJvbCAqaW5z
ZXJ0TGlzdENvbnRyb2wgPSBbTlNTZWdtZW50ZWRDb250cm9sIHNlZ21lbnRlZENvbnRyb2xXaXRo
TGFiZWxzOkBbIFdlYkNvcmU6Omluc2VydExpc3RUeXBlTm9uZSgpLCBXZWJDb3JlOjppbnNlcnRM
aXN0VHlwZUJ1bGxldGVkKCksIFdlYkNvcmU6Omluc2VydExpc3RUeXBlTnVtYmVyZWQoKSBdIHRy
YWNraW5nTW9kZTpOU1NlZ21lbnRTd2l0Y2hUcmFja2luZ1NlbGVjdE9uZSB0YXJnZXQ6c2VsZiBh
Y3Rpb246QHNlbGVjdG9yKF9zZWxlY3RMaXN0OildOworICAgIFtpbnNlcnRMaXN0Q29udHJvbCBz
ZXRXaWR0aDpsaXN0Q29udHJvbFNlZ21lbnRXaWR0aCBmb3JTZWdtZW50Om5vTGlzdFNlZ21lbnRd
OworICAgIFtpbnNlcnRMaXN0Q29udHJvbCBzZXRXaWR0aDpsaXN0Q29udHJvbFNlZ21lbnRXaWR0
aCBmb3JTZWdtZW50OnVub3JkZXJlZExpc3RTZWdtZW50XTsKKyAgICBbaW5zZXJ0TGlzdENvbnRy
b2wgc2V0V2lkdGg6bGlzdENvbnRyb2xTZWdtZW50V2lkdGggZm9yU2VnbWVudDpvcmRlcmVkTGlz
dFNlZ21lbnRdOworICAgIGluc2VydExpc3RDb250cm9sLmZvbnQgPSBbTlNGb250IHN5c3RlbUZv
bnRPZlNpemU6MTVdOworCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBj
bGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisgICAg
aWQgc2VnbWVudEVsZW1lbnQgPSBOU0FjY2Vzc2liaWxpdHlVbmlnbm9yZWREZXNjZW5kYW50KGlu
c2VydExpc3RDb250cm9sKTsKKyAgICBOU0FycmF5ICpzZWdtZW50cyA9IFtzZWdtZW50RWxlbWVu
dCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5BdHRy
aWJ1dGVdOworICAgIEFTU0VSVChzZWdtZW50cy5jb3VudCA9PSAzKTsKKyAgICBbW3NlZ21lbnRz
IG9iamVjdEF0SW5kZXg6bm9MaXN0U2VnbWVudF0gYWNjZXNzaWJpbGl0eVNldE92ZXJyaWRlVmFs
dWU6V2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVOb25lKCkgZm9yQXR0cmlidXRlOk5TQWNjZXNzaWJp
bGl0eURlc2NyaXB0aW9uQXR0cmlidXRlXTsKKyAgICBbW3NlZ21lbnRzIG9iamVjdEF0SW5kZXg6
dW5vcmRlcmVkTGlzdFNlZ21lbnRdIGFjY2Vzc2liaWxpdHlTZXRPdmVycmlkZVZhbHVlOldlYkNv
cmU6Omluc2VydExpc3RUeXBlQnVsbGV0ZWRBY2Nlc3NpYmlsaXR5VGl0bGUoKSBmb3JBdHRyaWJ1
dGU6TlNBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25BdHRyaWJ1dGVdOworICAgIFtbc2VnbWVudHMg
b2JqZWN0QXRJbmRleDpvcmRlcmVkTGlzdFNlZ21lbnRdIGFjY2Vzc2liaWxpdHlTZXRPdmVycmlk
ZVZhbHVlOldlYkNvcmU6Omluc2VydExpc3RUeXBlTnVtYmVyZWRBY2Nlc3NpYmlsaXR5VGl0bGUo
KSBmb3JBdHRyaWJ1dGU6TlNBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25BdHRyaWJ1dGVdOworI3By
YWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorCisgICAgc2VsZi52aWV3ID0gaW5zZXJ0TGlzdENv
bnRyb2w7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClfc2VsZWN0TGlzdDooaWQp
c2VuZGVyCit7CisgICAgTlNWaWV3ICpkb2N1bWVudFZpZXcgPSBbW1tfd2ViVmlldyBfc2VsZWN0
ZWRPck1haW5GcmFtZV0gZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOworICAgIGlmICghW2RvY3Vt
ZW50VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKQorICAgICAgICByZXR1
cm47CisKKyAgICBXZWJIVE1MVmlldyAqd2ViSFRNTFZpZXcgPSAoV2ViSFRNTFZpZXcgKilkb2N1
bWVudFZpZXc7CisgICAgTlNTZWdtZW50ZWRDb250cm9sICppbnNlcnRMaXN0Q29udHJvbCA9IChO
U1NlZ21lbnRlZENvbnRyb2wgKilzZWxmLnZpZXc7CisgICAgaWYgKGluc2VydExpc3RDb250cm9s
LnNlbGVjdGVkU2VnbWVudCA9PSBub0xpc3RTZWdtZW50KSB7CisgICAgICAgIC8vIFRoZXJlIGlz
IG5vICJyZW1vdmUgbGlzdCIgZWRpdCBjb21tYW5kLCBidXQgX2luc2VydE9yZGVyZWRMaXN0IGFu
ZCBfaW5zZXJ0VW5vcmRlcmVkTGlzdCBib3RoCisgICAgICAgIC8vIGJlaGF2ZSBhcyB0b2dnbGVz
LCBzbyB3ZSBjYW4gaW52b2tlIHRoZSBhcHByb3ByaWF0ZSBtZXRob2QgZGVwZW5kaW5nIG9uIG91
ciBfY3VycmVudExpc3RUeXBlCisgICAgICAgIC8vIHRvIHJlbW92ZSBhbiBleGlzdGluZyBsaXN0
LiBXZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIGlmIF9jdXJyZW50TGlzdFR5cGUgaXMgV2Vi
TGlzdFR5cGU6Ok5vbmUuCisgICAgICAgIGlmIChfY3VycmVudExpc3RUeXBlID09IFdlYkxpc3RU
eXBlOjpPcmRlcmVkKQorICAgICAgICAgICAgW3dlYkhUTUxWaWV3IF9pbnNlcnRPcmRlcmVkTGlz
dF07CisgICAgICAgIGVsc2UgaWYgKF9jdXJyZW50TGlzdFR5cGUgPT0gV2ViTGlzdFR5cGU6OlVu
b3JkZXJlZCkKKyAgICAgICAgICAgIFt3ZWJIVE1MVmlldyBfaW5zZXJ0VW5vcmRlcmVkTGlzdF07
CisgICAgfSBlbHNlIGlmIChpbnNlcnRMaXN0Q29udHJvbC5zZWxlY3RlZFNlZ21lbnQgPT0gdW5v
cmRlcmVkTGlzdFNlZ21lbnQpCisgICAgICAgIFt3ZWJIVE1MVmlldyBfaW5zZXJ0VW5vcmRlcmVk
TGlzdF07CisgICAgZWxzZSBpZiAoaW5zZXJ0TGlzdENvbnRyb2wuc2VsZWN0ZWRTZWdtZW50ID09
IG9yZGVyZWRMaXN0U2VnbWVudCkKKyAgICAgICAgW3dlYkhUTUxWaWV3IF9pbnNlcnRPcmRlcmVk
TGlzdF07CisKKyAgICBbX3dlYlZpZXcgX2Rpc21pc3NUZXh0VG91Y2hCYXJQb3BvdmVySXRlbVdp
dGhJZGVudGlmaWVyOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRMaXN0XTsKK30KKworLSAo
dm9pZClzZXRDdXJyZW50TGlzdFR5cGU6KFdlYkxpc3RUeXBlKWxpc3RUeXBlCit7CisgICAgTlNT
ZWdtZW50ZWRDb250cm9sICppbnNlcnRMaXN0Q29udHJvbCA9IChOU1NlZ21lbnRlZENvbnRyb2wg
KilzZWxmLnZpZXc7CisgICAgc3dpdGNoIChsaXN0VHlwZSkgeworICAgIGNhc2UgV2ViTGlzdFR5
cGU6Ok5vbmU6CisgICAgICAgIFtpbnNlcnRMaXN0Q29udHJvbCBzZXRTZWxlY3RlZDpZRVMgZm9y
U2VnbWVudDpub0xpc3RTZWdtZW50XTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJMaXN0
VHlwZTo6T3JkZXJlZDoKKyAgICAgICAgW2luc2VydExpc3RDb250cm9sIHNldFNlbGVjdGVkOllF
UyBmb3JTZWdtZW50Om9yZGVyZWRMaXN0U2VnbWVudF07CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgV2ViTGlzdFR5cGU6OlVub3JkZXJlZDoKKyAgICAgICAgW2luc2VydExpc3RDb250cm9sIHNl
dFNlbGVjdGVkOllFUyBmb3JTZWdtZW50OnVub3JkZXJlZExpc3RTZWdtZW50XTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgX2N1cnJlbnRMaXN0VHlwZSA9IGxpc3RUeXBlOworfQorCitA
ZW5kCisKK0BpbnRlcmZhY2UgV2ViVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgOiBOU1RleHRU
b3VjaEJhckl0ZW1Db250cm9sbGVyIHsKKyAgICBCT09MIF90ZXh0SXNCb2xkOworICAgIEJPT0wg
X3RleHRJc0l0YWxpYzsKKyAgICBCT09MIF90ZXh0SXNVbmRlcmxpbmVkOworICAgIE5TVGV4dEFs
aWdubWVudCBfY3VycmVudFRleHRBbGlnbm1lbnQ7CisgICAgUmV0YWluUHRyPE5TQ29sb3I+IF90
ZXh0Q29sb3I7CisgICAgUmV0YWluUHRyPF9XZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xs
ZXI+IF93ZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXI7CisKK0Bwcml2YXRlCisgICAg
V2ViVmlldyAqX3dlYlZpZXc7Cit9CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIHRleHRJ
c0JvbGQ7CitAcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCB0ZXh0SXNJdGFsaWM7CitAcHJvcGVy
dHkgKG5vbmF0b21pYykgQk9PTCB0ZXh0SXNVbmRlcmxpbmVkOworQHByb3BlcnR5IChub25hdG9t
aWMpIE5TVGV4dEFsaWdubWVudCBjdXJyZW50VGV4dEFsaWdubWVudDsKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCByZXRhaW4sIHJlYWR3cml0ZSkgTlNDb2xvciAqdGV4dENvbG9yOworCistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldzsKK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIFdlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyCisKK0BzeW50aGVzaXpl
IHRleHRJc0JvbGQ9X3RleHRJc0JvbGQ7CitAc3ludGhlc2l6ZSB0ZXh0SXNJdGFsaWM9X3RleHRJ
c0l0YWxpYzsKK0BzeW50aGVzaXplIHRleHRJc1VuZGVybGluZWQ9X3RleHRJc1VuZGVybGluZWQ7
CitAc3ludGhlc2l6ZSBjdXJyZW50VGV4dEFsaWdubWVudD1fY3VycmVudFRleHRBbGlnbm1lbnQ7
CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3Cit7
CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisK
KyAgICBfd2ViVmlldyA9IHdlYlZpZXc7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoTlNU
b3VjaEJhckl0ZW0gKilpdGVtRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyCit7
CisgICAgTlNUb3VjaEJhckl0ZW0gKml0ZW0gPSBbc3VwZXIgaXRlbUZvcklkZW50aWZpZXI6aWRl
bnRpZmllcl07CisgICAgQk9PTCBpc1RleHRGb3JtYXRJdGVtID0gW2lkZW50aWZpZXIgaXNFcXVh
bFRvU3RyaW5nOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRGb3JtYXRdOworCisgICAgaWYg
KGlzVGV4dEZvcm1hdEl0ZW0gfHwgW2lkZW50aWZpZXIgaXNFcXVhbFRvU3RyaW5nOk5TVG91Y2hC
YXJJdGVtSWRlbnRpZmllclRleHRTdHlsZV0pCisgICAgICAgIHNlbGYudGV4dFN0eWxlLmFjdGlv
biA9IEBzZWxlY3Rvcihfd2ViQ2hhbmdlVGV4dFN0eWxlOik7CisKKyAgICBpZiAoaXNUZXh0Rm9y
bWF0SXRlbSB8fCBbaWRlbnRpZmllciBpc0VxdWFsVG9TdHJpbmc6TlNUb3VjaEJhckl0ZW1JZGVu
dGlmaWVyVGV4dEFsaWdubWVudF0pCisgICAgICAgIHNlbGYudGV4dEFsaWdubWVudHMuYWN0aW9u
ID0gQHNlbGVjdG9yKF93ZWJDaGFuZ2VUZXh0QWxpZ25tZW50Oik7CisKKyAgICBOU0NvbG9yUGlj
a2VyVG91Y2hCYXJJdGVtICpjb2xvclBpY2tlckl0ZW0gPSBuaWw7CisgICAgaWYgKFtpZGVudGlm
aWVyIGlzRXF1YWxUb1N0cmluZzpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Q29sb3JQaWNr
ZXJdICYmIFtpdGVtIGlzS2luZE9mQ2xhc3M6W05TQ29sb3JQaWNrZXJUb3VjaEJhckl0ZW0gY2xh
c3NdXSkKKyAgICAgICAgY29sb3JQaWNrZXJJdGVtID0gKE5TQ29sb3JQaWNrZXJUb3VjaEJhckl0
ZW0gKilpdGVtOworICAgIGlmIChpc1RleHRGb3JtYXRJdGVtKQorICAgICAgICBjb2xvclBpY2tl
ckl0ZW0gPSBzZWxmLmNvbG9yUGlja2VySXRlbTsKKyAgICBpZiAoY29sb3JQaWNrZXJJdGVtKSB7
CisgICAgICAgIGNvbG9yUGlja2VySXRlbS50YXJnZXQgPSBzZWxmOworICAgICAgICBjb2xvclBp
Y2tlckl0ZW0uYWN0aW9uID0gQHNlbGVjdG9yKF93ZWJDaGFuZ2VDb2xvcjopOworICAgICAgICBj
b2xvclBpY2tlckl0ZW0uc2hvd3NBbHBoYSA9IE5POworICAgIH0KKworICAgIHJldHVybiBpdGVt
OworfQorCistIChfV2ViVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyICopd2ViVGV4dExp
c3RUb3VjaEJhclZpZXdDb250cm9sbGVyCit7CisgICAgcmV0dXJuIChfV2ViVGV4dExpc3RUb3Vj
aEJhclZpZXdDb250cm9sbGVyICopW3NlbGYgdGV4dExpc3RWaWV3Q29udHJvbGxlcl07Cit9CisK
Ky0gKHZvaWQpc2V0VGV4dElzQm9sZDooQk9PTClib2xkCit7CisgICAgX3RleHRJc0JvbGQgPSBi
b2xkOworICAgIGlmIChbc2VsZi50ZXh0U3R5bGUgaXNTZWxlY3RlZEZvclNlZ21lbnQ6MF0gIT0g
X3RleHRJc0JvbGQpCisgICAgICAgIFtzZWxmLnRleHRTdHlsZSBzZXRTZWxlY3RlZDpfdGV4dElz
Qm9sZCBmb3JTZWdtZW50OjBdOworfQorCistICh2b2lkKXNldFRleHRJc0l0YWxpYzooQk9PTClp
dGFsaWMKK3sKKyAgICBfdGV4dElzSXRhbGljID0gaXRhbGljOworICAgIGlmIChbc2VsZi50ZXh0
U3R5bGUgaXNTZWxlY3RlZEZvclNlZ21lbnQ6MV0gIT0gX3RleHRJc0l0YWxpYykKKyAgICAgICAg
W3NlbGYudGV4dFN0eWxlIHNldFNlbGVjdGVkOl90ZXh0SXNJdGFsaWMgZm9yU2VnbWVudDoxXTsK
K30KKworLSAodm9pZClzZXRUZXh0SXNVbmRlcmxpbmVkOihCT09MKXVuZGVybGluZWQKK3sKKyAg
ICBfdGV4dElzVW5kZXJsaW5lZCA9IHVuZGVybGluZWQ7CisgICAgaWYgKFtzZWxmLnRleHRTdHls
ZSBpc1NlbGVjdGVkRm9yU2VnbWVudDoyXSAhPSBfdGV4dElzVW5kZXJsaW5lZCkKKyAgICAgICAg
W3NlbGYudGV4dFN0eWxlIHNldFNlbGVjdGVkOl90ZXh0SXNVbmRlcmxpbmVkIGZvclNlZ21lbnQ6
Ml07Cit9CisKKy0gKHZvaWQpX3dlYkNoYW5nZVRleHRTdHlsZTooaWQpc2VuZGVyCit7CisgICAg
aWYgKFtzZWxmLnRleHRTdHlsZSBpc1NlbGVjdGVkRm9yU2VnbWVudDowXSAhPSBfdGV4dElzQm9s
ZCkgeworICAgICAgICBfdGV4dElzQm9sZCA9ICFfdGV4dElzQm9sZDsKKyAgICAgICAgW193ZWJW
aWV3IF9leGVjdXRlQ29yZUNvbW1hbmRCeU5hbWU6QCJUb2dnbGVCb2xkIiB2YWx1ZTpAIiJdOwor
ICAgIH0KKworICAgIGlmIChbc2VsZi50ZXh0U3R5bGUgaXNTZWxlY3RlZEZvclNlZ21lbnQ6MV0g
IT0gX3RleHRJc0l0YWxpYykgeworICAgICAgICBfdGV4dElzSXRhbGljID0gIV90ZXh0SXNJdGFs
aWM7CisgICAgICAgIFtfd2ViVmlldyBfZXhlY3V0ZUNvcmVDb21tYW5kQnlOYW1lOkAiVG9nZ2xl
SXRhbGljIiB2YWx1ZTpAIiJdOworICAgIH0KKworICAgIGlmIChbc2VsZi50ZXh0U3R5bGUgaXNT
ZWxlY3RlZEZvclNlZ21lbnQ6Ml0gIT0gX3RleHRJc1VuZGVybGluZWQpIHsKKyAgICAgICAgX3Rl
eHRJc1VuZGVybGluZWQgPSAhX3RleHRJc1VuZGVybGluZWQ7CisgICAgICAgIFtfd2ViVmlldyBf
ZXhlY3V0ZUNvcmVDb21tYW5kQnlOYW1lOkAiVG9nZ2xlVW5kZXJsaW5lIiB2YWx1ZTpAIiJdOwor
ICAgIH0KK30KKworLSAodm9pZClzZXRDdXJyZW50VGV4dEFsaWdubWVudDooTlNUZXh0QWxpZ25t
ZW50KWFsaWdubWVudAoreworICAgIF9jdXJyZW50VGV4dEFsaWdubWVudCA9IGFsaWdubWVudDsK
KyAgICBbc2VsZi50ZXh0QWxpZ25tZW50cyBzZWxlY3RTZWdtZW50V2l0aFRhZzpfY3VycmVudFRl
eHRBbGlnbm1lbnRdOworfQorCistICh2b2lkKV93ZWJDaGFuZ2VUZXh0QWxpZ25tZW50OihpZClz
ZW5kZXIKK3sKKyAgICBOU1RleHRBbGlnbm1lbnQgYWxpZ25tZW50ID0gKE5TVGV4dEFsaWdubWVu
dClbc2VsZi50ZXh0QWxpZ25tZW50cy5jZWxsIHRhZ0ZvclNlZ21lbnQ6W3NlbGYudGV4dEFsaWdu
bWVudHMgc2VsZWN0ZWRTZWdtZW50XV07CisgICAgc3dpdGNoIChhbGlnbm1lbnQpIHsKKyAgICBj
YXNlIE5TVGV4dEFsaWdubWVudExlZnQ6IHsKKyAgICAgICAgX2N1cnJlbnRUZXh0QWxpZ25tZW50
ID0gTlNUZXh0QWxpZ25tZW50TGVmdDsKKyAgICAgICAgW193ZWJWaWV3IGFsaWduTGVmdDpzZW5k
ZXJdOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBOU1RleHRBbGlnbm1lbnRSaWdo
dDogeworICAgICAgICBfY3VycmVudFRleHRBbGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRSaWdo
dDsKKyAgICAgICAgW193ZWJWaWV3IGFsaWduUmlnaHQ6c2VuZGVyXTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgTlNUZXh0QWxpZ25tZW50Q2VudGVyOiB7CisgICAgICAgIF9jdXJy
ZW50VGV4dEFsaWdubWVudCA9IE5TVGV4dEFsaWdubWVudENlbnRlcjsKKyAgICAgICAgW193ZWJW
aWV3IGFsaWduQ2VudGVyOnNlbmRlcl07CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IE5TVGV4dEFsaWdubWVudEp1c3RpZmllZDogeworICAgICAgICBfY3VycmVudFRleHRBbGlnbm1l
bnQgPSBOU1RleHRBbGlnbm1lbnRKdXN0aWZpZWQ7CisgICAgICAgIFtfd2ViVmlldyBhbGlnbkp1
c3RpZmllZDpzZW5kZXJdOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgW193ZWJWaWV3IF9kaXNtaXNzVGV4dFRvdWNoQmFy
UG9wb3Zlckl0ZW1XaXRoSWRlbnRpZmllcjpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0QWxp
Z25tZW50XTsKK30KKworLSAoTlNDb2xvciAqKXRleHRDb2xvcgoreworICAgIHJldHVybiBfdGV4
dENvbG9yLmdldCgpOworfQorCistICh2b2lkKXNldFRleHRDb2xvcjooTlNDb2xvciAqKWNvbG9y
Cit7CisgICAgX3RleHRDb2xvciA9IGNvbG9yOworICAgIHNlbGYuY29sb3JQaWNrZXJJdGVtLmNv
bG9yID0gX3RleHRDb2xvci5nZXQoKTsKK30KKworLSAodm9pZClfd2ViQ2hhbmdlQ29sb3I6KGlk
KXNlbmRlcgoreworICAgIF90ZXh0Q29sb3IgPSBzZWxmLmNvbG9yUGlja2VySXRlbS5jb2xvcjsK
KyAgICBbX3dlYlZpZXcgX2V4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZTpAIkZvcmVDb2xvciIgdmFs
dWU6IFdlYkNvcmU6OmNvbG9yRnJvbU5TQ29sb3IoX3RleHRDb2xvci5nZXQoKSkuc2VyaWFsaXpl
ZCgpXTsKK30KKworLSAoTlNWaWV3Q29udHJvbGxlciAqKXRleHRMaXN0Vmlld0NvbnRyb2xsZXIK
K3sKKyAgICBpZiAoIV93ZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIpCisgICAgICAg
IF93ZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgPSBhZG9wdE5TKFtbX1dlYlRleHRM
aXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3Ol93ZWJWaWV3
XSk7CisgICAgcmV0dXJuIF93ZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIuZ2V0KCk7
Cit9CisKK0BlbmQKKworI2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFSKQorCiBAaW1wbGVtZW50YXRp
b24gV2ViVmlldyAoQWxsV2ViVmlld3MpCiAKIHN0YXRpYyBDRlNldENhbGxCYWNrcyBOb25SZXRh
aW5pbmdTZXRDYWxsYmFja3MgPSB7CkBAIC05NzAsNyArMTI1OSw3IEBAIC0gKHZvaWQpX2NvbW1v
bkluaXRpYWxpemF0aW9uV2l0aEZyYW1lTmEKICAgICB9CiAjZW5kaWYKIAotICAgIFtzZWxmIHVw
ZGF0ZVdlYlZpZXdBZGRpdGlvbnNdOworICAgIFtzZWxmIHVwZGF0ZVRvdWNoQmFyXTsKIAogI2lm
ICFQTEFURk9STShJT1MpCiAgICAgc3RhdGljIGJvb2wgZGlkT25lVGltZUluaXRpYWxpemF0aW9u
ID0gZmFsc2U7CkBAIC00NjkyLDYgKzQ5ODEsNDUgQEAgLSAodm9pZClfc2V0Rm9udEZhbGxiYWNr
UHJlZmVyc1BpY3RvZ3JhcAogICAgICAgICBfcHJpdmF0ZS0+cGFnZS0+c2V0dGluZ3MoKS5zZXRG
b250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHMoZmxhZyk7CiB9CiAKKyNpZiBIQVZFKFRPVUNI
X0JBUikKKworLSAodm9pZClzaG93Q2FuZGlkYXRlczooTlNBcnJheTxOU1RleHRDaGVja2luZ1Jl
c3VsdCAqPiAqKWNhbmRpZGF0ZXMgZm9yU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBpblJlY3Q6
KE5TUmVjdClyZWN0T2ZUeXBlZFN0cmluZyBmb3JTZWxlY3RlZFJhbmdlOihOU1JhbmdlKXJhbmdl
IHZpZXc6KE5TVmlldyAqKXZpZXcgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TVGV4dENo
ZWNraW5nUmVzdWx0ICphY2NlcHRlZENhbmRpZGF0ZSkpY29tcGxldGlvbkJsb2NrCit7CisgICAg
W3NlbGYuY2FuZGlkYXRlTGlzdCBzZXRDYW5kaWRhdGVzOmNhbmRpZGF0ZXMgZm9yU2VsZWN0ZWRS
YW5nZTpyYW5nZSBpblN0cmluZzpzdHJpbmddOworfQorCistIChCT09MKXNob3VsZFJlcXVlc3RD
YW5kaWRhdGVzCit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX3NlbGVjdGVk
T3JNYWluRnJhbWVdKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuIE5POwor
CisgICAgcmV0dXJuICFjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNz
d29yZEZpZWxkKCkgJiYgc2VsZi5jYW5kaWRhdGVMaXN0LmNhbmRpZGF0ZUxpc3RWaXNpYmxlOwor
fQorCistICh2b2lkKWZvcmNlUmVxdWVzdENhbmRpZGF0ZXNGb3JUZXN0aW5nCit7CisgICAgX3By
aXZhdGUtPl9jYW5DcmVhdGVUb3VjaEJhcnMgPSBZRVM7CisgICAgW3NlbGYgdXBkYXRlVG91Y2hC
YXJdOworfQorCisjZWxzZQorCistICh2b2lkKXNob3dDYW5kaWRhdGVzOihOU0FycmF5ICopY2Fu
ZGlkYXRlcyBmb3JTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIGluUmVjdDooTlNSZWN0KXJlY3RP
ZlR5cGVkU3RyaW5nIGZvclNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UgdmlldzooTlNWaWV3
ICopdmlldyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNUZXh0Q2hlY2tpbmdSZXN1bHQg
KmFjY2VwdGVkQ2FuZGlkYXRlKSljb21wbGV0aW9uQmxvY2sKK3sKK30KKworLSAodm9pZClmb3Jj
ZVJlcXVlc3RDYW5kaWRhdGVzRm9yVGVzdGluZworeworfQorCistIChCT09MKXNob3VsZFJlcXVl
c3RDYW5kaWRhdGVzCit7CisgICAgcmV0dXJuIE5POworfQorCisjZW5kaWYgLy8gSEFWRShUT1VD
SF9CQVIpCisKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIF9XZWJTYWZlRm9yd2FyZGVyCkBAIC00
ODA0LDYgKzUxMzIsMTEgQEAgLSAoTlNNZXRob2RTaWduYXR1cmUgKiltZXRob2RTaWduYXR1cmVG
bwogQGVuZAogI2VuZGlmCiAKKyNpZiBIQVZFKFRPVUNIX0JBUikKK0BpbnRlcmZhY2UgV2ViVmll
dyAoKSA8TlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtRGVsZWdhdGUsIE5TVG91Y2hCYXJEZWxl
Z2F0ZSwgTlNUb3VjaEJhclByb3ZpZGVyPgorQGVuZAorI2VuZGlmCisKIEBpbXBsZW1lbnRhdGlv
biBXZWJWaWV3CiAKICsgKHZvaWQpaW5pdGlhbGl6ZQpAQCAtNjQ4OCw2ICs2ODIxLDg3IEBAIC0g
KE5TVmlldyAqKXByZXZpb3VzVmFsaWRLZXlWaWV3CiAgICAgcmV0dXJuIFtwcmV2aW91c1ZpZXcg
cHJldmlvdXNWYWxpZEtleVZpZXddOwogfQogCisjaWYgSEFWRShUT1VDSF9CQVIpCisKK0BkeW5h
bWljIHRvdWNoQmFyOworCistIChOU1RvdWNoQmFyICopbWFrZVRvdWNoQmFyCit7CisgICAgaWYg
KCFfcHJpdmF0ZS0+X2NhbkNyZWF0ZVRvdWNoQmFycykgeworICAgICAgICBfcHJpdmF0ZS0+X2Nh
bkNyZWF0ZVRvdWNoQmFycyA9IFlFUzsKKyAgICAgICAgW3NlbGYgdXBkYXRlVG91Y2hCYXJdOwor
ICAgIH0KKyAgICByZXR1cm4gX3ByaXZhdGUtPl9jdXJyZW50VG91Y2hCYXIuZ2V0KCk7Cit9CisK
Ky0gKE5TVG91Y2hCYXJJdGVtICopdG91Y2hCYXI6KE5TVG91Y2hCYXIgKil0b3VjaEJhciBtYWtl
SXRlbUZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcgoreworICAgIGlmICh0b3Vj
aEJhciA9PSBfcHJpdmF0ZS0+X3JpY2hUZXh0VG91Y2hCYXIgfHwgdG91Y2hCYXIgPT0gX3ByaXZh
dGUtPl9wbGFpblRleHRUb3VjaEJhcikKKyAgICAgICAgcmV0dXJuIFtfcHJpdmF0ZS0+X3RleHRU
b3VjaEJhckl0ZW1Db250cm9sbGVyIGl0ZW1Gb3JJZGVudGlmaWVyOmlkZW50aWZpZXJdOworCisg
ICAgcmV0dXJuIG5pbDsKK30KKworc3RhdGljIFRleHRDaGVja2luZ1Jlc3VsdCB0ZXh0Q2hlY2tp
bmdSZXN1bHRGcm9tTlNUZXh0Q2hlY2tpbmdSZXN1bHQoTlNUZXh0Q2hlY2tpbmdSZXN1bHQgKm5z
UmVzdWx0KQoreworICAgIFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CisKKyAg
ICBzd2l0Y2ggKFtuc1Jlc3VsdCByZXN1bHRUeXBlXSkgeworICAgIGNhc2UgTlNUZXh0Q2hlY2tp
bmdUeXBlU3BlbGxpbmc6CisgICAgICAgIHJlc3VsdC50eXBlID0gV2ViQ29yZTo6VGV4dENoZWNr
aW5nVHlwZVNwZWxsaW5nOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5TVGV4dENoZWNraW5n
VHlwZVJlcGxhY2VtZW50OgorICAgICAgICByZXN1bHQudHlwZSA9IFdlYkNvcmU6OlRleHRDaGVj
a2luZ1R5cGVSZXBsYWNlbWVudDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOU1RleHRDaGVj
a2luZ1R5cGVDb3JyZWN0aW9uOgorICAgICAgICByZXN1bHQudHlwZSA9IFdlYkNvcmU6OlRleHRD
aGVja2luZ1R5cGVDb3JyZWN0aW9uOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXN1bHQudHlwZSA9IFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGVOb25lOworICAgIH0K
KworICAgIE5TUmFuZ2UgcmVzdWx0UmFuZ2UgPSBuc1Jlc3VsdC5yYW5nZTsKKyAgICByZXN1bHQu
bG9jYXRpb24gPSByZXN1bHRSYW5nZS5sb2NhdGlvbjsKKyAgICByZXN1bHQubGVuZ3RoID0gcmVz
dWx0UmFuZ2UubGVuZ3RoOworICAgIHJlc3VsdC5yZXBsYWNlbWVudCA9IG5zUmVzdWx0LnJlcGxh
Y2VtZW50U3RyaW5nOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAodm9pZCljYW5kaWRh
dGVMaXN0VG91Y2hCYXJJdGVtOihOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gKilhbkl0ZW0g
ZW5kU2VsZWN0aW5nQ2FuZGlkYXRlQXRJbmRleDooTlNJbnRlZ2VyKWluZGV4Cit7CisgICAgaWYg
KGluZGV4ID09IE5TTm90Rm91bmQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChhbkl0ZW0g
IT0gc2VsZi5jYW5kaWRhdGVMaXN0KQorICAgICAgICByZXR1cm47CisKKyAgICBOU0FycmF5ICpj
YW5kaWRhdGVzID0gYW5JdGVtLmNhbmRpZGF0ZXM7CisgICAgaWYgKChOU1VJbnRlZ2VyKWluZGV4
ID49IGNhbmRpZGF0ZXMuY291bnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlkIGNhbmRpZGF0
ZSA9IGNhbmRpZGF0ZXNbaW5kZXhdOworICAgIEFTU0VSVChbY2FuZGlkYXRlIGlzS2luZE9mQ2xh
c3M6W05TVGV4dENoZWNraW5nUmVzdWx0IGNsYXNzXV0pOworCisgICAgaWYgKEZyYW1lKiBjb3Jl
RnJhbWUgPSBjb3JlKHNlbGYuX3NlbGVjdGVkT3JNYWluRnJhbWUpKQorICAgICAgICBjb3JlRnJh
bWUtPmVkaXRvcigpLmNsaWVudCgpLT5oYW5kbGVBY2NlcHRlZENhbmRpZGF0ZVdpdGhTb2Z0U3Bh
Y2VzKHRleHRDaGVja2luZ1Jlc3VsdEZyb21OU1RleHRDaGVja2luZ1Jlc3VsdCgoTlNUZXh0Q2hl
Y2tpbmdSZXN1bHQgKiljYW5kaWRhdGUpKTsKK30KKworLSAodm9pZCljYW5kaWRhdGVMaXN0VG91
Y2hCYXJJdGVtOihOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gKilhbkl0ZW0gY2hhbmdlZENh
bmRpZGF0ZUxpc3RWaXNpYmlsaXR5OihCT09MKWlzVmlzaWJsZQoreworICAgIGlmIChhbkl0ZW0g
IT0gc2VsZi5jYW5kaWRhdGVMaXN0KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaXNWaXNp
YmxlKSB7CisgICAgICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfc2VsZWN0
ZWRPck1haW5GcmFtZV0pKQorICAgICAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS5jbGllbnQo
KS0+cmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb24oY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKSk7CisgICAgfQorCisgICAgW3NlbGYgdXBkYXRlVG91Y2hCYXJdOworfQorCisj
ZW5kaWYgLy8gSEFWRShUT1VDSF9CQVIpCisKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdlYlZp
ZXcgKFdlYklCQWN0aW9ucykKQEAgLTY3NDYsNDggKzcxNjAsNiBAQCAtIChCT09MKXZhbGlkYXRl
VXNlckludGVyZmFjZUl0ZW06KGlkIDxOCiAKIEBlbmQKIAotI2lmIFBMQVRGT1JNKE1BQykgJiYg
X19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAgJiYgVVNFKEFQUExFX0lO
VEVSTkFMX1NESykKLSNpbXBvcnQgPFdlYktpdEFkZGl0aW9ucy9XZWJWaWV3QWRkaXRpb25zLm1t
PgotI2Vsc2UKLUBpbXBsZW1lbnRhdGlvbiBXZWJWaWV3IChXZWJVcGRhdGVXZWJWaWV3QWRkaXRp
b25zKQotCi0tICh2b2lkKXVwZGF0ZVdlYlZpZXdBZGRpdGlvbnMKLXsKLX0KLQotLSAodm9pZClw
cmVwYXJlRm9yTW91c2VEb3duCi17Ci19Ci0KLS0gKHZvaWQpcHJlcGFyZUZvck1vdXNlVXAKLXsK
LX0KLQotLSAodm9pZClzaG93Q2FuZGlkYXRlczooTlNBcnJheSAqKWNhbmRpZGF0ZXMgZm9yU3Ry
aW5nOihOU1N0cmluZyAqKXN0cmluZyBpblJlY3Q6KE5TUmVjdClyZWN0T2ZUeXBlZFN0cmluZyBm
b3JTZWxlY3RlZFJhbmdlOihOU1JhbmdlKXJhbmdlIHZpZXc6KE5TVmlldyAqKXZpZXcgY29tcGxl
dGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TVGV4dENoZWNraW5nUmVzdWx0ICphY2NlcHRlZENhbmRp
ZGF0ZSkpY29tcGxldGlvbkJsb2NrCi17Ci19Ci0KLS0gKHZvaWQpZm9yY2VSZXF1ZXN0Q2FuZGlk
YXRlc0ZvclRlc3RpbmcKLXsKLX0KLQotLSAoQk9PTClzaG91bGRSZXF1ZXN0Q2FuZGlkYXRlcwot
ewotICAgIHJldHVybiBOTzsKLX0KLQotLSAodm9pZCl3ZWJWaWV3QWRkaXRpb25zV2lsbERlc3Ry
b3lWaWV3Ci17Ci19Ci0KLS0gKGlkKWNhbmRpZGF0ZUxpc3QKLXsKLSAgICByZXR1cm4gbmlsOwot
fQotCi1AZW5kCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05f
TUlOX1JFUVVJUkVEID49IDEwMTIwMCAmJiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotCiBAaW1w
bGVtZW50YXRpb24gV2ViVmlldyAoV2ViUGVuZGluZ1B1YmxpYykKIAogLSAodm9pZClzY2hlZHVs
ZUluUnVuTG9vcDooTlNSdW5Mb29wICopcnVuTG9vcCBmb3JNb2RlOihOU1N0cmluZyAqKW1vZGUK
QEAgLTg2NTYsNyArOTAyOCw3IEBAIC0gKHZvaWQpX3NldFVwUGxheWJhY2tDb250cm9sc01hbmFn
ZXJGb3IKICAgICBpZiAoIV9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCiAgICAg
ICAgIF9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UgPSBXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWM6OmNyZWF0ZSgqX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKTsK
IAotICAgIFtzZWxmIHVwZGF0ZVdlYlZpZXdBZGRpdGlvbnNdOworICAgIFtzZWxmIHVwZGF0ZVRv
dWNoQmFyXTsKIH0KIAogLSAodm9pZClfY2xlYXJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcgpAQCAt
ODY2OSw3ICs5MDQxLDcgQEAgLSAodm9pZClfY2xlYXJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcgog
CiAgICAgX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbk1vZGVsID0gbnVsbHB0cjsKICAgICBfcHJp
dmF0ZS0+cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlID0gbnVsbHB0cjsKLSAgICBbc2VsZiB1cGRh
dGVXZWJWaWV3QWRkaXRpb25zXTsKKyAgICBbc2VsZiB1cGRhdGVUb3VjaEJhcl07CiB9CiAjZW5k
aWYgLy8gUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCiAj
ZW5kaWYgLy8gRU5BQkxFKFZJREVPKQpAQCAtODg5OCw2ICs5MjcwLDM0MiBAQCAtICh2b2lkKV9z
ZXRNb2NrTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlCiB9CiAjZW5kaWYKIAorI2lmIEhBVkUoVE9V
Q0hfQkFSKQorLSAodm9pZClfZGlzbWlzc1RleHRUb3VjaEJhclBvcG92ZXJJdGVtV2l0aElkZW50
aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcgoreworICAgIE5TVG91Y2hCYXJJdGVtICpmb3Vu
ZEl0ZW0gPSBuaWw7CisgICAgZm9yIChOU1RvdWNoQmFySXRlbSAqaXRlbSBpbiBzZWxmLnRleHRU
b3VjaEJhci5pdGVtcykgeworICAgICAgICBpZiAoW2l0ZW0uaWRlbnRpZmllciBpc0VxdWFsVG9T
dHJpbmc6aWRlbnRpZmllcl0pIHsKKyAgICAgICAgICAgIGZvdW5kSXRlbSA9IGl0ZW07CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChbaXRlbS5pZGVudGlmaWVy
IGlzRXF1YWxUb1N0cmluZzpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Rm9ybWF0XSkgewor
ICAgICAgICAgICAgZm9yIChOU1RvdWNoQmFySXRlbSAqY2hpbGRJdGVtIGluIFsoTlNHcm91cFRv
dWNoQmFySXRlbSAqKWl0ZW0gZ3JvdXBUb3VjaEJhcl0uaXRlbXMpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoW2NoaWxkSXRlbS5pZGVudGlmaWVyIGlzRXF1YWxUb1N0cmluZzppZGVudGlmaWVyXSkg
eworICAgICAgICAgICAgICAgICAgICBmb3VuZEl0ZW0gPSBjaGlsZEl0ZW07CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKFtmb3VuZEl0ZW0gaXNL
aW5kT2ZDbGFzczpbTlNQb3BvdmVyVG91Y2hCYXJJdGVtIGNsYXNzXV0pCisgICAgICAgIFsoTlNQ
b3BvdmVyVG91Y2hCYXJJdGVtICopZm91bmRJdGVtIGRpc21pc3NQb3BvdmVyOm5pbF07Cit9CisK
Ky0gKE5TQXJyYXk8TlNTdHJpbmcgKj4gKilfdGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkFsbG93
ZWRJZGVudGlmaWVycworeworICAgIHJldHVybiBAWyBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJD
aGFyYWN0ZXJQaWNrZXIsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRDb2xvclBpY2tlciwg
TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dFN0eWxlLCBOU1RvdWNoQmFySXRlbUlkZW50aWZp
ZXJUZXh0QWxpZ25tZW50LCBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0TGlzdCwgTlNUb3Vj
aEJhckl0ZW1JZGVudGlmaWVyRmxleGlibGVTcGFjZSBdOworfQorCistIChOU0FycmF5PE5TU3Ry
aW5nICo+ICopX3BsYWluVGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkRlZmF1bHRJdGVtSWRlbnRp
ZmllcnMKK3sKKyAgICByZXR1cm4gQFsgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyQ2hhcmFjdGVy
UGlja2VyLCBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJDYW5kaWRhdGVMaXN0IF07Cit9CisKKy0g
KE5TQXJyYXk8TlNTdHJpbmcgKj4gKilfcmljaFRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25EZWZh
dWx0SXRlbUlkZW50aWZpZXJzCit7CisgICAgcmV0dXJuIEBbIE5TVG91Y2hCYXJJdGVtSWRlbnRp
ZmllckNoYXJhY3RlclBpY2tlciwgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEZvcm1hdCwg
TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyQ2FuZGlkYXRlTGlzdCBdOworfQorCistICh2b2lkKXRv
dWNoQmFyRGlkRXhpdEN1c3RvbWl6YXRpb246KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9u
Cit7CisgICAgX3ByaXZhdGUtPl9pc0N1c3RvbWl6aW5nVG91Y2hCYXIgPSBOTzsKKyAgICBbc2Vs
ZiB1cGRhdGVUb3VjaEJhcl07Cit9CisKKy0gKHZvaWQpdG91Y2hCYXJXaWxsRW50ZXJDdXN0b21p
emF0aW9uOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIF9wcml2YXRlLT5f
aXNDdXN0b21pemluZ1RvdWNoQmFyID0gWUVTOworfQorCistICh2b2lkKWRpZENoYW5nZUF1dG9t
YXRpY1RleHRDb21wbGV0aW9uOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAg
IGlmIChfcHJpdmF0ZS0+X3JpY2hUZXh0VG91Y2hCYXIpCisgICAgICAgIFtzZWxmIHNldFVwVGV4
dFRvdWNoQmFyOl9wcml2YXRlLT5fcmljaFRleHRUb3VjaEJhci5nZXQoKV07CisKKyAgICBpZiAo
X3ByaXZhdGUtPl9wbGFpblRleHRUb3VjaEJhcikKKyAgICAgICAgW3NlbGYgc2V0VXBUZXh0VG91
Y2hCYXI6X3ByaXZhdGUtPl9wbGFpblRleHRUb3VjaEJhci5nZXQoKV07CisKKyAgICBbc2VsZiB1
cGRhdGVUb3VjaEJhcl07Cit9CisKKy0gKHZvaWQpc2V0VXBUZXh0VG91Y2hCYXI6KE5TVG91Y2hC
YXIgKil0ZXh0VG91Y2hCYXIKK3sKKyAgICBCT09MIGlzUmljaFRleHRUb3VjaEJhciA9IHRleHRU
b3VjaEJhciA9PSBfcHJpdmF0ZS0+X3JpY2hUZXh0VG91Y2hCYXI7CisgICAgW3RleHRUb3VjaEJh
ciBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICBbdGV4dFRvdWNoQmFyIHNldERlZmF1bHRJdGVtczpb
TlNNdXRhYmxlU2V0IHNldFdpdGhPYmplY3RzOmlzUmljaFRleHRUb3VjaEJhciA/IF9wcml2YXRl
LT5fcmljaFRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtLmdldCgpIDogX3ByaXZhdGUtPl9w
bGFpblRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtLmdldCgpLCBuaWxdXTsKKyAgICBbdGV4
dFRvdWNoQmFyIHNldEN1c3RvbWl6YXRpb25BbGxvd2VkSXRlbUlkZW50aWZpZXJzOltzZWxmIF90
ZXh0VG91Y2hCYXJDdXN0b21pemF0aW9uQWxsb3dlZElkZW50aWZpZXJzXV07CisKKyAgICBOU0Fy
cmF5PE5TU3RyaW5nICo+ICpkZWZhdWx0SWRlbnRpZmllcnMgPSBpc1JpY2hUZXh0VG91Y2hCYXIg
PyBbc2VsZiBfcmljaFRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25EZWZhdWx0SXRlbUlkZW50aWZp
ZXJzXSA6IFtzZWxmIF9wbGFpblRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25EZWZhdWx0SXRlbUlk
ZW50aWZpZXJzXTsKKyAgICBbdGV4dFRvdWNoQmFyIHNldEN1c3RvbWl6YXRpb25EZWZhdWx0SXRl
bUlkZW50aWZpZXJzOmRlZmF1bHRJZGVudGlmaWVyc107CisKKyAgICBpZiAoTlNHcm91cFRvdWNo
QmFySXRlbSAqdGV4dEZvcm1hdEl0ZW0gPSAoTlNHcm91cFRvdWNoQmFySXRlbSAqKVt0ZXh0VG91
Y2hCYXIgaXRlbUZvcklkZW50aWZpZXI6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEZvcm1h
dF0pCisgICAgICAgIHRleHRGb3JtYXRJdGVtLmdyb3VwVG91Y2hCYXIuY3VzdG9taXphdGlvbklk
ZW50aWZpZXIgPSBAIldlYlRleHRGb3JtYXRUb3VjaEJhciI7Cit9CisKKy0gKEJPT0wpX2lzUmlj
aGx5RWRpdGFibGUKK3sKKyAgICBOU1ZpZXcgKmRvY3VtZW50VmlldyA9IHNlbGYuX3NlbGVjdGVk
T3JNYWluRnJhbWUuZnJhbWVWaWV3LmRvY3VtZW50VmlldzsKKyAgICBpZiAoIVtkb2N1bWVudFZp
ZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuIE5P
OworCisgICAgV2ViSFRNTFZpZXcgKndlYkhUTUxWaWV3ID0gKFdlYkhUTUxWaWV3ICopZG9jdW1l
bnRWaWV3OworICAgIHJldHVybiB3ZWJIVE1MVmlldy5faXNFZGl0YWJsZSAmJiB3ZWJIVE1MVmll
dy5fY2FuRWRpdFJpY2hseTsKK30KKworLSAoTlNUb3VjaEJhciAqKXRleHRUb3VjaEJhcgorewor
ICAgIGlmIChzZWxmLl9pc1JpY2hseUVkaXRhYmxlKQorICAgICAgICByZXR1cm4gX3ByaXZhdGUt
Pl9yaWNoVGV4dFRvdWNoQmFyLmdldCgpOworCisgICAgcmV0dXJuIF9wcml2YXRlLT5fcGxhaW5U
ZXh0VG91Y2hCYXIuZ2V0KCk7Cit9CisKKy0gKHZvaWQpdXBkYXRlVGV4dFRvdWNoQmFyCit7Cisg
ICAgaWYgKF9wcml2YXRlLT5faXNEZWZlcnJpbmdUZXh0VG91Y2hCYXJVcGRhdGVzKSB7CisgICAg
ICAgIF9wcml2YXRlLT5fbmVlZHNEZWZlcnJlZFRleHRUb3VjaEJhclVwZGF0ZSA9IFlFUzsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE5TVmlldyAqZG9jdW1lbnRWaWV3ID0gW1tbc2Vs
ZiBfc2VsZWN0ZWRPck1haW5GcmFtZV0gZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOworICAgIGlm
ICghW2RvY3VtZW50VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgV2ViSFRNTFZpZXcgKndlYkhUTUxWaWV3ID0gKFdlYkhU
TUxWaWV3ICopZG9jdW1lbnRWaWV3OworICAgIGlmICghW3dlYkhUTUxWaWV3IF9pc0VkaXRhYmxl
XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYg
X3NlbGVjdGVkT3JNYWluRnJhbWVdKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKF9wcml2YXRlLT5faXNVcGRhdGluZ1RleHRUb3VjaEJhcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgVGVtcG9yYXJ5Q2hhbmdlPEJPT0w+IGlzVXBkYXRpbmdUZXh0VG91
Y2hCYXIoX3ByaXZhdGUtPl9pc1VwZGF0aW5nVGV4dFRvdWNoQmFyLCBZRVMpOworCisgICAgaWYg
KCFfcHJpdmF0ZS0+X3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyKQorICAgICAgICBfcHJpdmF0
ZS0+X3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyID0gYWRvcHROUyhbW1dlYlRleHRUb3VjaEJh
ckl0ZW1Db250cm9sbGVyIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6c2VsZl0pOworCisgICAgaWYg
KCFfcHJpdmF0ZS0+X3N0YXJ0ZWRMaXN0ZW5pbmdUb0N1c3RvbWl6YXRpb25FdmVudHMpIHsKKyAg
ICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpz
ZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih0b3VjaEJhckRpZEV4aXRDdXN0b21pemF0aW9uOikgbmFt
ZTpOU1RvdWNoQmFyRGlkRXhpdEN1c3RvbWl6YXRpb24gb2JqZWN0Om5pbF07CisgICAgICAgIFtb
TlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxl
Y3RvcjpAc2VsZWN0b3IodG91Y2hCYXJXaWxsRW50ZXJDdXN0b21pemF0aW9uOikgbmFtZTpOU1Rv
dWNoQmFyV2lsbEVudGVyQ3VzdG9taXphdGlvbiBvYmplY3Q6bmlsXTsKKyAgICAgICAgW1tOU05v
dGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9y
OkBzZWxlY3RvcihkaWRDaGFuZ2VBdXRvbWF0aWNUZXh0Q29tcGxldGlvbjopIG5hbWU6TlNTcGVs
bENoZWNrZXJEaWRDaGFuZ2VBdXRvbWF0aWNUZXh0Q29tcGxldGlvbk5vdGlmaWNhdGlvbiBvYmpl
Y3Q6bmlsXTsKKyAgICAgICAgX3ByaXZhdGUtPl9zdGFydGVkTGlzdGVuaW5nVG9DdXN0b21pemF0
aW9uRXZlbnRzID0gWUVTOworICAgIH0KKworICAgIGlmICghX3ByaXZhdGUtPl9wbGFpblRleHRD
YW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtIHx8ICFfcHJpdmF0ZS0+X3JpY2hUZXh0Q2FuZGlkYXRl
TGlzdFRvdWNoQmFySXRlbSkgeworICAgICAgICBfcHJpdmF0ZS0+X3BsYWluVGV4dENhbmRpZGF0
ZUxpc3RUb3VjaEJhckl0ZW0gPSBhZG9wdE5TKFtbTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVt
IGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyQ2FuZGlk
YXRlTGlzdF0pOworICAgICAgICBbX3ByaXZhdGUtPl9wbGFpblRleHRDYW5kaWRhdGVMaXN0VG91
Y2hCYXJJdGVtIHNldERlbGVnYXRlOnNlbGZdOworICAgICAgICBfcHJpdmF0ZS0+X3JpY2hUZXh0
Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSA9IGFkb3B0TlMoW1tOU0NhbmRpZGF0ZUxpc3RUb3Vj
aEJhckl0ZW0gYWxsb2NdIGluaXRXaXRoSWRlbnRpZmllcjpOU1RvdWNoQmFySXRlbUlkZW50aWZp
ZXJDYW5kaWRhdGVMaXN0XSk7CisgICAgICAgIFtfcHJpdmF0ZS0+X3JpY2hUZXh0Q2FuZGlkYXRl
TGlzdFRvdWNoQmFySXRlbSBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICAgICAgY29yZUZyYW1lLT5l
ZGl0b3IoKS5jbGllbnQoKS0+cmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb24oY29yZUZyYW1l
LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgfQorCisgICAgaWYgKCFfcHJpdmF0ZS0+
X3JpY2hUZXh0VG91Y2hCYXIpIHsKKyAgICAgICAgX3ByaXZhdGUtPl9yaWNoVGV4dFRvdWNoQmFy
ID0gYWRvcHROUyhbW05TVG91Y2hCYXIgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgW3NlbGYgc2V0
VXBUZXh0VG91Y2hCYXI6X3ByaXZhdGUtPl9yaWNoVGV4dFRvdWNoQmFyLmdldCgpXTsKKyAgICAg
ICAgW19wcml2YXRlLT5fcmljaFRleHRUb3VjaEJhciBzZXRDdXN0b21pemF0aW9uSWRlbnRpZmll
cjpAIldlYlJpY2hUZXh0VG91Y2hCYXIiXTsKKyAgICB9CisKKyAgICBpZiAoIV9wcml2YXRlLT5f
cGxhaW5UZXh0VG91Y2hCYXIpIHsKKyAgICAgICAgX3ByaXZhdGUtPl9wbGFpblRleHRUb3VjaEJh
ciA9IGFkb3B0TlMoW1tOU1RvdWNoQmFyIGFsbG9jXSBpbml0XSk7CisgICAgICAgIFtzZWxmIHNl
dFVwVGV4dFRvdWNoQmFyOl9wcml2YXRlLT5fcGxhaW5UZXh0VG91Y2hCYXIuZ2V0KCldOworICAg
ICAgICBbX3ByaXZhdGUtPl9wbGFpblRleHRUb3VjaEJhciBzZXRDdXN0b21pemF0aW9uSWRlbnRp
ZmllcjpAIldlYlBsYWluVGV4dFRvdWNoQmFyIl07CisgICAgfQorCisgICAgaWYgKFtOU1NwZWxs
Q2hlY2tlciBpc0F1dG9tYXRpY1RleHRDb21wbGV0aW9uRW5hYmxlZF0gJiYgIV9wcml2YXRlLT5f
aXNDdXN0b21pemluZ1RvdWNoQmFyKSB7CisgICAgICAgIEJPT0wgc2hvdWxkU2hvd0NhbmRpZGF0
ZUxpc3QgPSAhY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkgfHwg
Y29yZUZyYW1lLT5lZGl0b3IoKS5pZ25vcmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZSgpOwor
ICAgICAgICBbc2VsZi5jYW5kaWRhdGVMaXN0IHVwZGF0ZVdpdGhJbnNlcnRpb25Qb2ludFZpc2li
aWxpdHk6c2hvdWxkU2hvd0NhbmRpZGF0ZUxpc3RdOworICAgIH0KKworICAgIGlmIChjb3JlRnJh
bWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpIHsKKyAgICAg
ICAgLy8gV2UgZG9uJ3QgcmVxdWVzdCBjYW5kaWRhdGVzIGZvciBwYXNzd29yZCBmaWVsZHMuIElm
IHRoZSB1c2VyIHdhcyBwcmV2aW91c2x5IGluIGEgbm9uLXBhc3N3b3JkIGZpZWxkLCB0aGVuIHRo
ZQorICAgICAgICAvLyBvbGQgY2FuZGlkYXRlcyB3aWxsIHN0aWxsIHNob3cgYnkgZGVmYXVsdCwg
c28gd2UgY2xlYXIgdGhlbSBoZXJlIGJ5IHNldHRpbmcgYW4gZW1wdHkgYXJyYXkgb2YgY2FuZGlk
YXRlcy4KKyAgICAgICAgaWYgKCFfcHJpdmF0ZS0+X2VtcHR5Q2FuZGlkYXRlc0FycmF5KQorICAg
ICAgICAgICAgX3ByaXZhdGUtPl9lbXB0eUNhbmRpZGF0ZXNBcnJheSA9IGFkb3B0TlMoW1tOU0Fy
cmF5IGFsbG9jXSBpbml0XSk7CisgICAgICAgIFtzZWxmLmNhbmRpZGF0ZUxpc3Qgc2V0Q2FuZGlk
YXRlczpfcHJpdmF0ZS0+X2VtcHR5Q2FuZGlkYXRlc0FycmF5LmdldCgpIGZvclNlbGVjdGVkUmFu
Z2U6TlNNYWtlUmFuZ2UoMCwgMCkgaW5TdHJpbmc6bmlsXTsKKyAgICB9CisKKyAgICBOU1RvdWNo
QmFyICp0ZXh0VG91Y2hCYXIgPSBzZWxmLnRleHRUb3VjaEJhcjsKKyAgICBOU0FycmF5PE5TU3Ry
aW5nICo+ICppdGVtSWRlbnRpZmllcnMgPSB0ZXh0VG91Y2hCYXIuaXRlbUlkZW50aWZpZXJzOwor
ICAgIEJPT0wgaXNTaG93aW5nQ29tYmluZWRUZXh0Rm9ybWF0SXRlbSA9IFtpdGVtSWRlbnRpZmll
cnMgY29udGFpbnNPYmplY3Q6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEZvcm1hdF07Cisg
ICAgW3RleHRUb3VjaEJhciBzZXRQcmluY2lwYWxJdGVtSWRlbnRpZmllcjppc1Nob3dpbmdDb21i
aW5lZFRleHRGb3JtYXRJdGVtID8gTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEZvcm1hdCA6
IG5pbF07CisKKyAgICAvLyBTZXQgY3VycmVudCB0eXBpbmcgYXR0cmlidXRlcyBmb3IgcmljaCB0
ZXh0LiBUaGlzIHdpbGwgZW5zdXJlIHRoYXQgdGhlIGJ1dHRvbnMgcmVmbGVjdCB0aGUgc3RhdGUg
b2YKKyAgICAvLyB0aGUgdGV4dCB3aGVuIGNoYW5naW5nIHNlbGVjdGlvbiB0aHJvdWdob3V0IHRo
ZSBkb2N1bWVudC4KKyAgICBpZiAod2ViSFRNTFZpZXcuX2NhbkVkaXRSaWNobHkpIHsKKyAgICAg
ICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gY29yZUZyYW1lLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKKyAgICAgICAgaWYgKCFzZWxlY3Rpb24uaXNOb25lKCkpIHsKKyAg
ICAgICAgICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsKKyAgICAgICAgICAgIGlmIChhdXRvKiBzdHls
ZSA9IEVkaXRvcjo6c3R5bGVGb3JTZWxlY3Rpb25TdGFydChjb3JlRnJhbWUsIG5vZGVUb1JlbW92
ZSkpIHsKKyAgICAgICAgICAgICAgICBbX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJv
bGxlciBzZXRUZXh0SXNCb2xkOihzdHlsZS0+Zm9udENhc2NhZGUoKS53ZWlnaHQoKSA+PSBGb250
V2VpZ2h0Qm9sZCldOworICAgICAgICAgICAgICAgIFtfcHJpdmF0ZS0+X3RleHRUb3VjaEJhckl0
ZW1Db250cm9sbGVyIHNldFRleHRJc0l0YWxpYzooc3R5bGUtPmZvbnRDYXNjYWRlKCkuaXRhbGlj
KCkgPT0gRm9udEl0YWxpY09uKV07CisKKyAgICAgICAgICAgICAgICBSZWZQdHI8RWRpdGluZ1N0
eWxlPiB0eXBpbmdTdHlsZSA9IGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKTsK
KyAgICAgICAgICAgICAgICBpZiAodHlwaW5nU3R5bGUgJiYgdHlwaW5nU3R5bGUtPnN0eWxlKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gdHlwaW5nU3R5bGUtPnN0eWxl
KCktPmdldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVm
ZmVjdCk7CisgICAgICAgICAgICAgICAgICAgIFtfcHJpdmF0ZS0+X3RleHRUb3VjaEJhckl0ZW1D
b250cm9sbGVyIHNldFRleHRJc1VuZGVybGluZWQ6dmFsdWUuY29udGFpbnMoInVuZGVybGluZSIp
XTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgW19wcml2YXRl
LT5fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzVW5kZXJsaW5lZDooc3R5bGUt
PnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCkgJiBUZXh0RGVjb3JhdGlvblVuZGVybGluZSldOwor
CisgICAgICAgICAgICAgICAgaWYgKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlDb2xvcikuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICBbX3ByaXZhdGUtPl90
ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRUZXh0Q29sb3I6bnNDb2xvcihzdHlsZS0+dmlz
aXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKV07CisKKyAgICAgICAgICAgICAg
ICBOU1RleHRBbGlnbm1lbnQgdGV4dEFsaWdubWVudDsKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KHN0eWxlLT50ZXh0QWxpZ24oKSkgeworICAgICAgICAgICAgICAgIGNhc2UgUklHSFQ6CisgICAg
ICAgICAgICAgICAgY2FzZSBXRUJLSVRfUklHSFQ6CisgICAgICAgICAgICAgICAgICAgIHRleHRB
bGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRSaWdodDsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2FzZSBMRUZUOgorICAgICAgICAgICAgICAgIGNhc2UgV0VC
S0lUX0xFRlQ6CisgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbm1lbnQgPSBOU1RleHRBbGln
bm1lbnRMZWZ0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlIENFTlRFUjoKKyAgICAgICAgICAgICAgICBjYXNlIFdFQktJVF9DRU5URVI6CisgICAgICAg
ICAgICAgICAgICAgIHRleHRBbGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRDZW50ZXI7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSlVTVElGWToKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dEFsaWdubWVudCA9IE5TVGV4dEFsaWdubWVudEp1c3RpZmll
ZDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBUQVNU
QVJUOgorICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ25tZW50ID0gc3R5bGUtPmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSA/IE5TVGV4dEFsaWdubWVudExlZnQgOiBOU1RleHRBbGlnbm1lbnRS
aWdodDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBU
QUVORDoKKyAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWdubWVudCA9IHN0eWxlLT5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkgPyBOU1RleHRBbGlnbm1lbnRSaWdodCA6IE5TVGV4dEFsaWdubWVu
dExlZnQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBbX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRD
dXJyZW50VGV4dEFsaWdubWVudDp0ZXh0QWxpZ25tZW50XTsKKworICAgICAgICAgICAgICAgIEhU
TUxFbGVtZW50KiBlbmNsb3NpbmdMaXN0RWxlbWVudCA9IGVuY2xvc2luZ0xpc3Qoc2VsZWN0aW9u
LnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKGVuY2xvc2lu
Z0xpc3RFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpczxIVE1MVUxpc3RFbGVt
ZW50PigqZW5jbG9zaW5nTGlzdEVsZW1lbnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgW1tf
cHJpdmF0ZS0+X3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHdlYlRleHRMaXN0VG91Y2hCYXJW
aWV3Q29udHJvbGxlcl0gc2V0Q3VycmVudExpc3RUeXBlOldlYkxpc3RUeXBlOjpVbm9yZGVyZWRd
OworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpczxIVE1MT0xpc3RFbGVtZW50PigqZW5j
bG9zaW5nTGlzdEVsZW1lbnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgW1tfcHJpdmF0ZS0+
X3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHdlYlRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJv
bGxlcl0gc2V0Q3VycmVudExpc3RUeXBlOldlYkxpc3RUeXBlOjpPcmRlcmVkXTsKKyAgICAgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIFtbX3By
aXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciB3ZWJUZXh0TGlzdFRvdWNoQmFyVmll
d0NvbnRyb2xsZXJdIHNldEN1cnJlbnRMaXN0VHlwZTpXZWJMaXN0VHlwZTo6Tm9uZV07CisKKyAg
ICAgICAgICAgICAgICBpZiAobm9kZVRvUmVtb3ZlKQorICAgICAgICAgICAgICAgICAgICBub2Rl
VG9SZW1vdmUtPnJlbW92ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEJP
T0wgaXNTaG93aW5nQ2FuZGlkYXRlTGlzdEl0ZW0gPSBbaXRlbUlkZW50aWZpZXJzIGNvbnRhaW5z
T2JqZWN0Ok5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckNhbmRpZGF0ZUxpc3RdICYmIFtOU1NwZWxs
Q2hlY2tlciBpc0F1dG9tYXRpY1RleHRDb21wbGV0aW9uRW5hYmxlZF07CisgICAgICAgIFtfcHJp
dmF0ZS0+X3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFVzZXNOYXJyb3dUZXh0U3R5bGVJ
dGVtOmlzU2hvd2luZ0NvbWJpbmVkVGV4dEZvcm1hdEl0ZW0gJiYgaXNTaG93aW5nQ2FuZGlkYXRl
TGlzdEl0ZW1dOworICAgIH0KK30KKworLSAodm9pZCl1cGRhdGVNZWRpYVRvdWNoQmFyCit7Cisj
aWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIGlmICghX3ByaXZh
dGUtPm1lZGlhVG91Y2hCYXJQcm92aWRlcikKKyAgICAgICAgX3ByaXZhdGUtPm1lZGlhVG91Y2hC
YXJQcm92aWRlciA9IGFkb3B0TlMoW2FsbG9jQVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNQ
cm92aWRlckluc3RhbmNlKCkgaW5pdF0pOworCisgICAgaWYgKCFbX3ByaXZhdGUtPm1lZGlhVG91
Y2hCYXJQcm92aWRlciBwbGF5YmFja0NvbnRyb2xzQ29udHJvbGxlcl0pIHsKKyAgICAgICAgQVNT
RVJUKF9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpOworICAgICAgICBXZWJQbGF5
YmFja0NvbnRyb2xzTWFuYWdlciAqbWFuYWdlciA9IF9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2UtPnBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCk7CisgICAgICAgIFtfcHJpdmF0ZS0+
bWVkaWFUb3VjaEJhclByb3ZpZGVyIHNldFBsYXliYWNrQ29udHJvbHNDb250cm9sbGVyOihpZCA8
QVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNDb250cm9sbGluZz4pbWFuYWdlcl07CisgICAg
ICAgIFtfcHJpdmF0ZS0+bWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyBzZXRQbGF5YmFja0NvbnRy
b2xzQ29udHJvbGxlcjooaWQgPEFWRnVuY3Rpb25CYXJQbGF5YmFja0NvbnRyb2xzQ29udHJvbGxp
bmc+KW1hbmFnZXJdOworICAgIH0KKyNlbmRpZgorfQorCistICh2b2lkKXVwZGF0ZVRvdWNoQmFy
Cit7CisgICAgaWYgKCFfcHJpdmF0ZS0+X2NhbkNyZWF0ZVRvdWNoQmFycykKKyAgICAgICAgcmV0
dXJuOworCisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX3NlbGVjdGVkT3JNYWlu
RnJhbWVdKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNU
b3VjaEJhciAqdG91Y2hCYXIgPSBuaWw7CisgICAgTlNWaWV3ICpkb2N1bWVudFZpZXcgPSBbW1tz
ZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CisgICAg
aWYgKFtkb2N1bWVudFZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkgewor
ICAgICAgICBXZWJIVE1MVmlldyAqd2ViSFRNTFZpZXcgPSAoV2ViSFRNTFZpZXcgKilkb2N1bWVu
dFZpZXc7CisgICAgICAgIGlmIChbd2ViSFRNTFZpZXcgX2lzRWRpdGFibGVdKSB7CisgICAgICAg
ICAgICBbc2VsZiB1cGRhdGVUZXh0VG91Y2hCYXJdOworICAgICAgICAgICAgdG91Y2hCYXIgPSBb
c2VsZiB0ZXh0VG91Y2hCYXJdOworICAgICAgICB9CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19D
T05UUk9MU19NQU5BR0VSKQorICAgICAgICBlbHNlIGlmIChbc2VsZiBfaGFzQWN0aXZlVmlkZW9G
b3JDb250cm9sc0ludGVyZmFjZV0pIHsKKyAgICAgICAgICAgIFtzZWxmIHVwZGF0ZU1lZGlhVG91
Y2hCYXJdOworICAgICAgICAgICAgdG91Y2hCYXIgPSBbX3ByaXZhdGUtPm1lZGlhVG91Y2hCYXJQ
cm92aWRlciByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHRvdWNoQmFyKV0gPyBbKGlkKV9w
cml2YXRlLT5tZWRpYVRvdWNoQmFyUHJvdmlkZXIgdG91Y2hCYXJdIDogWyhpZClfcHJpdmF0ZS0+
bWVkaWFUb3VjaEJhclByb3ZpZGVyIHRvdWNoQmFyXTsKKyAgICAgICAgfSBlbHNlIGlmIChbX3By
aXZhdGUtPm1lZGlhVG91Y2hCYXJQcm92aWRlciBwbGF5YmFja0NvbnRyb2xzQ29udHJvbGxlcl0p
IHsKKyAgICAgICAgICAgIFtfcHJpdmF0ZS0+bWVkaWFUb3VjaEJhclByb3ZpZGVyIHNldFBsYXli
YWNrQ29udHJvbHNDb250cm9sbGVyOm5pbF07CisgICAgICAgICAgICBbX3ByaXZhdGUtPm1lZGlh
UGxheWJhY2tDb250cm9sc1ZpZXcgc2V0UGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXI6bmlsXTsK
KyAgICAgICAgfQorI2VuZGlmCisgICAgfQorCisgICAgaWYgKHRvdWNoQmFyID09IF9wcml2YXRl
LT5fY3VycmVudFRvdWNoQmFyKQorICAgICAgICByZXR1cm47CisKKyAgICBfcHJpdmF0ZS0+X2N1
cnJlbnRUb3VjaEJhciA9IHRvdWNoQmFyOworICAgIFtzZWxmIHdpbGxDaGFuZ2VWYWx1ZUZvcktl
eTpAInRvdWNoQmFyIl07CisgICAgW3NlbGYgc2V0VG91Y2hCYXI6X3ByaXZhdGUtPl9jdXJyZW50
VG91Y2hCYXIuZ2V0KCldOworICAgIFtzZWxmIGRpZENoYW5nZVZhbHVlRm9yS2V5OkAidG91Y2hC
YXIiXTsKK30KKworLSAodm9pZClwcmVwYXJlRm9yTW91c2VEb3duCit7CisgICAgX3ByaXZhdGUt
Pl9uZWVkc0RlZmVycmVkVGV4dFRvdWNoQmFyVXBkYXRlID0gTk87CisgICAgX3ByaXZhdGUtPl9p
c0RlZmVycmluZ1RleHRUb3VjaEJhclVwZGF0ZXMgPSBZRVM7Cit9CisKKy0gKHZvaWQpcHJlcGFy
ZUZvck1vdXNlVXAKK3sKKyAgICBpZiAoIV9wcml2YXRlLT5faXNEZWZlcnJpbmdUZXh0VG91Y2hC
YXJVcGRhdGVzKQorICAgICAgICByZXR1cm47CisKKyAgICBfcHJpdmF0ZS0+X2lzRGVmZXJyaW5n
VGV4dFRvdWNoQmFyVXBkYXRlcyA9IE5POworICAgIGlmIChfcHJpdmF0ZS0+X25lZWRzRGVmZXJy
ZWRUZXh0VG91Y2hCYXJVcGRhdGUpIHsKKyAgICAgICAgLy8gT25seSB0cmlnZ2VyIGFub3RoZXIg
dXBkYXRlIGlmIHdlIGF0dGVtcHRlZCBhbmQgYmFpbGVkIGZyb20gYW4gdXBkYXRlIGR1cmluZyB0
aGUgZGVmZXJyYWwuCisgICAgICAgIFtzZWxmIHVwZGF0ZVRvdWNoQmFyXTsKKyAgICB9Cit9CisK
Ky0gKHZvaWQpd2ViVmlld0FkZGl0aW9uc1dpbGxEZXN0cm95VmlldworeworICAgIFtbTlNOb3Rp
ZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZl07Cit9CisK
Ky0gKE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSAqKWNhbmRpZGF0ZUxpc3QKK3sKKyAgICBy
ZXR1cm4gc2VsZi5faXNSaWNobHlFZGl0YWJsZSA/IF9wcml2YXRlLT5fcmljaFRleHRDYW5kaWRh
dGVMaXN0VG91Y2hCYXJJdGVtLmdldCgpIDogX3ByaXZhdGUtPl9wbGFpblRleHRDYW5kaWRhdGVM
aXN0VG91Y2hCYXJJdGVtLmdldCgpOworfQorI2Vsc2UKKworLSAodm9pZCl1cGRhdGVUb3VjaEJh
cgoreworfQorCistICh2b2lkKXByZXBhcmVGb3JNb3VzZURvd24KK3sKK30KKworLSAodm9pZClw
cmVwYXJlRm9yTW91c2VVcAoreworfQorCistICh2b2lkKXdlYlZpZXdBZGRpdGlvbnNXaWxsRGVz
dHJveVZpZXcKK3sKK30KKworLSAoaWQpY2FuZGlkYXRlTGlzdAoreworICAgIHJldHVybiBuaWw7
Cit9CisKKyNlbmRpZgorCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJWaWV3IChXZWJWaWV3
RGV2aWNlT3JpZW50YXRpb24pCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZp
ZXdEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3
RGF0YS5oCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlZpZXdEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw4ICsxMDEsMTAgQEAgY2xhc3MgV2Vi
Vmlld0dyb3VwOwogY2xhc3MgV2ViU2VsZWN0aW9uU2VydmljZUNvbnRyb2xsZXI7CiAjZW5kaWYK
IAotI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+
PSAxMDEyMDAgJiYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLSNpbXBvcnQgPFdlYktpdEFkZGl0
aW9ucy9XZWJWaWV3RGF0YUFkZGl0aW9uc0RlY2xhcmF0aW9ucy5oPgorI2lmIEhBVkUoVE9VQ0hf
QkFSKQorQGNsYXNzIFdlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyOworQGNsYXNzIEFWRnVu
Y3Rpb25CYXJQbGF5YmFja0NvbnRyb2xzUHJvdmlkZXI7CitAY2xhc3MgQVZGdW5jdGlvbkJhclNj
cnViYmVyOwogI2VuZGlmCiAKIGNsYXNzIFdlYlZpZXdMYXllckZsdXNoU2NoZWR1bGVyIDogcHVi
bGljIFdlYkNvcmU6OkxheWVyRmx1c2hTY2hlZHVsZXIgewpAQCAtMTc4LDkgKzE4MCwyNCBAQCBA
aW50ZXJmYWNlIFdlYlZpZXdQcml2YXRlIDogTlNPYmplY3QgewogI2lmIFBMQVRGT1JNKE1BQykK
ICAgICBXZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyICppbW1lZGlhdGVBY3Rpb25Db250cm9s
bGVyOwogCi0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAgJiYg
VVNFKEFQUExFX0lOVEVSTkFMX1NESykKLSNpbXBvcnQgPFdlYktpdEFkZGl0aW9ucy9XZWJWaWV3
RGF0YUFkZGl0aW9ucy5oPgotI2VuZGlmCisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgUmV0YWlu
UHRyPE5TVG91Y2hCYXI+IF9jdXJyZW50VG91Y2hCYXI7CisgICAgUmV0YWluUHRyPE5TVG91Y2hC
YXI+IF9wbGFpblRleHRUb3VjaEJhcjsKKyAgICBSZXRhaW5QdHI8TlNUb3VjaEJhcj4gX3JpY2hU
ZXh0VG91Y2hCYXI7CisgICAgUmV0YWluUHRyPFdlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVy
PiBfdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXI7CisgICAgUmV0YWluUHRyPE5TQ2FuZGlkYXRl
TGlzdFRvdWNoQmFySXRlbT4gX3JpY2hUZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTsKKyAg
ICBSZXRhaW5QdHI8TlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtPiBfcGxhaW5UZXh0Q2FuZGlk
YXRlTGlzdFRvdWNoQmFySXRlbTsKKyAgICBSZXRhaW5QdHI8TlNBcnJheT4gX2VtcHR5Q2FuZGlk
YXRlc0FycmF5OworICAgIFJldGFpblB0cjxBVkZ1bmN0aW9uQmFyUGxheWJhY2tDb250cm9sc1By
b3ZpZGVyPiBtZWRpYVRvdWNoQmFyUHJvdmlkZXI7CisgICAgUmV0YWluUHRyPEFWRnVuY3Rpb25C
YXJTY3J1YmJlcj4gbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzsKKworICAgIEJPT0wgX2NhbkNy
ZWF0ZVRvdWNoQmFyczsKKyAgICBCT09MIF9pc1VwZGF0aW5nVGV4dFRvdWNoQmFyOworICAgIEJP
T0wgX3N0YXJ0ZWRMaXN0ZW5pbmdUb0N1c3RvbWl6YXRpb25FdmVudHM7CisgICAgQk9PTCBfaXND
dXN0b21pemluZ1RvdWNoQmFyOworICAgIEJPT0wgX2lzRGVmZXJyaW5nVGV4dFRvdWNoQmFyVXBk
YXRlczsKKyAgICBCT09MIF9uZWVkc0RlZmVycmVkVGV4dFRvdWNoQmFyVXBkYXRlOworI2VuZGlm
IC8vIEhBVkUoVE9VQ0hfQkFSKQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlRleHRJ
bmRpY2F0b3JXaW5kb3c+IHRleHRJbmRpY2F0b3JXaW5kb3c7CiAgICAgQk9PTCBoYXNJbml0aWFs
aXplZExvb2t1cE9ic2VydmVyOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJW
aWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlZpZXdJbnRlcm5hbC5oCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw3IEBA
IGNsYXNzIFdlYlNlbGVjdGlvblNlcnZpY2VDb250cm9sbGVyOwogCiAjZW5kaWYKIAorQGNsYXNz
IE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTsKIEBjbGFzcyBXZWJCYXNlUGx1Z2luUGFja2Fn
ZTsKIEBjbGFzcyBXZWJEb3dubG9hZDsKIEBjbGFzcyBXZWJJbW1lZGlhdGVBY3Rpb25Db250cm9s
bGVyOwpAQCAtMjkzLDEyICsyOTQsMTEgQEAgQGludGVyZmFjZSBXZWJWaWV3IChXZWJWaWV3T3Ro
ZXJJbnRlcm5hbAogLSAodm9pZClfc2V0TW9ja01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJOYW1l
OihOU1N0cmluZyAqKW5hbWUgc3RhdGU6KFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRDb250
ZXh0OjpTdGF0ZSlzdGF0ZTsKICNlbmRpZgogCi1AZW5kCi0KLUBpbnRlcmZhY2UgV2ViVmlldyAo
V2ViVXBkYXRlV2ViVmlld0FkZGl0aW9ucykKIC0gKHZvaWQpcHJlcGFyZUZvck1vdXNlVXA7CiAt
ICh2b2lkKXByZXBhcmVGb3JNb3VzZURvd247Ci0tICh2b2lkKXVwZGF0ZVdlYlZpZXdBZGRpdGlv
bnM7CistICh2b2lkKXVwZGF0ZVRvdWNoQmFyOwogLSAodm9pZCl3ZWJWaWV3QWRkaXRpb25zV2ls
bERlc3Ryb3lWaWV3OwotLSAoaWQpY2FuZGlkYXRlTGlzdDsKKy0gKHZvaWQpX2Rpc21pc3NUZXh0
VG91Y2hCYXJQb3BvdmVySXRlbVdpdGhJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXI7
CistIChOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gKiljYW5kaWRhdGVMaXN0OworCiBAZW5k
CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdQcml2YXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3UHJpdmF0ZS5oCShyZXZp
c2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdQcml2YXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTg4OSw2ICs4ODksMTAgQEAgQ291bGQgYmUgd29ydGggYWRk
aW5nIHRvIHRoZSBBUEkuCiAKIC0gKHZvaWQpX3NldEZvbnRGYWxsYmFja1ByZWZlcnNQaWN0b2dy
YXBoczooQk9PTClmbGFnOwogCistICh2b2lkKXNob3dDYW5kaWRhdGVzOihOU0FycmF5ICopY2Fu
ZGlkYXRlcyBmb3JTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIGluUmVjdDooTlNSZWN0KXJlY3RP
ZlR5cGVkU3RyaW5nIGZvclNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UgdmlldzooTlNWaWV3
ICopdmlldyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNUZXh0Q2hlY2tpbmdSZXN1bHQg
KmFjY2VwdGVkQ2FuZGlkYXRlKSljb21wbGV0aW9uQmxvY2s7CistICh2b2lkKWZvcmNlUmVxdWVz
dENhbmRpZGF0ZXNGb3JUZXN0aW5nOworLSAoQk9PTClzaG91bGRSZXF1ZXN0Q2FuZGlkYXRlczsK
KwogQGVuZAogCiAjaWYgIVRBUkdFVF9PU19JUEhPTkUKQEAgLTEwNjEsMTIgKzEwNjUsNiBAQCBA
aW50ZXJmYWNlIE5TT2JqZWN0IChXZWJWaWV3UmVzb3VyY2VMb2FkCiAtIChOU0NhY2hlZFVSTFJl
c3BvbnNlICopd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciByZXNvdXJjZTooaWQpaWRlbnRpZmll
ciB3aWxsQ2FjaGVSZXNwb25zZTooTlNDYWNoZWRVUkxSZXNwb25zZSAqKXJlc3BvbnNlIGZyb21E
YXRhU291cmNlOihXZWJEYXRhU291cmNlICopZGF0YVNvdXJjZTsKIEBlbmQKIAotQGludGVyZmFj
ZSBXZWJWaWV3IChXZWJTaG93Q2FuZGlkYXRlcykKLS0gKHZvaWQpc2hvd0NhbmRpZGF0ZXM6KE5T
QXJyYXkgKiljYW5kaWRhdGVzIGZvclN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgaW5SZWN0OihO
U1JlY3QpcmVjdE9mVHlwZWRTdHJpbmcgZm9yU2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlyYW5nZSB2
aWV3OihOU1ZpZXcgKil2aWV3IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU1RleHRDaGVj
a2luZ1Jlc3VsdCAqYWNjZXB0ZWRDYW5kaWRhdGUpKWNvbXBsZXRpb25CbG9jazsKLS0gKHZvaWQp
Zm9yY2VSZXF1ZXN0Q2FuZGlkYXRlc0ZvclRlc3Rpbmc7Ci0tIChCT09MKXNob3VsZFJlcXVlc3RD
YW5kaWRhdGVzOwotQGVuZAotCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewogI2Vu
ZGlmCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDg0MDUpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNyBAQAorMjAxNi0xMS0wNCAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+
CisKKyAgICAgICAgU3VwcG9ydCBUb3VjaEJhciBpbiBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDQzNworICAgICAgICAtYW5kIGNvcnJl
c3BvbmRpbmctCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzI4ODc2NTI0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBtYWtlcyBNaW5pQnJvd3Nl
ciBzdXBwb3J0IFRvdWNoQmFyIGN1c3RvbWl6YXRpb24uIAorCisgICAgICAgICogTWluaUJyb3dz
ZXIvbWFjL0FwcERlbGVnYXRlLm06CisgICAgICAgICgtW0Jyb3dzZXJBcHBEZWxlZ2F0ZSBhd2Fr
ZUZyb21OaWJdKToKKwogMjAxNi0xMS0wNCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNl
bkB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMDgyOTMu
CkluZGV4OiBUb29scy9NaW5pQnJvd3Nlci9tYWMvQXBwRGVsZWdhdGUubQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9NaW5pQnJvd3Nlci9tYWMvQXBwRGVsZWdhdGUubQkocmV2aXNpb24gMjA4NDA1KQor
KysgVG9vbHMvTWluaUJyb3dzZXIvbWFjL0FwcERlbGVnYXRlLm0JKHdvcmtpbmcgY29weSkKQEAg
LTczLDYgKzczLDkgQEAgLSAodm9pZClhd2FrZUZyb21OaWIKICNlbmRpZgogCiAgICAgW1tOU0Fw
cCBtYWluTWVudV0gaW5zZXJ0SXRlbTpbaXRlbSBhdXRvcmVsZWFzZV0gYXRJbmRleDpbW05TQXBw
IG1haW5NZW51XSBpbmRleE9mSXRlbVdpdGhUaXRsZTpAIkRlYnVnIl1dOworCisgICAgaWYgKFtO
U0FwcCByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNldEF1dG9tYXRpY0N1c3RvbWl6ZVRv
dWNoQmFyTWVudUl0ZW1FbmFibGVkOildKQorICAgICAgICBbTlNBcHAgc2V0QXV0b21hdGljQ3Vz
dG9taXplVG91Y2hCYXJNZW51SXRlbUVuYWJsZWQ6WUVTXTsKIH0KIAogI2lmIFdLX0FQSV9FTkFC
TEVECg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293989</attachid>
            <date>2016-11-04 23:47:39 -0700</date>
            <delta_ts>2016-11-04 23:58:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-8.txt</filename>
            <type>text/plain</type>
            <size>118273</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE2LTExLTA0ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBTdXBwb3J0IFRvdWNoQmFyIGluIFdl
YktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0
NDM3CisgICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0v
Mjg4NzY1MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9y
bS9zcGkvY29jb2EvQVZLaXRTUEkuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcGkvY29jb2EvTlNU
b3VjaEJhclNQSS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxD
aGVja2VyU1BJLmg6CisKIDIwMTYtMTEtMDQgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgogCiAgICAgICAgIEluZGV4ZWREQiAyLjA6IENsZWFuIHVwIG1vcmUgdHJhbnNhY3Rpb24g
YWJvcnQgYW5kIGV4Y2VwdGlvbiB0aHJvd2luZyBiZWhhdmlvciBmcm9tIElEQk9iamVjdFN0b3Jl
LgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMjA4NDA1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNTY0LDEwICsxNTY0LDEw
IEBACiAJCTQxNjJBNDU3MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQxNjJBNDU1MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
LmNwcCAqLzsgfTsKIAkJNDE2MkE0NTgxMDExNDY0NzAwREZGM0VEIC8qIEpTRGVkaWNhdGVkV29y
a2VyR2xvYmFsU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQxNjJBNDU2MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlLmggKi87IH07CiAJCTQxNkUyOUE2MTAyRkE5NjIwMDdGQzE0RSAvKiBXb3JrZXJSZXBv
cnRpbmdQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDE2RTI5QTUxMDJGQTk2MjAwN0ZDMTRFIC8qIFdvcmtlclJlcG9ydGluZ1Byb3h5LmggKi87
IH07CisJCTQxNkU2RkU4MUJCRDEyREYwMDBBM0Y2NCAvKiBSZWFkYWJsZVN0cmVhbUludGVybmFs
c0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTQxNkU2RkU4MUJCRDEyREYwMDBBNjAyMyAvKiBGZXRjaEludGVybmFsc0J1aWx0aW5zLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMx
MTBEMDBCNzY0QjkgLyogRmV0Y2hJbnRlcm5hbHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjAz
MyAvKiBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEM5IC8qIFN0cmVhbUlu
dGVybmFsc0J1aWx0aW5zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJNDE2RTZGRTgxQkJEMTJERjAwMEEzRjY0IC8qIFJlYWRhYmxlQnl0ZVN0cmVh
bUludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVCeXRlU3RyZWFt
SW50ZXJuYWxzQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQk0MTZFNkZFODFCQkQxMkRGMDAwQTYwNDMgLyogUmVhZGFibGVTdHJlYW1J
bnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOUIwM0Q4MDYxQkIzMTEwRDAwQjczRjY0IC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJu
YWxzQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk0MTZFNkZFODFCQkQxMkRGMDAwQTYwNDMgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50
ZXJuYWxzQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRl
cm5hbHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjA1MyAvKiBXcml0YWJsZVN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RTkgLyogV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNC
dWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTQxNkU2RkU5MUJCRDEyRTUwMDBBNjA0MyAvKiBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFC
QjMxMTBEMDBCNzY0RDggLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxNkU2RkU5MUJCRDEyRTUwMDBB
NjA1MyAvKiBXcml0YWJsZVN0cmVhbUJ1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RTggLyogV3JpdGFi
bGVTdHJlYW1CdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0yNTkwLDggKzI1OTAsOCBAQAogCQk2QjY5M0EyRTFDNTFBODJFMDBCMDNC
RUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZCNjkzQTJEMUM1MUE4MkUwMEIwM0JFRiAvKiBSZXNvdXJjZUxv
YWRPYnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTZCNjkzQTM0MUM1MUE5NUQwMEIwM0JFRiAvKiBSZXNvdXJjZUxvYWRPYnNlcnZlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QjY5M0Ez
MzFDNTFBOTVEMDBCMDNCRUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwICovOyB9OwogCQk2
QzRDOTZERTFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNEM5
NkRBMUFENDQ4MzUwMDM2M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuY3Bw
ICovOyB9OwotCQk2QzRDOTZERjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJl
YW1Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2QzRDOTZEQjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250
cm9sbGVyLmggKi87IH07CiAJCTZDNEM5NkRFMUFENDQ4MzUwMDM2NUE1MCAvKiBKU1JlYWRhYmxl
U3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkM0Qzk2REExQUQ0NDgzNTAwMzY1QTUwIC8qIEpTUmVhZGFibGVT
dHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHAgKi87IH07CisJCTZDNEM5NkRGMUFENDQ4MzUwMDM2
M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNEM5NkRCMUFENDQ4MzUwMDM2M0Y2NCAv
KiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaCAqLzsgfTsKIAkJNkM0Qzk2REYxQUQ0
NDgzNTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0Qzk2REIxQUQ0NDgz
NTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5oICovOyB9Owog
CQk2QzYzODg5NUE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlh
dG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM2
Mzg4OTNBOTZDQ0VFNTBDOEM5NDZDIC8qIENhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2QzYz
ODg5NkE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzYzODg5
NEE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5jcHAg
Ki87IH07CkBAIC0zMjc0LDYgKzMyNzQsNyBAQAogCQk5MzMwOUVBMzA5OUVCNzhDMDA1NkU1ODEg
LyogU2hhcmVkVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzMzA5RUEwMDk5RUI3OEMwMDU2RTU4MSAvKiBTaGFyZWRUaW1lci5oICovOyB9Owog
CQk5MzMwOUVBNDA5OUVCNzhDMDA1NkU1ODEgLyogVGltZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlFQTEwOTlFQjc4QzAwNTZFNTgxIC8q
IFRpbWVyLmNwcCAqLzsgfTsKIAkJOTMzNTRBM0MwQjI0RjhDOTAwM0Y2REVBIC8qIFVJRXZlbnRX
aXRoS2V5U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTMzNTRBM0IwQjI0RjhDOTAwM0Y2REVBIC8qIFVJRXZlbnRXaXRoS2V5U3RhdGUuY3Bw
ICovOyB9OworCQk5MzM1QjQ5RDFEQ0JFRjdDMDBFRDQ2OEUgLyogTlNUb3VjaEJhclNQSS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzNUI0OUIxRENC
RUY3MTAwRUQ0NjhFIC8qIE5TVG91Y2hCYXJTUEkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5MzNBMTQyRTBCN0QxODg2MDBBNTNGRkQgLyogVGV4
dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzM0ExNDJCMEI3RDE4ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuY3BwICovOyB9OwogCQk5MzNB
MTQzMDBCN0QxODg2MDBBNTNGRkQgLyogVGV4dEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzNBMTQyRDBCN0QxODg2MDBBNTNGRkQgLyogVGV4
dEV2ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJOTMzQTE0QjgwQjdEMUQ1MjAwQTUzRkZEIC8qIEpTVGV4dEV2ZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzM0ExNEI2MEI3RDFENTIwMEE1
M0ZGRCAvKiBKU1RleHRFdmVudC5jcHAgKi87IH07CkBAIC05NzgyLDggKzk3ODMsOCBAQAogCQk2
QjY5M0EyRDFDNTFBODJFMDBCMDNCRUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkI2OTNBMzMxQzUxQTk1RDAwQjAzQkVGIC8qIFJlc291
cmNlTG9hZE9ic2VydmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlc291cmNlTG9hZE9ic2VydmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NkM0Qzk2REExQUQ0NDgzNTAwMzYzRjY0IC8qIEpTUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1JlYWRhYmxlQnl0
ZVN0cmVhbUNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzRD
OTZEQjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUmVhZGFibGVCeXRlU3RyZWFtQ29u
dHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QzRDOTZEQTFBRDQ0ODM1
MDAzNjVBNTAgLyogSlNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29u
dHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZDNEM5NkRCMUFENDQ4
MzUwMDM2M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZDNEM5NkRCMUFENDQ4MzUwMDM2NUE1MCAv
KiBKU1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZDNjM4ODkzQTk2Q0NFRTUwQzhDOTQ2QyAvKiBDYWNo
ZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTZDNjM4ODk0QTk2Q0NFRTUwQzhDOTQ2QyAvKiBDYWNoZWRSZXNvdXJj
ZVJlcXVlc3RJbml0aWF0b3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTEwNzIyLDYgKzEwNzIzLDcgQEAKIAkJOTMzMkFCOEIxNjUzQTk3OTAw
RDgyN0VDIC8qIEZFTGlnaHRpbmdORU9OLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZFTGlnaHRpbmdORU9OLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMzJB
QjhDMTY1M0E5NzkwMEQ4MjdFQyAvKiBORU9OSGVscGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBORU9OSGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5MzM1NEEzQjBCMjRGOEM5MDAzRjZERUEgLyogVUlFdmVudFdpdGhLZXlTdGF0ZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVSUV2ZW50V2l0aEtleVN0YXRlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTMzNUI0OUIxRENCRUY3MTAwRUQ0NjhF
IC8qIE5TVG91Y2hCYXJTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTlNU
b3VjaEJhclNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzNBMTQyQjBCN0Qx
ODg2MDBBNTNGRkQgLyogVGV4dEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFRleHRFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkz
M0ExNDJDMEI3RDE4ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFRleHRFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzM0Ex
NDJEMEI3RDE4ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGV4dEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MTE3NSw4ICsxMTE3Nyw4IEBACiAJCTk5MDhCMEYwMUJDQUNGOTEwMEVEM0Y2NCAvKiBSZWFkYWJs
ZUJ5dGVTdHJlYW1Db250cm9sbGVyLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0
OyBwYXRoID0gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlci5qczsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTkwOEIwRjExQkNBQ0Y5MTAwRUQwRjU1IC8qIFN0cmVhbUludGVybmFs
cy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFN0cmVhbUludGVy
bmFscy5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkwOEIwRjExQkNBQ0Y5MTAw
RUQwRjY1IC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzLmpzICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVhZGFibGVTdHJlYW1JbnRlcm5hbHMuanM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk5MDhCMEYxMUJDQUNGOTEwMEVEM0Y2NCAvKiBSZWFkYWJs
ZUJ5dGVTdHJlYW1JbnRlcm5hbHMuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7
IHBhdGggPSBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHMuanM7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTk5MDhCMEYxMUJDQUNGOTEwMEVEMEY3NSAvKiBXcml0YWJsZVN0cmVhbUlu
dGVybmFscy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFdyaXRh
YmxlU3RyZWFtSW50ZXJuYWxzLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OTA4
QjBGMTFCQ0FDRjkxMDBFRDNGNjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzLmpzICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVhZGFibGVCeXRlU3RyZWFt
SW50ZXJuYWxzLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGMjFCQ0FD
RjkxMDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyLmpzICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVy
LmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGMzFCQ0FDRkZFMDBFRDBG
NjUgLyogQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJ5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3lCdWlsdGlu
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5MDhCMEY1MUJDQUQwN0QwMEVE
MEY2NSAvKiBCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5QnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTE4NCwxNSArMTExODYsMTMgQEAKIAkJ
OTkwOEIwRjcxQkNBRDA3RDAwRUQwRjY1IC8qIENvdW50UXVldWluZ1N0cmF0ZWd5QnVpbHRpbnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ291bnRRdWV1aW5nU3RyYXRlZ3lC
dWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGOTFCQ0FEMDdE
MDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkwOEIwRjkxQkNBRDA3RDAwRUQwRjc1IC8qIFdyaXRhYmxl
U3RyZWFtQnVpbHRpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V3JpdGFibGVTdHJlYW1CdWlsdGlucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTk5MDhCMEZBMUJDQUQwN0QwMEVEM0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVy
QnVpbHRpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFi
bGVCeXRlU3RyZWFtQ29udHJvbGxlckJ1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJOTkwOEIwRkIxQkNBRDA3RDAwRUQzRjY0IC8qIFJlYWRhYmxlQnl0ZVN0cmVhbUNv
bnRyb2xsZXJCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFk
YWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQnVpbHRpbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTkwOEIwRkExQkNBRDA3RDAwRUQwRjY1IC8qIFJlYWRhYmxlU3RyZWFtRGVmYXVs
dENvbnRyb2xsZXJCdWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQnVpbHRpbnMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGQjFCQ0FEMDdEMDBFRDBGNjUgLyogUmVhZGFi
bGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckJ1aWx0aW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJCdWlsdGlucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGRDFCQ0FEMDdEMDBFRDBGNDUgLyog
RmV0Y2hJbnRlcm5hbHNCdWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGZXRjaEludGVybmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTkwOEIwRkQxQkNBRDA3RDAwRUQwRjU1IC8qIFN0cmVhbUludGVybmFsc0J1aWx0
aW5zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTkwOEIwRkQx
QkNBRDA3RDAwRUQzRjY0IC8qIFJlYWRhYmxlQnl0ZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlYWRhYmxlQnl0ZVN0cmVh
bUludGVybmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkw
OEIwRkQxQkNBRDA3RDAwRUQwRjY1IC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFibGVTdHJlYW1J
bnRlcm5hbHNCdWlsdGlucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5MDhC
MEZEMUJDQUQwN0QwMEVEMEY3NSAvKiBXcml0YWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdyaXRhYmxlU3RyZWFtSW50
ZXJuYWxzQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OTA4QjBG
RDFCQ0FEMDdEMDBFRDNGNjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFibGVCeXRlU3Ry
ZWFtSW50ZXJuYWxzQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
OTA4QjBGRTFCQ0FEMDdEMDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyQnVp
bHRpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFibGVT
dHJlYW1EZWZhdWx0UmVhZGVyQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5OTA4QjBGRjFCQ0FEMDdEMDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVh
ZGVyQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVhZGFibGVT
dHJlYW1EZWZhdWx0UmVhZGVyQnVpbHRpbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTkyMDM5ODAxOEI5NUJDNjAwQjM5QUY5IC8qIFVzZXJJbnB1dEJyaWRnZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVc2VySW5wdXRCcmlkZ2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEyMzAsMTAgKzExMjMwLDEwIEBACiAJCTlBNTI4
RTgyMTdEN0Y1MkYwMEFBOTUxOCAvKiBGbG9hdGluZ09iamVjdHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRmxvYXRpbmdPYmplY3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTlBQjFGMzdFMThFMjQ4OUEwMDUzNDc0MyAvKiBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUFCMUYzN0YxOEUy
NDg5QTAwNTM0NzQzIC8qIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAv
KiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0QjkgLyog
RmV0Y2hJbnRlcm5hbHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGZXRjaEludGVybmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTlCMDNEODA2MUJCMzExMEQwMEI3NjRDOSAvKiBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDgg
LyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5h
bHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZUJ5
dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZVN0cmVhbUlu
dGVybmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMDNEODA2
MUJCMzExMEQwMEI3NjRFOCAvKiBXcml0YWJsZVN0cmVhbUJ1aWx0aW5zLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyaXRhYmxlU3RyZWFtQnVpbHRpbnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEU5IC8qIFdyaXRhYmxl
U3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTcyNTcsNiArMTcyNTcsNyBAQAogCQkJCTJEREI5N0YzMTlGOUFFQ0EwMDIw
MjVEOCAvKiBOU0V4dGVuc2lvblNQSS5oICovLAogCQkJCUNFMTI1MjNBMUExNjcxMTAwMDg2NDQ4
MCAvKiBOU0ZpbGVNYW5hZ2VyU1BJLmggKi8sCiAJCQkJQ0UxMjUyNTIxQTFCRUMwNjAwODY0NDgw
IC8qIE5TU3RyaW5nU1BJLmggKi8sCisJCQkJOTMzNUI0OUIxRENCRUY3MTAwRUQ0NjhFIC8qIE5T
VG91Y2hCYXJTUEkuaCAqLywKIAkJCQkzMUIzMTNEQTFCNjk4NzE2MDBGMkFBQkMgLyogTlNVUkxD
b25uZWN0aW9uU1BJLmggKi8sCiAJCQkJQ0UxMjUyNTQxQTFCRUMwRTAwODY0NDgwIC8qIE5TVVJM
RG93bmxvYWRTUEkuaCAqLywKIAkJCQk2NTNFRjgzODE5QTA0M0FFMDA1MjIwMkMgLyogTlNVUkxG
aWxlVHlwZU1hcHBpbmdzU1BJLmggKi8sCkBAIC0xNzMzMyw4ICsxNzMzNCw2IEBACiAJCQkJNDRB
MjhBQUUxMkRGQjhCRjAwQUU5MjNCIC8qIE1hdGhNTE5hbWVzLmggKi8sCiAJCQkJNzFFMjE4Mzgx
NzM1OUZCODAwNkU2RTREIC8qIFBsdWdJbnNSZXNvdXJjZXMuaCAqLywKIAkJCQk3MUUyMTgzOTE3
MzU5RkI4MDA2RTZFNEQgLyogUGx1Z0luc1Jlc291cmNlc0RhdGEuY3BwICovLAotCQkJCTk5MDhC
MEZBMUJDQUQwN0QwMDc2M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQnVpbHRp
bnMuY3BwICovLAotCQkJCTk5MDhCMEZCMUJDQUQwN0QwMDc2M0Y2NCAvKiBSZWFkYWJsZUJ5dGVT
dHJlYW1Db250cm9sbGVyQnVpbHRpbnMuaCAqLywKIAkJCQk5OTA4QjBGRDFCQ0FEMDdEMDBFRDNG
NjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuY3BwICovLAogCQkJCTlC
MDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oICovLAogCQkJCTk5MDhCMEY5MUJDQUQwN0QwMEVEMEY2NSAvKiBSZWFkYWJsZVN0cmVh
bUJ1aWx0aW5zLmNwcCAqLywKQEAgLTI1MDc3LDcgKzI1MDc2LDYgQEAKIAkJCQlCQzFCREYyNTE1
NkMxOEM3MDAxQzEyNDMgLyogRE9NRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTJFRDYwOUJE
MTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgx
ODVGM0IwOTc2NTc2NjAwNTgyNkQ5IC8qIERPTUltcGxlbWVudGF0aW9uLmggaW4gSGVhZGVycyAq
LywKLQkJCQlFMzVDQTE0RTFEQkMzQTQyMDBGODM1MTYgLyogRE9NSklUQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMxNTBFQTcxREE3MjE5MzAwMTk0MDEyIC8q
IERPTUpJVEhlbHBlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE5QzZFNEU0MEQ3NDVFMDUwMDY0
NDJFOSAvKiBET01NaW1lVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTlDNkU0RTgwRDc0NUUx
ODAwNjQ0MkU5IC8qIERPTU1pbWVUeXBlQXJyYXkuaCBpbiBIZWFkZXJzICovLApAQCAtMjY3OTEs
OSArMjY3ODksOSBAQAogCQkJCUY1NUIzRENFMTI1MUYxMkQwMDNFRjI2OSAvKiBSYW5nZUlucHV0
VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU4NEU5RTExNzY2OEJGMTAwODE1QjY4IC8qIFJh
c3RlclNoYXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODREODI3QzExRDMzM0VEMDA5NzI5OTAg
LyogUmF3RGF0YURvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQk0MTZFNkZFODFC
QkQxMkRGMDAwQTNGNjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCBp
biBIZWFkZXJzICovLAorCQkJCTQxNkU2RkU4MUJCRDEyREYwMDBBM0Y2NCAvKiBSZWFkYWJsZVN0
cmVhbUludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTZFNkZFOTFCQkQx
MkU1MDAwQTYwNDMgLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJNDE2RTZGRTgxQkJEMTJERjAwMEE2MDQzIC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVp
bHRpbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjA0MyAvKiBS
ZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkQzMTYwM0MxMkIwMjY3NjAwQzFBMzU5IC8qIFJlYWx0aW1lQW5hbHlzZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTRBNEY2NTcxMUFBOTk3RjEwMEUzOENERCAvKiBSZWFsdGltZU1lZGlhU291cmNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0QTRGNjU3MjFBQTk5N0YxMDBFMzhDREQgLyogUmVhbHRp
bWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzg3NSw2ICsy
Nzg3Myw3IEBACiAJCQkJMUNBRjM0ODEwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVj
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUNBRjM0ODMwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNj
cmlwdE9iamVjdFByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNTY5RDFCMEQ3RTJCODIw
MDdDMzk4MyAvKiBXZWJTY3JpcHRPYmplY3RQcm90b2NvbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
OTMzNUI0OUQxRENCRUY3QzAwRUQ0NjhFIC8qIE5TVG91Y2hCYXJTUEkuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk3QUFCRDFCMTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk3QUFCRDFFMTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXRDaGFubmVsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5N0FBQkQxRjE0RkEwOUQ1MDA3NDU3QUUgLyogV2ViU29ja2V0
Q2hhbm5lbENsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODgzNCw3ICsyODgzMyw2IEBACiAJ
CQkJQkMxQkRGMjQxNTZDMTg4MzAwMUMxMjQzIC8qIERPTUVycm9yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTJFRDYwOUJDMTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBODE4NUYzRTA5NzY1NzY2MDA1ODI2RDkgLyogRE9NSW1wbGVtZW50YXRp
b24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRTM1Q0ExNEQxREJDM0EzRjAwRjgzNTE2IC8qIERP
TUpJVEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTlDNkU0
RTMwRDc0NUUwNTAwNjQ0MkU5IC8qIERPTU1pbWVUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE5QzZFNEU3MEQ3NDVFMTgwMDY0NDJFOSAvKiBET01NaW1lVHlwZUFycmF5LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTUyQjZDOUMyMTVFM0Y0REYwMDY5MEIwNSAvKiBET01OYW1lZEZsb3dDb2xs
ZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
c3BpL2NvY29hL0FWS2l0U1BJLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vc3BpL2NvY29hL0FWS2l0U1BJLmgJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3NwaS9jb2NvYS9BVktpdFNQSS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2
ICs0Myw4IEBACiAKICNlbHNlCiAKK05TX0FTU1VNRV9OT05OVUxMX0JFR0lOCisKIEBpbnRlcmZh
Y2UgQVZQbGF5ZXJDb250cm9sbGVyIDogVUlSZXNwb25kZXIKIEBlbmQKIApAQCAtMTAwLDYgKzEw
Miw4IEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIEFWUGxheWVyVmlld0MKIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBwaWN0dXJlSW5QaWN0dXJlV2FzU3RhcnRlZFdo
ZW5FbnRlcmluZ0JhY2tncm91bmQ7CiBAZW5kCiAKK05TX0FTU1VNRV9OT05OVUxMX0VORAorCiAj
ZW5kaWYgLy8gVVNFKEFQUExFX0lOVEVSTkFMX1NESykKICNlbmRpZiAvLyBQTEFURk9STShJT1Mp
CiAKQEAgLTEzMiw2ICsxMzYsOCBAQCBOU19DTEFTU19BVkFJTEFCTEVfTUFDKDEwXzExKQogCiAj
ZW5kaWYgLy8gRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElP
UykKIAorTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KKwogQGludGVyZmFjZSBBVlZhbHVlVGltaW5n
IDogTlNPYmplY3QgPE5TQ29kaW5nLCBOU0NvcHlpbmcsIE5TTXV0YWJsZUNvcHlpbmc+IAogQGVu
ZAogCkBAIC0xMzksMyArMTQ1LDMyIEBAIE5TX0NMQVNTX0FWQUlMQUJMRV9NQUMoMTBfMTEpCiAr
IChBVlZhbHVlVGltaW5nICopdmFsdWVUaW1pbmdXaXRoQW5jaG9yVmFsdWU6KGRvdWJsZSlhbmNo
b3JWYWx1ZSBhbmNob3JUaW1lU3RhbXA6KE5TVGltZUludGVydmFsKXRpbWVTdGFtcCByYXRlOihk
b3VibGUpcmF0ZTsKIEBwcm9wZXJ0eSAoTlNfTk9OQVRPTUlDX0lPU09OTFksIHJlYWRvbmx5KSBk
b3VibGUgY3VycmVudFZhbHVlOwogQGVuZAorCitOU19BU1NVTUVfTk9OTlVMTF9FTkQKKworI2lm
IFBMQVRGT1JNKE1BQykKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIp
CisjaW1wb3J0IDxBVktpdC9BVkZ1bmN0aW9uQmFyUGxheWJhY2tDb250cm9sc1Byb3ZpZGVyLmg+
CisjaW1wb3J0IDxBVktpdC9BVkZ1bmN0aW9uQmFyU2NydWJiZXIuaD4KKyNlbHNlCisKK05TX0FT
U1VNRV9OT05OVUxMX0JFR0lOCisKK0Bwcm90b2NvbCBBVkZ1bmN0aW9uQmFyUGxheWJhY2tDb250
cm9sc0NvbnRyb2xsaW5nIDxOU09iamVjdD4KK0Bwcm9wZXJ0eSAocmVhZG9ubHkpIE5TVGltZUlu
dGVydmFsIGNvbnRlbnREdXJhdGlvbjsKK0Bwcm9wZXJ0eSAocmVhZG9ubHksIG51bGxhYmxlKSBB
VlZhbHVlVGltaW5nICp0aW1pbmc7CitAcHJvcGVydHkgKHJlYWRvbmx5LCBnZXR0ZXI9aXNTZWVr
aW5nKSBCT09MIHNlZWtpbmc7CitAcHJvcGVydHkgKHJlYWRvbmx5KSBOU1RpbWVJbnRlcnZhbCBz
ZWVrVG9UaW1lOworLSAodm9pZClzZWVrVG9UaW1lOihOU1RpbWVJbnRlcnZhbCl0aW1lIHRvbGVy
YW5jZUJlZm9yZTooTlNUaW1lSW50ZXJ2YWwpdG9sZXJhbmNlQmVmb3JlIHRvbGVyYW5jZUFmdGVy
OihOU1RpbWVJbnRlcnZhbCl0b2xlcmFuY2VBZnRlcjsKK0Bwcm9wZXJ0eSAocmVhZG9ubHkpIEJP
T0wgaGFzRW5hYmxlZEF1ZGlvOworQHByb3BlcnR5IChyZWFkb25seSkgQk9PTCBoYXNFbmFibGVk
VmlkZW87CitAZW5kCisKK0BpbnRlcmZhY2UgQVZGdW5jdGlvbkJhclNjcnViYmVyIDogTlNWaWV3
CitAcHJvcGVydHkgKGFzc2lnbiwgbnVsbGFibGUpIGlkPEFWRnVuY3Rpb25CYXJQbGF5YmFja0Nv
bnRyb2xzQ29udHJvbGxpbmc+IHBsYXliYWNrQ29udHJvbHNDb250cm9sbGVyOworQGVuZAorCitO
U19BU1NVTUVfTk9OTlVMTF9FTkQKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09O
VFJPTFNfTUFOQUdFUikKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9zcGkvY29jb2EvTlNUb3VjaEJhclNQSS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9jb2NvYS9OU1RvdWNoQmFyU1BJLmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL2NvY29hL05TVG91Y2hCYXJTUEku
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIFBMQVRG
T1JNKE1BQykKKyNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKSAmJiBIQVZFKFRPVUNIX0JBUikK
KworI2ltcG9ydCA8QXBwS2l0L05TRnVuY3Rpb25CYXJfUHJpdmF0ZS5oPgorI2ltcG9ydCA8QXBw
S2l0L05TVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXJfV2ViS2l0U1BJLmg+CisjaW1wb3J0IDxB
cHBLaXQvTlNUb3VjaEJhcl9Qcml2YXRlLmg+CisKKyNlbHNlCisKK05TX0FTU1VNRV9OT05OVUxM
X0JFR0lOCisKK0BpbnRlcmZhY2UgTlNUb3VjaEJhckl0ZW0gOiBOU09iamVjdAorQGVuZAorCitA
aW50ZXJmYWNlIE5TQ29sb3JQaWNrZXJUb3VjaEJhckl0ZW0gOiBOU1RvdWNoQmFySXRlbQorQGVu
ZAorCitAaW50ZXJmYWNlIE5TVG91Y2hCYXIgOiBOU09iamVjdAorQHByb3BlcnR5IChyZWFkb25s
eSwgY29weSwgbnVsbGFibGUpIE5TQXJyYXk8TlNUb3VjaEJhckl0ZW0gKj4gKml0ZW1zOworQHBy
b3BlcnR5IChzdHJvbmcsIG51bGxhYmxlKSBOU1RvdWNoQmFySXRlbSAqZXNjYXBlS2V5UmVwbGFj
ZW1lbnRJdGVtOworQGVuZAorCitAaW50ZXJmYWNlIE5TVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xs
ZXIgOiBOU09iamVjdAorCitAcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcsIG51bGxhYmxlKSBO
U0NvbG9yUGlja2VyVG91Y2hCYXJJdGVtICpjb2xvclBpY2tlckl0ZW07CitAcHJvcGVydHkgKHJl
YWRvbmx5LCBzdHJvbmcsIG51bGxhYmxlKSBOU1NlZ21lbnRlZENvbnRyb2wgKnRleHRTdHlsZTsK
K0Bwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZywgbnVsbGFibGUpIE5TU2VnbWVudGVkQ29udHJv
bCAqdGV4dEFsaWdubWVudHM7CitAcHJvcGVydHkgKG51bGxhYmxlLCBzdHJvbmcpIE5TVmlld0Nv
bnRyb2xsZXIgKnRleHRMaXN0Vmlld0NvbnRyb2xsZXI7CitAcHJvcGVydHkgQk9PTCB1c2VzTmFy
cm93VGV4dFN0eWxlSXRlbTsKKworLSAobnVsbGFibGUgTlNUb3VjaEJhckl0ZW0gKilpdGVtRm9y
SWRlbnRpZmllcjoobnVsbGFibGUgTlNTdHJpbmcgKilpZGVudGlmaWVyOworCitAZW5kCisKKyNk
ZWZpbmUgTlNUb3VjaEJhcldpbGxFbnRlckN1c3RvbWl6YXRpb24gQCJOU1RvdWNoQmFyV2lsbEVu
dGVyQ3VzdG9taXphdGlvbiIKKyNkZWZpbmUgTlNUb3VjaEJhckRpZEV4aXRDdXN0b21pemF0aW9u
IEAiTlNUb3VjaEJhckRpZEV4aXRDdXN0b21pemF0aW9uIgorCitOU19BU1NVTUVfTk9OTlVMTF9F
TkQKKworI2VuZGlmIC8vIFVTRShBUFBMRV9JTlRFUk5BTF9TREspICYmIEhBVkUoVE9VQ0hfQkFS
KQorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3NwaS9tYWMvTlNTcGVsbENoZWNrZXJTUEkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxDaGVja2VyU1BJLmgJKHJldmlzaW9uIDIwODQwNSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9tYWMvTlNTcGVsbENoZWNrZXJTUEkuaAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogLy8gRklYTUU6IFRoaXMgaGVhZGVyIHNo
b3VsZCBpbmNsdWRlIHN5c3RlbSBoZWFkZXJzIHdoZW4gcG9zc2libGUuCiAKIGV4dGVybiBOU1N0
cmluZyAqTlNUZXh0Q2hlY2tpbmdJbnNlcnRpb25Qb2ludEtleTsKK2V4dGVybiBOU05vdGlmaWNh
dGlvbk5hbWUgY29uc3QgTlNTcGVsbENoZWNrZXJEaWRDaGFuZ2VBdXRvbWF0aWNUZXh0Q29tcGxl
dGlvbk5vdGlmaWNhdGlvbjsKIAogQGludGVyZmFjZSBOU1NwZWxsQ2hlY2tlciAoKQogLSAoTlNJ
bnRlZ2VyKXJlcXVlc3RDYW5kaWRhdGVzRm9yU2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlzZWxlY3Rl
ZFJhbmdlIGluU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZ1RvQ2hlY2sgdHlwZXM6KE5TVGV4dENo
ZWNraW5nVHlwZXMpY2hlY2tpbmdUeXBlcyBvcHRpb25zOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcg
KiwgaWQ+ICopb3B0aW9ucyBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOihOU0ludGVnZXIpdGFnIGNv
bXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0ludGVnZXIgc2VxdWVuY2VOdW1iZXIsIE5TQXJy
YXk8TlNUZXh0Q2hlY2tpbmdSZXN1bHQgKj4gKmNhbmRpZGF0ZXMpKWNvbXBsZXRpb25IYW5kbGVy
OwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4NDA1KQorKysgU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTAgQEAKKzIwMTYtMTEtMDQgIEJldGgg
RGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIFN1cHBvcnQgVG91Y2hCYXIgaW4g
V2ViS2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjQ0MzcKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAgICByZGFyOi8vcHJvYmxl
bS8yODg3NjUyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ZpZXdQcml2YXRlLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBtYWtl
VG91Y2hCYXJdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0
ZW1dKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF93ZWJfZGlkQWRkTWVkaWFDb250cm9sc01hbmFn
ZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfd2ViX2RpZFJlbW92ZU1lZGlhQ29udHJvbHNN
YW5hZ2VyXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaW50ZXJhY3RXaXRoTWVkaWFDb250cm9s
c0ZvclRlc3RpbmddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF93YW50c01lZGlhUGxheWJhY2tD
b250cm9sc1ZpZXddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRXYW50c01lZGlhUGxheWJh
Y2tDb250cm9sc1ZpZXc6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfbWVkaWFQbGF5YmFja0Nv
bnRyb2xzVmlld10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2FkZE1lZGlhUGxheWJhY2tDb250
cm9sc1ZpZXc6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcmVtb3ZlTWVkaWFQbGF5YmFja0Nv
bnRyb2xzVmlld10pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJp
dmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToKKyAgICAgICAg
KC1bV0tWaWV3IG1ha2VUb3VjaEJhcl0pOgorICAgICAgICAoLVtXS1ZpZXcgY2FuZGlkYXRlTGlz
dFRvdWNoQmFySXRlbV0pOgorICAgICAgICAoLVtXS1ZpZXcgX3dlYl9kaWRBZGRNZWRpYUNvbnRy
b2xzTWFuYWdlcjpdKToKKyAgICAgICAgKC1bV0tWaWV3IF93ZWJfZGlkUmVtb3ZlTWVkaWFDb250
cm9sc01hbmFnZXJdKToKKyAgICAgICAgKC1bV0tWaWV3IF93YW50c01lZGlhUGxheWJhY2tDb250
cm9sc1ZpZXddKToKKyAgICAgICAgKC1bV0tWaWV3IF9zZXRXYW50c01lZGlhUGxheWJhY2tDb250
cm9sc1ZpZXc6XSk6CisgICAgICAgICgtW1dLVmlldyBfbWVkaWFQbGF5YmFja0NvbnRyb2xzVmll
d10pOgorICAgICAgICAoLVtXS1ZpZXcgX2FkZE1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6XSk6
CisgICAgICAgICgtW1dLVmlldyBfcmVtb3ZlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlld10pOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5oOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3SW1wbDo6Y3VycmVudFRvdWNoQmFyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0ltcGw6OmNsaWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRDbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1Zp
ZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNDdXN0b21pemluZ1RvdWNo
QmFyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW06CisgICAgICAg
ICgtW1dLVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyIGluaXRXaXRoV2ViVmlld0ltcGw6
XSk6CisgICAgICAgICgtW1dLVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyIGRpZERlc3Ry
b3lWaWV3XSk6CisgICAgICAgICgtW1dLVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyIF9z
ZWxlY3RMaXN0Ol0pOgorICAgICAgICAoLVtXS1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxl
ciBzZXRDdXJyZW50TGlzdFR5cGU6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNv
bnRyb2xsZXIgaW5pdFdpdGhXZWJWaWV3SW1wbDpdKToKKyAgICAgICAgKC1bV0tUZXh0VG91Y2hC
YXJJdGVtQ29udHJvbGxlciBkaWREZXN0cm95Vmlld10pOgorICAgICAgICAoLVtXS1RleHRUb3Vj
aEJhckl0ZW1Db250cm9sbGVyIHRvdWNoQmFyOm1ha2VJdGVtRm9ySWRlbnRpZmllcjpdKToKKyAg
ICAgICAgKC1bV0tUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBpdGVtRm9ySWRlbnRpZmllcjpd
KToKKyAgICAgICAgKC1bV0tUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBjYW5kaWRhdGVMaXN0
VG91Y2hCYXJJdGVtOmVuZFNlbGVjdGluZ0NhbmRpZGF0ZUF0SW5kZXg6XSk6CisgICAgICAgICgt
W1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTpj
aGFuZ2VkQ2FuZGlkYXRlTGlzdFZpc2liaWxpdHk6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNo
QmFySXRlbUNvbnRyb2xsZXIgdGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyXSk6CisgICAg
ICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzQm9sZDpdKToKKyAg
ICAgICAgKC1bV0tUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRUZXh0SXNJdGFsaWM6XSk6
CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzVW5kZXJs
aW5lZDpdKToKKyAgICAgICAgKC1bV0tUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBfd2tDaGFu
Z2VUZXh0U3R5bGU6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIg
c2V0Q3VycmVudFRleHRBbGlnbm1lbnQ6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRl
bUNvbnRyb2xsZXIgX3drQ2hhbmdlVGV4dEFsaWdubWVudDpdKToKKyAgICAgICAgKC1bV0tUZXh0
VG91Y2hCYXJJdGVtQ29udHJvbGxlciB0ZXh0Q29sb3JdKToKKyAgICAgICAgKC1bV0tUZXh0VG91
Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRUZXh0Q29sb3I6XSk6CisgICAgICAgICgtW1dLVGV4dFRv
dWNoQmFySXRlbUNvbnRyb2xsZXIgX3drQ2hhbmdlQ29sb3I6XSk6CisgICAgICAgICgtW1dLVGV4
dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgdGV4dExpc3RWaWV3Q29udHJvbGxlcl0pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6bWFrZVRvdWNoQmFyKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6OmNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0pOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3SW1wbDo6bWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjp1c2VNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OmRpc21pc3NUZXh0VG91Y2hCYXJQb3BvdmVySXRlbVdpdGhJ
ZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6dGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkFs
bG93ZWRJZGVudGlmaWVycyk6CisgICAgICAgIChXZWJLaXQ6OnBsYWluVGV4dFRvdWNoQmFyQ3Vz
dG9taXphdGlvbkRlZmF1bHRJdGVtSWRlbnRpZmllcnMpOgorICAgICAgICAoV2ViS2l0OjpyaWNo
VGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkRlZmF1bHRJdGVtSWRlbnRpZmllcnMpOgorICAgICAg
ICAoV2ViS2l0Ojp0b3VjaEJhckRpZEV4aXRDdXN0b21pemF0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6dG91Y2hCYXJXaWxsRW50ZXJDdXN0b21pemF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6ZGlk
Q2hhbmdlQXV0b21hdGljVGV4dENvbXBsZXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6dXBkYXRlVG91Y2hCYXJBbmRSZWZyZXNoVGV4dEJhcklkZW50aWZpZXJzKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldFVwVGV4dFRvdWNoQmFyKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OmlzUmljaGx5RWRpdGFibGUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3SW1wbDo6dGV4dFRvdWNoQmFyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OnVwZGF0ZVRleHRUb3VjaEJhcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRh
dGVNZWRpYVRvdWNoQmFyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmZvcmNlUmVx
dWVzdENhbmRpZGF0ZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OnVwZGF0ZVRvdWNoQmFyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNob3VsZFJl
cXVlc3RDYW5kaWRhdGVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNob3dDYW5k
aWRhdGVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OndlYlZpZXdJbXBsQWRkaXRp
b25zV2lsbERlc3Ryb3lWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldEVk
aXRhYmxlRWxlbWVudElzRm9jdXNlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpi
ZWNvbWVGaXJzdFJlc3BvbmRlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZWxl
Y3Rpb25EaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dmlkZW9Db250
cm9sc01hbmFnZXJEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dXBk
YXRlV2ViVmlld0ltcGxBZGRpdGlvbnMpOiBEZWxldGVkLgorCiAyMDE2LTExLTA0ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgcm9sbGluZyBvdXQgcjIwODI5My4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tWaWV3UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tWaWV3UHJpdmF0ZS5oCShyZXZpc2lvbiAyMDg0MDUpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVmlld1ByaXZhdGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNiArMzEsOCBAQAogI2ltcG9ydCA8V2ViS2l0L1dLVmlldy5oPgogI2lt
cG9ydCA8V2ViS2l0L19XS092ZXJsYXlTY3JvbGxiYXJTdHlsZS5oPgogCitAY2xhc3MgQVZGdW5j
dGlvbkJhclNjcnViYmVyOworCiBAaW50ZXJmYWNlIFdLVmlldyAoUHJpdmF0ZSkKIAogLyogQyBT
UEkgc3VwcG9ydC4gKi8KQEAgLTEzMiw2ICsxMzQsMTEgQEAKIAogLSAodm9pZClfZ2VzdHVyZUV2
ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZTooTlNFdmVudCAqKWV2ZW50OwogCitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZHdyaXRlLCBzZXR0ZXI9X3NldFdhbnRzTWVkaWFQbGF5YmFja0NvbnRy
b2xzVmlldzopIEJPT0wgX3dhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzsKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSkgQVZGdW5jdGlvbkJhclNjcnViYmVyICpfbWVkaWFQbGF5
YmFja0NvbnRyb2xzVmlldzsKKy0gKHZvaWQpX2FkZE1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6
KEFWRnVuY3Rpb25CYXJTY3J1YmJlciAqKW1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc7CistICh2
b2lkKV9yZW1vdmVNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OworCiBAZW5kCiAKICNlbmRpZiAv
LyAhVEFSR0VUX09TX0lQSE9ORQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYlZpZXcubW0JKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzQsNyArMTc0LDEyIEBAIHN0YXRpYyBjb25zdCB1aW50MzJfdCBmaXJzdFNES1ZlcnNpb25XaXQK
IAogQGludGVyZmFjZSBXS1dlYlZpZXcgKCkgPFdlYlZpZXdJbXBsRGVsZWdhdGUsIE5TVGV4dElu
cHV0Q2xpZW50PgogQGVuZAotI2VuZGlmCisKKyNpZiBIQVZFKFRPVUNIX0JBUikKK0BpbnRlcmZh
Y2UgV0tXZWJWaWV3ICgpIDxOU1RvdWNoQmFyUHJvdmlkZXI+CitAZW5kCisjZW5kaWYgLy8gSEFW
RShUT1VDSF9CQVIpCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiBzdGF0aWMgSGFzaE1hcDxX
ZWJLaXQ6OldlYlBhZ2VQcm94eSosIFdLV2ViVmlldyAqPiYgcGFnZVRvVmlld01hcCgpCiB7CkBA
IC0zMTU1LDYgKzMxNjAsMzggQEAgLSAodm9pZClfd2ViX2dlc3R1cmVFdmVudFdhc05vdEhhbmRs
ZWRCeQogCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCisjaWYgSEFWRShUT1VDSF9CQVIpCisK
K0BkeW5hbWljIHRvdWNoQmFyOworCistIChOU1RvdWNoQmFyICopbWFrZVRvdWNoQmFyCit7Cisg
ICAgcmV0dXJuIF9pbXBsLT5tYWtlVG91Y2hCYXIoKTsKK30KKworLSAoTlNDYW5kaWRhdGVMaXN0
VG91Y2hCYXJJdGVtICopY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbQoreworICAgIHJldHVybiBf
aW1wbC0+Y2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSgpOworfQorCistICh2b2lkKV93ZWJfZGlk
QWRkTWVkaWFDb250cm9sc01hbmFnZXI6KGlkKWNvbnRyb2xzTWFuYWdlcgoreworICAgIFtzZWxm
IF9hZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OmNvbnRyb2xzTWFuYWdlcl07Cit9CisKKy0g
KHZvaWQpX3dlYl9kaWRSZW1vdmVNZWRpYUNvbnRyb2xzTWFuYWdlcgoreworICAgIFtzZWxmIF9y
ZW1vdmVNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3XTsKK30KKworLSAodm9pZClfaW50ZXJhY3RX
aXRoTWVkaWFDb250cm9sc0ZvclRlc3RpbmcKK3sKKyAgICBbc2VsZiBfc2V0V2FudHNNZWRpYVBs
YXliYWNrQ29udHJvbHNWaWV3OllFU107CisgICAgW3NlbGYgbWFrZVRvdWNoQmFyXTsKK30KKwor
I2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFSKQorCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXS1dl
YlZpZXcgKFdLUHJpdmF0ZSkKQEAgLTQ1MjksNiArNDU2Niw0MSBAQCAtICh2b2lkKXNldFVzZXJJ
bnRlcmZhY2VMYXlvdXREaXJlY3Rpb246CiAgICAgX2ltcGwtPnNldFVzZXJJbnRlcmZhY2VMYXlv
dXREaXJlY3Rpb24odXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbik7CiB9CiAKKy0gKEJPT0wp
X3dhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldworeworI2lmIEhBVkUoVE9VQ0hfQkFSKQor
ICAgIHJldHVybiBfaW1wbC0+Y2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCk7
CisjZWxzZQorICAgIHJldHVybiBOTzsKKyNlbmRpZgorfQorCistICh2b2lkKV9zZXRXYW50c01l
ZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6KEJPT0wpd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNW
aWV3Cit7CisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgX2ltcGwtPnNldENsaWVudFdhbnRzTWVk
aWFQbGF5YmFja0NvbnRyb2xzVmlldyh3YW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcpOwor
I2VuZGlmCit9CisKKy0gKEFWRnVuY3Rpb25CYXJTY3J1YmJlciAqKV9tZWRpYVBsYXliYWNrQ29u
dHJvbHNWaWV3Cit7CisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgaWYgKCFfaW1wbC0+Y2xpZW50
V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCkpCisgICAgICAgIHJldHVybiBuaWw7Cisg
ICAgcmV0dXJuIF9pbXBsLT5tZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCk7CisjZWxzZQorICAg
IHJldHVybiBuaWw7CisjZW5kaWYKK30KKworLSAodm9pZClfYWRkTWVkaWFQbGF5YmFja0NvbnRy
b2xzVmlldzooQVZGdW5jdGlvbkJhclNjcnViYmVyICopbWVkaWFQbGF5YmFja0NvbnRyb2xzVmll
dworeworfQorCistICh2b2lkKV9yZW1vdmVNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Cit7Cit9
CisKICNlbmRpZgogCiBAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2ViVmlld1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAkocmV2aXNpb24gMjA4NDA1KQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDcgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwg
X1dLSW1tZWRpYXRlQQogCiAjZW5kaWYKIAorQGNsYXNzIEFWRnVuY3Rpb25CYXJTY3J1YmJlcjsK
IEBjbGFzcyBXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZTsKIEBjbGFzcyBfV0tGcmFtZUhhbmRsZTsK
IEBjbGFzcyBfV0tIaXRUZXN0UmVzdWx0OwpAQCAtMjAyLDYgKzIwMywxMiBAQCB0eXBlZGVmIE5T
X0VOVU0oTlNJbnRlZ2VyLCBfV0tJbW1lZGlhdGVBCiAtIChOU1ByaW50T3BlcmF0aW9uICopX3By
aW50T3BlcmF0aW9uV2l0aFByaW50SW5mbzooTlNQcmludEluZm8gKilwcmludEluZm87CiAtIChO
U1ByaW50T3BlcmF0aW9uICopX3ByaW50T3BlcmF0aW9uV2l0aFByaW50SW5mbzooTlNQcmludElu
Zm8gKilwcmludEluZm8gZm9yRnJhbWU6KF9XS0ZyYW1lSGFuZGxlICopZnJhbWVIYW5kbGUgV0tf
QVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTIpLCBpb3MoMTAuMCkpOwogCisvLyBGSVhNRTogVGhp
cyBTUEkgc2hvdWxkIGJlY29tZSBhIHBhcnQgb2YgdGhlIFdLVUlEZWxlZ2F0ZS4gcmRhcjovL3By
b2JsZW0vMjY1NjE1MzcKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkd3JpdGUsIHNldHRlcj1f
c2V0V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OikgQk9PTCBfd2FudHNNZWRpYVBsYXli
YWNrQ29udHJvbHNWaWV3IFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpKTsKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQVZGdW5jdGlvbkJhclNjcnViYmVyICpfbWVk
aWFQbGF5YmFja0NvbnRyb2xzVmlldyBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJB
KSk7CistICh2b2lkKV9hZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OihBVkZ1bmN0aW9uQmFy
U2NydWJiZXIgKiltZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3IFdLX0FQSV9BVkFJTEFCTEUobWFj
b3N4KFdLX01BQ19UQkEpKTsKKy0gKHZvaWQpX3JlbW92ZU1lZGlhUGxheWJhY2tDb250cm9sc1Zp
ZXcgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSkpOworCiAjZW5kaWYKIAogLSAo
V0tOYXZpZ2F0aW9uICopX3JlbG9hZFdpdGhvdXRDb250ZW50QmxvY2tlcnMgV0tfQVBJX0FWQUlM
QUJMRShtYWNvc3goMTAuMTIpLCBpb3MoMTAuMCkpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkocmV2aXNpb24gMjA4NDA1KQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2
ICs1NSwxMSBAQCBAaW50ZXJmYWNlIFdLVmlld0RhdGEgOiBOU09iamVjdCB7CiBAaW50ZXJmYWNl
IFdLVmlldyAoKSA8V2ViVmlld0ltcGxEZWxlZ2F0ZT4KIEBlbmQKIAorI2lmIEhBVkUoVE9VQ0hf
QkFSKQorQGludGVyZmFjZSBXS1ZpZXcgKCkgPE5TVG91Y2hCYXJQcm92aWRlcj4KK0BlbmQKKyNl
bmRpZgorCiBAaW1wbGVtZW50YXRpb24gV0tWaWV3CiAKICNpZiBXS19BUElfRU5BQkxFRApAQCAt
OTc3LDYgKzk4MiwzMiBAQCAtICh2b2lkKV9kaWRVcGRhdGVDYW5kaWRhdGVMaXN0VmlzaWJpbGl0
CiB7CiB9CiAKKyNpZiBIQVZFKFRPVUNIX0JBUikKKworQGR5bmFtaWMgdG91Y2hCYXI7CisKKy0g
KE5TVG91Y2hCYXIgKiltYWtlVG91Y2hCYXIKK3sKKyAgICByZXR1cm4gX2RhdGEtPl9pbXBsLT5t
YWtlVG91Y2hCYXIoKTsKK30KKworLSAoTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtICopY2Fu
ZGlkYXRlTGlzdFRvdWNoQmFySXRlbQoreworICAgIHJldHVybiBfZGF0YS0+X2ltcGwtPmNhbmRp
ZGF0ZUxpc3RUb3VjaEJhckl0ZW0oKTsKK30KKworLSAodm9pZClfd2ViX2RpZEFkZE1lZGlhQ29u
dHJvbHNNYW5hZ2VyOihpZCljb250cm9sc01hbmFnZXIKK3sKKyAgICBbc2VsZiBfYWRkTWVkaWFQ
bGF5YmFja0NvbnRyb2xzVmlldzpjb250cm9sc01hbmFnZXJdOworfQorCistICh2b2lkKV93ZWJf
ZGlkUmVtb3ZlTWVkaWFDb250cm9sc01hbmFnZXIKK3sKKyAgICBbc2VsZiBfcmVtb3ZlTWVkaWFQ
bGF5YmFja0NvbnRyb2xzVmlld107Cit9CisKKyNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikKKwog
QGVuZAogCiBAaW1wbGVtZW50YXRpb24gV0tWaWV3IChQcml2YXRlKQpAQCAtMTQ2NywxMCArMTQ5
OCw0MSBAQCAtICh2b2lkKXNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246CiAgICAgX2Rh
dGEtPl9pbXBsLT5zZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKHVzZXJJbnRlcmZhY2VM
YXlvdXREaXJlY3Rpb24pOwogfQogCi1AZW5kCistIChCT09MKV93YW50c01lZGlhUGxheWJhY2tD
b250cm9sc1ZpZXcKK3sKKyNpZiBIQVZFKFRPVUNIX0JBUikKKyAgICByZXR1cm4gX2RhdGEtPl9p
bXBsLT5jbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKTsKKyNlbHNlCisgICAg
cmV0dXJuIE5POworI2VuZGlmCit9CisKKy0gKHZvaWQpX3NldFdhbnRzTWVkaWFQbGF5YmFja0Nv
bnRyb2xzVmlldzooQk9PTCl3YW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcKK3sKKyNpZiBI
QVZFKFRPVUNIX0JBUikKKyAgICBfZGF0YS0+X2ltcGwtPnNldENsaWVudFdhbnRzTWVkaWFQbGF5
YmFja0NvbnRyb2xzVmlldyh3YW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcpOworI2VuZGlm
Cit9CiAKLSNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPj0gMTAxMjAwICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0jaW1wb3J0IDxXZWJLaXRB
ZGRpdGlvbnMvV0tWaWV3QWRkaXRpb25zLm1tPgorLSAoQVZGdW5jdGlvbkJhclNjcnViYmVyICop
X21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcKK3sKKyNpZiBIQVZFKFRPVUNIX0JBUikKKyAgICBp
ZiAoIV9kYXRhLT5faW1wbC0+Y2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCkp
CisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIF9kYXRhLT5faW1wbC0+bWVkaWFQbGF5
YmFja0NvbnRyb2xzVmlldygpOworI2Vsc2UKKyAgICByZXR1cm4gbmlsOwogI2VuZGlmCit9CisK
Ky0gKHZvaWQpX2FkZE1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6KEFWRnVuY3Rpb25CYXJTY3J1
YmJlciAqKW1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcKK3sKK30KKworLSAodm9pZClfcmVtb3Zl
TWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldworeworfQorCitAZW5kCiAKICNlbmRpZiAvLyBQTEFU
Rk9STShNQUMpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0lt
cGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmll
d0ltcGwuaAkocmV2aXNpb24gMjA4NDA1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nv
Y29hL1dlYlZpZXdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDE3IEBAIE9CSkNf
Q0xBU1MgV0tXZWJWaWV3OwogT0JKQ19DTEFTUyBXS1dpbmRvd1Zpc2liaWxpdHlPYnNlcnZlcjsK
IE9CSkNfQ0xBU1MgX1dLVGh1bWJuYWlsVmlldzsKIAotI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9T
REspICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwCi0jaW1wb3J0
IDxXZWJLaXRBZGRpdGlvbnMvV2ViVmlld0ltcGxBZGRpdGlvbnNEZWNsYXJhdGlvbnMuaD4KLSNl
bmRpZgorI2lmIEhBVkUoVE9VQ0hfQkFSKQorT0JKQ19DTEFTUyBBVkZ1bmN0aW9uQmFyUGxheWJh
Y2tDb250cm9sc1Byb3ZpZGVyOworT0JKQ19DTEFTUyBBVkZ1bmN0aW9uQmFyU2NydWJiZXI7CitP
QkpDX0NMQVNTIE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTsKK09CSkNfQ0xBU1MgTlNDdXN0
b21Ub3VjaEJhckl0ZW07CitPQkpDX0NMQVNTIE5TVG91Y2hCYXI7CitPQkpDX0NMQVNTIE5TVG91
Y2hCYXJJdGVtOworT0JKQ19DTEFTUyBOU1BvcG92ZXJUb3VjaEJhckl0ZW07CitPQkpDX0NMQVNT
IFdLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXI7CitPQkpDX0NMQVNTIFdlYlBsYXliYWNrQ29u
dHJvbHNNYW5hZ2VyOworI2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFSKQogCiBAcHJvdG9jb2wgV2Vi
Vmlld0ltcGxEZWxlZ2F0ZQogCkBAIC00ODAsNyArNDg4LDcgQEAgcHVibGljOgogICAgIHZvaWQg
cmlnaHRNb3VzZURyYWdnZWQoTlNFdmVudCAqKTsKICAgICB2b2lkIHJpZ2h0TW91c2VVcChOU0V2
ZW50ICopOwogCi0gICAgdm9pZCB1cGRhdGVXZWJWaWV3SW1wbEFkZGl0aW9ucygpOworICAgIHZv
aWQgdXBkYXRlVG91Y2hCYXIoKTsKICAgICB2b2lkIGZvcmNlUmVxdWVzdENhbmRpZGF0ZXNGb3JU
ZXN0aW5nKCk7CiAgICAgYm9vbCBzaG91bGRSZXF1ZXN0Q2FuZGlkYXRlcygpIGNvbnN0OwogICAg
IHZvaWQgc2hvd0NhbmRpZGF0ZXMoTlNBcnJheSAqY2FuZGlkYXRlcywgTlNTdHJpbmcgKiwgTlNS
ZWN0IHJlY3RPZlR5cGVkU3RyaW5nLCBOU1JhbmdlIHNlbGVjdGVkUmFuZ2UsIE5TVmlldyAqLCB2
b2lkICheY29tcGxldGlvbkhhbmRsZXIpKE5TVGV4dENoZWNraW5nUmVzdWx0ICphY2NlcHRlZENh
bmRpZGF0ZSkpOwpAQCAtNDk2LDEyICs1MDQsNTQgQEAgcHVibGljOgogCiAjaWYgX19NQUNfT1Nf
WF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAgCiAgICAgdm9pZCBoYW5kbGVBY2NlcHRl
ZENhbmRpZGF0ZShOU1RleHRDaGVja2luZ1Jlc3VsdCAqYWNjZXB0ZWRDYW5kaWRhdGUpOwotI2lm
IFVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0jaW1wb3J0IDxXZWJLaXRBZGRpdGlvbnMvV2ViVmll
d0ltcGxBZGRpdGlvbnMuaD4KLSNlbmRpZgogI2VuZGlmCiAKKyNpZiBIQVZFKFRPVUNIX0JBUikK
KyAgICBOU1RvdWNoQmFyICptYWtlVG91Y2hCYXIoKTsKKyAgICBOU1RvdWNoQmFyICpjdXJyZW50
VG91Y2hCYXIoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRUb3VjaEJhci5nZXQoKTsgfQorICAg
IE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSAqY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSgp
IGNvbnN0OworICAgIEFWRnVuY3Rpb25CYXJTY3J1YmJlciAqbWVkaWFQbGF5YmFja0NvbnRyb2xz
VmlldygpIGNvbnN0OworICAgIE5TVG91Y2hCYXIgKnRleHRUb3VjaEJhcigpIGNvbnN0OworICAg
IHZvaWQgZGlzbWlzc1RleHRUb3VjaEJhclBvcG92ZXJJdGVtV2l0aElkZW50aWZpZXIoTlNTdHJp
bmcgKik7CisKKyAgICBib29sIGNsaWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygp
IGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OyB9
CisgICAgdm9pZCBzZXRDbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoYm9vbCBj
bGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcpIHsgbV9jbGllbnRXYW50c01lZGlh
UGxheWJhY2tDb250cm9sc1ZpZXcgPSBjbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1Zp
ZXc7IH0KKworICAgIHZvaWQgdXBkYXRlVG91Y2hCYXJBbmRSZWZyZXNoVGV4dEJhcklkZW50aWZp
ZXJzKCk7CisgICAgdm9pZCBzZXRJc0N1c3RvbWl6aW5nVG91Y2hCYXIoYm9vbCBpc0N1c3RvbWl6
aW5nVG91Y2hCYXIpIHsgbV9pc0N1c3RvbWl6aW5nVG91Y2hCYXIgPSBpc0N1c3RvbWl6aW5nVG91
Y2hCYXI7IH07CisjZW5kaWYgLy8gSEFWRShUT1VDSF9CQVIpCisKIHByaXZhdGU6CisjaWYgSEFW
RShUT1VDSF9CQVIpCisgICAgdm9pZCBzZXRVcFRleHRUb3VjaEJhcihOU1RvdWNoQmFyICopOwor
ICAgIHZvaWQgdXBkYXRlVGV4dFRvdWNoQmFyKCk7CisgICAgdm9pZCB1cGRhdGVNZWRpYVRvdWNo
QmFyKCk7CisKKyAgICBib29sIHVzZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSBjb25zdDsK
KyAgICBib29sIGlzUmljaGx5RWRpdGFibGUoKSBjb25zdDsKKworICAgIGJvb2wgbV9jbGllbnRX
YW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcgeyBmYWxzZSB9OworICAgIGJvb2wgbV9jYW5D
cmVhdGVUb3VjaEJhcnMgeyBmYWxzZSB9OworICAgIGJvb2wgbV9zdGFydGVkTGlzdGVuaW5nVG9D
dXN0b21pemF0aW9uRXZlbnRzIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNVcGRhdGluZ1RleHRU
b3VjaEJhciB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzQ3VzdG9taXppbmdUb3VjaEJhciB7IGZh
bHNlIH07CisKKyAgICBSZXRhaW5QdHI8TlNUb3VjaEJhcj4gbV9jdXJyZW50VG91Y2hCYXI7Cisg
ICAgUmV0YWluUHRyPE5TVG91Y2hCYXI+IG1fcmljaFRleHRUb3VjaEJhcjsKKyAgICBSZXRhaW5Q
dHI8TlNUb3VjaEJhcj4gbV9wbGFpblRleHRUb3VjaEJhcjsKKyAgICBSZXRhaW5QdHI8V0tUZXh0
VG91Y2hCYXJJdGVtQ29udHJvbGxlcj4gbV90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlcjsKKyAg
ICBSZXRhaW5QdHI8TlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtPiBtX3JpY2hUZXh0Q2FuZGlk
YXRlTGlzdFRvdWNoQmFySXRlbTsKKyAgICBSZXRhaW5QdHI8TlNDYW5kaWRhdGVMaXN0VG91Y2hC
YXJJdGVtPiBtX3BsYWluVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW07CisgICAgUmV0YWlu
UHRyPE5TQXJyYXk+IG1fZW1wdHlDYW5kaWRhdGVzQXJyYXk7CisgICAgUmV0YWluUHRyPFdlYlBs
YXliYWNrQ29udHJvbHNNYW5hZ2VyPiBtX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyOworICAgIFJl
dGFpblB0cjxOU0N1c3RvbVRvdWNoQmFySXRlbT4gbV9leGl0RnVsbFNjcmVlbkJ1dHRvbjsKKwor
I2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBSZXRhaW5QdHI8
QVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNQcm92aWRlcj4gbV9tZWRpYVRvdWNoQmFyUHJv
dmlkZXI7CisgICAgUmV0YWluUHRyPEFWRnVuY3Rpb25CYXJTY3J1YmJlcj4gbV9tZWRpYVBsYXli
YWNrQ29udHJvbHNWaWV3OworI2VuZGlmIC8vIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNf
TUFOQUdFUikKKyNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikKKwogICAgIFdlYWtQdHI8V2ViVmll
d0ltcGw+IGNyZWF0ZVdlYWtQdHIoKSB7IHJldHVybiBtX3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdl
YWtQdHIoKTsgfQogCiAgICAgYm9vbCBzdXBwb3J0c0FyYml0cmFyeUxheW91dE1vZGVzKCkgY29u
c3Q7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBs
Lm1tCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2Ev
V2ViVmlld0ltcGwubW0JKHdvcmtpbmcgY29weSkKQEAgLTYwLDExICs2MCwxMyBAQAogI2ltcG9y
dCAiV2ViRXZlbnRGYWN0b3J5LmgiCiAjaW1wb3J0ICJXZWJJbnNwZWN0b3JQcm94eS5oIgogI2lt
cG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHkuaCIKICNpbXBvcnQgIldlYlByb2Nlc3NQb29sLmgiCiAjaW1wb3J0ICJXZWJQcm9jZXNz
UHJveHkuaCIKICNpbXBvcnQgIl9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5SW50ZXJuYWwuaCIKICNp
bXBvcnQgIl9XS1RodW1ibmFpbFZpZXdJbnRlcm5hbC5oIgogI2ltcG9ydCA8SElUb29sYm94L0Nh
cmJvbkV2ZW50c0NvcmUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQVZLaXRTUEkuaD4KICNpbXBvcnQg
PFdlYkNvcmUvQVhPYmplY3RDYWNoZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9BY3Rpdml0eVN0YXRl
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NvbG9yTWFjLmg+CkBAIC04MCw2ICs4Miw3IEBACiAjaW1w
b3J0IDxXZWJDb3JlL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KICNp
bXBvcnQgPFdlYkNvcmUvTlNTcGVsbENoZWNrZXJTUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvTlNU
ZXh0RmluZGVyU1BJLmg+CisjaW1wb3J0IDxXZWJDb3JlL05TVG91Y2hCYXJTUEkuaD4KICNpbXBv
cnQgPFdlYkNvcmUvTlNXaW5kb3dTUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1FdmVu
dEZhY3RvcnlNYWMuaD4KICNpbXBvcnQgPFdlYkNvcmUvU29mdExpbmtpbmcuaD4KQEAgLTkwLDEz
ICs5MywxOSBAQAogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVy
Vmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlRnVsbFNjcmVlbldpbmRvdy5oPgogI2lt
cG9ydCA8V2ViQ29yZS9XZWJDb3JlTlNTdHJpbmdFeHRyYXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
V2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIuaD4KICNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVy
ZmFjZS5oPgogI2ltcG9ydCA8c3lzL3N0YXQuaD4KICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgorI2ltcG9ydCA8d3RmL1RlbXBvcmFyeUNoYW5nZS5oPgogCi0jaWYgVVNFKEFQUExFX0lO
VEVSTkFMX1NESykKLSNpbXBvcnQgPFdlYktpdEFkZGl0aW9ucy9XZWJWaWV3SW1wbEluY2x1ZGVz
Lmg+Ci0jZW5kaWYKKyNpZiBIQVZFKFRPVUNIX0JBUikgJiYgRU5BQkxFKFdFQl9QTEFZQkFDS19D
T05UUk9MU19NQU5BR0VSKQorU09GVF9MSU5LX0ZSQU1FV09SSyhBVktpdCkKK1NPRlRfTElOS19D
TEFTUyhBVktpdCwgQVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNQcm92aWRlcikKK1NPRlRf
TElOS19DTEFTUyhBVktpdCwgQVZGdW5jdGlvbkJhclNjcnViYmVyKQorCitOU1N0cmluZyAqIGNv
bnN0IFdLTWVkaWFFeGl0RnVsbFNjcmVlbkl0ZW0gPSBAIldLTWVkaWFFeGl0RnVsbFNjcmVlbkl0
ZW0iOworI2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFSKSAmJiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NP
TlRST0xTX01BTkFHRVIpCiAKIFNPRlRfTElOS19DT05TVEFOVF9NQVlfRkFJTChMb29rdXAsIExV
Tm90aWZpY2F0aW9uUG9wb3ZlcldpbGxDbG9zZSwgTlNTdHJpbmcgKikKIApAQCAtNDMzLDEyICs0
NDIsNjk2IEBAIC0gKEJPT0wpdHJ5VG9QZXJmb3JtOihTRUwpYWN0aW9uIHdpdGg6KGkKIAogQGVu
ZAogCi0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAgJiYgVVNF
KEFQUExFX0lOVEVSTkFMX1NESykKLSNpbXBvcnQgPFdlYktpdEFkZGl0aW9ucy9XZWJWaWV3SW1w
bEFkZGl0aW9ucy5tbT4KK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKKyNpZiBIQVZFKFRPVUNI
X0JBUikKKworQGludGVyZmFjZSBXS1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciA6IE5T
Vmlld0NvbnRyb2xsZXIgeworICAgIExpc3RUeXBlIF9jdXJyZW50TGlzdFR5cGU7CisKK0Bwcml2
YXRlCisgICAgV2ViVmlld0ltcGwqIF93ZWJWaWV3SW1wbDsKK30KKworQHByb3BlcnR5IChub25h
dG9taWMpIExpc3RUeXBlIGN1cnJlbnRMaXN0VHlwZTsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoV2ViVmlld0ltcGw6KFdlYlZpZXdJbXBsKil3ZWJWaWV3SW1wbDsKKworQGVuZAorCitAaW1w
bGVtZW50YXRpb24gV0tUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIKKworQHN5bnRoZXNp
emUgY3VycmVudExpc3RUeXBlPV9jdXJyZW50TGlzdFR5cGU7CisKK3N0YXRpYyBjb25zdCBkb3Vi
bGUgbGlzdENvbnRyb2xTZWdtZW50V2lkdGggPSA2NzsKK3N0YXRpYyBjb25zdCBkb3VibGUgZXhp
dEZ1bGxTY3JlZW5CdXR0b25XaWR0aCA9IDY0OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbm9M
aXN0U2VnbWVudCA9IDA7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgdW5vcmRlcmVkTGlzdFNlZ21l
bnQgPSAxOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIG9yZGVyZWRMaXN0U2VnbWVudCA9IDI7CisK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZpZXdJbXBsOihXZWJWaWV3SW1wbCopd2ViVmll
d0ltcGwKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKworICAgIF93ZWJWaWV3SW1wbCA9IHdlYlZpZXdJbXBsOworCisgICAgTlNTZWdtZW50
ZWRDb250cm9sICppbnNlcnRMaXN0Q29udHJvbCA9IFtOU1NlZ21lbnRlZENvbnRyb2wgc2VnbWVu
dGVkQ29udHJvbFdpdGhMYWJlbHM6QFsgV2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVOb25lKCksIFdl
YkNvcmU6Omluc2VydExpc3RUeXBlQnVsbGV0ZWQoKSwgV2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVO
dW1iZXJlZCgpIF0gdHJhY2tpbmdNb2RlOk5TU2VnbWVudFN3aXRjaFRyYWNraW5nU2VsZWN0T25l
IHRhcmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3IoX3NlbGVjdExpc3Q6KV07CisgICAgW2luc2Vy
dExpc3RDb250cm9sIHNldFdpZHRoOmxpc3RDb250cm9sU2VnbWVudFdpZHRoIGZvclNlZ21lbnQ6
bm9MaXN0U2VnbWVudF07CisgICAgW2luc2VydExpc3RDb250cm9sIHNldFdpZHRoOmxpc3RDb250
cm9sU2VnbWVudFdpZHRoIGZvclNlZ21lbnQ6dW5vcmRlcmVkTGlzdFNlZ21lbnRdOworICAgIFtp
bnNlcnRMaXN0Q29udHJvbCBzZXRXaWR0aDpsaXN0Q29udHJvbFNlZ21lbnRXaWR0aCBmb3JTZWdt
ZW50Om9yZGVyZWRMaXN0U2VnbWVudF07CisgICAgaW5zZXJ0TGlzdENvbnRyb2wuZm9udCA9IFtO
U0ZvbnQgc3lzdGVtRm9udE9mU2l6ZToxNV07CisKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBw
dXNoCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xh
cmF0aW9ucyIKKyAgICBpZCBzZWdtZW50RWxlbWVudCA9IE5TQWNjZXNzaWJpbGl0eVVuaWdub3Jl
ZERlc2NlbmRhbnQoaW5zZXJ0TGlzdENvbnRyb2wpOworICAgIE5TQXJyYXkgKnNlZ21lbnRzID0g
W3NlZ21lbnRFbGVtZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxp
dHlDaGlsZHJlbkF0dHJpYnV0ZV07CisgICAgQVNTRVJUKHNlZ21lbnRzLmNvdW50ID09IDMpOwor
ICAgIFtbc2VnbWVudHMgb2JqZWN0QXRJbmRleDpub0xpc3RTZWdtZW50XSBhY2Nlc3NpYmlsaXR5
U2V0T3ZlcnJpZGVWYWx1ZTpXZWJDb3JlOjppbnNlcnRMaXN0VHlwZU5vbmUoKSBmb3JBdHRyaWJ1
dGU6TlNBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25BdHRyaWJ1dGVdOworICAgIFtbc2VnbWVudHMg
b2JqZWN0QXRJbmRleDp1bm9yZGVyZWRMaXN0U2VnbWVudF0gYWNjZXNzaWJpbGl0eVNldE92ZXJy
aWRlVmFsdWU6V2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVCdWxsZXRlZEFjY2Vzc2liaWxpdHlUaXRs
ZSgpIGZvckF0dHJpYnV0ZTpOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkF0dHJpYnV0ZV07Cisg
ICAgW1tzZWdtZW50cyBvYmplY3RBdEluZGV4Om9yZGVyZWRMaXN0U2VnbWVudF0gYWNjZXNzaWJp
bGl0eVNldE92ZXJyaWRlVmFsdWU6V2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVOdW1iZXJlZEFjY2Vz
c2liaWxpdHlUaXRsZSgpIGZvckF0dHJpYnV0ZTpOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkF0
dHJpYnV0ZV07CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisKKyAgICBzZWxmLnZpZXcg
PSBpbnNlcnRMaXN0Q29udHJvbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRp
ZERlc3Ryb3lWaWV3Cit7CisgICAgX3dlYlZpZXdJbXBsID0gbnVsbHB0cjsKK30KKworLSAodm9p
ZClfc2VsZWN0TGlzdDooaWQpc2VuZGVyCit7CisgICAgaWYgKCFfd2ViVmlld0ltcGwpCisgICAg
ICAgIHJldHVybjsKKworICAgIE5TU2VnbWVudGVkQ29udHJvbCAqaW5zZXJ0TGlzdENvbnRyb2wg
PSAoTlNTZWdtZW50ZWRDb250cm9sICopc2VsZi52aWV3OworICAgIGlmIChpbnNlcnRMaXN0Q29u
dHJvbC5zZWxlY3RlZFNlZ21lbnQgPT0gbm9MaXN0U2VnbWVudCkgeworICAgICAgICAvLyBUaGVy
ZSBpcyBubyAicmVtb3ZlIGxpc3QiIGVkaXQgY29tbWFuZCwgYnV0IEluc2VydE9yZGVyZWRMaXN0
IGFuZCBJbnNlcnRVbm9yZGVyZWRMaXN0IGJvdGgKKyAgICAgICAgLy8gYmVoYXZlIGFzIHRvZ2ds
ZXMsIHNvIHdlIGNhbiBpbnZva2UgdGhlIGFwcHJvcHJpYXRlIGVkaXQgY29tbWFuZCBkZXBlbmRp
bmcgb24gb3VyIF9jdXJyZW50TGlzdFR5cGUKKyAgICAgICAgLy8gdG8gcmVtb3ZlIGFuIGV4aXN0
aW5nIGxpc3QuIFdlIGRvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcgaWYgX2N1cnJlbnRMaXN0VHlw
ZSBpcyBOb0xpc3QuCisgICAgICAgIGlmIChfY3VycmVudExpc3RUeXBlID09IE9yZGVyZWRMaXN0
KQorICAgICAgICAgICAgX3dlYlZpZXdJbXBsLT5wYWdlKCkuZXhlY3V0ZUVkaXRDb21tYW5kKEAi
SW5zZXJ0T3JkZXJlZExpc3QiLCBAIiIpOworICAgICAgICBlbHNlIGlmIChfY3VycmVudExpc3RU
eXBlID09IFVub3JkZXJlZExpc3QpCisgICAgICAgICAgICBfd2ViVmlld0ltcGwtPnBhZ2UoKS5l
eGVjdXRlRWRpdENvbW1hbmQoQCJJbnNlcnRVbm9yZGVyZWRMaXN0IiwgQCIiKTsKKyAgICB9IGVs
c2UgaWYgKGluc2VydExpc3RDb250cm9sLnNlbGVjdGVkU2VnbWVudCA9PSB1bm9yZGVyZWRMaXN0
U2VnbWVudCkKKyAgICAgICAgX3dlYlZpZXdJbXBsLT5wYWdlKCkuZXhlY3V0ZUVkaXRDb21tYW5k
KEAiSW5zZXJ0VW5vcmRlcmVkTGlzdCIsIEAiIik7CisgICAgZWxzZSBpZiAoaW5zZXJ0TGlzdENv
bnRyb2wuc2VsZWN0ZWRTZWdtZW50ID09IG9yZGVyZWRMaXN0U2VnbWVudCkKKyAgICAgICAgX3dl
YlZpZXdJbXBsLT5wYWdlKCkuZXhlY3V0ZUVkaXRDb21tYW5kKEAiSW5zZXJ0T3JkZXJlZExpc3Qi
LCBAIiIpOworCisgICAgX3dlYlZpZXdJbXBsLT5kaXNtaXNzVGV4dFRvdWNoQmFyUG9wb3Zlckl0
ZW1XaXRoSWRlbnRpZmllcihOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0TGlzdCk7Cit9CisK
Ky0gKHZvaWQpc2V0Q3VycmVudExpc3RUeXBlOihMaXN0VHlwZSlsaXN0VHlwZQoreworICAgIE5T
U2VnbWVudGVkQ29udHJvbCAqaW5zZXJ0TGlzdENvbnRyb2wgPSAoTlNTZWdtZW50ZWRDb250cm9s
ICopc2VsZi52aWV3OworICAgIHN3aXRjaCAobGlzdFR5cGUpIHsKKyAgICBjYXNlIE5vTGlzdDoK
KyAgICAgICAgW2luc2VydExpc3RDb250cm9sIHNldFNlbGVjdGVkOllFUyBmb3JTZWdtZW50Om5v
TGlzdFNlZ21lbnRdOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE9yZGVyZWRMaXN0OgorICAg
ICAgICBbaW5zZXJ0TGlzdENvbnRyb2wgc2V0U2VsZWN0ZWQ6WUVTIGZvclNlZ21lbnQ6b3JkZXJl
ZExpc3RTZWdtZW50XTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBVbm9yZGVyZWRMaXN0Ogor
ICAgICAgICBbaW5zZXJ0TGlzdENvbnRyb2wgc2V0U2VsZWN0ZWQ6WUVTIGZvclNlZ21lbnQ6dW5v
cmRlcmVkTGlzdFNlZ21lbnRdOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBfY3VycmVu
dExpc3RUeXBlID0gbGlzdFR5cGU7Cit9CisKK0BlbmQKKworQGludGVyZmFjZSBXS1RleHRUb3Vj
aEJhckl0ZW1Db250cm9sbGVyIDogTlNUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciA8TlNDYW5k
aWRhdGVMaXN0VG91Y2hCYXJJdGVtRGVsZWdhdGUsIE5TVG91Y2hCYXJEZWxlZ2F0ZT4geworICAg
IEJPT0wgX3RleHRJc0JvbGQ7CisgICAgQk9PTCBfdGV4dElzSXRhbGljOworICAgIEJPT0wgX3Rl
eHRJc1VuZGVybGluZWQ7CisgICAgTlNUZXh0QWxpZ25tZW50IF9jdXJyZW50VGV4dEFsaWdubWVu
dDsKKyAgICBSZXRhaW5QdHI8TlNDb2xvcj4gX3RleHRDb2xvcjsKKyAgICBSZXRhaW5QdHI8V0tU
ZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXI+IF93a1RleHRMaXN0VG91Y2hCYXJWaWV3Q29u
dHJvbGxlcjsKKworQHByaXZhdGUKKyAgICBXZWJWaWV3SW1wbCogX3dlYlZpZXdJbXBsOworfQor
CitAcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCB0ZXh0SXNCb2xkOworQHByb3BlcnR5IChub25h
dG9taWMpIEJPT0wgdGV4dElzSXRhbGljOworQHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgdGV4
dElzVW5kZXJsaW5lZDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBOU1RleHRBbGlnbm1lbnQgY3Vy
cmVudFRleHRBbGlnbm1lbnQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCByZWFkd3Jp
dGUpIE5TQ29sb3IgKnRleHRDb2xvcjsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViVmll
d0ltcGw6KFdlYlZpZXdJbXBsKil3ZWJWaWV3SW1wbDsKK0BlbmQKKworQGltcGxlbWVudGF0aW9u
IFdLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIKKworQHN5bnRoZXNpemUgdGV4dElzQm9sZD1f
dGV4dElzQm9sZDsKK0BzeW50aGVzaXplIHRleHRJc0l0YWxpYz1fdGV4dElzSXRhbGljOworQHN5
bnRoZXNpemUgdGV4dElzVW5kZXJsaW5lZD1fdGV4dElzVW5kZXJsaW5lZDsKK0BzeW50aGVzaXpl
IGN1cnJlbnRUZXh0QWxpZ25tZW50PV9jdXJyZW50VGV4dEFsaWdubWVudDsKKworLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoV2ViVmlld0ltcGw6KFdlYlZpZXdJbXBsKil3ZWJWaWV3SW1wbAorewor
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisg
ICAgX3dlYlZpZXdJbXBsID0gd2ViVmlld0ltcGw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKwor
LSAodm9pZClkaWREZXN0cm95VmlldworeworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVm
YXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZl07CisgICAgX3dlYlZpZXdJbXBsID0gbnVs
bHB0cjsKKyAgICBbX3drVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyIGRpZERlc3Ryb3lW
aWV3XTsKK30KKworI3ByYWdtYSBtYXJrIE5TVG91Y2hCYXJEZWxlZ2F0ZQorCistIChOU1RvdWNo
QmFySXRlbSAqKXRvdWNoQmFyOihOU1RvdWNoQmFyICopdG91Y2hCYXIgbWFrZUl0ZW1Gb3JJZGVu
dGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIKK3sKKyAgICByZXR1cm4gW3NlbGYgaXRlbUZv
cklkZW50aWZpZXI6aWRlbnRpZmllcl07Cit9CisKKy0gKG51bGxhYmxlIE5TVG91Y2hCYXJJdGVt
ICopaXRlbUZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcgoreworICAgIE5TVG91
Y2hCYXJJdGVtICppdGVtID0gW3N1cGVyIGl0ZW1Gb3JJZGVudGlmaWVyOmlkZW50aWZpZXJdOwor
ICAgIEJPT0wgaXNUZXh0Rm9ybWF0SXRlbSA9IFtpZGVudGlmaWVyIGlzRXF1YWxUb1N0cmluZzpO
U1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Rm9ybWF0XTsKKworICAgIGlmIChpc1RleHRGb3Jt
YXRJdGVtIHx8IFtpZGVudGlmaWVyIGlzRXF1YWxUb1N0cmluZzpOU1RvdWNoQmFySXRlbUlkZW50
aWZpZXJUZXh0U3R5bGVdKQorICAgICAgICBzZWxmLnRleHRTdHlsZS5hY3Rpb24gPSBAc2VsZWN0
b3IoX3drQ2hhbmdlVGV4dFN0eWxlOik7CisKKyAgICBpZiAoaXNUZXh0Rm9ybWF0SXRlbSB8fCBb
aWRlbnRpZmllciBpc0VxdWFsVG9TdHJpbmc6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEFs
aWdubWVudF0pCisgICAgICAgIHNlbGYudGV4dEFsaWdubWVudHMuYWN0aW9uID0gQHNlbGVjdG9y
KF93a0NoYW5nZVRleHRBbGlnbm1lbnQ6KTsKKworICAgIE5TQ29sb3JQaWNrZXJUb3VjaEJhckl0
ZW0gKmNvbG9yUGlja2VySXRlbSA9IG5pbDsKKyAgICBpZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRv
U3RyaW5nOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRDb2xvclBpY2tlcl0gJiYgW2l0ZW0g
aXNLaW5kT2ZDbGFzczpbTlNDb2xvclBpY2tlclRvdWNoQmFySXRlbSBjbGFzc11dKQorICAgICAg
ICBjb2xvclBpY2tlckl0ZW0gPSAoTlNDb2xvclBpY2tlclRvdWNoQmFySXRlbSAqKWl0ZW07Cisg
ICAgaWYgKGlzVGV4dEZvcm1hdEl0ZW0pCisgICAgICAgIGNvbG9yUGlja2VySXRlbSA9IHNlbGYu
Y29sb3JQaWNrZXJJdGVtOworICAgIGlmIChjb2xvclBpY2tlckl0ZW0pIHsKKyAgICAgICAgY29s
b3JQaWNrZXJJdGVtLnRhcmdldCA9IHNlbGY7CisgICAgICAgIGNvbG9yUGlja2VySXRlbS5hY3Rp
b24gPSBAc2VsZWN0b3IoX3drQ2hhbmdlQ29sb3I6KTsKKyAgICAgICAgY29sb3JQaWNrZXJJdGVt
LnNob3dzQWxwaGEgPSBOTzsKKyAgICB9CisKKyAgICByZXR1cm4gaXRlbTsKK30KKworI3ByYWdt
YSBtYXJrIE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbURlbGVnYXRlCisKKy0gKHZvaWQpY2Fu
ZGlkYXRlTGlzdFRvdWNoQmFySXRlbTooTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtICopYW5J
dGVtIGVuZFNlbGVjdGluZ0NhbmRpZGF0ZUF0SW5kZXg6KE5TSW50ZWdlcilpbmRleAoreworICAg
IGlmIChpbmRleCA9PSBOU05vdEZvdW5kKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIV93
ZWJWaWV3SW1wbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNBcnJheSAqY2FuZGlkYXRlcyA9
IGFuSXRlbS5jYW5kaWRhdGVzOworICAgIGlmICgoTlNVSW50ZWdlcilpbmRleCA+PSBjYW5kaWRh
dGVzLmNvdW50KQorICAgICAgICByZXR1cm47CisKKyAgICBpZCBjYW5kaWRhdGUgPSBjYW5kaWRh
dGVzW2luZGV4XTsKKyAgICBBU1NFUlQoW2NhbmRpZGF0ZSBpc0tpbmRPZkNsYXNzOltOU1RleHRD
aGVja2luZ1Jlc3VsdCBjbGFzc11dKTsKKworICAgIF93ZWJWaWV3SW1wbC0+aGFuZGxlQWNjZXB0
ZWRDYW5kaWRhdGUoKE5TVGV4dENoZWNraW5nUmVzdWx0ICopY2FuZGlkYXRlKTsKK30KKworLSAo
dm9pZCljYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtOihOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0
ZW0gKilhbkl0ZW0gY2hhbmdlZENhbmRpZGF0ZUxpc3RWaXNpYmlsaXR5OihCT09MKWlzVmlzaWJs
ZQoreworICAgIGlmICghX3dlYlZpZXdJbXBsKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
aXNWaXNpYmxlKQorICAgICAgICBfd2ViVmlld0ltcGwtPnJlcXVlc3RDYW5kaWRhdGVzRm9yU2Vs
ZWN0aW9uSWZOZWVkZWQoKTsKKworICAgIF93ZWJWaWV3SW1wbC0+dXBkYXRlVG91Y2hCYXIoKTsK
K30KKworI3ByYWdtYSBtYXJrIE5TTm90aWZpY2F0aW9uQ2VudGVyIG9ic2VydmVycworCistICh2
b2lkKXRvdWNoQmFyRGlkRXhpdEN1c3RvbWl6YXRpb246KE5TTm90aWZpY2F0aW9uICopbm90aWZp
Y2F0aW9uCit7CisgICAgaWYgKCFfd2ViVmlld0ltcGwpCisgICAgICAgIHJldHVybjsKKworICAg
IF93ZWJWaWV3SW1wbC0+c2V0SXNDdXN0b21pemluZ1RvdWNoQmFyKGZhbHNlKTsKKyAgICBfd2Vi
Vmlld0ltcGwtPnVwZGF0ZVRvdWNoQmFyKCk7Cit9CisKKy0gKHZvaWQpdG91Y2hCYXJXaWxsRW50
ZXJDdXN0b21pemF0aW9uOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIGlm
ICghX3dlYlZpZXdJbXBsKQorICAgICAgICByZXR1cm47CisKKyAgICBfd2ViVmlld0ltcGwtPnNl
dElzQ3VzdG9taXppbmdUb3VjaEJhcih0cnVlKTsKK30KKworLSAodm9pZClkaWRDaGFuZ2VBdXRv
bWF0aWNUZXh0Q29tcGxldGlvbjooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAg
ICBpZiAoIV93ZWJWaWV3SW1wbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgX3dlYlZpZXdJbXBs
LT51cGRhdGVUb3VjaEJhckFuZFJlZnJlc2hUZXh0QmFySWRlbnRpZmllcnMoKTsKK30KKworCisj
cHJhZ21hIG1hcmsgTlNUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlcgorCistIChXS1RleHRMaXN0
VG91Y2hCYXJWaWV3Q29udHJvbGxlciAqKXRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlcgor
eworICAgIHJldHVybiAoV0tUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgKilbc2VsZiB0
ZXh0TGlzdFZpZXdDb250cm9sbGVyXTsKK30KKworLSAodm9pZClzZXRUZXh0SXNCb2xkOihCT09M
KWJvbGQKK3sKKyAgICBfdGV4dElzQm9sZCA9IGJvbGQ7CisgICAgaWYgKFtzZWxmLnRleHRTdHls
ZSBpc1NlbGVjdGVkRm9yU2VnbWVudDowXSAhPSBfdGV4dElzQm9sZCkKKyAgICAgICAgW3NlbGYu
dGV4dFN0eWxlIHNldFNlbGVjdGVkOl90ZXh0SXNCb2xkIGZvclNlZ21lbnQ6MF07Cit9CisKKy0g
KHZvaWQpc2V0VGV4dElzSXRhbGljOihCT09MKWl0YWxpYworeworICAgIF90ZXh0SXNJdGFsaWMg
PSBpdGFsaWM7CisgICAgaWYgKFtzZWxmLnRleHRTdHlsZSBpc1NlbGVjdGVkRm9yU2VnbWVudDox
XSAhPSBfdGV4dElzSXRhbGljKQorICAgICAgICBbc2VsZi50ZXh0U3R5bGUgc2V0U2VsZWN0ZWQ6
X3RleHRJc0l0YWxpYyBmb3JTZWdtZW50OjFdOworfQorCistICh2b2lkKXNldFRleHRJc1VuZGVy
bGluZWQ6KEJPT0wpdW5kZXJsaW5lZAoreworICAgIF90ZXh0SXNVbmRlcmxpbmVkID0gdW5kZXJs
aW5lZDsKKyAgICBpZiAoW3NlbGYudGV4dFN0eWxlIGlzU2VsZWN0ZWRGb3JTZWdtZW50OjJdICE9
IF90ZXh0SXNVbmRlcmxpbmVkKQorICAgICAgICBbc2VsZi50ZXh0U3R5bGUgc2V0U2VsZWN0ZWQ6
X3RleHRJc1VuZGVybGluZWQgZm9yU2VnbWVudDoyXTsKK30KKworLSAodm9pZClfd2tDaGFuZ2VU
ZXh0U3R5bGU6KGlkKXNlbmRlcgoreworICAgIGlmICghX3dlYlZpZXdJbXBsKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoW3NlbGYudGV4dFN0eWxlIGlzU2VsZWN0ZWRGb3JTZWdtZW50OjBd
ICE9IF90ZXh0SXNCb2xkKSB7CisgICAgICAgIF90ZXh0SXNCb2xkID0gIV90ZXh0SXNCb2xkOwor
ICAgICAgICBfd2ViVmlld0ltcGwtPnBhZ2UoKS5leGVjdXRlRWRpdENvbW1hbmQoQCJUb2dnbGVC
b2xkIiwgQCIiKTsKKyAgICB9CisKKyAgICBpZiAoW3NlbGYudGV4dFN0eWxlIGlzU2VsZWN0ZWRG
b3JTZWdtZW50OjFdICE9IF90ZXh0SXNJdGFsaWMpIHsKKyAgICAgICAgX3RleHRJc0l0YWxpYyA9
ICFfdGV4dElzSXRhbGljOworICAgICAgICBfd2ViVmlld0ltcGwtPnBhZ2UoKS5leGVjdXRlRWRp
dENvbW1hbmQoIlRvZ2dsZUl0YWxpYyIsIEAiIik7CisgICAgfQorCisgICAgaWYgKFtzZWxmLnRl
eHRTdHlsZSBpc1NlbGVjdGVkRm9yU2VnbWVudDoyXSAhPSBfdGV4dElzVW5kZXJsaW5lZCkgewor
ICAgICAgICBfdGV4dElzVW5kZXJsaW5lZCA9ICFfdGV4dElzVW5kZXJsaW5lZDsKKyAgICAgICAg
X3dlYlZpZXdJbXBsLT5wYWdlKCkuZXhlY3V0ZUVkaXRDb21tYW5kKCJUb2dnbGVVbmRlcmxpbmUi
LCBAIiIpOworICAgIH0KK30KKworLSAodm9pZClzZXRDdXJyZW50VGV4dEFsaWdubWVudDooTlNU
ZXh0QWxpZ25tZW50KWFsaWdubWVudAoreworICAgIF9jdXJyZW50VGV4dEFsaWdubWVudCA9IGFs
aWdubWVudDsKKyAgICBbc2VsZi50ZXh0QWxpZ25tZW50cyBzZWxlY3RTZWdtZW50V2l0aFRhZzpf
Y3VycmVudFRleHRBbGlnbm1lbnRdOworfQorCistICh2b2lkKV93a0NoYW5nZVRleHRBbGlnbm1l
bnQ6KGlkKXNlbmRlcgoreworICAgIGlmICghX3dlYlZpZXdJbXBsKQorICAgICAgICByZXR1cm47
CisKKyAgICBOU1RleHRBbGlnbm1lbnQgYWxpZ25tZW50ID0gKE5TVGV4dEFsaWdubWVudClbc2Vs
Zi50ZXh0QWxpZ25tZW50cy5jZWxsIHRhZ0ZvclNlZ21lbnQ6W3NlbGYudGV4dEFsaWdubWVudHMg
c2VsZWN0ZWRTZWdtZW50XV07CisgICAgc3dpdGNoIChhbGlnbm1lbnQpIHsKKyAgICBjYXNlIE5T
VGV4dEFsaWdubWVudExlZnQ6IHsKKyAgICAgICAgX2N1cnJlbnRUZXh0QWxpZ25tZW50ID0gTlNU
ZXh0QWxpZ25tZW50TGVmdDsKKyAgICAgICAgX3dlYlZpZXdJbXBsLT5wYWdlKCkuZXhlY3V0ZUVk
aXRDb21tYW5kKCJBbGlnbkxlZnQiLCBAIiIpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBOU1RleHRBbGlnbm1lbnRSaWdodDogeworICAgICAgICBfY3VycmVudFRleHRBbGlnbm1l
bnQgPSBOU1RleHRBbGlnbm1lbnRSaWdodDsKKyAgICAgICAgX3dlYlZpZXdJbXBsLT5wYWdlKCku
ZXhlY3V0ZUVkaXRDb21tYW5kKCJBbGlnblJpZ2h0IiwgQCIiKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgTlNUZXh0QWxpZ25tZW50Q2VudGVyOiB7CisgICAgICAgIF9jdXJyZW50
VGV4dEFsaWdubWVudCA9IE5TVGV4dEFsaWdubWVudENlbnRlcjsKKyAgICAgICAgX3dlYlZpZXdJ
bXBsLT5wYWdlKCkuZXhlY3V0ZUVkaXRDb21tYW5kKCJBbGlnbkNlbnRlciIsIEAiIik7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIE5TVGV4dEFsaWdubWVudEp1c3RpZmllZDogewor
ICAgICAgICBfY3VycmVudFRleHRBbGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRKdXN0aWZpZWQ7
CisgICAgICAgIF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZCgiQWxpZ25K
dXN0aWZpZWQiLCBAIiIpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgX3dlYlZpZXdJbXBsLT5kaXNtaXNzVGV4dFRvdWNo
QmFyUG9wb3Zlckl0ZW1XaXRoSWRlbnRpZmllcihOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0
QWxpZ25tZW50KTsKK30KKworLSAoTlNDb2xvciAqKXRleHRDb2xvcgoreworICAgIHJldHVybiBf
dGV4dENvbG9yLmdldCgpOworfQorCistICh2b2lkKXNldFRleHRDb2xvcjooTlNDb2xvciAqKWNv
bG9yCit7CisgICAgX3RleHRDb2xvciA9IGNvbG9yOworICAgIHNlbGYuY29sb3JQaWNrZXJJdGVt
LmNvbG9yID0gX3RleHRDb2xvci5nZXQoKTsKK30KKworLSAodm9pZClfd2tDaGFuZ2VDb2xvcjoo
aWQpc2VuZGVyCit7CisgICAgaWYgKCFfd2ViVmlld0ltcGwpCisgICAgICAgIHJldHVybjsKKwor
ICAgIF90ZXh0Q29sb3IgPSBzZWxmLmNvbG9yUGlja2VySXRlbS5jb2xvcjsKKyAgICBfd2ViVmll
d0ltcGwtPnBhZ2UoKS5leGVjdXRlRWRpdENvbW1hbmQoIkZvcmVDb2xvciIsIFdlYkNvcmU6OmNv
bG9yRnJvbU5TQ29sb3IoX3RleHRDb2xvci5nZXQoKSkuc2VyaWFsaXplZCgpKTsKK30KKworLSAo
TlNWaWV3Q29udHJvbGxlciAqKXRleHRMaXN0Vmlld0NvbnRyb2xsZXIKK3sKKyAgICBpZiAoIV93
a1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlcikKKyAgICAgICAgX3drVGV4dExpc3RUb3Vj
aEJhclZpZXdDb250cm9sbGVyID0gYWRvcHROUyhbW1dLVGV4dExpc3RUb3VjaEJhclZpZXdDb250
cm9sbGVyIGFsbG9jXSBpbml0V2l0aFdlYlZpZXdJbXBsOl93ZWJWaWV3SW1wbF0pOworICAgIHJl
dHVybiBfd2tUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIuZ2V0KCk7Cit9CisKK0BlbmQK
KworbmFtZXNwYWNlIFdlYktpdCB7CitOU1RvdWNoQmFyICpXZWJWaWV3SW1wbDo6bWFrZVRvdWNo
QmFyKCkKK3sKKyAgICBpZiAoIW1fY2FuQ3JlYXRlVG91Y2hCYXJzKSB7CisgICAgICAgIG1fY2Fu
Q3JlYXRlVG91Y2hCYXJzID0gdHJ1ZTsKKyAgICAgICAgdXBkYXRlVG91Y2hCYXIoKTsKKyAgICB9
CisgICAgcmV0dXJuIG1fY3VycmVudFRvdWNoQmFyLmdldCgpOworfQorCitOU0NhbmRpZGF0ZUxp
c3RUb3VjaEJhckl0ZW0gKldlYlZpZXdJbXBsOjpjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gaXNSaWNobHlFZGl0YWJsZSgpID8gbV9yaWNoVGV4dENhbmRp
ZGF0ZUxpc3RUb3VjaEJhckl0ZW0uZ2V0KCkgOiBtX3BsYWluVGV4dENhbmRpZGF0ZUxpc3RUb3Vj
aEJhckl0ZW0uZ2V0KCk7Cit9CisKK0FWRnVuY3Rpb25CYXJTY3J1YmJlciAqV2ViVmlld0ltcGw6
Om1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSBjb25zdAoreworI2lmIEVOQUJMRShXRUJfUExB
WUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBpZiAobV9wYWdlLT5oYXNBY3RpdmVWaWRlb0Zv
ckNvbnRyb2xzTWFuYWdlcigpKQorICAgICAgICByZXR1cm4gbV9tZWRpYVBsYXliYWNrQ29udHJv
bHNWaWV3LmdldCgpOworI2VuZGlmCisgICAgcmV0dXJuIG5pbDsKK30KKworYm9vbCBXZWJWaWV3
SW1wbDo6dXNlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpIGNvbnN0Cit7CisjaWYgRU5BQkxF
KEZVTExTQ1JFRU5fQVBJKQorICAgIGlmIChoYXNGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcigp
KQorICAgICAgICByZXR1cm4gIVttX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGlzRnVsbFNj
cmVlbl07CisjZW5kaWYKKyAgICByZXR1cm4gbV9jbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250
cm9sc1ZpZXc7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OmRpc21pc3NUZXh0VG91Y2hCYXJQb3Bv
dmVySXRlbVdpdGhJZGVudGlmaWVyKE5TU3RyaW5nICppZGVudGlmaWVyKQoreworICAgIE5TVG91
Y2hCYXJJdGVtICpmb3VuZEl0ZW0gPSBuaWw7CisgICAgZm9yIChOU1RvdWNoQmFySXRlbSAqaXRl
bSBpbiB0ZXh0VG91Y2hCYXIoKS5pdGVtcykgeworICAgICAgICBpZiAoW2l0ZW0uaWRlbnRpZmll
ciBpc0VxdWFsVG9TdHJpbmc6aWRlbnRpZmllcl0pIHsKKyAgICAgICAgICAgIGZvdW5kSXRlbSA9
IGl0ZW07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChbW2l0
ZW0gaWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRl
eHRGb3JtYXRdKSB7CisgICAgICAgICAgICBmb3IgKE5TVG91Y2hCYXJJdGVtICpjaGlsZEl0ZW0g
aW4gWyhOU0dyb3VwVG91Y2hCYXJJdGVtICopaXRlbSBncm91cFRvdWNoQmFyXS5pdGVtcykgewor
ICAgICAgICAgICAgICAgIGlmIChbY2hpbGRJdGVtLmlkZW50aWZpZXIgaXNFcXVhbFRvU3RyaW5n
OmlkZW50aWZpZXJdKSB7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kSXRlbSA9IGNoaWxkSXRl
bTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
W2ZvdW5kSXRlbSBpc0tpbmRPZkNsYXNzOltOU1BvcG92ZXJUb3VjaEJhckl0ZW0gY2xhc3NdXSkK
KyAgICAgICAgWyhOU1BvcG92ZXJUb3VjaEJhckl0ZW0gKilmb3VuZEl0ZW0gZGlzbWlzc1BvcG92
ZXI6bmlsXTsKK30KKworc3RhdGljIE5TQXJyYXk8TlNTdHJpbmcgKj4gKnRleHRUb3VjaEJhckN1
c3RvbWl6YXRpb25BbGxvd2VkSWRlbnRpZmllcnMoKQoreworICAgIHJldHVybiBAWyBOU1RvdWNo
QmFySXRlbUlkZW50aWZpZXJDaGFyYWN0ZXJQaWNrZXIsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmll
clRleHRDb2xvclBpY2tlciwgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dFN0eWxlLCBOU1Rv
dWNoQmFySXRlbUlkZW50aWZpZXJUZXh0QWxpZ25tZW50LCBOU1RvdWNoQmFySXRlbUlkZW50aWZp
ZXJUZXh0TGlzdCwgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyRmxleGlibGVTcGFjZSBdOworfQor
CitzdGF0aWMgTlNBcnJheTxOU1N0cmluZyAqPiAqcGxhaW5UZXh0VG91Y2hCYXJDdXN0b21pemF0
aW9uRGVmYXVsdEl0ZW1JZGVudGlmaWVycygpCit7CisgICAgcmV0dXJuIEBbIE5TVG91Y2hCYXJJ
dGVtSWRlbnRpZmllckNoYXJhY3RlclBpY2tlciwgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyQ2Fu
ZGlkYXRlTGlzdCBdOworfQorCitzdGF0aWMgTlNBcnJheTxOU1N0cmluZyAqPiAqcmljaFRleHRU
b3VjaEJhckN1c3RvbWl6YXRpb25EZWZhdWx0SXRlbUlkZW50aWZpZXJzKCkKK3sKKyAgICByZXR1
cm4gQFsgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyQ2hhcmFjdGVyUGlja2VyLCBOU1RvdWNoQmFy
SXRlbUlkZW50aWZpZXJUZXh0Rm9ybWF0LCBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJDYW5kaWRh
dGVMaXN0IF07Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZVRvdWNoQmFyQW5kUmVmcmVz
aFRleHRCYXJJZGVudGlmaWVycygpCit7CisgICAgaWYgKG1fcmljaFRleHRUb3VjaEJhcikKKyAg
ICAgICAgc2V0VXBUZXh0VG91Y2hCYXIobV9yaWNoVGV4dFRvdWNoQmFyLmdldCgpKTsKKworICAg
IGlmIChtX3BsYWluVGV4dFRvdWNoQmFyKQorICAgICAgICBzZXRVcFRleHRUb3VjaEJhcihtX3Bs
YWluVGV4dFRvdWNoQmFyLmdldCgpKTsKKworICAgIHVwZGF0ZVRvdWNoQmFyKCk7Cit9CisKK3Zv
aWQgV2ViVmlld0ltcGw6OnNldFVwVGV4dFRvdWNoQmFyKE5TVG91Y2hCYXIgKnRvdWNoQmFyKQor
eworICAgIGJvb2wgaXNSaWNoVGV4dFRvdWNoQmFyID0gdG91Y2hCYXIgPT0gbV9yaWNoVGV4dFRv
dWNoQmFyLmdldCgpOworICAgIFt0b3VjaEJhciBzZXREZWxlZ2F0ZTptX3RleHRUb3VjaEJhckl0
ZW1Db250cm9sbGVyLmdldCgpXTsKKyAgICBbdG91Y2hCYXIgc2V0RGVmYXVsdEl0ZW1zOltOU011
dGFibGVTZXQgc2V0V2l0aE9iamVjdHM6aXNSaWNoVGV4dFRvdWNoQmFyID8gbV9yaWNoVGV4dENh
bmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0uZ2V0KCkgOiBtX3BsYWluVGV4dENhbmRpZGF0ZUxpc3RU
b3VjaEJhckl0ZW0uZ2V0KCksIG5pbF1dOworICAgIFt0b3VjaEJhciBzZXRDdXN0b21pemF0aW9u
QWxsb3dlZEl0ZW1JZGVudGlmaWVyczp0ZXh0VG91Y2hCYXJDdXN0b21pemF0aW9uQWxsb3dlZElk
ZW50aWZpZXJzKCldOworICAgIFt0b3VjaEJhciBzZXRDdXN0b21pemF0aW9uRGVmYXVsdEl0ZW1J
ZGVudGlmaWVyczppc1JpY2hUZXh0VG91Y2hCYXIgPyByaWNoVGV4dFRvdWNoQmFyQ3VzdG9taXph
dGlvbkRlZmF1bHRJdGVtSWRlbnRpZmllcnMoKSA6IHBsYWluVGV4dFRvdWNoQmFyQ3VzdG9taXph
dGlvbkRlZmF1bHRJdGVtSWRlbnRpZmllcnMoKV07CisKKyAgICBpZiAoTlNHcm91cFRvdWNoQmFy
SXRlbSAqdGV4dEZvcm1hdEl0ZW0gPSAoTlNHcm91cFRvdWNoQmFySXRlbSAqKVt0b3VjaEJhciBp
dGVtRm9ySWRlbnRpZmllcjpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Rm9ybWF0XSkKKyAg
ICAgICAgdGV4dEZvcm1hdEl0ZW0uZ3JvdXBUb3VjaEJhci5jdXN0b21pemF0aW9uSWRlbnRpZmll
ciA9IEAiV0tUZXh0Rm9ybWF0VG91Y2hCYXIiOworfQorCitib29sIFdlYlZpZXdJbXBsOjppc1Jp
Y2hseUVkaXRhYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYWdlLT5lZGl0b3JTdGF0ZSgp
LmlzQ29udGVudFJpY2hseUVkaXRhYmxlICYmICFtX3BhZ2UtPm5lZWRzUGxhaW5UZXh0UXVpcmso
KTsKK30KKworTlNUb3VjaEJhciAqV2ViVmlld0ltcGw6OnRleHRUb3VjaEJhcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGlzUmljaGx5RWRpdGFibGUoKSA/IG1fcmljaFRleHRUb3VjaEJhci5nZXQo
KSA6IG1fcGxhaW5UZXh0VG91Y2hCYXIuZ2V0KCk7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnVw
ZGF0ZVRleHRUb3VjaEJhcigpCit7CisgICAgaWYgKCFtX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXND
b250ZW50RWRpdGFibGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2lzVXBkYXRpbmdU
ZXh0VG91Y2hCYXIpCisgICAgICAgIHJldHVybjsKKworICAgIFRlbXBvcmFyeUNoYW5nZTxib29s
PiBpc1VwZGF0aW5nVGV4dEZ1bmN0aW9uQmFyKG1faXNVcGRhdGluZ1RleHRUb3VjaEJhciwgdHJ1
ZSk7CisKKyAgICBpZiAoIW1fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIpCisgICAgICAgIG1f
dGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgPSBhZG9wdE5TKFtbV0tUZXh0VG91Y2hCYXJJdGVt
Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3SW1wbDp0aGlzXSk7CisKKyAgICBpZiAo
IW1fc3RhcnRlZExpc3RlbmluZ1RvQ3VzdG9taXphdGlvbkV2ZW50cykgeworICAgICAgICBbW05T
Tm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOm1fdGV4dFRvdWNo
QmFySXRlbUNvbnRyb2xsZXIuZ2V0KCkgc2VsZWN0b3I6QHNlbGVjdG9yKHRvdWNoQmFyRGlkRXhp
dEN1c3RvbWl6YXRpb246KSBuYW1lOk5TVG91Y2hCYXJEaWRFeGl0Q3VzdG9taXphdGlvbiBvYmpl
Y3Q6bmlsXTsKKyAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBh
ZGRPYnNlcnZlcjptX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyLmdldCgpIHNlbGVjdG9yOkBz
ZWxlY3Rvcih0b3VjaEJhcldpbGxFbnRlckN1c3RvbWl6YXRpb246KSBuYW1lOk5TVG91Y2hCYXJX
aWxsRW50ZXJDdXN0b21pemF0aW9uIG9iamVjdDpuaWxdOworICAgICAgICBbW05TTm90aWZpY2F0
aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOm1fdGV4dFRvdWNoQmFySXRlbUNv
bnRyb2xsZXIuZ2V0KCkgc2VsZWN0b3I6QHNlbGVjdG9yKGRpZENoYW5nZUF1dG9tYXRpY1RleHRD
b21wbGV0aW9uOikgbmFtZTpOU1NwZWxsQ2hlY2tlckRpZENoYW5nZUF1dG9tYXRpY1RleHRDb21w
bGV0aW9uTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOworCisgICAgICAgIG1fc3RhcnRlZExpc3Rl
bmluZ1RvQ3VzdG9taXphdGlvbkV2ZW50cyA9IHRydWU7CisgICAgfQorCisgICAgaWYgKCFtX3Jp
Y2hUZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSB8fCAhbV9wbGFpblRleHRDYW5kaWRhdGVM
aXN0VG91Y2hCYXJJdGVtKSB7CisgICAgICAgIG1fcmljaFRleHRDYW5kaWRhdGVMaXN0VG91Y2hC
YXJJdGVtID0gYWRvcHROUyhbW05TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSBhbGxvY10gaW5p
dFdpdGhJZGVudGlmaWVyOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckNhbmRpZGF0ZUxpc3RdKTsK
KyAgICAgICAgW21fcmljaFRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtIHNldERlbGVnYXRl
Om1fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIuZ2V0KCldOworICAgICAgICBtX3BsYWluVGV4
dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gPSBhZG9wdE5TKFtbTlNDYW5kaWRhdGVMaXN0VG91
Y2hCYXJJdGVtIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6TlNUb3VjaEJhckl0ZW1JZGVudGlm
aWVyQ2FuZGlkYXRlTGlzdF0pOworICAgICAgICBbbV9wbGFpblRleHRDYW5kaWRhdGVMaXN0VG91
Y2hCYXJJdGVtIHNldERlbGVnYXRlOm1fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIuZ2V0KCld
OworICAgICAgICByZXF1ZXN0Q2FuZGlkYXRlc0ZvclNlbGVjdGlvbklmTmVlZGVkKCk7CisgICAg
fQorCisgICAgaWYgKCFtX3JpY2hUZXh0VG91Y2hCYXIpIHsKKyAgICAgICAgbV9yaWNoVGV4dFRv
dWNoQmFyID0gYWRvcHROUyhbW05TVG91Y2hCYXIgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgc2V0
VXBUZXh0VG91Y2hCYXIobV9yaWNoVGV4dFRvdWNoQmFyLmdldCgpKTsKKyAgICAgICAgW21fcmlj
aFRleHRUb3VjaEJhciBzZXRDdXN0b21pemF0aW9uSWRlbnRpZmllcjpAIldLUmljaFRleHRUb3Vj
aEJhciJdOworICAgIH0KKworICAgIGlmICghbV9wbGFpblRleHRUb3VjaEJhcikgeworICAgICAg
ICBtX3BsYWluVGV4dFRvdWNoQmFyID0gYWRvcHROUyhbW05TVG91Y2hCYXIgYWxsb2NdIGluaXRd
KTsKKyAgICAgICAgc2V0VXBUZXh0VG91Y2hCYXIobV9wbGFpblRleHRUb3VjaEJhci5nZXQoKSk7
CisgICAgICAgIFttX3BsYWluVGV4dFRvdWNoQmFyIHNldEN1c3RvbWl6YXRpb25JZGVudGlmaWVy
OkAiV0tQbGFpblRleHRUb3VjaEJhciJdOworICAgIH0KKworICAgIGlmIChbTlNTcGVsbENoZWNr
ZXIgaXNBdXRvbWF0aWNUZXh0Q29tcGxldGlvbkVuYWJsZWRdICYmICFtX2lzQ3VzdG9taXppbmdU
b3VjaEJhcikgeworICAgICAgICBCT09MIHNob3dDYW5kaWRhdGVzTGlzdCA9ICFtX3BhZ2UtPmVk
aXRvclN0YXRlKCkuc2VsZWN0aW9uSXNSYW5nZSB8fCBtX2lzSGFuZGxpbmdBY2NlcHRlZENhbmRp
ZGF0ZTsKKyAgICAgICAgW2NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0oKSB1cGRhdGVXaXRoSW5z
ZXJ0aW9uUG9pbnRWaXNpYmlsaXR5OnNob3dDYW5kaWRhdGVzTGlzdF07CisgICAgICAgIFttX3Zp
ZXcgX2RpZFVwZGF0ZUNhbmRpZGF0ZUxpc3RWaXNpYmlsaXR5OnNob3dDYW5kaWRhdGVzTGlzdF07
CisgICAgfQorCisgICAgaWYgKG1fcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0luUGFzc3dvcmRGaWVs
ZCkgeworICAgICAgICAvLyBXZSBkb24ndCByZXF1ZXN0IGNhbmRpZGF0ZXMgZm9yIHBhc3N3b3Jk
IGZpZWxkcy4gSWYgdGhlIHVzZXIgd2FzIHByZXZpb3VzbHkgaW4gYSBub24tcGFzc3dvcmQgZmll
bGQsIHRoZW4gdGhlCisgICAgICAgIC8vIG9sZCBjYW5kaWRhdGVzIHdpbGwgc3RpbGwgc2hvdyBi
eSBkZWZhdWx0LCBzbyB3ZSBjbGVhciB0aGVtIGhlcmUgYnkgc2V0dGluZyBhbiBlbXB0eSBhcnJh
eSBvZiBjYW5kaWRhdGVzLgorICAgICAgICBpZiAoIW1fZW1wdHlDYW5kaWRhdGVzQXJyYXkpCisg
ICAgICAgICAgICBtX2VtcHR5Q2FuZGlkYXRlc0FycmF5ID0gYWRvcHROUyhbW05TQXJyYXkgYWxs
b2NdIGluaXRdKTsKKyAgICAgICAgW2NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0oKSBzZXRDYW5k
aWRhdGVzOm1fZW1wdHlDYW5kaWRhdGVzQXJyYXkuZ2V0KCkgZm9yU2VsZWN0ZWRSYW5nZTpOU01h
a2VSYW5nZSgwLCAwKSBpblN0cmluZzpuaWxdOworICAgIH0KKworICAgIE5TVG91Y2hCYXIgKnRl
eHRUb3VjaEJhciA9IHRoaXMtPnRleHRUb3VjaEJhcigpOworICAgIEJPT0wgaXNTaG93aW5nQ29t
YmluZWRUZXh0Rm9ybWF0SXRlbSA9IFt0ZXh0VG91Y2hCYXIuaXRlbUlkZW50aWZpZXJzIGNvbnRh
aW5zT2JqZWN0Ok5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRGb3JtYXRdOworICAgIFt0ZXh0
VG91Y2hCYXIgc2V0UHJpbmNpcGFsSXRlbUlkZW50aWZpZXI6aXNTaG93aW5nQ29tYmluZWRUZXh0
Rm9ybWF0SXRlbSA/IE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRGb3JtYXQgOiBuaWxdOwor
CisgICAgLy8gU2V0IGN1cnJlbnQgdHlwaW5nIGF0dHJpYnV0ZXMgZm9yIHJpY2ggdGV4dC4gVGhp
cyB3aWxsIGVuc3VyZSB0aGF0IHRoZSBidXR0b25zIHJlZmxlY3QgdGhlIHN0YXRlIG9mCisgICAg
Ly8gdGhlIHRleHQgd2hlbiBjaGFuZ2luZyBzZWxlY3Rpb24gdGhyb3VnaG91dCB0aGUgZG9jdW1l
bnQuCisgICAgaWYgKGlzUmljaGx5RWRpdGFibGUoKSkgeworICAgICAgICBjb25zdCBFZGl0b3JT
dGF0ZSYgZWRpdG9yU3RhdGUgPSBtX3BhZ2UtPmVkaXRvclN0YXRlKCk7CisgICAgICAgIGlmICgh
ZWRpdG9yU3RhdGUuaXNNaXNzaW5nUG9zdExheW91dERhdGEpIHsKKyAgICAgICAgICAgIFttX3Rl
eHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFRleHRJc0JvbGQ6KGJvb2wpKG1fcGFnZS0+ZWRp
dG9yU3RhdGUoKS5wb3N0TGF5b3V0RGF0YSgpLnR5cGluZ0F0dHJpYnV0ZXMgJiBBdHRyaWJ1dGVC
b2xkKV07CisgICAgICAgICAgICBbbV90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRUZXh0
SXNJdGFsaWM6KGJvb2wpKG1fcGFnZS0+ZWRpdG9yU3RhdGUoKS5wb3N0TGF5b3V0RGF0YSgpLnR5
cGluZ0F0dHJpYnV0ZXMgJiBBdHRyaWJ1dGVJdGFsaWNzKV07CisgICAgICAgICAgICBbbV90ZXh0
VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRUZXh0SXNVbmRlcmxpbmVkOihib29sKShtX3BhZ2Ut
PmVkaXRvclN0YXRlKCkucG9zdExheW91dERhdGEoKS50eXBpbmdBdHRyaWJ1dGVzICYgQXR0cmli
dXRlVW5kZXJsaW5lKV07CisgICAgICAgICAgICBbbV90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxl
ciBzZXRUZXh0Q29sb3I6bnNDb2xvcihlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpLnRleHRD
b2xvcildOworICAgICAgICAgICAgW1ttX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHRleHRM
aXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlcl0gc2V0Q3VycmVudExpc3RUeXBlOihMaXN0VHlwZSlt
X3BhZ2UtPmVkaXRvclN0YXRlKCkucG9zdExheW91dERhdGEoKS5lbmNsb3NpbmdMaXN0VHlwZV07
CisKKyAgICAgICAgICAgIE5TVGV4dEFsaWdubWVudCB0ZXh0QWxpZ25tZW50OworICAgICAgICAg
ICAgc3dpdGNoIChlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpLnRleHRBbGlnbm1lbnQpIHsK
KyAgICAgICAgICAgIGNhc2UgTm9BbGlnbm1lbnQ6CisgICAgICAgICAgICAgICAgdGV4dEFsaWdu
bWVudCA9IE5TVGV4dEFsaWdubWVudE5hdHVyYWw7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIExlZnRBbGlnbm1lbnQ6CisgICAgICAgICAgICAgICAgdGV4dEFsaWdu
bWVudCA9IE5TVGV4dEFsaWdubWVudExlZnQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIFJpZ2h0QWxpZ25tZW50OgorICAgICAgICAgICAgICAgIHRleHRBbGlnbm1l
bnQgPSBOU1RleHRBbGlnbm1lbnRSaWdodDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgQ2VudGVyQWxpZ25tZW50OgorICAgICAgICAgICAgICAgIHRleHRBbGlnbm1l
bnQgPSBOU1RleHRBbGlnbm1lbnRDZW50ZXI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEp1c3RpZmllZEFsaWdubWVudDoKKyAgICAgICAgICAgICAgICB0ZXh0QWxp
Z25tZW50ID0gTlNUZXh0QWxpZ25tZW50SnVzdGlmaWVkOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgW21fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xs
ZXIgc2V0Q3VycmVudFRleHRBbGlnbm1lbnQ6dGV4dEFsaWdubWVudF07CisgICAgICAgIH0KKyAg
ICAgICAgQk9PTCBpc1Nob3dpbmdDYW5kaWRhdGVMaXN0SXRlbSA9IFt0ZXh0VG91Y2hCYXIuaXRl
bUlkZW50aWZpZXJzIGNvbnRhaW5zT2JqZWN0Ok5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckNhbmRp
ZGF0ZUxpc3RdICYmIFtOU1NwZWxsQ2hlY2tlciBpc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVu
YWJsZWRdOworICAgICAgICBbbV90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRVc2VzTmFy
cm93VGV4dFN0eWxlSXRlbTppc1Nob3dpbmdDb21iaW5lZFRleHRGb3JtYXRJdGVtICYmIGlzU2hv
d2luZ0NhbmRpZGF0ZUxpc3RJdGVtXTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnVw
ZGF0ZU1lZGlhVG91Y2hCYXIoKQoreworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNf
TUFOQUdFUikKKyAgICBpZiAoIW1fbWVkaWFUb3VjaEJhclByb3ZpZGVyKQorICAgICAgICBtX21l
ZGlhVG91Y2hCYXJQcm92aWRlciA9IGFkb3B0TlMoW2FsbG9jQVZGdW5jdGlvbkJhclBsYXliYWNr
Q29udHJvbHNQcm92aWRlckluc3RhbmNlKCkgaW5pdF0pOworCisgICAgaWYgKCFtX21lZGlhUGxh
eWJhY2tDb250cm9sc1ZpZXcpCisgICAgICAgIG1fbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyA9
IGFkb3B0TlMoW2FsbG9jQVZGdW5jdGlvbkJhclNjcnViYmVySW5zdGFuY2UoKSBpbml0XSk7CisK
KyAgICBpZiAoIW1fcGxheWJhY2tDb250cm9sc01hbmFnZXIpCisgICAgICAgIG1fcGxheWJhY2tD
b250cm9sc01hbmFnZXIgPSBhZG9wdE5TKFtbV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgYWxs
b2NdIGluaXRdKTsKKworICAgIGlmIChQbGF0Zm9ybVdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZSogaW50ZXJmYWNlID0gbV9wYWdlLT5wbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCktPmNvbnRyb2xz
TWFuYWdlckludGVyZmFjZSgpKQorICAgICAgICBbbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlciBz
ZXRXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6aW50ZXJmYWNlXTsKKworICAgIFttX21l
ZGlhVG91Y2hCYXJQcm92aWRlciBzZXRQbGF5YmFja0NvbnRyb2xzQ29udHJvbGxlcjptX3BsYXli
YWNrQ29udHJvbHNNYW5hZ2VyLmdldCgpXTsKKyAgICBbbV9tZWRpYVBsYXliYWNrQ29udHJvbHNW
aWV3IHNldFBsYXliYWNrQ29udHJvbHNDb250cm9sbGVyOm1fcGxheWJhY2tDb250cm9sc01hbmFn
ZXIuZ2V0KCldOworCisgICAgaWYgKCF1c2VNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCkpIHsK
KyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgICAgIC8vIElmIHdlIGNhbid0IGhhdmUg
YSBtZWRpYSBwb3BvdmVyIGZ1bmN0aW9uIGJhciBpdGVtLCBpdCBtaWdodCBiZSBiZWNhdXNlIHdl
IGFyZSBpbiBmdWxsIHNjcmVlbi4KKyAgICAgICAgLy8gSWYgc28sIGN1c3RvbWl6ZSB0aGUgZXNj
YXBlIGtleS4KKyAgICAgICAgTlNUb3VjaEJhciAqdG91Y2hCYXIgPSBbbV9tZWRpYVRvdWNoQmFy
UHJvdmlkZXIgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih0b3VjaEJhcildID8gWyhpZClt
X21lZGlhVG91Y2hCYXJQcm92aWRlci5nZXQoKSB0b3VjaEJhcl0gOiBbKGlkKW1fbWVkaWFUb3Vj
aEJhclByb3ZpZGVyLmdldCgpIHRvdWNoQmFyXTsKKyAgICAgICAgaWYgKGhhc0Z1bGxTY3JlZW5X
aW5kb3dDb250cm9sbGVyKCkgJiYgW21fZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgaXNGdWxs
U2NyZWVuXSkgeworICAgICAgICAgICAgaWYgKCFtX2V4aXRGdWxsU2NyZWVuQnV0dG9uKSB7Cisg
ICAgICAgICAgICAgICAgbV9leGl0RnVsbFNjcmVlbkJ1dHRvbiA9IGFkb3B0TlMoW1tOU0N1c3Rv
bVRvdWNoQmFySXRlbSBhbGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOldLTWVkaWFFeGl0RnVsbFNj
cmVlbkl0ZW1dKTsKKworICAgICAgICAgICAgICAgIE5TSW1hZ2UgKmltYWdlID0gW05TSW1hZ2Ug
aW1hZ2VOYW1lZDpOU0ltYWdlTmFtZVRvdWNoQmFyRXhpdEZ1bGxTY3JlZW5UZW1wbGF0ZV07Cisg
ICAgICAgICAgICAgICAgW2ltYWdlIHNldFRlbXBsYXRlOllFU107CisKKyAgICAgICAgICAgICAg
ICBOU0J1dHRvbiAqZXhpdEZ1bGxTY3JlZW5CdXR0b24gPSBbTlNCdXR0b24gYnV0dG9uV2l0aFRp
dGxlOmltYWdlID8gQCIiIDogQCJFeGl0IiBpbWFnZTppbWFnZSB0YXJnZXQ6bV9mdWxsU2NyZWVu
V2luZG93Q29udHJvbGxlci5nZXQoKSBhY3Rpb246QHNlbGVjdG9yKHJlcXVlc3RFeGl0RnVsbFNj
cmVlbildOworICAgICAgICAgICAgICAgIFtleGl0RnVsbFNjcmVlbkJ1dHRvbiBzZXRBY2Nlc3Np
YmlsaXR5VGl0bGU6V2ViQ29yZTo6ZXhpdEZ1bGxTY3JlZW5CdXR0b25BY2Nlc3NpYmlsaXR5VGl0
bGUoKV07CisKKyAgICAgICAgICAgICAgICBbW2V4aXRGdWxsU2NyZWVuQnV0dG9uLndpZHRoQW5j
aG9yIGNvbnN0cmFpbnRMZXNzVGhhbk9yRXF1YWxUb0NvbnN0YW50OmV4aXRGdWxsU2NyZWVuQnV0
dG9uV2lkdGhdIHNldEFjdGl2ZTpZRVNdOworICAgICAgICAgICAgICAgIFttX2V4aXRGdWxsU2Ny
ZWVuQnV0dG9uIHNldFZpZXc6ZXhpdEZ1bGxTY3JlZW5CdXR0b25dOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdG91Y2hCYXIuZXNjYXBlS2V5UmVwbGFjZW1lbnRJdGVtID0gbV9leGl0RnVs
bFNjcmVlbkJ1dHRvbi5nZXQoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB0b3VjaEJh
ci5lc2NhcGVLZXlSZXBsYWNlbWVudEl0ZW0gPSBuaWw7CisjZW5kaWYKKyAgICAgICAgLy8gVGhl
IHJlc3Qgb2YgdGhlIHdvcmsgdG8gdXBkYXRlIHRoZSBtZWRpYSBmdW5jdGlvbiBiYXIgb25seSBh
cHBsaWVzIHRvIHRoZSBwb3BvdmVyIHZlcnNpb24sIHNvIHJldHVybiBlYXJseS4KKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyICYmIG1f
dmlldyA9PSBtX3ZpZXcud2luZG93LmZpcnN0UmVzcG9uZGVyICYmIFttX3ZpZXcgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViX2RpZEFkZE1lZGlhQ29udHJvbHNNYW5hZ2VyOildKQor
ICAgICAgICBbbV92aWV3IF93ZWJfZGlkQWRkTWVkaWFDb250cm9sc01hbmFnZXI6bV9tZWRpYVBs
YXliYWNrQ29udHJvbHNWaWV3LmdldCgpXTsKKyNlbmRpZgorfQorCit2b2lkIFdlYlZpZXdJbXBs
Ojpmb3JjZVJlcXVlc3RDYW5kaWRhdGVzRm9yVGVzdGluZygpCit7CisgICAgbV9jYW5DcmVhdGVU
b3VjaEJhcnMgPSB0cnVlOworICAgIHVwZGF0ZVRvdWNoQmFyKCk7Cit9CisKK3ZvaWQgV2ViVmll
d0ltcGw6OnVwZGF0ZVRvdWNoQmFyKCkKK3sKKyAgICBpZiAoIW1fY2FuQ3JlYXRlVG91Y2hCYXJz
KQorICAgICAgICByZXR1cm47CisKKyAgICBOU1RvdWNoQmFyICp0b3VjaEJhciA9IG5pbDsKKyAg
ICBib29sIHVzZXJBY3Rpb25SZXF1aXJlbWVudHNIYXZlQmVlbk1ldCA9IG1fcmVxdWlyZXNVc2Vy
QWN0aW9uRm9yRWRpdGluZ0NvbnRyb2xzTWFuYWdlciA/IG1fcGFnZS0+aGFzSGFkU2VsZWN0aW9u
Q2hhbmdlc0Zyb21Vc2VySW50ZXJhY3Rpb24oKSA6IHRydWU7CisgICAgaWYgKG1fcGFnZS0+ZWRp
dG9yU3RhdGUoKS5pc0NvbnRlbnRFZGl0YWJsZSAmJiAhbV9wYWdlLT5uZWVkc0hpZGRlbkNvbnRl
bnRFZGl0YWJsZVF1aXJrKCkpIHsKKyAgICAgICAgdXBkYXRlVGV4dFRvdWNoQmFyKCk7CisgICAg
ICAgIGlmICh1c2VyQWN0aW9uUmVxdWlyZW1lbnRzSGF2ZUJlZW5NZXQpCisgICAgICAgICAgICB0
b3VjaEJhciA9IHRleHRUb3VjaEJhcigpOworICAgIH0KKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNL
X0NPTlRST0xTX01BTkFHRVIpCisgICAgZWxzZSBpZiAobV9wYWdlLT5oYXNBY3RpdmVWaWRlb0Zv
ckNvbnRyb2xzTWFuYWdlcigpKSB7CisgICAgICAgIHVwZGF0ZU1lZGlhVG91Y2hCYXIoKTsKKyAg
ICAgICAgLy8gSWYgdXNlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpIGlzIHRydWUsIHRoZW4g
d2UgYXJlIHJlbHlpbmcgb24gdGhlIEFQSSBjbGllbnQgdG8gZGlzcGxheSBhIHBvcG92ZXIgdmVy
c2lvbgorICAgICAgICAvLyBvZiB0aGUgbWVkaWEgdGltZWxpbmUgaW4gdGhlaXIgb3duIGZ1bmN0
aW9uIGJhci4gSWYgaXQgaXMgZmFsc2UsIHRoZW4gd2Ugd2lsbCBkaXNwbGF5IHRoZSBtZWRpYSB0
aW1lbGluZSBpbiBvdXIKKyAgICAgICAgLy8gZnVuY3Rpb24gYmFyLgorICAgICAgICBpZiAoIXVz
ZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSkKKyAgICAgICAgICAgIHRvdWNoQmFyID0gW21f
bWVkaWFUb3VjaEJhclByb3ZpZGVyIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IodG91Y2hC
YXIpXSA/IFsoaWQpbV9tZWRpYVRvdWNoQmFyUHJvdmlkZXIuZ2V0KCkgdG91Y2hCYXJdIDogWyhp
ZCltX21lZGlhVG91Y2hCYXJQcm92aWRlci5nZXQoKSB0b3VjaEJhcl07CisgICAgfSBlbHNlIGlm
IChbbV9tZWRpYVRvdWNoQmFyUHJvdmlkZXIgcGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXJdKSB7
CisgICAgICAgIGlmIChtX2NsaWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldykgewor
ICAgICAgICAgICAgaWYgKFttX3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2Vi
X2RpZFJlbW92ZU1lZGlhQ29udHJvbHNNYW5hZ2VyKV0gJiYgbV92aWV3ID09IG1fdmlldy53aW5k
b3cuZmlyc3RSZXNwb25kZXIpCisgICAgICAgICAgICAgICAgW21fdmlldyBfd2ViX2RpZFJlbW92
ZU1lZGlhQ29udHJvbHNNYW5hZ2VyXTsKKyAgICAgICAgfQorICAgICAgICBbbV9tZWRpYVRvdWNo
QmFyUHJvdmlkZXIgc2V0UGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXI6bmlsXTsKKyAgICAgICAg
W21fbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyBzZXRQbGF5YmFja0NvbnRyb2xzQ29udHJvbGxl
cjpuaWxdOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKHRvdWNoQmFyID09IG1fY3VycmVudFRv
dWNoQmFyKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiBtX2VkaXRhYmxlRWxlbWVudElz
Rm9jdXNlZCBpcyB0cnVlLCB0aGVuIHdlIG1heSBoYXZlIGEgbm9uLWVkaXRhYmxlIHNlbGVjdGlv
biByaWdodCBub3cganVzdCBiZWNhdXNlCisgICAgLy8gdGhlIHVzZXIgaXMgY2xpY2tpbmcgb3Ig
dGFiYmluZyBiZXR3ZWVuIGVkaXRhYmxlIGZpZWxkcy4KKyAgICBpZiAobV9lZGl0YWJsZUVsZW1l
bnRJc0ZvY3VzZWQgJiYgdG91Y2hCYXIgIT0gdGV4dFRvdWNoQmFyKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fY3VycmVudFRvdWNoQmFyID0gdG91Y2hCYXI7CisgICAgW21fdmlldyB3aWxs
Q2hhbmdlVmFsdWVGb3JLZXk6QCJ0b3VjaEJhciJdOworICAgIFttX3ZpZXcgc2V0VG91Y2hCYXI6
bV9jdXJyZW50VG91Y2hCYXIuZ2V0KCldOworICAgIFttX3ZpZXcgZGlkQ2hhbmdlVmFsdWVGb3JL
ZXk6QCJ0b3VjaEJhciJdOworfQorCitib29sIFdlYlZpZXdJbXBsOjpzaG91bGRSZXF1ZXN0Q2Fu
ZGlkYXRlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNJ
blBhc3N3b3JkRmllbGQgJiYgY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSgpLmNhbmRpZGF0ZUxp
c3RWaXNpYmxlOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjpzaG93Q2FuZGlkYXRlcyhOU0FycmF5
ICpjYW5kaWRhdGVzLCBOU1N0cmluZyAqc3RyaW5nLCBOU1JlY3QgcmVjdE9mVHlwZWRTdHJpbmcs
IE5TUmFuZ2Ugc2VsZWN0ZWRSYW5nZSwgTlNWaWV3ICp2aWV3LCB2b2lkICheY29tcGxldGlvbkhh
bmRsZXIpKE5TVGV4dENoZWNraW5nUmVzdWx0ICphY2NlcHRlZENhbmRpZGF0ZSkpCit7CisgICAg
W2NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0oKSBzZXRDYW5kaWRhdGVzOmNhbmRpZGF0ZXMgZm9y
U2VsZWN0ZWRSYW5nZTpzZWxlY3RlZFJhbmdlIGluU3RyaW5nOnN0cmluZ107Cit9CisKK3ZvaWQg
V2ViVmlld0ltcGw6OndlYlZpZXdJbXBsQWRkaXRpb25zV2lsbERlc3Ryb3lWaWV3KCkKK3sKKyAg
ICBbbV90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBkaWREZXN0cm95Vmlld107CisKKyNpZiBF
TkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgW21fbWVkaWFUb3VjaEJh
clByb3ZpZGVyIHNldFBsYXliYWNrQ29udHJvbHNDb250cm9sbGVyOm5pbF07CisgICAgW21fbWVk
aWFQbGF5YmFja0NvbnRyb2xzVmlldyBzZXRQbGF5YmFja0NvbnRyb2xzQ29udHJvbGxlcjpuaWxd
OworI2VuZGlmCit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnNldEVkaXRhYmxlRWxlbWVudElzRm9j
dXNlZChib29sIGVkaXRhYmxlRWxlbWVudElzRm9jdXNlZCkKK3sKKyAgICBtX2VkaXRhYmxlRWxl
bWVudElzRm9jdXNlZCA9IGVkaXRhYmxlRWxlbWVudElzRm9jdXNlZDsKKworICAgIC8vIElmIHRo
ZSBlZGl0YWJsZSBlbGVtZW50cyBoYXZlIGJsdXJyZWQsIHRoZW4gd2UgbWlnaHQgbmVlZCB0byBn
ZXQgcmlkIG9mIHRoZSBlZGl0aW5nIGZ1bmN0aW9uIGJhci4KKyAgICBpZiAoIW1fZWRpdGFibGVF
bGVtZW50SXNGb2N1c2VkKQorICAgICAgICB1cGRhdGVUb3VjaEJhcigpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKICNlbHNlCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotdm9pZCBXZWJWaWV3
SW1wbDo6dXBkYXRlV2ViVmlld0ltcGxBZGRpdGlvbnMoKQordm9pZCBXZWJWaWV3SW1wbDo6dXBk
YXRlVG91Y2hCYXIoKQogewogfQogCkBAIC00NjUsNyArMTE1OCw3IEBAIHZvaWQgV2ViVmlld0lt
cGw6OnNldEVkaXRhYmxlRWxlbWVudElzRm8KIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0j
ZW5kaWYgLy8gX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAgJiYgVVNF
KEFQUExFX0lOVEVSTkFMX1NESykKKyNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKQEAgLTYxNSw3ICsxMzA4LDcgQEAgYm9vbCBXZWJWaWV3SW1wbDo6YmVj
b21lRmlyc3RSZXNwb25kZXIoKQogCiAgICAgbV9pbkJlY29tZUZpcnN0UmVzcG9uZGVyID0gZmFs
c2U7CiAKLSAgICB1cGRhdGVXZWJWaWV3SW1wbEFkZGl0aW9ucygpOworICAgIHVwZGF0ZVRvdWNo
QmFyKCk7CiAKICAgICBpZiAoZGlyZWN0aW9uICE9IE5TRGlyZWN0U2VsZWN0aW9uKSB7CiAgICAg
ICAgIE5TRXZlbnQgKmV2ZW50ID0gW05TQXBwIGN1cnJlbnRFdmVudF07CkBAIC0xODA4LDcgKzI1
MDEsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZWxlY3Rpb25EaWRDaGFuZ2UoKQogICAgIGlmICgh
bV9pc0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRhdGUpCiAgICAgICAgIG1fc29mdFNwYWNlUmFuZ2Ug
PSBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID49IDEwMTIwMAotICAgIHVwZGF0ZVdlYlZpZXdJbXBsQWRkaXRpb25zKCk7Cisg
ICAgdXBkYXRlVG91Y2hCYXIoKTsKICAgICBpZiAoIW1fcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc01p
c3NpbmdQb3N0TGF5b3V0RGF0YSkKICAgICAgICAgcmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rp
b25JZk5lZWRlZCgpOwogI2VuZGlmCkBAIC0yNDQ4LDcgKzMxNDEsNyBAQCB2b2lkIFdlYlZpZXdJ
bXBsOjpkaWRIYW5kbGVBY2NlcHRlZENhbmRpCiB2b2lkIFdlYlZpZXdJbXBsOjp2aWRlb0NvbnRy
b2xzTWFuYWdlckRpZENoYW5nZSgpCiB7CiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFV
SVJFRCA+PSAxMDEyMDAKLSAgICB1cGRhdGVXZWJWaWV3SW1wbEFkZGl0aW9ucygpOworICAgIHVw
ZGF0ZVRvdWNoQmFyKCk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNp
b24gMjA4NDA1KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsNjcgQEAKKzIwMTYtMTEtMDQgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFN1cHBvcnQgVG91Y2hCYXIgaW4gV2ViS2l0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ0MzcKKyAgICAgICAgLWFuZCBj
b3JyZXNwb25kaW5nLQorICAgICAgICByZGFyOi8vcHJvYmxlbS8yODg3NjUyNAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
V2ViRWRpdG9yQ2xpZW50Lm1tOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpyZXNwb25kVG9D
aGFuZ2VkU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6dXBkYXRlRWRpdG9y
U3RhdGVBZnRlckxheW91dElmRWRpdGFiaWxpdHlDaGFuZ2VkKToKKyAgICAgICAgKiBXZWJWaWV3
L1dlYkhUTUxWaWV3Lm1tOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBjYW5kaWRhdGVMaXN0VG91
Y2hCYXJJdGVtXSk6CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtf
V2ViVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyIGluaXRXaXRoV2ViVmlldzpdKToKKyAg
ICAgICAgKC1bX1dlYlRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciBfc2VsZWN0TGlzdDpd
KToKKyAgICAgICAgKC1bX1dlYlRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciBzZXRDdXJy
ZW50TGlzdFR5cGU6XSk6CisgICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVy
IGluaXRXaXRoV2ViVmlldzpdKToKKyAgICAgICAgKC1bV2ViVGV4dFRvdWNoQmFySXRlbUNvbnRy
b2xsZXIgaXRlbUZvcklkZW50aWZpZXI6XSk6CisgICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0
ZW1Db250cm9sbGVyIHdlYlRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlcl0pOgorICAgICAg
ICAoLVtXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRUZXh0SXNCb2xkOl0pOgorICAg
ICAgICAoLVtXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRUZXh0SXNJdGFsaWM6XSk6
CisgICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFRleHRJc1VuZGVy
bGluZWQ6XSk6CisgICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIF93ZWJD
aGFuZ2VUZXh0U3R5bGU6XSk6CisgICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0ZW1Db250cm9s
bGVyIHNldEN1cnJlbnRUZXh0QWxpZ25tZW50Ol0pOgorICAgICAgICAoLVtXZWJUZXh0VG91Y2hC
YXJJdGVtQ29udHJvbGxlciBfd2ViQ2hhbmdlVGV4dEFsaWdubWVudDpdKToKKyAgICAgICAgKC1b
V2ViVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgdGV4dENvbG9yXSk6CisgICAgICAgICgtW1dl
YlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFRleHRDb2xvcjpdKToKKyAgICAgICAgKC1b
V2ViVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgX3dlYkNoYW5nZUNvbG9yOl0pOgorICAgICAg
ICAoLVtXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciB0ZXh0TGlzdFZpZXdDb250cm9sbGVy
XSk6CisgICAgICAgICgtW1dlYlZpZXcgX2NvbW1vbkluaXRpYWxpemF0aW9uV2l0aEZyYW1lTmFt
ZTpncm91cE5hbWU6XSk6CisgICAgICAgICgtW1dlYlZpZXcgc2hvd0NhbmRpZGF0ZXM6Zm9yU3Ry
aW5nOmluUmVjdDpmb3JTZWxlY3RlZFJhbmdlOnZpZXc6Y29tcGxldGlvbkhhbmRsZXI6XSk6Cisg
ICAgICAgICgtW1dlYlZpZXcgc2hvdWxkUmVxdWVzdENhbmRpZGF0ZXNdKToKKyAgICAgICAgKC1b
V2ViVmlldyBmb3JjZVJlcXVlc3RDYW5kaWRhdGVzRm9yVGVzdGluZ10pOgorICAgICAgICAoLVtX
ZWJWaWV3IG1ha2VUb3VjaEJhcl0pOgorICAgICAgICAoLVtXZWJWaWV3IHRvdWNoQmFyOm1ha2VJ
dGVtRm9ySWRlbnRpZmllcjpdKToKKyAgICAgICAgKHRleHRDaGVja2luZ1Jlc3VsdEZyb21OU1Rl
eHRDaGVja2luZ1Jlc3VsdCk6CisgICAgICAgICgtW1dlYlZpZXcgY2FuZGlkYXRlTGlzdFRvdWNo
QmFySXRlbTplbmRTZWxlY3RpbmdDYW5kaWRhdGVBdEluZGV4Ol0pOgorICAgICAgICAoLVtXZWJW
aWV3IGNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW06Y2hhbmdlZENhbmRpZGF0ZUxpc3RWaXNpYmls
aXR5Ol0pOgorICAgICAgICAoLVtXZWJWaWV3IF9zZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2Vy
Rm9yTWVkaWFFbGVtZW50Ol0pOgorICAgICAgICAoLVtXZWJWaWV3IF9jbGVhclBsYXliYWNrQ29u
dHJvbHNNYW5hZ2VyXSk6CisgICAgICAgICgtW1dlYlZpZXcgX2Rpc21pc3NUZXh0VG91Y2hCYXJQ
b3BvdmVySXRlbVdpdGhJZGVudGlmaWVyOl0pOgorICAgICAgICAoLVtXZWJWaWV3IF90ZXh0VG91
Y2hCYXJDdXN0b21pemF0aW9uQWxsb3dlZElkZW50aWZpZXJzXSk6CisgICAgICAgICgtW1dlYlZp
ZXcgX3BsYWluVGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkRlZmF1bHRJdGVtSWRlbnRpZmllcnNd
KToKKyAgICAgICAgKC1bV2ViVmlldyBfcmljaFRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25EZWZh
dWx0SXRlbUlkZW50aWZpZXJzXSk6CisgICAgICAgICgtW1dlYlZpZXcgdG91Y2hCYXJEaWRFeGl0
Q3VzdG9taXphdGlvbjpdKToKKyAgICAgICAgKC1bV2ViVmlldyB0b3VjaEJhcldpbGxFbnRlckN1
c3RvbWl6YXRpb246XSk6CisgICAgICAgICgtW1dlYlZpZXcgZGlkQ2hhbmdlQXV0b21hdGljVGV4
dENvbXBsZXRpb246XSk6CisgICAgICAgICgtW1dlYlZpZXcgc2V0VXBUZXh0VG91Y2hCYXI6XSk6
CisgICAgICAgICgtW1dlYlZpZXcgX2lzUmljaGx5RWRpdGFibGVdKToKKyAgICAgICAgKC1bV2Vi
VmlldyB0ZXh0VG91Y2hCYXJdKToKKyAgICAgICAgKC1bV2ViVmlldyB1cGRhdGVUZXh0VG91Y2hC
YXJdKToKKyAgICAgICAgKC1bV2ViVmlldyB1cGRhdGVNZWRpYVRvdWNoQmFyXSk6CisgICAgICAg
ICgtW1dlYlZpZXcgdXBkYXRlVG91Y2hCYXJdKToKKyAgICAgICAgKC1bV2ViVmlldyBwcmVwYXJl
Rm9yTW91c2VEb3duXSk6CisgICAgICAgICgtW1dlYlZpZXcgcHJlcGFyZUZvck1vdXNlVXBdKToK
KyAgICAgICAgKC1bV2ViVmlldyB3ZWJWaWV3QWRkaXRpb25zV2lsbERlc3Ryb3lWaWV3XSk6Cisg
ICAgICAgICgtW1dlYlZpZXcgY2FuZGlkYXRlTGlzdF0pOgorICAgICAgICAoLVtXZWJWaWV3IHVw
ZGF0ZVdlYlZpZXdBZGRpdGlvbnNdKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJWaWV3L1dlYlZp
ZXdEYXRhLmg6CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaDoKKyAgICAgICAg
KiBXZWJWaWV3L1dlYlZpZXdQcml2YXRlLmg6CisKIDIwMTYtMTEtMDQgIFNhaWQgQWJvdS1IYWxs
YXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBzZXR0aW5nIGFu
ZCBwcmVmZXJlbmNlcyB0byBlbmFibGUvZGlzYWJsZSBhc3luYyBpbWFnZSBkZWNvZGluZwpJbmRl
eDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5tbQkocmV2aXNpb24gMjA4NDA1KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNDcsNyArMzQ3LDcg
QEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRTZQogICAgIE5TVmlldzxX
ZWJEb2N1bWVudFZpZXc+ICpkb2N1bWVudFZpZXcgPSBbW2tpdChmcmFtZSkgZnJhbWVWaWV3XSBk
b2N1bWVudFZpZXddOwogICAgIGlmIChbZG9jdW1lbnRWaWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhU
TUxWaWV3IGNsYXNzXV0pIHsKICAgICAgICAgWyhXZWJIVE1MVmlldyAqKWRvY3VtZW50VmlldyBf
c2VsZWN0aW9uQ2hhbmdlZF07Ci0gICAgICAgIFttX3dlYlZpZXcgdXBkYXRlV2ViVmlld0FkZGl0
aW9uc107CisgICAgICAgIFttX3dlYlZpZXcgdXBkYXRlVG91Y2hCYXJdOwogICAgICAgICBtX2xh
c3RFZGl0b3JTdGF0ZVdhc0NvbnRlbnRFZGl0YWJsZSA9IFsoV2ViSFRNTFZpZXcgKilkb2N1bWVu
dFZpZXcgX2lzRWRpdGFibGVdID8gRWRpdG9yU3RhdGVJc0NvbnRlbnRFZGl0YWJsZTo6WWVzIDog
RWRpdG9yU3RhdGVJc0NvbnRlbnRFZGl0YWJsZTo6Tm87CiAgICAgfQogCkBAIC02NjcsNyArNjY3
LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnVwZGF0ZUVkaXRvclN0YXRlQQogCiAgICAgRWRp
dG9yU3RhdGVJc0NvbnRlbnRFZGl0YWJsZSBlZGl0b3JTdGF0ZUlzQ29udGVudEVkaXRhYmxlID0g
WyhXZWJIVE1MVmlldyAqKWRvY3VtZW50VmlldyBfaXNFZGl0YWJsZV0gPyBFZGl0b3JTdGF0ZUlz
Q29udGVudEVkaXRhYmxlOjpZZXMgOiBFZGl0b3JTdGF0ZUlzQ29udGVudEVkaXRhYmxlOjpObzsK
ICAgICBpZiAobV9sYXN0RWRpdG9yU3RhdGVXYXNDb250ZW50RWRpdGFibGUgIT0gZWRpdG9yU3Rh
dGVJc0NvbnRlbnRFZGl0YWJsZSkKLSAgICAgICAgW21fd2ViVmlldyB1cGRhdGVXZWJWaWV3QWRk
aXRpb25zXTsKKyAgICAgICAgW21fd2ViVmlldyB1cGRhdGVUb3VjaEJhcl07CiB9CiAKIHZvaWQg
V2ViRWRpdG9yQ2xpZW50OjpyZWdpc3RlclVuZG9TdGVwKFBhc3NSZWZQdHI8VW5kb1N0ZXA+IGNt
ZCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkocmV2aXNp
b24gMjA4NDA1KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQko
d29ya2luZyBjb3B5KQpAQCAtNzIzMCw4ICs3MjMwLDExIEBAIC0gKHZvaWQpX3VwZGF0ZVNlbGVj
dGlvbkZvcklucHV0TWFuYWdlcgogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKIH0KIAotI2lmIFBM
QVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAg
JiYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLSNpbXBvcnQgPFdlYktpdEFkZGl0aW9ucy9XZWJI
VE1MVmlld1dlYk5TVGV4dElucHV0U3VwcG9ydEFkZGl0aW9ucy5tbT4KKyNpZiBIQVZFKFRPVUNI
X0JBUikKKy0gKE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSAqKWNhbmRpZGF0ZUxpc3RUb3Vj
aEJhckl0ZW0KK3sKKyAgICByZXR1cm4gW1tzZWxmIF93ZWJWaWV3XSBjYW5kaWRhdGVMaXN0XTsK
K30KICNlbmRpZgogCiBAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZp
ZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1t
CShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTExOCw2ICsxMTgsNyBAQAogI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQVBJQ2FzdC5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvRXhjZXB0aW9uLmg+CiAj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlUmVmLmg+CisjaW1wb3J0IDxXZWJDb3JlL0FW
S2l0U1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5o
PgogI2ltcG9ydCA8V2ViQ29yZS9BbmltYXRpb25Db250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmg+CkBAIC0xNDQsNiArMTQ1LDggQEAKICNpbXBv
cnQgPFdlYkNvcmUvR2VvbG9jYXRpb25Db250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0dl
b2xvY2F0aW9uRXJyb3IuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW1wb3J0
IDxXZWJDb3JlL0hUTUxPTGlzdEVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTFVMaXN0
RWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9FbGVtZW50Lmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0hpc3RvcnlDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hpc3RvcnlJ
dGVtLmg+CkBAIC0xNTMsMTEgKzE1NiwxNCBAQAogI2ltcG9ydCA8V2ViQ29yZS9KU0VsZW1lbnQu
aD4KICNpbXBvcnQgPFdlYkNvcmUvSlNOb2RlTGlzdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9KU05v
dGlmaWNhdGlvbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0xvZ0luaXRpYWxpemF0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL01JTUVU
eXBlUmVnaXN0cnkuaD4KICNpbXBvcnQgPFdlYkNvcmUvTWFpbkZyYW1lLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL01lbW9yeUNhY2hlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL01lbW9yeVByZXNzdXJlSGFu
ZGxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9OU1NwZWxsQ2hlY2tlclNQSS5oPgorI2ltcG9ydCA8
V2ViQ29yZS9OU1RvdWNoQmFyU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05TVVJMRmlsZVR5cGVN
YXBwaW5nc1NQSS5oPgogI2ltcG9ydCA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4K
ICNpbXBvcnQgPFdlYkNvcmUvTm9kZUxpc3QuaD4KQEAgLTE5Miw2ICsxOTgsNyBAQAogI2ltcG9y
dCA8V2ViQ29yZS9XZWJDb3JlT2JqQ0V4dHJhcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3Jl
Vmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XaWRnZXQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvaHRt
bGVkaXRpbmcuaD4KICNpbXBvcnQgPFdlYktpdExlZ2FjeS9ET00uaD4KICNpbXBvcnQgPFdlYktp
dExlZ2FjeS9ET01FeHRlbnNpb25zLmg+CiAjaW1wb3J0IDxXZWJLaXRMZWdhY3kvRE9NUHJpdmF0
ZS5oPgpAQCAtMjEzLDYgKzIyMCw3IEBACiAjaW1wb3J0IDx3dGYvUmVmUHRyLmg+CiAjaW1wb3J0
IDx3dGYvUnVuTG9vcC5oPgogI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2ltcG9ydCA8
d3RmL1RlbXBvcmFyeUNoYW5nZS5oPgogI2ltcG9ydCA8d3RmL3NwaS9kYXJ3aW4vZHlsZFNQSS5o
PgogCiAjaWYgIVBMQVRGT1JNKElPUykKQEAgLTMwNyw2ICszMTUsMTIgQEAKICNpbXBvcnQgPFdl
YkNvcmUvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQuaD4KICNlbmRpZgogCisj
aWYgSEFWRShUT1VDSF9CQVIpICYmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdF
UikKK1NPRlRfTElOS19GUkFNRVdPUksoQVZLaXQpCitTT0ZUX0xJTktfQ0xBU1MoQVZLaXQsIEFW
RnVuY3Rpb25CYXJQbGF5YmFja0NvbnRyb2xzUHJvdmlkZXIpCitTT0ZUX0xJTktfQ0xBU1MoQVZL
aXQsIEFWRnVuY3Rpb25CYXJTY3J1YmJlcikKKyNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikgJiYg
RU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorCiAjaWYgUExBVEZPUk0oTUFD
KQogU09GVF9MSU5LX0NPTlNUQU5UX01BWV9GQUlMKExvb2t1cCwgTFVOb3RpZmljYXRpb25Qb3Bv
dmVyV2lsbENsb3NlLCBOU1N0cmluZyAqKQogI2VuZGlmCkBAIC02NjIsNiArNjc2LDI4MSBAQCBz
dGF0aWMgQk9PTCBhdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFiCiBzdGF0aWMgQk9PTCBhdXRv
bWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkOwogI2VuZGlmCiAKKyNpZiBIQVZFKFRPVUNI
X0JBUikKKworZW51bSBjbGFzcyBXZWJMaXN0VHlwZSB7CisgICAgTm9uZSA9IDAsCisgICAgT3Jk
ZXJlZCwKKyAgICBVbm9yZGVyZWQKK307CisKK0BpbnRlcmZhY2UgX1dlYlRleHRMaXN0VG91Y2hC
YXJWaWV3Q29udHJvbGxlciA6IE5TVmlld0NvbnRyb2xsZXIgeworICAgIFdlYkxpc3RUeXBlIF9j
dXJyZW50TGlzdFR5cGU7CisKK0Bwcml2YXRlCisgICAgV2ViVmlldyAqX3dlYlZpZXc7Cit9CisK
K0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBXZWJMaXN0VHlwZSBjdXJyZW50TGlzdFR5cGU7CisKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3OworCitAZW5k
CisKK0BpbXBsZW1lbnRhdGlvbiBfV2ViVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyCisK
K0BzeW50aGVzaXplIGN1cnJlbnRMaXN0VHlwZT1fY3VycmVudExpc3RUeXBlOworCitzdGF0aWMg
Y29uc3QgZG91YmxlIGxpc3RDb250cm9sU2VnbWVudFdpZHRoID0gNjcuMDsKKworc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG5vTGlzdFNlZ21lbnQgPSAwOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHVu
b3JkZXJlZExpc3RTZWdtZW50ID0gMTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBvcmRlcmVkTGlz
dFNlZ21lbnQgPSAyOworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWV3OihXZWJWaWV3
ICopd2ViVmlldworeworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICBy
ZXR1cm4gbmlsOworCisgICAgX3dlYlZpZXcgPSB3ZWJWaWV3OworCisgICAgTlNTZWdtZW50ZWRD
b250cm9sICppbnNlcnRMaXN0Q29udHJvbCA9IFtOU1NlZ21lbnRlZENvbnRyb2wgc2VnbWVudGVk
Q29udHJvbFdpdGhMYWJlbHM6QFsgV2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVOb25lKCksIFdlYkNv
cmU6Omluc2VydExpc3RUeXBlQnVsbGV0ZWQoKSwgV2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVOdW1i
ZXJlZCgpIF0gdHJhY2tpbmdNb2RlOk5TU2VnbWVudFN3aXRjaFRyYWNraW5nU2VsZWN0T25lIHRh
cmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3IoX3NlbGVjdExpc3Q6KV07CisgICAgW2luc2VydExp
c3RDb250cm9sIHNldFdpZHRoOmxpc3RDb250cm9sU2VnbWVudFdpZHRoIGZvclNlZ21lbnQ6bm9M
aXN0U2VnbWVudF07CisgICAgW2luc2VydExpc3RDb250cm9sIHNldFdpZHRoOmxpc3RDb250cm9s
U2VnbWVudFdpZHRoIGZvclNlZ21lbnQ6dW5vcmRlcmVkTGlzdFNlZ21lbnRdOworICAgIFtpbnNl
cnRMaXN0Q29udHJvbCBzZXRXaWR0aDpsaXN0Q29udHJvbFNlZ21lbnRXaWR0aCBmb3JTZWdtZW50
Om9yZGVyZWRMaXN0U2VnbWVudF07CisgICAgaW5zZXJ0TGlzdENvbnRyb2wuZm9udCA9IFtOU0Zv
bnQgc3lzdGVtRm9udE9mU2l6ZToxNV07CisKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNo
CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0
aW9ucyIKKyAgICBpZCBzZWdtZW50RWxlbWVudCA9IE5TQWNjZXNzaWJpbGl0eVVuaWdub3JlZERl
c2NlbmRhbnQoaW5zZXJ0TGlzdENvbnRyb2wpOworICAgIE5TQXJyYXkgKnNlZ21lbnRzID0gW3Nl
Z21lbnRFbGVtZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlD
aGlsZHJlbkF0dHJpYnV0ZV07CisgICAgQVNTRVJUKHNlZ21lbnRzLmNvdW50ID09IDMpOworICAg
IFtbc2VnbWVudHMgb2JqZWN0QXRJbmRleDpub0xpc3RTZWdtZW50XSBhY2Nlc3NpYmlsaXR5U2V0
T3ZlcnJpZGVWYWx1ZTpXZWJDb3JlOjppbnNlcnRMaXN0VHlwZU5vbmUoKSBmb3JBdHRyaWJ1dGU6
TlNBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25BdHRyaWJ1dGVdOworICAgIFtbc2VnbWVudHMgb2Jq
ZWN0QXRJbmRleDp1bm9yZGVyZWRMaXN0U2VnbWVudF0gYWNjZXNzaWJpbGl0eVNldE92ZXJyaWRl
VmFsdWU6V2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVCdWxsZXRlZEFjY2Vzc2liaWxpdHlUaXRsZSgp
IGZvckF0dHJpYnV0ZTpOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkF0dHJpYnV0ZV07CisgICAg
W1tzZWdtZW50cyBvYmplY3RBdEluZGV4Om9yZGVyZWRMaXN0U2VnbWVudF0gYWNjZXNzaWJpbGl0
eVNldE92ZXJyaWRlVmFsdWU6V2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVOdW1iZXJlZEFjY2Vzc2li
aWxpdHlUaXRsZSgpIGZvckF0dHJpYnV0ZTpOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkF0dHJp
YnV0ZV07CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisKKyAgICBzZWxmLnZpZXcgPSBp
bnNlcnRMaXN0Q29udHJvbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKV9zZWxl
Y3RMaXN0OihpZClzZW5kZXIKK3sKKyAgICBOU1ZpZXcgKmRvY3VtZW50VmlldyA9IFtbW193ZWJW
aWV3IF9zZWxlY3RlZE9yTWFpbkZyYW1lXSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CisgICAg
aWYgKCFbZG9jdW1lbnRWaWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pCisg
ICAgICAgIHJldHVybjsKKworICAgIFdlYkhUTUxWaWV3ICp3ZWJIVE1MVmlldyA9IChXZWJIVE1M
VmlldyAqKWRvY3VtZW50VmlldzsKKyAgICBOU1NlZ21lbnRlZENvbnRyb2wgKmluc2VydExpc3RD
b250cm9sID0gKE5TU2VnbWVudGVkQ29udHJvbCAqKXNlbGYudmlldzsKKyAgICBpZiAoaW5zZXJ0
TGlzdENvbnRyb2wuc2VsZWN0ZWRTZWdtZW50ID09IG5vTGlzdFNlZ21lbnQpIHsKKyAgICAgICAg
Ly8gVGhlcmUgaXMgbm8gInJlbW92ZSBsaXN0IiBlZGl0IGNvbW1hbmQsIGJ1dCBfaW5zZXJ0T3Jk
ZXJlZExpc3QgYW5kIF9pbnNlcnRVbm9yZGVyZWRMaXN0IGJvdGgKKyAgICAgICAgLy8gYmVoYXZl
IGFzIHRvZ2dsZXMsIHNvIHdlIGNhbiBpbnZva2UgdGhlIGFwcHJvcHJpYXRlIG1ldGhvZCBkZXBl
bmRpbmcgb24gb3VyIF9jdXJyZW50TGlzdFR5cGUKKyAgICAgICAgLy8gdG8gcmVtb3ZlIGFuIGV4
aXN0aW5nIGxpc3QuIFdlIGRvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcgaWYgX2N1cnJlbnRMaXN0
VHlwZSBpcyBXZWJMaXN0VHlwZTo6Tm9uZS4KKyAgICAgICAgaWYgKF9jdXJyZW50TGlzdFR5cGUg
PT0gV2ViTGlzdFR5cGU6Ok9yZGVyZWQpCisgICAgICAgICAgICBbd2ViSFRNTFZpZXcgX2luc2Vy
dE9yZGVyZWRMaXN0XTsKKyAgICAgICAgZWxzZSBpZiAoX2N1cnJlbnRMaXN0VHlwZSA9PSBXZWJM
aXN0VHlwZTo6VW5vcmRlcmVkKQorICAgICAgICAgICAgW3dlYkhUTUxWaWV3IF9pbnNlcnRVbm9y
ZGVyZWRMaXN0XTsKKyAgICB9IGVsc2UgaWYgKGluc2VydExpc3RDb250cm9sLnNlbGVjdGVkU2Vn
bWVudCA9PSB1bm9yZGVyZWRMaXN0U2VnbWVudCkKKyAgICAgICAgW3dlYkhUTUxWaWV3IF9pbnNl
cnRVbm9yZGVyZWRMaXN0XTsKKyAgICBlbHNlIGlmIChpbnNlcnRMaXN0Q29udHJvbC5zZWxlY3Rl
ZFNlZ21lbnQgPT0gb3JkZXJlZExpc3RTZWdtZW50KQorICAgICAgICBbd2ViSFRNTFZpZXcgX2lu
c2VydE9yZGVyZWRMaXN0XTsKKworICAgIFtfd2ViVmlldyBfZGlzbWlzc1RleHRUb3VjaEJhclBv
cG92ZXJJdGVtV2l0aElkZW50aWZpZXI6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dExpc3Rd
OworfQorCistICh2b2lkKXNldEN1cnJlbnRMaXN0VHlwZTooV2ViTGlzdFR5cGUpbGlzdFR5cGUK
K3sKKyAgICBOU1NlZ21lbnRlZENvbnRyb2wgKmluc2VydExpc3RDb250cm9sID0gKE5TU2VnbWVu
dGVkQ29udHJvbCAqKXNlbGYudmlldzsKKyAgICBzd2l0Y2ggKGxpc3RUeXBlKSB7CisgICAgY2Fz
ZSBXZWJMaXN0VHlwZTo6Tm9uZToKKyAgICAgICAgW2luc2VydExpc3RDb250cm9sIHNldFNlbGVj
dGVkOllFUyBmb3JTZWdtZW50Om5vTGlzdFNlZ21lbnRdOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFdlYkxpc3RUeXBlOjpPcmRlcmVkOgorICAgICAgICBbaW5zZXJ0TGlzdENvbnRyb2wgc2V0
U2VsZWN0ZWQ6WUVTIGZvclNlZ21lbnQ6b3JkZXJlZExpc3RTZWdtZW50XTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBXZWJMaXN0VHlwZTo6VW5vcmRlcmVkOgorICAgICAgICBbaW5zZXJ0TGlz
dENvbnRyb2wgc2V0U2VsZWN0ZWQ6WUVTIGZvclNlZ21lbnQ6dW5vcmRlcmVkTGlzdFNlZ21lbnRd
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBfY3VycmVudExpc3RUeXBlID0gbGlzdFR5
cGU7Cit9CisKK0BlbmQKKworQGludGVyZmFjZSBXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxl
ciA6IE5TVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgeworICAgIEJPT0wgX3RleHRJc0JvbGQ7
CisgICAgQk9PTCBfdGV4dElzSXRhbGljOworICAgIEJPT0wgX3RleHRJc1VuZGVybGluZWQ7Cisg
ICAgTlNUZXh0QWxpZ25tZW50IF9jdXJyZW50VGV4dEFsaWdubWVudDsKKyAgICBSZXRhaW5QdHI8
TlNDb2xvcj4gX3RleHRDb2xvcjsKKyAgICBSZXRhaW5QdHI8X1dlYlRleHRMaXN0VG91Y2hCYXJW
aWV3Q29udHJvbGxlcj4gX3dlYlRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlcjsKKworQHBy
aXZhdGUKKyAgICBXZWJWaWV3ICpfd2ViVmlldzsKK30KKworQHByb3BlcnR5IChub25hdG9taWMp
IEJPT0wgdGV4dElzQm9sZDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIHRleHRJc0l0YWxp
YzsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIHRleHRJc1VuZGVybGluZWQ7CitAcHJvcGVy
dHkgKG5vbmF0b21pYykgTlNUZXh0QWxpZ25tZW50IGN1cnJlbnRUZXh0QWxpZ25tZW50OworQHBy
b3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgcmVhZHdyaXRlKSBOU0NvbG9yICp0ZXh0Q29sb3I7
CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3Owor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIKKwor
QHN5bnRoZXNpemUgdGV4dElzQm9sZD1fdGV4dElzQm9sZDsKK0BzeW50aGVzaXplIHRleHRJc0l0
YWxpYz1fdGV4dElzSXRhbGljOworQHN5bnRoZXNpemUgdGV4dElzVW5kZXJsaW5lZD1fdGV4dElz
VW5kZXJsaW5lZDsKK0BzeW50aGVzaXplIGN1cnJlbnRUZXh0QWxpZ25tZW50PV9jdXJyZW50VGV4
dEFsaWdubWVudDsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViVmlldzooV2ViVmlldyAq
KXdlYlZpZXcKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKworICAgIF93ZWJWaWV3ID0gd2ViVmlldzsKKworICAgIHJldHVybiBzZWxmOwor
fQorCistIChOU1RvdWNoQmFySXRlbSAqKWl0ZW1Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlk
ZW50aWZpZXIKK3sKKyAgICBOU1RvdWNoQmFySXRlbSAqaXRlbSA9IFtzdXBlciBpdGVtRm9ySWRl
bnRpZmllcjppZGVudGlmaWVyXTsKKyAgICBCT09MIGlzVGV4dEZvcm1hdEl0ZW0gPSBbaWRlbnRp
ZmllciBpc0VxdWFsVG9TdHJpbmc6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEZvcm1hdF07
CisKKyAgICBpZiAoaXNUZXh0Rm9ybWF0SXRlbSB8fCBbaWRlbnRpZmllciBpc0VxdWFsVG9TdHJp
bmc6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dFN0eWxlXSkKKyAgICAgICAgc2VsZi50ZXh0
U3R5bGUuYWN0aW9uID0gQHNlbGVjdG9yKF93ZWJDaGFuZ2VUZXh0U3R5bGU6KTsKKworICAgIGlm
IChpc1RleHRGb3JtYXRJdGVtIHx8IFtpZGVudGlmaWVyIGlzRXF1YWxUb1N0cmluZzpOU1RvdWNo
QmFySXRlbUlkZW50aWZpZXJUZXh0QWxpZ25tZW50XSkKKyAgICAgICAgc2VsZi50ZXh0QWxpZ25t
ZW50cy5hY3Rpb24gPSBAc2VsZWN0b3IoX3dlYkNoYW5nZVRleHRBbGlnbm1lbnQ6KTsKKworICAg
IE5TQ29sb3JQaWNrZXJUb3VjaEJhckl0ZW0gKmNvbG9yUGlja2VySXRlbSA9IG5pbDsKKyAgICBp
ZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRvU3RyaW5nOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRl
eHRDb2xvclBpY2tlcl0gJiYgW2l0ZW0gaXNLaW5kT2ZDbGFzczpbTlNDb2xvclBpY2tlclRvdWNo
QmFySXRlbSBjbGFzc11dKQorICAgICAgICBjb2xvclBpY2tlckl0ZW0gPSAoTlNDb2xvclBpY2tl
clRvdWNoQmFySXRlbSAqKWl0ZW07CisgICAgaWYgKGlzVGV4dEZvcm1hdEl0ZW0pCisgICAgICAg
IGNvbG9yUGlja2VySXRlbSA9IHNlbGYuY29sb3JQaWNrZXJJdGVtOworICAgIGlmIChjb2xvclBp
Y2tlckl0ZW0pIHsKKyAgICAgICAgY29sb3JQaWNrZXJJdGVtLnRhcmdldCA9IHNlbGY7CisgICAg
ICAgIGNvbG9yUGlja2VySXRlbS5hY3Rpb24gPSBAc2VsZWN0b3IoX3dlYkNoYW5nZUNvbG9yOik7
CisgICAgICAgIGNvbG9yUGlja2VySXRlbS5zaG93c0FscGhhID0gTk87CisgICAgfQorCisgICAg
cmV0dXJuIGl0ZW07Cit9CisKKy0gKF9XZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIg
Kil3ZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIKK3sKKyAgICByZXR1cm4gKF9XZWJU
ZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgKilbc2VsZiB0ZXh0TGlzdFZpZXdDb250cm9s
bGVyXTsKK30KKworLSAodm9pZClzZXRUZXh0SXNCb2xkOihCT09MKWJvbGQKK3sKKyAgICBfdGV4
dElzQm9sZCA9IGJvbGQ7CisgICAgaWYgKFtzZWxmLnRleHRTdHlsZSBpc1NlbGVjdGVkRm9yU2Vn
bWVudDowXSAhPSBfdGV4dElzQm9sZCkKKyAgICAgICAgW3NlbGYudGV4dFN0eWxlIHNldFNlbGVj
dGVkOl90ZXh0SXNCb2xkIGZvclNlZ21lbnQ6MF07Cit9CisKKy0gKHZvaWQpc2V0VGV4dElzSXRh
bGljOihCT09MKWl0YWxpYworeworICAgIF90ZXh0SXNJdGFsaWMgPSBpdGFsaWM7CisgICAgaWYg
KFtzZWxmLnRleHRTdHlsZSBpc1NlbGVjdGVkRm9yU2VnbWVudDoxXSAhPSBfdGV4dElzSXRhbGlj
KQorICAgICAgICBbc2VsZi50ZXh0U3R5bGUgc2V0U2VsZWN0ZWQ6X3RleHRJc0l0YWxpYyBmb3JT
ZWdtZW50OjFdOworfQorCistICh2b2lkKXNldFRleHRJc1VuZGVybGluZWQ6KEJPT0wpdW5kZXJs
aW5lZAoreworICAgIF90ZXh0SXNVbmRlcmxpbmVkID0gdW5kZXJsaW5lZDsKKyAgICBpZiAoW3Nl
bGYudGV4dFN0eWxlIGlzU2VsZWN0ZWRGb3JTZWdtZW50OjJdICE9IF90ZXh0SXNVbmRlcmxpbmVk
KQorICAgICAgICBbc2VsZi50ZXh0U3R5bGUgc2V0U2VsZWN0ZWQ6X3RleHRJc1VuZGVybGluZWQg
Zm9yU2VnbWVudDoyXTsKK30KKworLSAodm9pZClfd2ViQ2hhbmdlVGV4dFN0eWxlOihpZClzZW5k
ZXIKK3sKKyAgICBpZiAoW3NlbGYudGV4dFN0eWxlIGlzU2VsZWN0ZWRGb3JTZWdtZW50OjBdICE9
IF90ZXh0SXNCb2xkKSB7CisgICAgICAgIF90ZXh0SXNCb2xkID0gIV90ZXh0SXNCb2xkOworICAg
ICAgICBbX3dlYlZpZXcgX2V4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZTpAIlRvZ2dsZUJvbGQiIHZh
bHVlOkAiIl07CisgICAgfQorCisgICAgaWYgKFtzZWxmLnRleHRTdHlsZSBpc1NlbGVjdGVkRm9y
U2VnbWVudDoxXSAhPSBfdGV4dElzSXRhbGljKSB7CisgICAgICAgIF90ZXh0SXNJdGFsaWMgPSAh
X3RleHRJc0l0YWxpYzsKKyAgICAgICAgW193ZWJWaWV3IF9leGVjdXRlQ29yZUNvbW1hbmRCeU5h
bWU6QCJUb2dnbGVJdGFsaWMiIHZhbHVlOkAiIl07CisgICAgfQorCisgICAgaWYgKFtzZWxmLnRl
eHRTdHlsZSBpc1NlbGVjdGVkRm9yU2VnbWVudDoyXSAhPSBfdGV4dElzVW5kZXJsaW5lZCkgewor
ICAgICAgICBfdGV4dElzVW5kZXJsaW5lZCA9ICFfdGV4dElzVW5kZXJsaW5lZDsKKyAgICAgICAg
W193ZWJWaWV3IF9leGVjdXRlQ29yZUNvbW1hbmRCeU5hbWU6QCJUb2dnbGVVbmRlcmxpbmUiIHZh
bHVlOkAiIl07CisgICAgfQorfQorCistICh2b2lkKXNldEN1cnJlbnRUZXh0QWxpZ25tZW50OihO
U1RleHRBbGlnbm1lbnQpYWxpZ25tZW50Cit7CisgICAgX2N1cnJlbnRUZXh0QWxpZ25tZW50ID0g
YWxpZ25tZW50OworICAgIFtzZWxmLnRleHRBbGlnbm1lbnRzIHNlbGVjdFNlZ21lbnRXaXRoVGFn
Ol9jdXJyZW50VGV4dEFsaWdubWVudF07Cit9CisKKy0gKHZvaWQpX3dlYkNoYW5nZVRleHRBbGln
bm1lbnQ6KGlkKXNlbmRlcgoreworICAgIE5TVGV4dEFsaWdubWVudCBhbGlnbm1lbnQgPSAoTlNU
ZXh0QWxpZ25tZW50KVtzZWxmLnRleHRBbGlnbm1lbnRzLmNlbGwgdGFnRm9yU2VnbWVudDpbc2Vs
Zi50ZXh0QWxpZ25tZW50cyBzZWxlY3RlZFNlZ21lbnRdXTsKKyAgICBzd2l0Y2ggKGFsaWdubWVu
dCkgeworICAgIGNhc2UgTlNUZXh0QWxpZ25tZW50TGVmdDogeworICAgICAgICBfY3VycmVudFRl
eHRBbGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRMZWZ0OworICAgICAgICBbX3dlYlZpZXcgYWxp
Z25MZWZ0OnNlbmRlcl07CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIE5TVGV4dEFs
aWdubWVudFJpZ2h0OiB7CisgICAgICAgIF9jdXJyZW50VGV4dEFsaWdubWVudCA9IE5TVGV4dEFs
aWdubWVudFJpZ2h0OworICAgICAgICBbX3dlYlZpZXcgYWxpZ25SaWdodDpzZW5kZXJdOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBOU1RleHRBbGlnbm1lbnRDZW50ZXI6IHsKKyAg
ICAgICAgX2N1cnJlbnRUZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25tZW50Q2VudGVyOworICAg
ICAgICBbX3dlYlZpZXcgYWxpZ25DZW50ZXI6c2VuZGVyXTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgTlNUZXh0QWxpZ25tZW50SnVzdGlmaWVkOiB7CisgICAgICAgIF9jdXJyZW50
VGV4dEFsaWdubWVudCA9IE5TVGV4dEFsaWdubWVudEp1c3RpZmllZDsKKyAgICAgICAgW193ZWJW
aWV3IGFsaWduSnVzdGlmaWVkOnNlbmRlcl07CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBk
ZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBbX3dlYlZpZXcgX2Rpc21pc3NU
ZXh0VG91Y2hCYXJQb3BvdmVySXRlbVdpdGhJZGVudGlmaWVyOk5TVG91Y2hCYXJJdGVtSWRlbnRp
ZmllclRleHRBbGlnbm1lbnRdOworfQorCistIChOU0NvbG9yICopdGV4dENvbG9yCit7CisgICAg
cmV0dXJuIF90ZXh0Q29sb3IuZ2V0KCk7Cit9CisKKy0gKHZvaWQpc2V0VGV4dENvbG9yOihOU0Nv
bG9yICopY29sb3IKK3sKKyAgICBfdGV4dENvbG9yID0gY29sb3I7CisgICAgc2VsZi5jb2xvclBp
Y2tlckl0ZW0uY29sb3IgPSBfdGV4dENvbG9yLmdldCgpOworfQorCistICh2b2lkKV93ZWJDaGFu
Z2VDb2xvcjooaWQpc2VuZGVyCit7CisgICAgX3RleHRDb2xvciA9IHNlbGYuY29sb3JQaWNrZXJJ
dGVtLmNvbG9yOworICAgIFtfd2ViVmlldyBfZXhlY3V0ZUNvcmVDb21tYW5kQnlOYW1lOkAiRm9y
ZUNvbG9yIiB2YWx1ZTogV2ViQ29yZTo6Y29sb3JGcm9tTlNDb2xvcihfdGV4dENvbG9yLmdldCgp
KS5zZXJpYWxpemVkKCldOworfQorCistIChOU1ZpZXdDb250cm9sbGVyICopdGV4dExpc3RWaWV3
Q29udHJvbGxlcgoreworICAgIGlmICghX3dlYlRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxl
cikKKyAgICAgICAgX3dlYlRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciA9IGFkb3B0TlMo
W1tfV2ViVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0aFdlYlZp
ZXc6X3dlYlZpZXddKTsKKyAgICByZXR1cm4gX3dlYlRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJv
bGxlci5nZXQoKTsKK30KKworQGVuZAorCisjZW5kaWYgLy8gSEFWRShUT1VDSF9CQVIpCisKIEBp
bXBsZW1lbnRhdGlvbiBXZWJWaWV3IChBbGxXZWJWaWV3cykKIAogc3RhdGljIENGU2V0Q2FsbEJh
Y2tzIE5vblJldGFpbmluZ1NldENhbGxiYWNrcyA9IHsKQEAgLTk3MCw3ICsxMjU5LDcgQEAgLSAo
dm9pZClfY29tbW9uSW5pdGlhbGl6YXRpb25XaXRoRnJhbWVOYQogICAgIH0KICNlbmRpZgogCi0g
ICAgW3NlbGYgdXBkYXRlV2ViVmlld0FkZGl0aW9uc107CisgICAgW3NlbGYgdXBkYXRlVG91Y2hC
YXJdOwogCiAjaWYgIVBMQVRGT1JNKElPUykKICAgICBzdGF0aWMgYm9vbCBkaWRPbmVUaW1lSW5p
dGlhbGl6YXRpb24gPSBmYWxzZTsKQEAgLTQ2OTIsNiArNDk4MSw0NSBAQCAtICh2b2lkKV9zZXRG
b250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwCiAgICAgICAgIF9wcml2YXRlLT5wYWdlLT5zZXR0
aW5ncygpLnNldEZvbnRGYWxsYmFja1ByZWZlcnNQaWN0b2dyYXBocyhmbGFnKTsKIH0KIAorI2lm
IEhBVkUoVE9VQ0hfQkFSKQorCistICh2b2lkKXNob3dDYW5kaWRhdGVzOihOU0FycmF5PE5TVGV4
dENoZWNraW5nUmVzdWx0ICo+ICopY2FuZGlkYXRlcyBmb3JTdHJpbmc6KE5TU3RyaW5nICopc3Ry
aW5nIGluUmVjdDooTlNSZWN0KXJlY3RPZlR5cGVkU3RyaW5nIGZvclNlbGVjdGVkUmFuZ2U6KE5T
UmFuZ2UpcmFuZ2UgdmlldzooTlNWaWV3ICopdmlldyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAo
XikoTlNUZXh0Q2hlY2tpbmdSZXN1bHQgKmFjY2VwdGVkQ2FuZGlkYXRlKSljb21wbGV0aW9uQmxv
Y2sKK3sKKyAgICBbc2VsZi5jYW5kaWRhdGVMaXN0IHNldENhbmRpZGF0ZXM6Y2FuZGlkYXRlcyBm
b3JTZWxlY3RlZFJhbmdlOnJhbmdlIGluU3RyaW5nOnN0cmluZ107Cit9CisKKy0gKEJPT0wpc2hv
dWxkUmVxdWVzdENhbmRpZGF0ZXMKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2Vs
ZiBfc2VsZWN0ZWRPck1haW5GcmFtZV0pOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICBy
ZXR1cm4gTk87CisKKyAgICByZXR1cm4gIWNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuaXNJblBhc3N3b3JkRmllbGQoKSAmJiBzZWxmLmNhbmRpZGF0ZUxpc3QuY2FuZGlkYXRlTGlz
dFZpc2libGU7Cit9CisKKy0gKHZvaWQpZm9yY2VSZXF1ZXN0Q2FuZGlkYXRlc0ZvclRlc3RpbmcK
K3sKKyAgICBfcHJpdmF0ZS0+X2NhbkNyZWF0ZVRvdWNoQmFycyA9IFlFUzsKKyAgICBbc2VsZiB1
cGRhdGVUb3VjaEJhcl07Cit9CisKKyNlbHNlCisKKy0gKHZvaWQpc2hvd0NhbmRpZGF0ZXM6KE5T
QXJyYXkgKiljYW5kaWRhdGVzIGZvclN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgaW5SZWN0OihO
U1JlY3QpcmVjdE9mVHlwZWRTdHJpbmcgZm9yU2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlyYW5nZSB2
aWV3OihOU1ZpZXcgKil2aWV3IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU1RleHRDaGVj
a2luZ1Jlc3VsdCAqYWNjZXB0ZWRDYW5kaWRhdGUpKWNvbXBsZXRpb25CbG9jaworeworfQorCist
ICh2b2lkKWZvcmNlUmVxdWVzdENhbmRpZGF0ZXNGb3JUZXN0aW5nCit7Cit9CisKKy0gKEJPT0wp
c2hvdWxkUmVxdWVzdENhbmRpZGF0ZXMKK3sKKyAgICByZXR1cm4gTk87Cit9CisKKyNlbmRpZiAv
LyBIQVZFKFRPVUNIX0JBUikKKwogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gX1dlYlNhZmVGb3J3
YXJkZXIKQEAgLTQ4MDQsNiArNTEzMiwxMSBAQCAtIChOU01ldGhvZFNpZ25hdHVyZSAqKW1ldGhv
ZFNpZ25hdHVyZUZvCiBAZW5kCiAjZW5kaWYKIAorI2lmIEhBVkUoVE9VQ0hfQkFSKQorQGludGVy
ZmFjZSBXZWJWaWV3ICgpIDxOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW1EZWxlZ2F0ZSwgTlNU
b3VjaEJhckRlbGVnYXRlLCBOU1RvdWNoQmFyUHJvdmlkZXI+CitAZW5kCisjZW5kaWYKKwogQGlt
cGxlbWVudGF0aW9uIFdlYlZpZXcKIAogKyAodm9pZClpbml0aWFsaXplCkBAIC02NDg4LDYgKzY4
MjEsODcgQEAgLSAoTlNWaWV3ICopcHJldmlvdXNWYWxpZEtleVZpZXcKICAgICByZXR1cm4gW3By
ZXZpb3VzVmlldyBwcmV2aW91c1ZhbGlkS2V5Vmlld107CiB9CiAKKyNpZiBIQVZFKFRPVUNIX0JB
UikKKworQGR5bmFtaWMgdG91Y2hCYXI7CisKKy0gKE5TVG91Y2hCYXIgKiltYWtlVG91Y2hCYXIK
K3sKKyAgICBpZiAoIV9wcml2YXRlLT5fY2FuQ3JlYXRlVG91Y2hCYXJzKSB7CisgICAgICAgIF9w
cml2YXRlLT5fY2FuQ3JlYXRlVG91Y2hCYXJzID0gWUVTOworICAgICAgICBbc2VsZiB1cGRhdGVU
b3VjaEJhcl07CisgICAgfQorICAgIHJldHVybiBfcHJpdmF0ZS0+X2N1cnJlbnRUb3VjaEJhci5n
ZXQoKTsKK30KKworLSAoTlNUb3VjaEJhckl0ZW0gKil0b3VjaEJhcjooTlNUb3VjaEJhciAqKXRv
dWNoQmFyIG1ha2VJdGVtRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyCit7Cisg
ICAgaWYgKHRvdWNoQmFyID09IF9wcml2YXRlLT5fcmljaFRleHRUb3VjaEJhciB8fCB0b3VjaEJh
ciA9PSBfcHJpdmF0ZS0+X3BsYWluVGV4dFRvdWNoQmFyKQorICAgICAgICByZXR1cm4gW19wcml2
YXRlLT5fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgaXRlbUZvcklkZW50aWZpZXI6aWRlbnRp
Zmllcl07CisKKyAgICByZXR1cm4gbmlsOworfQorCitzdGF0aWMgVGV4dENoZWNraW5nUmVzdWx0
IHRleHRDaGVja2luZ1Jlc3VsdEZyb21OU1RleHRDaGVja2luZ1Jlc3VsdChOU1RleHRDaGVja2lu
Z1Jlc3VsdCAqbnNSZXN1bHQpCit7CisgICAgV2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0IHJl
c3VsdDsKKworICAgIHN3aXRjaCAoW25zUmVzdWx0IHJlc3VsdFR5cGVdKSB7CisgICAgY2FzZSBO
U1RleHRDaGVja2luZ1R5cGVTcGVsbGluZzoKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBXZWJDb3Jl
OjpUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmc7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTlNU
ZXh0Q2hlY2tpbmdUeXBlUmVwbGFjZW1lbnQ6CisgICAgICAgIHJlc3VsdC50eXBlID0gV2ViQ29y
ZTo6VGV4dENoZWNraW5nVHlwZVJlcGxhY2VtZW50OworICAgICAgICBicmVhazsKKyAgICBjYXNl
IE5TVGV4dENoZWNraW5nVHlwZUNvcnJlY3Rpb246CisgICAgICAgIHJlc3VsdC50eXBlID0gV2Vi
Q29yZTo6VGV4dENoZWNraW5nVHlwZUNvcnJlY3Rpb247CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJlc3VsdC50eXBlID0gV2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZU5v
bmU7CisgICAgfQorCisgICAgTlNSYW5nZSByZXN1bHRSYW5nZSA9IG5zUmVzdWx0LnJhbmdlOwor
ICAgIHJlc3VsdC5sb2NhdGlvbiA9IHJlc3VsdFJhbmdlLmxvY2F0aW9uOworICAgIHJlc3VsdC5s
ZW5ndGggPSByZXN1bHRSYW5nZS5sZW5ndGg7CisgICAgcmVzdWx0LnJlcGxhY2VtZW50ID0gbnNS
ZXN1bHQucmVwbGFjZW1lbnRTdHJpbmc7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCistICh2
b2lkKWNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW06KE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRl
bSAqKWFuSXRlbSBlbmRTZWxlY3RpbmdDYW5kaWRhdGVBdEluZGV4OihOU0ludGVnZXIpaW5kZXgK
K3sKKyAgICBpZiAoaW5kZXggPT0gTlNOb3RGb3VuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKGFuSXRlbSAhPSBzZWxmLmNhbmRpZGF0ZUxpc3QpCisgICAgICAgIHJldHVybjsKKworICAg
IE5TQXJyYXkgKmNhbmRpZGF0ZXMgPSBhbkl0ZW0uY2FuZGlkYXRlczsKKyAgICBpZiAoKE5TVUlu
dGVnZXIpaW5kZXggPj0gY2FuZGlkYXRlcy5jb3VudCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWQgY2FuZGlkYXRlID0gY2FuZGlkYXRlc1tpbmRleF07CisgICAgQVNTRVJUKFtjYW5kaWRhdGUg
aXNLaW5kT2ZDbGFzczpbTlNUZXh0Q2hlY2tpbmdSZXN1bHQgY2xhc3NdXSk7CisKKyAgICBpZiAo
RnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoc2VsZi5fc2VsZWN0ZWRPck1haW5GcmFtZSkpCisgICAg
ICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRl
V2l0aFNvZnRTcGFjZXModGV4dENoZWNraW5nUmVzdWx0RnJvbU5TVGV4dENoZWNraW5nUmVzdWx0
KChOU1RleHRDaGVja2luZ1Jlc3VsdCAqKWNhbmRpZGF0ZSkpOworfQorCistICh2b2lkKWNhbmRp
ZGF0ZUxpc3RUb3VjaEJhckl0ZW06KE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSAqKWFuSXRl
bSBjaGFuZ2VkQ2FuZGlkYXRlTGlzdFZpc2liaWxpdHk6KEJPT0wpaXNWaXNpYmxlCit7CisgICAg
aWYgKGFuSXRlbSAhPSBzZWxmLmNhbmRpZGF0ZUxpc3QpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChpc1Zpc2libGUpIHsKKyAgICAgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtz
ZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXSkpCisgICAgICAgICAgICBjb3JlRnJhbWUtPmVkaXRv
cigpLmNsaWVudCgpLT5yZXF1ZXN0Q2FuZGlkYXRlc0ZvclNlbGVjdGlvbihjb3JlRnJhbWUtPnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICB9CisKKyAgICBbc2VsZiB1cGRhdGVUb3VjaEJh
cl07Cit9CisKKyNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikKKwogQGVuZAogCiBAaW1wbGVtZW50
YXRpb24gV2ViVmlldyAoV2ViSUJBY3Rpb25zKQpAQCAtNjc0Niw0OCArNzE2MCw2IEBAIC0gKEJP
T0wpdmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbTooaWQgPE4KIAogQGVuZAogCi0jaWYgUExBVEZP
Uk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMCAmJiBV
U0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2ltcG9ydCA8V2ViS2l0QWRkaXRpb25zL1dlYlZpZXdB
ZGRpdGlvbnMubW0+Ci0jZWxzZQotQGltcGxlbWVudGF0aW9uIFdlYlZpZXcgKFdlYlVwZGF0ZVdl
YlZpZXdBZGRpdGlvbnMpCi0KLS0gKHZvaWQpdXBkYXRlV2ViVmlld0FkZGl0aW9ucwotewotfQot
Ci0tICh2b2lkKXByZXBhcmVGb3JNb3VzZURvd24KLXsKLX0KLQotLSAodm9pZClwcmVwYXJlRm9y
TW91c2VVcAotewotfQotCi0tICh2b2lkKXNob3dDYW5kaWRhdGVzOihOU0FycmF5ICopY2FuZGlk
YXRlcyBmb3JTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIGluUmVjdDooTlNSZWN0KXJlY3RPZlR5
cGVkU3RyaW5nIGZvclNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UgdmlldzooTlNWaWV3ICop
dmlldyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNUZXh0Q2hlY2tpbmdSZXN1bHQgKmFj
Y2VwdGVkQ2FuZGlkYXRlKSljb21wbGV0aW9uQmxvY2sKLXsKLX0KLQotLSAodm9pZClmb3JjZVJl
cXVlc3RDYW5kaWRhdGVzRm9yVGVzdGluZwotewotfQotCi0tIChCT09MKXNob3VsZFJlcXVlc3RD
YW5kaWRhdGVzCi17Ci0gICAgcmV0dXJuIE5POwotfQotCi0tICh2b2lkKXdlYlZpZXdBZGRpdGlv
bnNXaWxsRGVzdHJveVZpZXcKLXsKLX0KLQotLSAoaWQpY2FuZGlkYXRlTGlzdAotewotICAgIHJl
dHVybiBuaWw7Ci19Ci0KLUBlbmQKLSNlbmRpZiAvLyBQTEFURk9STShNQUMpICYmIF9fTUFDX09T
X1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwICYmIFVTRShBUFBMRV9JTlRFUk5BTF9T
REspCi0KIEBpbXBsZW1lbnRhdGlvbiBXZWJWaWV3IChXZWJQZW5kaW5nUHVibGljKQogCiAtICh2
b2lkKXNjaGVkdWxlSW5SdW5Mb29wOihOU1J1bkxvb3AgKilydW5Mb29wIGZvck1vZGU6KE5TU3Ry
aW5nICopbW9kZQpAQCAtODY1Niw3ICs5MDI4LDcgQEAgLSAodm9pZClfc2V0VXBQbGF5YmFja0Nv
bnRyb2xzTWFuYWdlckZvcgogICAgIGlmICghX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZSkKICAgICAgICAgX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSA9IFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6Y3JlYXRlKCpfcHJpdmF0ZS0+cGxheWJhY2tTZXNz
aW9uTW9kZWwpOwogCi0gICAgW3NlbGYgdXBkYXRlV2ViVmlld0FkZGl0aW9uc107CisgICAgW3Nl
bGYgdXBkYXRlVG91Y2hCYXJdOwogfQogCiAtICh2b2lkKV9jbGVhclBsYXliYWNrQ29udHJvbHNN
YW5hZ2VyCkBAIC04NjY5LDcgKzkwNDEsNyBAQCAtICh2b2lkKV9jbGVhclBsYXliYWNrQ29udHJv
bHNNYW5hZ2VyCiAKICAgICBfcHJpdmF0ZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwgPSBudWxscHRy
OwogICAgIF9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UgPSBudWxscHRyOwotICAg
IFtzZWxmIHVwZGF0ZVdlYlZpZXdBZGRpdGlvbnNdOworICAgIFtzZWxmIHVwZGF0ZVRvdWNoQmFy
XTsKIH0KICNlbmRpZiAvLyBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJ
T05fTU9ERSkKICNlbmRpZiAvLyBFTkFCTEUoVklERU8pCkBAIC04ODk4LDYgKzkyNzAsMzQyIEBA
IC0gKHZvaWQpX3NldE1vY2tNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2UKIH0KICNlbmRpZgogCisj
aWYgSEFWRShUT1VDSF9CQVIpCistICh2b2lkKV9kaXNtaXNzVGV4dFRvdWNoQmFyUG9wb3Zlckl0
ZW1XaXRoSWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyCit7CisgICAgTlNUb3VjaEJh
ckl0ZW0gKmZvdW5kSXRlbSA9IG5pbDsKKyAgICBmb3IgKE5TVG91Y2hCYXJJdGVtICppdGVtIGlu
IHNlbGYudGV4dFRvdWNoQmFyLml0ZW1zKSB7CisgICAgICAgIGlmIChbaXRlbS5pZGVudGlmaWVy
IGlzRXF1YWxUb1N0cmluZzppZGVudGlmaWVyXSkgeworICAgICAgICAgICAgZm91bmRJdGVtID0g
aXRlbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFtpdGVt
LmlkZW50aWZpZXIgaXNFcXVhbFRvU3RyaW5nOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRG
b3JtYXRdKSB7CisgICAgICAgICAgICBmb3IgKE5TVG91Y2hCYXJJdGVtICpjaGlsZEl0ZW0gaW4g
WyhOU0dyb3VwVG91Y2hCYXJJdGVtICopaXRlbSBncm91cFRvdWNoQmFyXS5pdGVtcykgeworICAg
ICAgICAgICAgICAgIGlmIChbY2hpbGRJdGVtLmlkZW50aWZpZXIgaXNFcXVhbFRvU3RyaW5nOmlk
ZW50aWZpZXJdKSB7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kSXRlbSA9IGNoaWxkSXRlbTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoW2Zv
dW5kSXRlbSBpc0tpbmRPZkNsYXNzOltOU1BvcG92ZXJUb3VjaEJhckl0ZW0gY2xhc3NdXSkKKyAg
ICAgICAgWyhOU1BvcG92ZXJUb3VjaEJhckl0ZW0gKilmb3VuZEl0ZW0gZGlzbWlzc1BvcG92ZXI6
bmlsXTsKK30KKworLSAoTlNBcnJheTxOU1N0cmluZyAqPiAqKV90ZXh0VG91Y2hCYXJDdXN0b21p
emF0aW9uQWxsb3dlZElkZW50aWZpZXJzCit7CisgICAgcmV0dXJuIEBbIE5TVG91Y2hCYXJJdGVt
SWRlbnRpZmllckNoYXJhY3RlclBpY2tlciwgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dENv
bG9yUGlja2VyLCBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0U3R5bGUsIE5TVG91Y2hCYXJJ
dGVtSWRlbnRpZmllclRleHRBbGlnbm1lbnQsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRM
aXN0LCBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJGbGV4aWJsZVNwYWNlIF07Cit9CisKKy0gKE5T
QXJyYXk8TlNTdHJpbmcgKj4gKilfcGxhaW5UZXh0VG91Y2hCYXJDdXN0b21pemF0aW9uRGVmYXVs
dEl0ZW1JZGVudGlmaWVycworeworICAgIHJldHVybiBAWyBOU1RvdWNoQmFySXRlbUlkZW50aWZp
ZXJDaGFyYWN0ZXJQaWNrZXIsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckNhbmRpZGF0ZUxpc3Qg
XTsKK30KKworLSAoTlNBcnJheTxOU1N0cmluZyAqPiAqKV9yaWNoVGV4dFRvdWNoQmFyQ3VzdG9t
aXphdGlvbkRlZmF1bHRJdGVtSWRlbnRpZmllcnMKK3sKKyAgICByZXR1cm4gQFsgTlNUb3VjaEJh
ckl0ZW1JZGVudGlmaWVyQ2hhcmFjdGVyUGlja2VyLCBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJU
ZXh0Rm9ybWF0LCBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJDYW5kaWRhdGVMaXN0IF07Cit9CisK
Ky0gKHZvaWQpdG91Y2hCYXJEaWRFeGl0Q3VzdG9taXphdGlvbjooTlNOb3RpZmljYXRpb24gKilu
b3RpZmljYXRpb24KK3sKKyAgICBfcHJpdmF0ZS0+X2lzQ3VzdG9taXppbmdUb3VjaEJhciA9IE5P
OworICAgIFtzZWxmIHVwZGF0ZVRvdWNoQmFyXTsKK30KKworLSAodm9pZCl0b3VjaEJhcldpbGxF
bnRlckN1c3RvbWl6YXRpb246KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAg
X3ByaXZhdGUtPl9pc0N1c3RvbWl6aW5nVG91Y2hCYXIgPSBZRVM7Cit9CisKKy0gKHZvaWQpZGlk
Q2hhbmdlQXV0b21hdGljVGV4dENvbXBsZXRpb246KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0
aW9uCit7CisgICAgaWYgKF9wcml2YXRlLT5fcmljaFRleHRUb3VjaEJhcikKKyAgICAgICAgW3Nl
bGYgc2V0VXBUZXh0VG91Y2hCYXI6X3ByaXZhdGUtPl9yaWNoVGV4dFRvdWNoQmFyLmdldCgpXTsK
KworICAgIGlmIChfcHJpdmF0ZS0+X3BsYWluVGV4dFRvdWNoQmFyKQorICAgICAgICBbc2VsZiBz
ZXRVcFRleHRUb3VjaEJhcjpfcHJpdmF0ZS0+X3BsYWluVGV4dFRvdWNoQmFyLmdldCgpXTsKKwor
ICAgIFtzZWxmIHVwZGF0ZVRvdWNoQmFyXTsKK30KKworLSAodm9pZClzZXRVcFRleHRUb3VjaEJh
cjooTlNUb3VjaEJhciAqKXRleHRUb3VjaEJhcgoreworICAgIEJPT0wgaXNSaWNoVGV4dFRvdWNo
QmFyID0gdGV4dFRvdWNoQmFyID09IF9wcml2YXRlLT5fcmljaFRleHRUb3VjaEJhcjsKKyAgICBb
dGV4dFRvdWNoQmFyIHNldERlbGVnYXRlOnNlbGZdOworICAgIFt0ZXh0VG91Y2hCYXIgc2V0RGVm
YXVsdEl0ZW1zOltOU011dGFibGVTZXQgc2V0V2l0aE9iamVjdHM6aXNSaWNoVGV4dFRvdWNoQmFy
ID8gX3ByaXZhdGUtPl9yaWNoVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0uZ2V0KCkgOiBf
cHJpdmF0ZS0+X3BsYWluVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0uZ2V0KCksIG5pbF1d
OworICAgIFt0ZXh0VG91Y2hCYXIgc2V0Q3VzdG9taXphdGlvbkFsbG93ZWRJdGVtSWRlbnRpZmll
cnM6W3NlbGYgX3RleHRUb3VjaEJhckN1c3RvbWl6YXRpb25BbGxvd2VkSWRlbnRpZmllcnNdXTsK
KworICAgIE5TQXJyYXk8TlNTdHJpbmcgKj4gKmRlZmF1bHRJZGVudGlmaWVycyA9IGlzUmljaFRl
eHRUb3VjaEJhciA/IFtzZWxmIF9yaWNoVGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkRlZmF1bHRJ
dGVtSWRlbnRpZmllcnNdIDogW3NlbGYgX3BsYWluVGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkRl
ZmF1bHRJdGVtSWRlbnRpZmllcnNdOworICAgIFt0ZXh0VG91Y2hCYXIgc2V0Q3VzdG9taXphdGlv
bkRlZmF1bHRJdGVtSWRlbnRpZmllcnM6ZGVmYXVsdElkZW50aWZpZXJzXTsKKworICAgIGlmIChO
U0dyb3VwVG91Y2hCYXJJdGVtICp0ZXh0Rm9ybWF0SXRlbSA9IChOU0dyb3VwVG91Y2hCYXJJdGVt
ICopW3RleHRUb3VjaEJhciBpdGVtRm9ySWRlbnRpZmllcjpOU1RvdWNoQmFySXRlbUlkZW50aWZp
ZXJUZXh0Rm9ybWF0XSkKKyAgICAgICAgdGV4dEZvcm1hdEl0ZW0uZ3JvdXBUb3VjaEJhci5jdXN0
b21pemF0aW9uSWRlbnRpZmllciA9IEAiV2ViVGV4dEZvcm1hdFRvdWNoQmFyIjsKK30KKworLSAo
Qk9PTClfaXNSaWNobHlFZGl0YWJsZQoreworICAgIE5TVmlldyAqZG9jdW1lbnRWaWV3ID0gc2Vs
Zi5fc2VsZWN0ZWRPck1haW5GcmFtZS5mcmFtZVZpZXcuZG9jdW1lbnRWaWV3OworICAgIGlmICgh
W2RvY3VtZW50VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKQorICAgICAg
ICByZXR1cm4gTk87CisKKyAgICBXZWJIVE1MVmlldyAqd2ViSFRNTFZpZXcgPSAoV2ViSFRNTFZp
ZXcgKilkb2N1bWVudFZpZXc7CisgICAgcmV0dXJuIHdlYkhUTUxWaWV3Ll9pc0VkaXRhYmxlICYm
IHdlYkhUTUxWaWV3Ll9jYW5FZGl0UmljaGx5OworfQorCistIChOU1RvdWNoQmFyICopdGV4dFRv
dWNoQmFyCit7CisgICAgaWYgKHNlbGYuX2lzUmljaGx5RWRpdGFibGUpCisgICAgICAgIHJldHVy
biBfcHJpdmF0ZS0+X3JpY2hUZXh0VG91Y2hCYXIuZ2V0KCk7CisKKyAgICByZXR1cm4gX3ByaXZh
dGUtPl9wbGFpblRleHRUb3VjaEJhci5nZXQoKTsKK30KKworLSAodm9pZCl1cGRhdGVUZXh0VG91
Y2hCYXIKK3sKKyAgICBpZiAoX3ByaXZhdGUtPl9pc0RlZmVycmluZ1RleHRUb3VjaEJhclVwZGF0
ZXMpIHsKKyAgICAgICAgX3ByaXZhdGUtPl9uZWVkc0RlZmVycmVkVGV4dFRvdWNoQmFyVXBkYXRl
ID0gWUVTOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTlNWaWV3ICpkb2N1bWVudFZp
ZXcgPSBbW1tzZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXSBmcmFtZVZpZXddIGRvY3VtZW50Vmll
d107CisgICAgaWYgKCFbZG9jdW1lbnRWaWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNs
YXNzXV0pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBXZWJIVE1MVmlldyAqd2ViSFRNTFZp
ZXcgPSAoV2ViSFRNTFZpZXcgKilkb2N1bWVudFZpZXc7CisgICAgaWYgKCFbd2ViSFRNTFZpZXcg
X2lzRWRpdGFibGVdKQorICAgICAgICByZXR1cm47CisKKyAgICBGcmFtZSogY29yZUZyYW1lID0g
Y29yZShbc2VsZiBfc2VsZWN0ZWRPck1haW5GcmFtZV0pOworICAgIGlmICghY29yZUZyYW1lKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoX3ByaXZhdGUtPl9pc1VwZGF0aW5nVGV4dFRvdWNo
QmFyKQorICAgICAgICByZXR1cm47CisKKyAgICBUZW1wb3JhcnlDaGFuZ2U8Qk9PTD4gaXNVcGRh
dGluZ1RleHRUb3VjaEJhcihfcHJpdmF0ZS0+X2lzVXBkYXRpbmdUZXh0VG91Y2hCYXIsIFlFUyk7
CisKKyAgICBpZiAoIV9wcml2YXRlLT5fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIpCisgICAg
ICAgIF9wcml2YXRlLT5fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgPSBhZG9wdE5TKFtbV2Vi
VGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoV2ViVmlldzpzZWxmXSk7
CisKKyAgICBpZiAoIV9wcml2YXRlLT5fc3RhcnRlZExpc3RlbmluZ1RvQ3VzdG9taXphdGlvbkV2
ZW50cykgeworICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFk
ZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHRvdWNoQmFyRGlkRXhpdEN1c3RvbWl6
YXRpb246KSBuYW1lOk5TVG91Y2hCYXJEaWRFeGl0Q3VzdG9taXphdGlvbiBvYmplY3Q6bmlsXTsK
KyAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZl
cjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih0b3VjaEJhcldpbGxFbnRlckN1c3RvbWl6YXRpb246
KSBuYW1lOk5TVG91Y2hCYXJXaWxsRW50ZXJDdXN0b21pemF0aW9uIG9iamVjdDpuaWxdOworICAg
ICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNl
bGYgc2VsZWN0b3I6QHNlbGVjdG9yKGRpZENoYW5nZUF1dG9tYXRpY1RleHRDb21wbGV0aW9uOikg
bmFtZTpOU1NwZWxsQ2hlY2tlckRpZENoYW5nZUF1dG9tYXRpY1RleHRDb21wbGV0aW9uTm90aWZp
Y2F0aW9uIG9iamVjdDpuaWxdOworICAgICAgICBfcHJpdmF0ZS0+X3N0YXJ0ZWRMaXN0ZW5pbmdU
b0N1c3RvbWl6YXRpb25FdmVudHMgPSBZRVM7CisgICAgfQorCisgICAgaWYgKCFfcHJpdmF0ZS0+
X3BsYWluVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gfHwgIV9wcml2YXRlLT5fcmljaFRl
eHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtKSB7CisgICAgICAgIF9wcml2YXRlLT5fcGxhaW5U
ZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSA9IGFkb3B0TlMoW1tOU0NhbmRpZGF0ZUxpc3RU
b3VjaEJhckl0ZW0gYWxsb2NdIGluaXRXaXRoSWRlbnRpZmllcjpOU1RvdWNoQmFySXRlbUlkZW50
aWZpZXJDYW5kaWRhdGVMaXN0XSk7CisgICAgICAgIFtfcHJpdmF0ZS0+X3BsYWluVGV4dENhbmRp
ZGF0ZUxpc3RUb3VjaEJhckl0ZW0gc2V0RGVsZWdhdGU6c2VsZl07CisgICAgICAgIF9wcml2YXRl
LT5fcmljaFRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtID0gYWRvcHROUyhbW05TQ2FuZGlk
YXRlTGlzdFRvdWNoQmFySXRlbSBhbGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOk5TVG91Y2hCYXJJ
dGVtSWRlbnRpZmllckNhbmRpZGF0ZUxpc3RdKTsKKyAgICAgICAgW19wcml2YXRlLT5fcmljaFRl
eHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtIHNldERlbGVnYXRlOnNlbGZdOworICAgICAgICBj
b3JlRnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT5yZXF1ZXN0Q2FuZGlkYXRlc0ZvclNlbGVjdGlv
bihjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICB9CisKKyAgICBpZiAo
IV9wcml2YXRlLT5fcmljaFRleHRUb3VjaEJhcikgeworICAgICAgICBfcHJpdmF0ZS0+X3JpY2hU
ZXh0VG91Y2hCYXIgPSBhZG9wdE5TKFtbTlNUb3VjaEJhciBhbGxvY10gaW5pdF0pOworICAgICAg
ICBbc2VsZiBzZXRVcFRleHRUb3VjaEJhcjpfcHJpdmF0ZS0+X3JpY2hUZXh0VG91Y2hCYXIuZ2V0
KCldOworICAgICAgICBbX3ByaXZhdGUtPl9yaWNoVGV4dFRvdWNoQmFyIHNldEN1c3RvbWl6YXRp
b25JZGVudGlmaWVyOkAiV2ViUmljaFRleHRUb3VjaEJhciJdOworICAgIH0KKworICAgIGlmICgh
X3ByaXZhdGUtPl9wbGFpblRleHRUb3VjaEJhcikgeworICAgICAgICBfcHJpdmF0ZS0+X3BsYWlu
VGV4dFRvdWNoQmFyID0gYWRvcHROUyhbW05TVG91Y2hCYXIgYWxsb2NdIGluaXRdKTsKKyAgICAg
ICAgW3NlbGYgc2V0VXBUZXh0VG91Y2hCYXI6X3ByaXZhdGUtPl9wbGFpblRleHRUb3VjaEJhci5n
ZXQoKV07CisgICAgICAgIFtfcHJpdmF0ZS0+X3BsYWluVGV4dFRvdWNoQmFyIHNldEN1c3RvbWl6
YXRpb25JZGVudGlmaWVyOkAiV2ViUGxhaW5UZXh0VG91Y2hCYXIiXTsKKyAgICB9CisKKyAgICBp
ZiAoW05TU3BlbGxDaGVja2VyIGlzQXV0b21hdGljVGV4dENvbXBsZXRpb25FbmFibGVkXSAmJiAh
X3ByaXZhdGUtPl9pc0N1c3RvbWl6aW5nVG91Y2hCYXIpIHsKKyAgICAgICAgQk9PTCBzaG91bGRT
aG93Q2FuZGlkYXRlTGlzdCA9ICFjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlz
UmFuZ2UoKSB8fCBjb3JlRnJhbWUtPmVkaXRvcigpLmlnbm9yZUNvbXBvc2l0aW9uU2VsZWN0aW9u
Q2hhbmdlKCk7CisgICAgICAgIFtzZWxmLmNhbmRpZGF0ZUxpc3QgdXBkYXRlV2l0aEluc2VydGlv
blBvaW50VmlzaWJpbGl0eTpzaG91bGRTaG93Q2FuZGlkYXRlTGlzdF07CisgICAgfQorCisgICAg
aWYgKGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQo
KSkgeworICAgICAgICAvLyBXZSBkb24ndCByZXF1ZXN0IGNhbmRpZGF0ZXMgZm9yIHBhc3N3b3Jk
IGZpZWxkcy4gSWYgdGhlIHVzZXIgd2FzIHByZXZpb3VzbHkgaW4gYSBub24tcGFzc3dvcmQgZmll
bGQsIHRoZW4gdGhlCisgICAgICAgIC8vIG9sZCBjYW5kaWRhdGVzIHdpbGwgc3RpbGwgc2hvdyBi
eSBkZWZhdWx0LCBzbyB3ZSBjbGVhciB0aGVtIGhlcmUgYnkgc2V0dGluZyBhbiBlbXB0eSBhcnJh
eSBvZiBjYW5kaWRhdGVzLgorICAgICAgICBpZiAoIV9wcml2YXRlLT5fZW1wdHlDYW5kaWRhdGVz
QXJyYXkpCisgICAgICAgICAgICBfcHJpdmF0ZS0+X2VtcHR5Q2FuZGlkYXRlc0FycmF5ID0gYWRv
cHROUyhbW05TQXJyYXkgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgW3NlbGYuY2FuZGlkYXRlTGlz
dCBzZXRDYW5kaWRhdGVzOl9wcml2YXRlLT5fZW1wdHlDYW5kaWRhdGVzQXJyYXkuZ2V0KCkgZm9y
U2VsZWN0ZWRSYW5nZTpOU01ha2VSYW5nZSgwLCAwKSBpblN0cmluZzpuaWxdOworICAgIH0KKwor
ICAgIE5TVG91Y2hCYXIgKnRleHRUb3VjaEJhciA9IHNlbGYudGV4dFRvdWNoQmFyOworICAgIE5T
QXJyYXk8TlNTdHJpbmcgKj4gKml0ZW1JZGVudGlmaWVycyA9IHRleHRUb3VjaEJhci5pdGVtSWRl
bnRpZmllcnM7CisgICAgQk9PTCBpc1Nob3dpbmdDb21iaW5lZFRleHRGb3JtYXRJdGVtID0gW2l0
ZW1JZGVudGlmaWVycyBjb250YWluc09iamVjdDpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0
Rm9ybWF0XTsKKyAgICBbdGV4dFRvdWNoQmFyIHNldFByaW5jaXBhbEl0ZW1JZGVudGlmaWVyOmlz
U2hvd2luZ0NvbWJpbmVkVGV4dEZvcm1hdEl0ZW0gPyBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJU
ZXh0Rm9ybWF0IDogbmlsXTsKKworICAgIC8vIFNldCBjdXJyZW50IHR5cGluZyBhdHRyaWJ1dGVz
IGZvciByaWNoIHRleHQuIFRoaXMgd2lsbCBlbnN1cmUgdGhhdCB0aGUgYnV0dG9ucyByZWZsZWN0
IHRoZSBzdGF0ZSBvZgorICAgIC8vIHRoZSB0ZXh0IHdoZW4gY2hhbmdpbmcgc2VsZWN0aW9uIHRo
cm91Z2hvdXQgdGhlIGRvY3VtZW50LgorICAgIGlmICh3ZWJIVE1MVmlldy5fY2FuRWRpdFJpY2hs
eSkgeworICAgICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBjb3JlRnJh
bWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgICAgICBpZiAoIXNlbGVjdGlvbi5pc05v
bmUoKSkgeworICAgICAgICAgICAgTm9kZSogbm9kZVRvUmVtb3ZlOworICAgICAgICAgICAgaWYg
KGF1dG8qIHN0eWxlID0gRWRpdG9yOjpzdHlsZUZvclNlbGVjdGlvblN0YXJ0KGNvcmVGcmFtZSwg
bm9kZVRvUmVtb3ZlKSkgeworICAgICAgICAgICAgICAgIFtfcHJpdmF0ZS0+X3RleHRUb3VjaEJh
ckl0ZW1Db250cm9sbGVyIHNldFRleHRJc0JvbGQ6KHN0eWxlLT5mb250Q2FzY2FkZSgpLndlaWdo
dCgpID49IEZvbnRXZWlnaHRCb2xkKV07CisgICAgICAgICAgICAgICAgW19wcml2YXRlLT5fdGV4
dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzSXRhbGljOihzdHlsZS0+Zm9udENhc2Nh
ZGUoKS5pdGFsaWMoKSA9PSBGb250SXRhbGljT24pXTsKKworICAgICAgICAgICAgICAgIFJlZlB0
cjxFZGl0aW5nU3R5bGU+IHR5cGluZ1N0eWxlID0gY29yZUZyYW1lLT5zZWxlY3Rpb24oKS50eXBp
bmdTdHlsZSgpOworICAgICAgICAgICAgICAgIGlmICh0eXBpbmdTdHlsZSAmJiB0eXBpbmdTdHls
ZS0+c3R5bGUoKSkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSB0eXBpbmdT
dHlsZS0+c3R5bGUoKS0+Z2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNv
cmF0aW9uc0luRWZmZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgW19wcml2YXRlLT5fdGV4dFRv
dWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzVW5kZXJsaW5lZDp2YWx1ZS5jb250YWlucygi
dW5kZXJsaW5lIildOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAg
ICBbX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRUZXh0SXNVbmRlcmxp
bmVkOihzdHlsZS0+dGV4dERlY29yYXRpb25zSW5FZmZlY3QoKSAmIFRleHREZWNvcmF0aW9uVW5k
ZXJsaW5lKV07CisKKyAgICAgICAgICAgICAgICBpZiAoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgIFtf
cHJpdmF0ZS0+X3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFRleHRDb2xvcjpuc0NvbG9y
KHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikpXTsKKworICAg
ICAgICAgICAgICAgIE5TVGV4dEFsaWdubWVudCB0ZXh0QWxpZ25tZW50OworICAgICAgICAgICAg
ICAgIHN3aXRjaCAoc3R5bGUtPnRleHRBbGlnbigpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBS
SUdIVDoKKyAgICAgICAgICAgICAgICBjYXNlIFdFQktJVF9SSUdIVDoKKyAgICAgICAgICAgICAg
ICAgICAgdGV4dEFsaWdubWVudCA9IE5TVGV4dEFsaWdubWVudFJpZ2h0OworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIExFRlQ6CisgICAgICAgICAgICAg
ICAgY2FzZSBXRUJLSVRfTEVGVDoKKyAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWdubWVudCA9
IE5TVGV4dEFsaWdubWVudExlZnQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgQ0VOVEVSOgorICAgICAgICAgICAgICAgIGNhc2UgV0VCS0lUX0NFTlRF
UjoKKyAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWdubWVudCA9IE5TVGV4dEFsaWdubWVudENl
bnRlcjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBK
VVNUSUZZOgorICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25t
ZW50SnVzdGlmaWVkOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBjYXNlIFRBU1RBUlQ6CisgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbm1lbnQgPSBzdHls
ZS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gTlNUZXh0QWxpZ25tZW50TGVmdCA6IE5TVGV4
dEFsaWdubWVudFJpZ2h0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIFRBRU5EOgorICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ25tZW50ID0gc3R5
bGUtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IE5TVGV4dEFsaWdubWVudFJpZ2h0IDogTlNU
ZXh0QWxpZ25tZW50TGVmdDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIFtfcHJpdmF0ZS0+X3RleHRUb3VjaEJhckl0ZW1Db250
cm9sbGVyIHNldEN1cnJlbnRUZXh0QWxpZ25tZW50OnRleHRBbGlnbm1lbnRdOworCisgICAgICAg
ICAgICAgICAgSFRNTEVsZW1lbnQqIGVuY2xvc2luZ0xpc3RFbGVtZW50ID0gZW5jbG9zaW5nTGlz
dChzZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoZW5jbG9zaW5nTGlzdEVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzPEhU
TUxVTGlzdEVsZW1lbnQ+KCplbmNsb3NpbmdMaXN0RWxlbWVudCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICBbW19wcml2YXRlLT5fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgd2ViVGV4dExp
c3RUb3VjaEJhclZpZXdDb250cm9sbGVyXSBzZXRDdXJyZW50TGlzdFR5cGU6V2ViTGlzdFR5cGU6
OlVub3JkZXJlZF07CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzPEhUTUxPTGlzdEVs
ZW1lbnQ+KCplbmNsb3NpbmdMaXN0RWxlbWVudCkpCisgICAgICAgICAgICAgICAgICAgICAgICBb
W19wcml2YXRlLT5fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgd2ViVGV4dExpc3RUb3VjaEJh
clZpZXdDb250cm9sbGVyXSBzZXRDdXJyZW50TGlzdFR5cGU6V2ViTGlzdFR5cGU6Ok9yZGVyZWRd
OworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgW1tfcHJpdmF0ZS0+X3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHdlYlRleHRMaXN0
VG91Y2hCYXJWaWV3Q29udHJvbGxlcl0gc2V0Q3VycmVudExpc3RUeXBlOldlYkxpc3RUeXBlOjpO
b25lXTsKKworICAgICAgICAgICAgICAgIGlmIChub2RlVG9SZW1vdmUpCisgICAgICAgICAgICAg
ICAgICAgIG5vZGVUb1JlbW92ZS0+cmVtb3ZlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgQk9PTCBpc1Nob3dpbmdDYW5kaWRhdGVMaXN0SXRlbSA9IFtpdGVtSWRlbnRpZmll
cnMgY29udGFpbnNPYmplY3Q6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyQ2FuZGlkYXRlTGlzdF0g
JiYgW05TU3BlbGxDaGVja2VyIGlzQXV0b21hdGljVGV4dENvbXBsZXRpb25FbmFibGVkXTsKKyAg
ICAgICAgW19wcml2YXRlLT5fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VXNlc05hcnJv
d1RleHRTdHlsZUl0ZW06aXNTaG93aW5nQ29tYmluZWRUZXh0Rm9ybWF0SXRlbSAmJiBpc1Nob3dp
bmdDYW5kaWRhdGVMaXN0SXRlbV07CisgICAgfQorfQorCistICh2b2lkKXVwZGF0ZU1lZGlhVG91
Y2hCYXIKK3sKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAg
aWYgKCFfcHJpdmF0ZS0+bWVkaWFUb3VjaEJhclByb3ZpZGVyKQorICAgICAgICBfcHJpdmF0ZS0+
bWVkaWFUb3VjaEJhclByb3ZpZGVyID0gYWRvcHROUyhbYWxsb2NBVkZ1bmN0aW9uQmFyUGxheWJh
Y2tDb250cm9sc1Byb3ZpZGVySW5zdGFuY2UoKSBpbml0XSk7CisKKyAgICBpZiAoIVtfcHJpdmF0
ZS0+bWVkaWFUb3VjaEJhclByb3ZpZGVyIHBsYXliYWNrQ29udHJvbHNDb250cm9sbGVyXSkgewor
ICAgICAgICBBU1NFUlQoX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSk7CisgICAg
ICAgIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyICptYW5hZ2VyID0gX3ByaXZhdGUtPnBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheUJhY2tDb250cm9sc01hbmFnZXIoKTsKKyAgICAgICAg
W19wcml2YXRlLT5tZWRpYVRvdWNoQmFyUHJvdmlkZXIgc2V0UGxheWJhY2tDb250cm9sc0NvbnRy
b2xsZXI6KGlkIDxBVkZ1bmN0aW9uQmFyUGxheWJhY2tDb250cm9sc0NvbnRyb2xsaW5nPiltYW5h
Z2VyXTsKKyAgICAgICAgW19wcml2YXRlLT5tZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3IHNldFBs
YXliYWNrQ29udHJvbHNDb250cm9sbGVyOihpZCA8QVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJv
bHNDb250cm9sbGluZz4pbWFuYWdlcl07CisgICAgfQorI2VuZGlmCit9CisKKy0gKHZvaWQpdXBk
YXRlVG91Y2hCYXIKK3sKKyAgICBpZiAoIV9wcml2YXRlLT5fY2FuQ3JlYXRlVG91Y2hCYXJzKQor
ICAgICAgICByZXR1cm47CisKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfc2Vs
ZWN0ZWRPck1haW5GcmFtZV0pOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm47
CisKKyAgICBOU1RvdWNoQmFyICp0b3VjaEJhciA9IG5pbDsKKyAgICBOU1ZpZXcgKmRvY3VtZW50
VmlldyA9IFtbW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVdIGZyYW1lVmlld10gZG9jdW1lbnRW
aWV3XTsKKyAgICBpZiAoW2RvY3VtZW50VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBj
bGFzc11dKSB7CisgICAgICAgIFdlYkhUTUxWaWV3ICp3ZWJIVE1MVmlldyA9IChXZWJIVE1MVmll
dyAqKWRvY3VtZW50VmlldzsKKyAgICAgICAgaWYgKFt3ZWJIVE1MVmlldyBfaXNFZGl0YWJsZV0p
IHsKKyAgICAgICAgICAgIFtzZWxmIHVwZGF0ZVRleHRUb3VjaEJhcl07CisgICAgICAgICAgICB0
b3VjaEJhciA9IFtzZWxmIHRleHRUb3VjaEJhcl07CisgICAgICAgIH0KKyNpZiBFTkFCTEUoV0VC
X1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgICAgIGVsc2UgaWYgKFtzZWxmIF9oYXNB
Y3RpdmVWaWRlb0ZvckNvbnRyb2xzSW50ZXJmYWNlXSkgeworICAgICAgICAgICAgW3NlbGYgdXBk
YXRlTWVkaWFUb3VjaEJhcl07CisgICAgICAgICAgICB0b3VjaEJhciA9IFtfcHJpdmF0ZS0+bWVk
aWFUb3VjaEJhclByb3ZpZGVyIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IodG91Y2hCYXIp
XSA/IFsoaWQpX3ByaXZhdGUtPm1lZGlhVG91Y2hCYXJQcm92aWRlciB0b3VjaEJhcl0gOiBbKGlk
KV9wcml2YXRlLT5tZWRpYVRvdWNoQmFyUHJvdmlkZXIgdG91Y2hCYXJdOworICAgICAgICB9IGVs
c2UgaWYgKFtfcHJpdmF0ZS0+bWVkaWFUb3VjaEJhclByb3ZpZGVyIHBsYXliYWNrQ29udHJvbHND
b250cm9sbGVyXSkgeworICAgICAgICAgICAgW19wcml2YXRlLT5tZWRpYVRvdWNoQmFyUHJvdmlk
ZXIgc2V0UGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXI6bmlsXTsKKyAgICAgICAgICAgIFtfcHJp
dmF0ZS0+bWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyBzZXRQbGF5YmFja0NvbnRyb2xzQ29udHJv
bGxlcjpuaWxdOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisKKyAgICBpZiAodG91Y2hCYXIg
PT0gX3ByaXZhdGUtPl9jdXJyZW50VG91Y2hCYXIpCisgICAgICAgIHJldHVybjsKKworICAgIF9w
cml2YXRlLT5fY3VycmVudFRvdWNoQmFyID0gdG91Y2hCYXI7CisgICAgW3NlbGYgd2lsbENoYW5n
ZVZhbHVlRm9yS2V5OkAidG91Y2hCYXIiXTsKKyAgICBbc2VsZiBzZXRUb3VjaEJhcjpfcHJpdmF0
ZS0+X2N1cnJlbnRUb3VjaEJhci5nZXQoKV07CisgICAgW3NlbGYgZGlkQ2hhbmdlVmFsdWVGb3JL
ZXk6QCJ0b3VjaEJhciJdOworfQorCistICh2b2lkKXByZXBhcmVGb3JNb3VzZURvd24KK3sKKyAg
ICBfcHJpdmF0ZS0+X25lZWRzRGVmZXJyZWRUZXh0VG91Y2hCYXJVcGRhdGUgPSBOTzsKKyAgICBf
cHJpdmF0ZS0+X2lzRGVmZXJyaW5nVGV4dFRvdWNoQmFyVXBkYXRlcyA9IFlFUzsKK30KKworLSAo
dm9pZClwcmVwYXJlRm9yTW91c2VVcAoreworICAgIGlmICghX3ByaXZhdGUtPl9pc0RlZmVycmlu
Z1RleHRUb3VjaEJhclVwZGF0ZXMpCisgICAgICAgIHJldHVybjsKKworICAgIF9wcml2YXRlLT5f
aXNEZWZlcnJpbmdUZXh0VG91Y2hCYXJVcGRhdGVzID0gTk87CisgICAgaWYgKF9wcml2YXRlLT5f
bmVlZHNEZWZlcnJlZFRleHRUb3VjaEJhclVwZGF0ZSkgeworICAgICAgICAvLyBPbmx5IHRyaWdn
ZXIgYW5vdGhlciB1cGRhdGUgaWYgd2UgYXR0ZW1wdGVkIGFuZCBiYWlsZWQgZnJvbSBhbiB1cGRh
dGUgZHVyaW5nIHRoZSBkZWZlcnJhbC4KKyAgICAgICAgW3NlbGYgdXBkYXRlVG91Y2hCYXJdOwor
ICAgIH0KK30KKworLSAodm9pZCl3ZWJWaWV3QWRkaXRpb25zV2lsbERlc3Ryb3lWaWV3Cit7Cisg
ICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpz
ZWxmXTsKK30KKworLSAoTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtICopY2FuZGlkYXRlTGlz
dAoreworICAgIHJldHVybiBzZWxmLl9pc1JpY2hseUVkaXRhYmxlID8gX3ByaXZhdGUtPl9yaWNo
VGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0uZ2V0KCkgOiBfcHJpdmF0ZS0+X3BsYWluVGV4
dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0uZ2V0KCk7Cit9CisjZWxzZQorCistICh2b2lkKXVw
ZGF0ZVRvdWNoQmFyCit7Cit9CisKKy0gKHZvaWQpcHJlcGFyZUZvck1vdXNlRG93bgoreworfQor
CistICh2b2lkKXByZXBhcmVGb3JNb3VzZVVwCit7Cit9CisKKy0gKHZvaWQpd2ViVmlld0FkZGl0
aW9uc1dpbGxEZXN0cm95VmlldworeworfQorCistIChpZCljYW5kaWRhdGVMaXN0Cit7CisgICAg
cmV0dXJuIG5pbDsKK30KKworI2VuZGlmCisKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdlYlZp
ZXcgKFdlYlZpZXdEZXZpY2VPcmllbnRhdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViVmlld0RhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlZpZXdEYXRhLmgJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlld0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDggKzEwMSwxMCBA
QCBjbGFzcyBXZWJWaWV3R3JvdXA7CiBjbGFzcyBXZWJTZWxlY3Rpb25TZXJ2aWNlQ29udHJvbGxl
cjsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID49IDEwMTIwMCAmJiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2ltcG9ydCA8
V2ViS2l0QWRkaXRpb25zL1dlYlZpZXdEYXRhQWRkaXRpb25zRGVjbGFyYXRpb25zLmg+CisjaWYg
SEFWRShUT1VDSF9CQVIpCitAY2xhc3MgV2ViVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXI7CitA
Y2xhc3MgQVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNQcm92aWRlcjsKK0BjbGFzcyBBVkZ1
bmN0aW9uQmFyU2NydWJiZXI7CiAjZW5kaWYKIAogY2xhc3MgV2ViVmlld0xheWVyRmx1c2hTY2hl
ZHVsZXIgOiBwdWJsaWMgV2ViQ29yZTo6TGF5ZXJGbHVzaFNjaGVkdWxlciB7CkBAIC0xNzgsOSAr
MTgwLDI0IEBAIEBpbnRlcmZhY2UgV2ViVmlld1ByaXZhdGUgOiBOU09iamVjdCB7CiAjaWYgUExB
VEZPUk0oTUFDKQogICAgIFdlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIgKmltbWVkaWF0ZUFj
dGlvbkNvbnRyb2xsZXI7CiAKLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49
IDEwMTIwMCAmJiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2ltcG9ydCA8V2ViS2l0QWRkaXRp
b25zL1dlYlZpZXdEYXRhQWRkaXRpb25zLmg+Ci0jZW5kaWYKKyNpZiBIQVZFKFRPVUNIX0JBUikK
KyAgICBSZXRhaW5QdHI8TlNUb3VjaEJhcj4gX2N1cnJlbnRUb3VjaEJhcjsKKyAgICBSZXRhaW5Q
dHI8TlNUb3VjaEJhcj4gX3BsYWluVGV4dFRvdWNoQmFyOworICAgIFJldGFpblB0cjxOU1RvdWNo
QmFyPiBfcmljaFRleHRUb3VjaEJhcjsKKyAgICBSZXRhaW5QdHI8V2ViVGV4dFRvdWNoQmFySXRl
bUNvbnRyb2xsZXI+IF90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlcjsKKyAgICBSZXRhaW5QdHI8
TlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtPiBfcmljaFRleHRDYW5kaWRhdGVMaXN0VG91Y2hC
YXJJdGVtOworICAgIFJldGFpblB0cjxOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0+IF9wbGFp
blRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtOworICAgIFJldGFpblB0cjxOU0FycmF5PiBf
ZW1wdHlDYW5kaWRhdGVzQXJyYXk7CisgICAgUmV0YWluUHRyPEFWRnVuY3Rpb25CYXJQbGF5YmFj
a0NvbnRyb2xzUHJvdmlkZXI+IG1lZGlhVG91Y2hCYXJQcm92aWRlcjsKKyAgICBSZXRhaW5QdHI8
QVZGdW5jdGlvbkJhclNjcnViYmVyPiBtZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OworCisgICAg
Qk9PTCBfY2FuQ3JlYXRlVG91Y2hCYXJzOworICAgIEJPT0wgX2lzVXBkYXRpbmdUZXh0VG91Y2hC
YXI7CisgICAgQk9PTCBfc3RhcnRlZExpc3RlbmluZ1RvQ3VzdG9taXphdGlvbkV2ZW50czsKKyAg
ICBCT09MIF9pc0N1c3RvbWl6aW5nVG91Y2hCYXI7CisgICAgQk9PTCBfaXNEZWZlcnJpbmdUZXh0
VG91Y2hCYXJVcGRhdGVzOworICAgIEJPT0wgX25lZWRzRGVmZXJyZWRUZXh0VG91Y2hCYXJVcGRh
dGU7CisjZW5kaWYgLy8gSEFWRShUT1VDSF9CQVIpCiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6VGV4dEluZGljYXRvcldpbmRvdz4gdGV4dEluZGljYXRvcldpbmRvdzsKICAgICBCT09M
IGhhc0luaXRpYWxpemVkTG9va3VwT2JzZXJ2ZXI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmgJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTcy
LDYgKzcyLDcgQEAgY2xhc3MgV2ViU2VsZWN0aW9uU2VydmljZUNvbnRyb2xsZXI7CiAKICNlbmRp
ZgogCitAY2xhc3MgTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtOwogQGNsYXNzIFdlYkJhc2VQ
bHVnaW5QYWNrYWdlOwogQGNsYXNzIFdlYkRvd25sb2FkOwogQGNsYXNzIFdlYkltbWVkaWF0ZUFj
dGlvbkNvbnRyb2xsZXI7CkBAIC0yOTMsMTIgKzI5NCwxMSBAQCBAaW50ZXJmYWNlIFdlYlZpZXcg
KFdlYlZpZXdPdGhlckludGVybmFsCiAtICh2b2lkKV9zZXRNb2NrTWVkaWFQbGF5YmFja1Rhcmdl
dFBpY2tlck5hbWU6KE5TU3RyaW5nICopbmFtZSBzdGF0ZTooV2ViQ29yZTo6TWVkaWFQbGF5YmFj
a1RhcmdldENvbnRleHQ6OlN0YXRlKXN0YXRlOwogI2VuZGlmCiAKLUBlbmQKLQotQGludGVyZmFj
ZSBXZWJWaWV3IChXZWJVcGRhdGVXZWJWaWV3QWRkaXRpb25zKQogLSAodm9pZClwcmVwYXJlRm9y
TW91c2VVcDsKIC0gKHZvaWQpcHJlcGFyZUZvck1vdXNlRG93bjsKLS0gKHZvaWQpdXBkYXRlV2Vi
Vmlld0FkZGl0aW9uczsKKy0gKHZvaWQpdXBkYXRlVG91Y2hCYXI7CiAtICh2b2lkKXdlYlZpZXdB
ZGRpdGlvbnNXaWxsRGVzdHJveVZpZXc7Ci0tIChpZCljYW5kaWRhdGVMaXN0OworLSAodm9pZClf
ZGlzbWlzc1RleHRUb3VjaEJhclBvcG92ZXJJdGVtV2l0aElkZW50aWZpZXI6KE5TU3RyaW5nICop
aWRlbnRpZmllcjsKKy0gKE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSAqKWNhbmRpZGF0ZUxp
c3Q7CisKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld1ByaXZh
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdQcml2
YXRlLmgJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
Vmlld1ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtODg5LDYgKzg4OSwxMCBAQCBDb3VsZCBi
ZSB3b3J0aCBhZGRpbmcgdG8gdGhlIEFQSS4KIAogLSAodm9pZClfc2V0Rm9udEZhbGxiYWNrUHJl
ZmVyc1BpY3RvZ3JhcGhzOihCT09MKWZsYWc7CiAKKy0gKHZvaWQpc2hvd0NhbmRpZGF0ZXM6KE5T
QXJyYXkgKiljYW5kaWRhdGVzIGZvclN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgaW5SZWN0OihO
U1JlY3QpcmVjdE9mVHlwZWRTdHJpbmcgZm9yU2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlyYW5nZSB2
aWV3OihOU1ZpZXcgKil2aWV3IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU1RleHRDaGVj
a2luZ1Jlc3VsdCAqYWNjZXB0ZWRDYW5kaWRhdGUpKWNvbXBsZXRpb25CbG9jazsKKy0gKHZvaWQp
Zm9yY2VSZXF1ZXN0Q2FuZGlkYXRlc0ZvclRlc3Rpbmc7CistIChCT09MKXNob3VsZFJlcXVlc3RD
YW5kaWRhdGVzOworCiBAZW5kCiAKICNpZiAhVEFSR0VUX09TX0lQSE9ORQpAQCAtMTA2MSwxMiAr
MTA2NSw2IEBAIEBpbnRlcmZhY2UgTlNPYmplY3QgKFdlYlZpZXdSZXNvdXJjZUxvYWQKIC0gKE5T
Q2FjaGVkVVJMUmVzcG9uc2UgKil3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIHJlc291cmNlOihp
ZClpZGVudGlmaWVyIHdpbGxDYWNoZVJlc3BvbnNlOihOU0NhY2hlZFVSTFJlc3BvbnNlICopcmVz
cG9uc2UgZnJvbURhdGFTb3VyY2U6KFdlYkRhdGFTb3VyY2UgKilkYXRhU291cmNlOwogQGVuZAog
Ci1AaW50ZXJmYWNlIFdlYlZpZXcgKFdlYlNob3dDYW5kaWRhdGVzKQotLSAodm9pZClzaG93Q2Fu
ZGlkYXRlczooTlNBcnJheSAqKWNhbmRpZGF0ZXMgZm9yU3RyaW5nOihOU1N0cmluZyAqKXN0cmlu
ZyBpblJlY3Q6KE5TUmVjdClyZWN0T2ZUeXBlZFN0cmluZyBmb3JTZWxlY3RlZFJhbmdlOihOU1Jh
bmdlKXJhbmdlIHZpZXc6KE5TVmlldyAqKXZpZXcgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4p
KE5TVGV4dENoZWNraW5nUmVzdWx0ICphY2NlcHRlZENhbmRpZGF0ZSkpY29tcGxldGlvbkJsb2Nr
OwotLSAodm9pZClmb3JjZVJlcXVlc3RDYW5kaWRhdGVzRm9yVGVzdGluZzsKLS0gKEJPT0wpc2hv
dWxkUmVxdWVzdENhbmRpZGF0ZXM7Ci1AZW5kCi0KICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJu
ICJDIiB7CiAjZW5kaWYKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODQwNSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE2LTExLTA0ICBCZXRoIERha2luICA8YmRha2lu
QGFwcGxlLmNvbT4KKworICAgICAgICBTdXBwb3J0IFRvdWNoQmFyIGluIFdlYktpdAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NDM3CisgICAgICAg
IC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjg4NzY1MjQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIG1ha2Vz
IE1pbmlCcm93c2VyIHN1cHBvcnQgVG91Y2hCYXIgY3VzdG9taXphdGlvbi4gCisKKyAgICAgICAg
KiBNaW5pQnJvd3Nlci9tYWMvQXBwRGVsZWdhdGUubToKKyAgICAgICAgKC1bQnJvd3NlckFwcERl
bGVnYXRlIGF3YWtlRnJvbU5pYl0pOgorCiAyMDE2LTExLTA0ICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBv
dXQgcjIwODI5My4KSW5kZXg6IFRvb2xzL01pbmlCcm93c2VyL21hYy9BcHBEZWxlZ2F0ZS5tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL01pbmlCcm93c2VyL21hYy9BcHBEZWxlZ2F0ZS5tCShyZXZpc2lv
biAyMDg0MDUpCisrKyBUb29scy9NaW5pQnJvd3Nlci9tYWMvQXBwRGVsZWdhdGUubQkod29ya2lu
ZyBjb3B5KQpAQCAtNDcsNiArNDcsMTAgQEAgZW51bSB7CiAgICAgV2ViS2l0Mk5ld1dpbmRvd1Rh
ZyA9IDIKIH07CiAKK0BpbnRlcmZhY2UgTlNBcHBsaWNhdGlvbiAoVG91Y2hCYXIpCitAcHJvcGVy
dHkgKGdldHRlcj1pc0F1dG9tYXRpY0N1c3RvbWl6ZVRvdWNoQmFyTWVudUl0ZW1FbmFibGVkKSBC
T09MIGF1dG9tYXRpY0N1c3RvbWl6ZVRvdWNoQmFyTWVudUl0ZW1FbmFibGVkOworQGVuZAorCiBA
aW1wbGVtZW50YXRpb24gQnJvd3NlckFwcERlbGVnYXRlCiAKIC0gKGlkKWluaXQKQEAgLTczLDYg
Kzc3LDkgQEAgLSAodm9pZClhd2FrZUZyb21OaWIKICNlbmRpZgogCiAgICAgW1tOU0FwcCBtYWlu
TWVudV0gaW5zZXJ0SXRlbTpbaXRlbSBhdXRvcmVsZWFzZV0gYXRJbmRleDpbW05TQXBwIG1haW5N
ZW51XSBpbmRleE9mSXRlbVdpdGhUaXRsZTpAIkRlYnVnIl1dOworCisgICAgaWYgKFtOU0FwcCBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNldEF1dG9tYXRpY0N1c3RvbWl6ZVRvdWNoQmFy
TWVudUl0ZW1FbmFibGVkOildKQorICAgICAgICBbTlNBcHAgc2V0QXV0b21hdGljQ3VzdG9taXpl
VG91Y2hCYXJNZW51SXRlbUVuYWJsZWQ6WUVTXTsKIH0KIAogI2lmIFdLX0FQSV9FTkFCTEVECg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293990</attachid>
            <date>2016-11-04 23:58:45 -0700</date>
            <delta_ts>2016-11-06 21:37:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-9.txt</filename>
            <type>text/plain</type>
            <size>118715</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE2LTExLTA0ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBTdXBwb3J0IFRvdWNoQmFyIGluIFdl
YktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0
NDM3CisgICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0v
Mjg4NzY1MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9y
bS9zcGkvY29jb2EvQVZLaXRTUEkuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcGkvY29jb2EvTlNU
b3VjaEJhclNQSS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxD
aGVja2VyU1BJLmg6CisKIDIwMTYtMTEtMDQgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgogCiAgICAgICAgIEluZGV4ZWREQiAyLjA6IENsZWFuIHVwIG1vcmUgdHJhbnNhY3Rpb24g
YWJvcnQgYW5kIGV4Y2VwdGlvbiB0aHJvd2luZyBiZWhhdmlvciBmcm9tIElEQk9iamVjdFN0b3Jl
LgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMjA4NDA1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNTY0LDEwICsxNTY0LDEw
IEBACiAJCTQxNjJBNDU3MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQxNjJBNDU1MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
LmNwcCAqLzsgfTsKIAkJNDE2MkE0NTgxMDExNDY0NzAwREZGM0VEIC8qIEpTRGVkaWNhdGVkV29y
a2VyR2xvYmFsU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQxNjJBNDU2MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlLmggKi87IH07CiAJCTQxNkUyOUE2MTAyRkE5NjIwMDdGQzE0RSAvKiBXb3JrZXJSZXBv
cnRpbmdQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDE2RTI5QTUxMDJGQTk2MjAwN0ZDMTRFIC8qIFdvcmtlclJlcG9ydGluZ1Byb3h5LmggKi87
IH07CisJCTQxNkU2RkU4MUJCRDEyREYwMDBBM0Y2NCAvKiBSZWFkYWJsZVN0cmVhbUludGVybmFs
c0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTQxNkU2RkU4MUJCRDEyREYwMDBBNjAyMyAvKiBGZXRjaEludGVybmFsc0J1aWx0aW5zLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMx
MTBEMDBCNzY0QjkgLyogRmV0Y2hJbnRlcm5hbHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjAz
MyAvKiBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEM5IC8qIFN0cmVhbUlu
dGVybmFsc0J1aWx0aW5zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJNDE2RTZGRTgxQkJEMTJERjAwMEEzRjY0IC8qIFJlYWRhYmxlQnl0ZVN0cmVh
bUludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVCeXRlU3RyZWFt
SW50ZXJuYWxzQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQk0MTZFNkZFODFCQkQxMkRGMDAwQTYwNDMgLyogUmVhZGFibGVTdHJlYW1J
bnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOUIwM0Q4MDYxQkIzMTEwRDAwQjczRjY0IC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJu
YWxzQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk0MTZFNkZFODFCQkQxMkRGMDAwQTYwNDMgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50
ZXJuYWxzQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRl
cm5hbHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjA1MyAvKiBXcml0YWJsZVN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RTkgLyogV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNC
dWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTQxNkU2RkU5MUJCRDEyRTUwMDBBNjA0MyAvKiBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFC
QjMxMTBEMDBCNzY0RDggLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxNkU2RkU5MUJCRDEyRTUwMDBB
NjA1MyAvKiBXcml0YWJsZVN0cmVhbUJ1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RTggLyogV3JpdGFi
bGVTdHJlYW1CdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0yNTkwLDggKzI1OTAsOCBAQAogCQk2QjY5M0EyRTFDNTFBODJFMDBCMDNC
RUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZCNjkzQTJEMUM1MUE4MkUwMEIwM0JFRiAvKiBSZXNvdXJjZUxv
YWRPYnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTZCNjkzQTM0MUM1MUE5NUQwMEIwM0JFRiAvKiBSZXNvdXJjZUxvYWRPYnNlcnZlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QjY5M0Ez
MzFDNTFBOTVEMDBCMDNCRUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwICovOyB9OwogCQk2
QzRDOTZERTFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNEM5
NkRBMUFENDQ4MzUwMDM2M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuY3Bw
ICovOyB9OwotCQk2QzRDOTZERjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJl
YW1Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2QzRDOTZEQjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250
cm9sbGVyLmggKi87IH07CiAJCTZDNEM5NkRFMUFENDQ4MzUwMDM2NUE1MCAvKiBKU1JlYWRhYmxl
U3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkM0Qzk2REExQUQ0NDgzNTAwMzY1QTUwIC8qIEpTUmVhZGFibGVT
dHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHAgKi87IH07CisJCTZDNEM5NkRGMUFENDQ4MzUwMDM2
M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNEM5NkRCMUFENDQ4MzUwMDM2M0Y2NCAv
KiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaCAqLzsgfTsKIAkJNkM0Qzk2REYxQUQ0
NDgzNTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0Qzk2REIxQUQ0NDgz
NTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5oICovOyB9Owog
CQk2QzYzODg5NUE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlh
dG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM2
Mzg4OTNBOTZDQ0VFNTBDOEM5NDZDIC8qIENhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2QzYz
ODg5NkE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzYzODg5
NEE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5jcHAg
Ki87IH07CkBAIC0zMjc0LDYgKzMyNzQsNyBAQAogCQk5MzMwOUVBMzA5OUVCNzhDMDA1NkU1ODEg
LyogU2hhcmVkVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzMzA5RUEwMDk5RUI3OEMwMDU2RTU4MSAvKiBTaGFyZWRUaW1lci5oICovOyB9Owog
CQk5MzMwOUVBNDA5OUVCNzhDMDA1NkU1ODEgLyogVGltZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlFQTEwOTlFQjc4QzAwNTZFNTgxIC8q
IFRpbWVyLmNwcCAqLzsgfTsKIAkJOTMzNTRBM0MwQjI0RjhDOTAwM0Y2REVBIC8qIFVJRXZlbnRX
aXRoS2V5U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTMzNTRBM0IwQjI0RjhDOTAwM0Y2REVBIC8qIFVJRXZlbnRXaXRoS2V5U3RhdGUuY3Bw
ICovOyB9OworCQk5MzM1QjQ5RDFEQ0JFRjdDMDBFRDQ2OEUgLyogTlNUb3VjaEJhclNQSS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzNUI0OUIxRENC
RUY3MTAwRUQ0NjhFIC8qIE5TVG91Y2hCYXJTUEkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5MzNBMTQyRTBCN0QxODg2MDBBNTNGRkQgLyogVGV4
dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzM0ExNDJCMEI3RDE4ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuY3BwICovOyB9OwogCQk5MzNB
MTQzMDBCN0QxODg2MDBBNTNGRkQgLyogVGV4dEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzNBMTQyRDBCN0QxODg2MDBBNTNGRkQgLyogVGV4
dEV2ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJOTMzQTE0QjgwQjdEMUQ1MjAwQTUzRkZEIC8qIEpTVGV4dEV2ZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzM0ExNEI2MEI3RDFENTIwMEE1
M0ZGRCAvKiBKU1RleHRFdmVudC5jcHAgKi87IH07CkBAIC05NzgyLDggKzk3ODMsOCBAQAogCQk2
QjY5M0EyRDFDNTFBODJFMDBCMDNCRUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkI2OTNBMzMxQzUxQTk1RDAwQjAzQkVGIC8qIFJlc291
cmNlTG9hZE9ic2VydmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlc291cmNlTG9hZE9ic2VydmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NkM0Qzk2REExQUQ0NDgzNTAwMzYzRjY0IC8qIEpTUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1JlYWRhYmxlQnl0
ZVN0cmVhbUNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzRD
OTZEQjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUmVhZGFibGVCeXRlU3RyZWFtQ29u
dHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QzRDOTZEQTFBRDQ0ODM1
MDAzNjVBNTAgLyogSlNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29u
dHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZDNEM5NkRCMUFENDQ4
MzUwMDM2M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZDNEM5NkRCMUFENDQ4MzUwMDM2NUE1MCAv
KiBKU1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZDNjM4ODkzQTk2Q0NFRTUwQzhDOTQ2QyAvKiBDYWNo
ZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTZDNjM4ODk0QTk2Q0NFRTUwQzhDOTQ2QyAvKiBDYWNoZWRSZXNvdXJj
ZVJlcXVlc3RJbml0aWF0b3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTEwNzIyLDYgKzEwNzIzLDcgQEAKIAkJOTMzMkFCOEIxNjUzQTk3OTAw
RDgyN0VDIC8qIEZFTGlnaHRpbmdORU9OLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZFTGlnaHRpbmdORU9OLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMzJB
QjhDMTY1M0E5NzkwMEQ4MjdFQyAvKiBORU9OSGVscGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBORU9OSGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5MzM1NEEzQjBCMjRGOEM5MDAzRjZERUEgLyogVUlFdmVudFdpdGhLZXlTdGF0ZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVSUV2ZW50V2l0aEtleVN0YXRlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTMzNUI0OUIxRENCRUY3MTAwRUQ0NjhF
IC8qIE5TVG91Y2hCYXJTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTlNU
b3VjaEJhclNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzNBMTQyQjBCN0Qx
ODg2MDBBNTNGRkQgLyogVGV4dEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFRleHRFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkz
M0ExNDJDMEI3RDE4ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFRleHRFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzM0Ex
NDJEMEI3RDE4ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGV4dEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MTE3NSw4ICsxMTE3Nyw4IEBACiAJCTk5MDhCMEYwMUJDQUNGOTEwMEVEM0Y2NCAvKiBSZWFkYWJs
ZUJ5dGVTdHJlYW1Db250cm9sbGVyLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0
OyBwYXRoID0gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlci5qczsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTkwOEIwRjExQkNBQ0Y5MTAwRUQwRjU1IC8qIFN0cmVhbUludGVybmFs
cy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFN0cmVhbUludGVy
bmFscy5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkwOEIwRjExQkNBQ0Y5MTAw
RUQwRjY1IC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzLmpzICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVhZGFibGVTdHJlYW1JbnRlcm5hbHMuanM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk5MDhCMEYxMUJDQUNGOTEwMEVEM0Y2NCAvKiBSZWFkYWJs
ZUJ5dGVTdHJlYW1JbnRlcm5hbHMuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7
IHBhdGggPSBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHMuanM7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTk5MDhCMEYxMUJDQUNGOTEwMEVEMEY3NSAvKiBXcml0YWJsZVN0cmVhbUlu
dGVybmFscy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFdyaXRh
YmxlU3RyZWFtSW50ZXJuYWxzLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OTA4
QjBGMTFCQ0FDRjkxMDBFRDNGNjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzLmpzICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVhZGFibGVCeXRlU3RyZWFt
SW50ZXJuYWxzLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGMjFCQ0FD
RjkxMDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyLmpzICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVy
LmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGMzFCQ0FDRkZFMDBFRDBG
NjUgLyogQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJ5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3lCdWlsdGlu
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5MDhCMEY1MUJDQUQwN0QwMEVE
MEY2NSAvKiBCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5QnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTE4NCwxNSArMTExODYsMTMgQEAKIAkJ
OTkwOEIwRjcxQkNBRDA3RDAwRUQwRjY1IC8qIENvdW50UXVldWluZ1N0cmF0ZWd5QnVpbHRpbnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ291bnRRdWV1aW5nU3RyYXRlZ3lC
dWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGOTFCQ0FEMDdE
MDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkwOEIwRjkxQkNBRDA3RDAwRUQwRjc1IC8qIFdyaXRhYmxl
U3RyZWFtQnVpbHRpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V3JpdGFibGVTdHJlYW1CdWlsdGlucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTk5MDhCMEZBMUJDQUQwN0QwMEVEM0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVy
QnVpbHRpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFi
bGVCeXRlU3RyZWFtQ29udHJvbGxlckJ1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJOTkwOEIwRkIxQkNBRDA3RDAwRUQzRjY0IC8qIFJlYWRhYmxlQnl0ZVN0cmVhbUNv
bnRyb2xsZXJCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFk
YWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQnVpbHRpbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTkwOEIwRkExQkNBRDA3RDAwRUQwRjY1IC8qIFJlYWRhYmxlU3RyZWFtRGVmYXVs
dENvbnRyb2xsZXJCdWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQnVpbHRpbnMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGQjFCQ0FEMDdEMDBFRDBGNjUgLyogUmVhZGFi
bGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckJ1aWx0aW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJCdWlsdGlucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGRDFCQ0FEMDdEMDBFRDBGNDUgLyog
RmV0Y2hJbnRlcm5hbHNCdWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGZXRjaEludGVybmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTkwOEIwRkQxQkNBRDA3RDAwRUQwRjU1IC8qIFN0cmVhbUludGVybmFsc0J1aWx0
aW5zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTkwOEIwRkQx
QkNBRDA3RDAwRUQzRjY0IC8qIFJlYWRhYmxlQnl0ZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlYWRhYmxlQnl0ZVN0cmVh
bUludGVybmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkw
OEIwRkQxQkNBRDA3RDAwRUQwRjY1IC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFibGVTdHJlYW1J
bnRlcm5hbHNCdWlsdGlucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5MDhC
MEZEMUJDQUQwN0QwMEVEMEY3NSAvKiBXcml0YWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdyaXRhYmxlU3RyZWFtSW50
ZXJuYWxzQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OTA4QjBG
RDFCQ0FEMDdEMDBFRDNGNjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFibGVCeXRlU3Ry
ZWFtSW50ZXJuYWxzQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
OTA4QjBGRTFCQ0FEMDdEMDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyQnVp
bHRpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFibGVT
dHJlYW1EZWZhdWx0UmVhZGVyQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5OTA4QjBGRjFCQ0FEMDdEMDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVh
ZGVyQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVhZGFibGVT
dHJlYW1EZWZhdWx0UmVhZGVyQnVpbHRpbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTkyMDM5ODAxOEI5NUJDNjAwQjM5QUY5IC8qIFVzZXJJbnB1dEJyaWRnZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVc2VySW5wdXRCcmlkZ2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEyMzAsMTAgKzExMjMwLDEwIEBACiAJCTlBNTI4
RTgyMTdEN0Y1MkYwMEFBOTUxOCAvKiBGbG9hdGluZ09iamVjdHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRmxvYXRpbmdPYmplY3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTlBQjFGMzdFMThFMjQ4OUEwMDUzNDc0MyAvKiBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUFCMUYzN0YxOEUy
NDg5QTAwNTM0NzQzIC8qIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAv
KiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0QjkgLyog
RmV0Y2hJbnRlcm5hbHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGZXRjaEludGVybmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTlCMDNEODA2MUJCMzExMEQwMEI3NjRDOSAvKiBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDgg
LyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5h
bHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZUJ5
dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZVN0cmVhbUlu
dGVybmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMDNEODA2
MUJCMzExMEQwMEI3NjRFOCAvKiBXcml0YWJsZVN0cmVhbUJ1aWx0aW5zLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyaXRhYmxlU3RyZWFtQnVpbHRpbnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEU5IC8qIFdyaXRhYmxl
U3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTcyNTcsNiArMTcyNTcsNyBAQAogCQkJCTJEREI5N0YzMTlGOUFFQ0EwMDIw
MjVEOCAvKiBOU0V4dGVuc2lvblNQSS5oICovLAogCQkJCUNFMTI1MjNBMUExNjcxMTAwMDg2NDQ4
MCAvKiBOU0ZpbGVNYW5hZ2VyU1BJLmggKi8sCiAJCQkJQ0UxMjUyNTIxQTFCRUMwNjAwODY0NDgw
IC8qIE5TU3RyaW5nU1BJLmggKi8sCisJCQkJOTMzNUI0OUIxRENCRUY3MTAwRUQ0NjhFIC8qIE5T
VG91Y2hCYXJTUEkuaCAqLywKIAkJCQkzMUIzMTNEQTFCNjk4NzE2MDBGMkFBQkMgLyogTlNVUkxD
b25uZWN0aW9uU1BJLmggKi8sCiAJCQkJQ0UxMjUyNTQxQTFCRUMwRTAwODY0NDgwIC8qIE5TVVJM
RG93bmxvYWRTUEkuaCAqLywKIAkJCQk2NTNFRjgzODE5QTA0M0FFMDA1MjIwMkMgLyogTlNVUkxG
aWxlVHlwZU1hcHBpbmdzU1BJLmggKi8sCkBAIC0xNzMzMyw4ICsxNzMzNCw2IEBACiAJCQkJNDRB
MjhBQUUxMkRGQjhCRjAwQUU5MjNCIC8qIE1hdGhNTE5hbWVzLmggKi8sCiAJCQkJNzFFMjE4Mzgx
NzM1OUZCODAwNkU2RTREIC8qIFBsdWdJbnNSZXNvdXJjZXMuaCAqLywKIAkJCQk3MUUyMTgzOTE3
MzU5RkI4MDA2RTZFNEQgLyogUGx1Z0luc1Jlc291cmNlc0RhdGEuY3BwICovLAotCQkJCTk5MDhC
MEZBMUJDQUQwN0QwMDc2M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQnVpbHRp
bnMuY3BwICovLAotCQkJCTk5MDhCMEZCMUJDQUQwN0QwMDc2M0Y2NCAvKiBSZWFkYWJsZUJ5dGVT
dHJlYW1Db250cm9sbGVyQnVpbHRpbnMuaCAqLywKIAkJCQk5OTA4QjBGRDFCQ0FEMDdEMDBFRDNG
NjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuY3BwICovLAogCQkJCTlC
MDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oICovLAogCQkJCTk5MDhCMEY5MUJDQUQwN0QwMEVEMEY2NSAvKiBSZWFkYWJsZVN0cmVh
bUJ1aWx0aW5zLmNwcCAqLywKQEAgLTI1MDc3LDcgKzI1MDc2LDYgQEAKIAkJCQlCQzFCREYyNTE1
NkMxOEM3MDAxQzEyNDMgLyogRE9NRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTJFRDYwOUJE
MTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgx
ODVGM0IwOTc2NTc2NjAwNTgyNkQ5IC8qIERPTUltcGxlbWVudGF0aW9uLmggaW4gSGVhZGVycyAq
LywKLQkJCQlFMzVDQTE0RTFEQkMzQTQyMDBGODM1MTYgLyogRE9NSklUQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMxNTBFQTcxREE3MjE5MzAwMTk0MDEyIC8q
IERPTUpJVEhlbHBlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE5QzZFNEU0MEQ3NDVFMDUwMDY0
NDJFOSAvKiBET01NaW1lVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTlDNkU0RTgwRDc0NUUx
ODAwNjQ0MkU5IC8qIERPTU1pbWVUeXBlQXJyYXkuaCBpbiBIZWFkZXJzICovLApAQCAtMjY3OTEs
OSArMjY3ODksOSBAQAogCQkJCUY1NUIzRENFMTI1MUYxMkQwMDNFRjI2OSAvKiBSYW5nZUlucHV0
VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU4NEU5RTExNzY2OEJGMTAwODE1QjY4IC8qIFJh
c3RlclNoYXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODREODI3QzExRDMzM0VEMDA5NzI5OTAg
LyogUmF3RGF0YURvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQk0MTZFNkZFODFC
QkQxMkRGMDAwQTNGNjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCBp
biBIZWFkZXJzICovLAorCQkJCTQxNkU2RkU4MUJCRDEyREYwMDBBM0Y2NCAvKiBSZWFkYWJsZVN0
cmVhbUludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTZFNkZFOTFCQkQx
MkU1MDAwQTYwNDMgLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJNDE2RTZGRTgxQkJEMTJERjAwMEE2MDQzIC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVp
bHRpbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjA0MyAvKiBS
ZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkQzMTYwM0MxMkIwMjY3NjAwQzFBMzU5IC8qIFJlYWx0aW1lQW5hbHlzZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTRBNEY2NTcxMUFBOTk3RjEwMEUzOENERCAvKiBSZWFsdGltZU1lZGlhU291cmNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0QTRGNjU3MjFBQTk5N0YxMDBFMzhDREQgLyogUmVhbHRp
bWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzg3NSw2ICsy
Nzg3Myw3IEBACiAJCQkJMUNBRjM0ODEwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVj
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUNBRjM0ODMwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNj
cmlwdE9iamVjdFByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNTY5RDFCMEQ3RTJCODIw
MDdDMzk4MyAvKiBXZWJTY3JpcHRPYmplY3RQcm90b2NvbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
OTMzNUI0OUQxRENCRUY3QzAwRUQ0NjhFIC8qIE5TVG91Y2hCYXJTUEkuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk3QUFCRDFCMTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk3QUFCRDFFMTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXRDaGFubmVsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5N0FBQkQxRjE0RkEwOUQ1MDA3NDU3QUUgLyogV2ViU29ja2V0
Q2hhbm5lbENsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODgzNCw3ICsyODgzMyw2IEBACiAJ
CQkJQkMxQkRGMjQxNTZDMTg4MzAwMUMxMjQzIC8qIERPTUVycm9yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTJFRDYwOUJDMTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBODE4NUYzRTA5NzY1NzY2MDA1ODI2RDkgLyogRE9NSW1wbGVtZW50YXRp
b24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRTM1Q0ExNEQxREJDM0EzRjAwRjgzNTE2IC8qIERP
TUpJVEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTlDNkU0
RTMwRDc0NUUwNTAwNjQ0MkU5IC8qIERPTU1pbWVUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE5QzZFNEU3MEQ3NDVFMTgwMDY0NDJFOSAvKiBET01NaW1lVHlwZUFycmF5LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTUyQjZDOUMyMTVFM0Y0REYwMDY5MEIwNSAvKiBET01OYW1lZEZsb3dDb2xs
ZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
c3BpL2NvY29hL0FWS2l0U1BJLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vc3BpL2NvY29hL0FWS2l0U1BJLmgJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3NwaS9jb2NvYS9BVktpdFNQSS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2
ICs2MSw4IEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIEFWUGxheWVyQ29udHIKIEBwcm9w
ZXJ0eSAoTlNfTk9OQVRPTUlDX0lPU09OTFksIHJlYWRvbmx5KSBBVlBsYXllckNvbnRyb2xsZXJT
dGF0dXMgc3RhdHVzOwogQGVuZAogCitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCiBAY2xhc3Mg
QVZQbGF5ZXJMYXllcjsKIAogQGludGVyZmFjZSBBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXll
clZpZXcgOiBVSVZpZXcKQEAgLTc0LDYgKzc2LDggQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdl
ciwgQVZQbGF5ZXJDb250cgogLSAodm9pZClzdG9wUm91dGluZ1ZpZGVvVG9QaWN0dXJlSW5QaWN0
dXJlUGxheWVyTGF5ZXJWaWV3OwogQGVuZAogCitOU19BU1NVTUVfTk9OTlVMTF9FTkQKKwogQHBy
b3RvY29sIEFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZV9XZWJLaXRPbmx5IDxBVlBsYXll
clZpZXdDb250cm9sbGVyRGVsZWdhdGU+CiBAb3B0aW9uYWwKIHR5cGVkZWYgTlNfRU5VTShOU0lu
dGVnZXIsIEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvbikgewpAQCAt
MTAwLDYgKzEwNCw3IEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIEFWUGxheWVyVmlld0MK
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBwaWN0dXJlSW5QaWN0dXJlV2Fz
U3RhcnRlZFdoZW5FbnRlcmluZ0JhY2tncm91bmQ7CiBAZW5kCiAKKwogI2VuZGlmIC8vIFVTRShB
UFBMRV9JTlRFUk5BTF9TREspCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogCkBAIC0xMzIsNiAr
MTM3LDggQEAgTlNfQ0xBU1NfQVZBSUxBQkxFX01BQygxMF8xMSkKIAogI2VuZGlmIC8vIEVOQUJM
RShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICYmICFQTEFURk9STShJT1MpCiAKK05TX0FTU1VN
RV9OT05OVUxMX0JFR0lOCisKIEBpbnRlcmZhY2UgQVZWYWx1ZVRpbWluZyA6IE5TT2JqZWN0IDxO
U0NvZGluZywgTlNDb3B5aW5nLCBOU011dGFibGVDb3B5aW5nPiAKIEBlbmQKIApAQCAtMTM5LDMg
KzE0NiwzMiBAQCBOU19DTEFTU19BVkFJTEFCTEVfTUFDKDEwXzExKQogKyAoQVZWYWx1ZVRpbWlu
ZyAqKXZhbHVlVGltaW5nV2l0aEFuY2hvclZhbHVlOihkb3VibGUpYW5jaG9yVmFsdWUgYW5jaG9y
VGltZVN0YW1wOihOU1RpbWVJbnRlcnZhbCl0aW1lU3RhbXAgcmF0ZTooZG91YmxlKXJhdGU7CiBA
cHJvcGVydHkgKE5TX05PTkFUT01JQ19JT1NPTkxZLCByZWFkb25seSkgZG91YmxlIGN1cnJlbnRW
YWx1ZTsKIEBlbmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECisKKyNpZiBQTEFURk9STShNQUMp
CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorI2ltcG9ydCA8QVZL
aXQvQVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNQcm92aWRlci5oPgorI2ltcG9ydCA8QVZL
aXQvQVZGdW5jdGlvbkJhclNjcnViYmVyLmg+CisjZWxzZQorCitOU19BU1NVTUVfTk9OTlVMTF9C
RUdJTgorCitAcHJvdG9jb2wgQVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNDb250cm9sbGlu
ZyA8TlNPYmplY3Q+CitAcHJvcGVydHkgKHJlYWRvbmx5KSBOU1RpbWVJbnRlcnZhbCBjb250ZW50
RHVyYXRpb247CitAcHJvcGVydHkgKHJlYWRvbmx5LCBudWxsYWJsZSkgQVZWYWx1ZVRpbWluZyAq
dGltaW5nOworQHByb3BlcnR5IChyZWFkb25seSwgZ2V0dGVyPWlzU2Vla2luZykgQk9PTCBzZWVr
aW5nOworQHByb3BlcnR5IChyZWFkb25seSkgTlNUaW1lSW50ZXJ2YWwgc2Vla1RvVGltZTsKKy0g
KHZvaWQpc2Vla1RvVGltZTooTlNUaW1lSW50ZXJ2YWwpdGltZSB0b2xlcmFuY2VCZWZvcmU6KE5T
VGltZUludGVydmFsKXRvbGVyYW5jZUJlZm9yZSB0b2xlcmFuY2VBZnRlcjooTlNUaW1lSW50ZXJ2
YWwpdG9sZXJhbmNlQWZ0ZXI7CitAcHJvcGVydHkgKHJlYWRvbmx5KSBCT09MIGhhc0VuYWJsZWRB
dWRpbzsKK0Bwcm9wZXJ0eSAocmVhZG9ubHkpIEJPT0wgaGFzRW5hYmxlZFZpZGVvOworQGVuZAor
CitAaW50ZXJmYWNlIEFWRnVuY3Rpb25CYXJTY3J1YmJlciA6IE5TVmlldworQHByb3BlcnR5IChh
c3NpZ24sIG51bGxhYmxlKSBpZDxBVkZ1bmN0aW9uQmFyUGxheWJhY2tDb250cm9sc0NvbnRyb2xs
aW5nPiBwbGF5YmFja0NvbnRyb2xzQ29udHJvbGxlcjsKK0BlbmQKKworTlNfQVNTVU1FX05PTk5V
TExfRU5ECisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIp
CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
c3BpL2NvY29hL05TVG91Y2hCYXJTUEkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9zcGkvY29jb2EvTlNUb3VjaEJhclNQSS5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9jb2NvYS9OU1RvdWNoQmFyU1BJLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBQTEFURk9STShNQUMpCisjaWYg
VVNFKEFQUExFX0lOVEVSTkFMX1NESykgJiYgSEFWRShUT1VDSF9CQVIpCisKKyNpbXBvcnQgPEFw
cEtpdC9OU0Z1bmN0aW9uQmFyX1ByaXZhdGUuaD4KKyNpbXBvcnQgPEFwcEtpdC9OU1RleHRUb3Vj
aEJhckl0ZW1Db250cm9sbGVyX1dlYktpdFNQSS5oPgorI2ltcG9ydCA8QXBwS2l0L05TVG91Y2hC
YXJfUHJpdmF0ZS5oPgorCisjZWxzZQorCitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCitAaW50
ZXJmYWNlIE5TVG91Y2hCYXJJdGVtIDogTlNPYmplY3QKK0BlbmQKKworQGludGVyZmFjZSBOU0Nv
bG9yUGlja2VyVG91Y2hCYXJJdGVtIDogTlNUb3VjaEJhckl0ZW0KK0BlbmQKKworQGludGVyZmFj
ZSBOU1RvdWNoQmFyIDogTlNPYmplY3QKK0Bwcm9wZXJ0eSAocmVhZG9ubHksIGNvcHksIG51bGxh
YmxlKSBOU0FycmF5PE5TVG91Y2hCYXJJdGVtICo+ICppdGVtczsKK0Bwcm9wZXJ0eSAoc3Ryb25n
LCBudWxsYWJsZSkgTlNUb3VjaEJhckl0ZW0gKmVzY2FwZUtleVJlcGxhY2VtZW50SXRlbTsKK0Bl
bmQKKworQGludGVyZmFjZSBOU1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIDogTlNPYmplY3QK
KworQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nLCBudWxsYWJsZSkgTlNDb2xvclBpY2tlclRv
dWNoQmFySXRlbSAqY29sb3JQaWNrZXJJdGVtOworQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25n
LCBudWxsYWJsZSkgTlNTZWdtZW50ZWRDb250cm9sICp0ZXh0U3R5bGU7CitAcHJvcGVydHkgKHJl
YWRvbmx5LCBzdHJvbmcsIG51bGxhYmxlKSBOU1NlZ21lbnRlZENvbnRyb2wgKnRleHRBbGlnbm1l
bnRzOworQHByb3BlcnR5IChudWxsYWJsZSwgc3Ryb25nKSBOU1ZpZXdDb250cm9sbGVyICp0ZXh0
TGlzdFZpZXdDb250cm9sbGVyOworQHByb3BlcnR5IEJPT0wgdXNlc05hcnJvd1RleHRTdHlsZUl0
ZW07CisKKy0gKG51bGxhYmxlIE5TVG91Y2hCYXJJdGVtICopaXRlbUZvcklkZW50aWZpZXI6KG51
bGxhYmxlIE5TU3RyaW5nICopaWRlbnRpZmllcjsKKworQGVuZAorCisjZGVmaW5lIE5TVG91Y2hC
YXJXaWxsRW50ZXJDdXN0b21pemF0aW9uIEAiTlNUb3VjaEJhcldpbGxFbnRlckN1c3RvbWl6YXRp
b24iCisjZGVmaW5lIE5TVG91Y2hCYXJEaWRFeGl0Q3VzdG9taXphdGlvbiBAIk5TVG91Y2hCYXJE
aWRFeGl0Q3VzdG9taXphdGlvbiIKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECisKKyNlbmRpZiAv
LyBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKSAmJiBIQVZFKFRPVUNIX0JBUikKKyNlbmRpZiAvLyBQ
TEFURk9STShNQUMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvbWFjL05TU3Bl
bGxDaGVja2VyU1BJLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3Bp
L21hYy9OU1NwZWxsQ2hlY2tlclNQSS5oCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxDaGVja2VyU1BJLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDYgKzMwLDcgQEAKIC8vIEZJWE1FOiBUaGlzIGhlYWRlciBzaG91bGQgaW5jbHVkZSBz
eXN0ZW0gaGVhZGVycyB3aGVuIHBvc3NpYmxlLgogCiBleHRlcm4gTlNTdHJpbmcgKk5TVGV4dENo
ZWNraW5nSW5zZXJ0aW9uUG9pbnRLZXk7CitleHRlcm4gTlNOb3RpZmljYXRpb25OYW1lIGNvbnN0
IE5TU3BlbGxDaGVja2VyRGlkQ2hhbmdlQXV0b21hdGljVGV4dENvbXBsZXRpb25Ob3RpZmljYXRp
b247CiAKIEBpbnRlcmZhY2UgTlNTcGVsbENoZWNrZXIgKCkKIC0gKE5TSW50ZWdlcilyZXF1ZXN0
Q2FuZGlkYXRlc0ZvclNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2Upc2VsZWN0ZWRSYW5nZSBpblN0cmlu
ZzooTlNTdHJpbmcgKilzdHJpbmdUb0NoZWNrIHR5cGVzOihOU1RleHRDaGVja2luZ1R5cGVzKWNo
ZWNraW5nVHlwZXMgb3B0aW9uczooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKW9wdGlv
bnMgaW5TcGVsbERvY3VtZW50V2l0aFRhZzooTlNJbnRlZ2VyKXRhZyBjb21wbGV0aW9uSGFuZGxl
cjoodm9pZCAoXikoTlNJbnRlZ2VyIHNlcXVlbmNlTnVtYmVyLCBOU0FycmF5PE5TVGV4dENoZWNr
aW5nUmVzdWx0ICo+ICpjYW5kaWRhdGVzKSljb21wbGV0aW9uSGFuZGxlcjsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDkwIEBACisyMDE2LTExLTA0ICBCZXRoIERha2luICA8YmRha2lu
QGFwcGxlLmNvbT4KKworICAgICAgICBTdXBwb3J0IFRvdWNoQmFyIGluIFdlYktpdAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NDM3CisgICAgICAg
IC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjg4NzY1MjQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tWaWV3UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3Lm1tOgorICAgICAgICAoLVtXS1dlYlZpZXcgbWFrZVRvdWNoQmFyXSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyBjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtXSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfd2ViX2RpZEFkZE1lZGlhQ29udHJvbHNNYW5hZ2VyOl0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3dlYl9kaWRSZW1vdmVNZWRpYUNvbnRyb2xzTWFuYWdlcl0pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX2ludGVyYWN0V2l0aE1lZGlhQ29udHJvbHNGb3JUZXN0aW5nXSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3
Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXddKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9hZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Ol0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3JlbW92ZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXddKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAgICgtW1dLVmlldyBtYWtl
VG91Y2hCYXJdKToKKyAgICAgICAgKC1bV0tWaWV3IGNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW1d
KToKKyAgICAgICAgKC1bV0tWaWV3IF93ZWJfZGlkQWRkTWVkaWFDb250cm9sc01hbmFnZXI6XSk6
CisgICAgICAgICgtW1dLVmlldyBfd2ViX2RpZFJlbW92ZU1lZGlhQ29udHJvbHNNYW5hZ2VyXSk6
CisgICAgICAgICgtW1dLVmlldyBfd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3XSk6Cisg
ICAgICAgICgtW1dLVmlldyBfc2V0V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Ol0pOgor
ICAgICAgICAoLVtXS1ZpZXcgX21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXddKToKKyAgICAgICAg
KC1bV0tWaWV3IF9hZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Ol0pOgorICAgICAgICAoLVtX
S1ZpZXcgX3JlbW92ZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXddKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OmN1cnJlbnRUb3VjaEJhcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjbGllbnRX
YW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6c2V0Q2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OnNldElzQ3VzdG9taXppbmdUb3VjaEJhcik6CisgICAgICAg
ICogVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tOgorICAgICAgICAoLVtXS1RleHRMaXN0
VG91Y2hCYXJWaWV3Q29udHJvbGxlciBpbml0V2l0aFdlYlZpZXdJbXBsOl0pOgorICAgICAgICAo
LVtXS1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciBkaWREZXN0cm95Vmlld10pOgorICAg
ICAgICAoLVtXS1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciBfc2VsZWN0TGlzdDpdKToK
KyAgICAgICAgKC1bV0tUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgc2V0Q3VycmVudExp
c3RUeXBlOl0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIGluaXRX
aXRoV2ViVmlld0ltcGw6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xs
ZXIgZGlkRGVzdHJveVZpZXddKToKKyAgICAgICAgKC1bV0tUZXh0VG91Y2hCYXJJdGVtQ29udHJv
bGxlciB0b3VjaEJhcjptYWtlSXRlbUZvcklkZW50aWZpZXI6XSk6CisgICAgICAgICgtW1dLVGV4
dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgaXRlbUZvcklkZW50aWZpZXI6XSk6CisgICAgICAgICgt
W1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTpl
bmRTZWxlY3RpbmdDYW5kaWRhdGVBdEluZGV4Ol0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJh
ckl0ZW1Db250cm9sbGVyIGNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW06Y2hhbmdlZENhbmRpZGF0
ZUxpc3RWaXNpYmlsaXR5Ol0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9s
bGVyIHRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlcl0pOgorICAgICAgICAoLVtXS1RleHRU
b3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFRleHRJc0JvbGQ6XSk6CisgICAgICAgICgtW1dLVGV4
dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzSXRhbGljOl0pOgorICAgICAgICAoLVtX
S1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFRleHRJc1VuZGVybGluZWQ6XSk6CisgICAg
ICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgX3drQ2hhbmdlVGV4dFN0eWxlOl0p
OgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldEN1cnJlbnRUZXh0
QWxpZ25tZW50Ol0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIF93
a0NoYW5nZVRleHRBbGlnbm1lbnQ6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNv
bnRyb2xsZXIgdGV4dENvbG9yXSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRy
b2xsZXIgc2V0VGV4dENvbG9yOl0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250
cm9sbGVyIF93a0NoYW5nZUNvbG9yOl0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1D
b250cm9sbGVyIHRleHRMaXN0Vmlld0NvbnRyb2xsZXJdKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6Om1ha2VUb3VjaEJhcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpj
YW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
Om1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1w
bDo6dXNlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjpkaXNtaXNzVGV4dFRvdWNoQmFyUG9wb3Zlckl0ZW1XaXRoSWRlbnRpZmllcik6Cisg
ICAgICAgIChXZWJLaXQ6OnRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25BbGxvd2VkSWRlbnRpZmll
cnMpOgorICAgICAgICAoV2ViS2l0OjpwbGFpblRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25EZWZh
dWx0SXRlbUlkZW50aWZpZXJzKToKKyAgICAgICAgKFdlYktpdDo6cmljaFRleHRUb3VjaEJhckN1
c3RvbWl6YXRpb25EZWZhdWx0SXRlbUlkZW50aWZpZXJzKToKKyAgICAgICAgKFdlYktpdDo6dG91
Y2hCYXJEaWRFeGl0Q3VzdG9taXphdGlvbik6CisgICAgICAgIChXZWJLaXQ6OnRvdWNoQmFyV2ls
bEVudGVyQ3VzdG9taXphdGlvbik6CisgICAgICAgIChXZWJLaXQ6OmRpZENoYW5nZUF1dG9tYXRp
Y1RleHRDb21wbGV0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0ZVRv
dWNoQmFyQW5kUmVmcmVzaFRleHRCYXJJZGVudGlmaWVycyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjpzZXRVcFRleHRUb3VjaEJhcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJ
bXBsOjppc1JpY2hseUVkaXRhYmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnRl
eHRUb3VjaEJhcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVUZXh0VG91
Y2hCYXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dXBkYXRlTWVkaWFUb3VjaEJh
cik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpmb3JjZVJlcXVlc3RDYW5kaWRhdGVz
Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVUb3VjaEJh
cik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzaG91bGRSZXF1ZXN0Q2FuZGlkYXRl
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzaG93Q2FuZGlkYXRlcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp3ZWJWaWV3SW1wbEFkZGl0aW9uc1dpbGxEZXN0cm95
Vmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRFZGl0YWJsZUVsZW1lbnRJ
c0ZvY3VzZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YmVjb21lRmlyc3RSZXNw
b25kZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2VsZWN0aW9uRGlkQ2hhbmdl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnZpZGVvQ29udHJvbHNNYW5hZ2VyRGlk
Q2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0ZVdlYlZpZXdJbXBs
QWRkaXRpb25zKTogRGVsZXRlZC4KKwogMjAxNi0xMS0wNCAgQWxleCBDaHJpc3RlbnNlbiAgPGFj
aHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0
IHIyMDgyOTMuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVmll
d1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLVmlld1ByaXZhdGUuaAkocmV2aXNpb24gMjA4NDA1KQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ZpZXdQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDYgKzMxLDggQEAKICNpbXBvcnQgPFdlYktpdC9XS1ZpZXcuaD4KICNpbXBvcnQgPFdlYktpdC9f
V0tPdmVybGF5U2Nyb2xsYmFyU3R5bGUuaD4KIAorQGNsYXNzIEFWRnVuY3Rpb25CYXJTY3J1YmJl
cjsKKwogQGludGVyZmFjZSBXS1ZpZXcgKFByaXZhdGUpCiAKIC8qIEMgU1BJIHN1cHBvcnQuICov
CkBAIC0xMzIsNiArMTM0LDExIEBACiAKIC0gKHZvaWQpX2dlc3R1cmVFdmVudFdhc05vdEhhbmRs
ZWRCeVdlYkNvcmU6KE5TRXZlbnQgKilldmVudDsKIAorQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWR3cml0ZSwgc2V0dGVyPV9zZXRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6KSBCT09M
IF93YW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc7CitAcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZG9ubHkpIEFWRnVuY3Rpb25CYXJTY3J1YmJlciAqX21lZGlhUGxheWJhY2tDb250cm9sc1Zp
ZXc7CistICh2b2lkKV9hZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OihBVkZ1bmN0aW9uQmFy
U2NydWJiZXIgKiltZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OworLSAodm9pZClfcmVtb3ZlTWVk
aWFQbGF5YmFja0NvbnRyb2xzVmlldzsKKwogQGVuZAogCiAjZW5kaWYgLy8gIVRBUkdFVF9PU19J
UEhPTkUKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJWaWV3Lm1tCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTc0LDcgKzE3NCwxMiBA
QCBzdGF0aWMgY29uc3QgdWludDMyX3QgZmlyc3RTREtWZXJzaW9uV2l0CiAKIEBpbnRlcmZhY2Ug
V0tXZWJWaWV3ICgpIDxXZWJWaWV3SW1wbERlbGVnYXRlLCBOU1RleHRJbnB1dENsaWVudD4KIEBl
bmQKLSNlbmRpZgorCisjaWYgSEFWRShUT1VDSF9CQVIpCitAaW50ZXJmYWNlIFdLV2ViVmlldyAo
KSA8TlNUb3VjaEJhclByb3ZpZGVyPgorQGVuZAorI2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFSKQor
I2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogc3RhdGljIEhhc2hNYXA8V2ViS2l0OjpXZWJQYWdl
UHJveHkqLCBXS1dlYlZpZXcgKj4mIHBhZ2VUb1ZpZXdNYXAoKQogewpAQCAtMzE1NSw2ICszMTYw
LDM4IEBAIC0gKHZvaWQpX3dlYl9nZXN0dXJlRXZlbnRXYXNOb3RIYW5kbGVkQnkKIAogI2VuZGlm
IC8vIFBMQVRGT1JNKE1BQykKIAorI2lmIEhBVkUoVE9VQ0hfQkFSKQorCitAZHluYW1pYyB0b3Vj
aEJhcjsKKworLSAoTlNUb3VjaEJhciAqKW1ha2VUb3VjaEJhcgoreworICAgIHJldHVybiBfaW1w
bC0+bWFrZVRvdWNoQmFyKCk7Cit9CisKKy0gKE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSAq
KWNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0KK3sKKyAgICByZXR1cm4gX2ltcGwtPmNhbmRpZGF0
ZUxpc3RUb3VjaEJhckl0ZW0oKTsKK30KKworLSAodm9pZClfd2ViX2RpZEFkZE1lZGlhQ29udHJv
bHNNYW5hZ2VyOihpZCljb250cm9sc01hbmFnZXIKK3sKKyAgICBbc2VsZiBfYWRkTWVkaWFQbGF5
YmFja0NvbnRyb2xzVmlldzpjb250cm9sc01hbmFnZXJdOworfQorCistICh2b2lkKV93ZWJfZGlk
UmVtb3ZlTWVkaWFDb250cm9sc01hbmFnZXIKK3sKKyAgICBbc2VsZiBfcmVtb3ZlTWVkaWFQbGF5
YmFja0NvbnRyb2xzVmlld107Cit9CisKKy0gKHZvaWQpX2ludGVyYWN0V2l0aE1lZGlhQ29udHJv
bHNGb3JUZXN0aW5nCit7CisgICAgW3NlbGYgX3NldFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xz
VmlldzpZRVNdOworICAgIFtzZWxmIG1ha2VUb3VjaEJhcl07Cit9CisKKyNlbmRpZiAvLyBIQVZF
KFRPVUNIX0JBUikKKwogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV0tXZWJWaWV3IChXS1ByaXZh
dGUpCkBAIC00NTI5LDYgKzQ1NjYsNDEgQEAgLSAodm9pZClzZXRVc2VySW50ZXJmYWNlTGF5b3V0
RGlyZWN0aW9uOgogICAgIF9pbXBsLT5zZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKHVz
ZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24pOwogfQogCistIChCT09MKV93YW50c01lZGlhUGxh
eWJhY2tDb250cm9sc1ZpZXcKK3sKKyNpZiBIQVZFKFRPVUNIX0JBUikKKyAgICByZXR1cm4gX2lt
cGwtPmNsaWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpOworI2Vsc2UKKyAgICBy
ZXR1cm4gTk87CisjZW5kaWYKK30KKworLSAodm9pZClfc2V0V2FudHNNZWRpYVBsYXliYWNrQ29u
dHJvbHNWaWV3OihCT09MKXdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldworeworI2lmIEhB
VkUoVE9VQ0hfQkFSKQorICAgIF9pbXBsLT5zZXRDbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250
cm9sc1ZpZXcod2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KTsKKyNlbmRpZgorfQorCist
IChBVkZ1bmN0aW9uQmFyU2NydWJiZXIgKilfbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldworewor
I2lmIEhBVkUoVE9VQ0hfQkFSKQorICAgIGlmICghX2ltcGwtPmNsaWVudFdhbnRzTWVkaWFQbGF5
YmFja0NvbnRyb2xzVmlldygpKQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBfaW1w
bC0+bWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpOworI2Vsc2UKKyAgICByZXR1cm4gbmlsOwor
I2VuZGlmCit9CisKKy0gKHZvaWQpX2FkZE1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6KEFWRnVu
Y3Rpb25CYXJTY3J1YmJlciAqKW1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcKK3sKK30KKworLSAo
dm9pZClfcmVtb3ZlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldworeworfQorCiAjZW5kaWYKIAog
QGVuZApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQ
cml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYlZpZXdQcml2YXRlLmgJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Miw2ICs1Miw3IEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9XS0ltbWVkaWF0ZUEK
IAogI2VuZGlmCiAKK0BjbGFzcyBBVkZ1bmN0aW9uQmFyU2NydWJiZXI7CiBAY2xhc3MgV0tCcm93
c2luZ0NvbnRleHRIYW5kbGU7CiBAY2xhc3MgX1dLRnJhbWVIYW5kbGU7CiBAY2xhc3MgX1dLSGl0
VGVzdFJlc3VsdDsKQEAgLTIwMiw2ICsyMDMsMTIgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdl
ciwgX1dLSW1tZWRpYXRlQQogLSAoTlNQcmludE9wZXJhdGlvbiAqKV9wcmludE9wZXJhdGlvbldp
dGhQcmludEluZm86KE5TUHJpbnRJbmZvICopcHJpbnRJbmZvOwogLSAoTlNQcmludE9wZXJhdGlv
biAqKV9wcmludE9wZXJhdGlvbldpdGhQcmludEluZm86KE5TUHJpbnRJbmZvICopcHJpbnRJbmZv
IGZvckZyYW1lOihfV0tGcmFtZUhhbmRsZSAqKWZyYW1lSGFuZGxlIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3N4KDEwLjEyKSwgaW9zKDEwLjApKTsKIAorLy8gRklYTUU6IFRoaXMgU1BJIHNob3VsZCBi
ZWNvbWUgYSBwYXJ0IG9mIHRoZSBXS1VJRGVsZWdhdGUuIHJkYXI6Ly9wcm9ibGVtLzI2NTYxNTM3
CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZHdyaXRlLCBzZXR0ZXI9X3NldFdhbnRzTWVkaWFQ
bGF5YmFja0NvbnRyb2xzVmlldzopIEJPT0wgX3dhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmll
dyBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSk7CitAcHJvcGVydHkgKG5vbmF0
b21pYywgcmVhZG9ubHkpIEFWRnVuY3Rpb25CYXJTY3J1YmJlciAqX21lZGlhUGxheWJhY2tDb250
cm9sc1ZpZXcgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSkpOworLSAodm9pZClf
YWRkTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzooQVZGdW5jdGlvbkJhclNjcnViYmVyICopbWVk
aWFQbGF5YmFja0NvbnRyb2xzVmlldyBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJB
KSk7CistICh2b2lkKV9yZW1vdmVNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3IFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3N4KFdLX01BQ19UQkEpKTsKKwogI2VuZGlmCiAKIC0gKFdLTmF2aWdhdGlvbiAq
KV9yZWxvYWRXaXRob3V0Q29udGVudEJsb2NrZXJzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEw
LjEyKSwgaW9zKDEwLjApKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1dLVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21h
Yy9XS1ZpZXcubW0JKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvbWFjL1dLVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsMTEgQEAgQGlu
dGVyZmFjZSBXS1ZpZXdEYXRhIDogTlNPYmplY3QgewogQGludGVyZmFjZSBXS1ZpZXcgKCkgPFdl
YlZpZXdJbXBsRGVsZWdhdGU+CiBAZW5kCiAKKyNpZiBIQVZFKFRPVUNIX0JBUikKK0BpbnRlcmZh
Y2UgV0tWaWV3ICgpIDxOU1RvdWNoQmFyUHJvdmlkZXI+CitAZW5kCisjZW5kaWYKKwogQGltcGxl
bWVudGF0aW9uIFdLVmlldwogCiAjaWYgV0tfQVBJX0VOQUJMRUQKQEAgLTk3Nyw2ICs5ODIsMzIg
QEAgLSAodm9pZClfZGlkVXBkYXRlQ2FuZGlkYXRlTGlzdFZpc2liaWxpdAogewogfQogCisjaWYg
SEFWRShUT1VDSF9CQVIpCisKK0BkeW5hbWljIHRvdWNoQmFyOworCistIChOU1RvdWNoQmFyICop
bWFrZVRvdWNoQmFyCit7CisgICAgcmV0dXJuIF9kYXRhLT5faW1wbC0+bWFrZVRvdWNoQmFyKCk7
Cit9CisKKy0gKE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSAqKWNhbmRpZGF0ZUxpc3RUb3Vj
aEJhckl0ZW0KK3sKKyAgICByZXR1cm4gX2RhdGEtPl9pbXBsLT5jYW5kaWRhdGVMaXN0VG91Y2hC
YXJJdGVtKCk7Cit9CisKKy0gKHZvaWQpX3dlYl9kaWRBZGRNZWRpYUNvbnRyb2xzTWFuYWdlcjoo
aWQpY29udHJvbHNNYW5hZ2VyCit7CisgICAgW3NlbGYgX2FkZE1lZGlhUGxheWJhY2tDb250cm9s
c1ZpZXc6Y29udHJvbHNNYW5hZ2VyXTsKK30KKworLSAodm9pZClfd2ViX2RpZFJlbW92ZU1lZGlh
Q29udHJvbHNNYW5hZ2VyCit7CisgICAgW3NlbGYgX3JlbW92ZU1lZGlhUGxheWJhY2tDb250cm9s
c1ZpZXddOworfQorCisjZW5kaWYgLy8gSEFWRShUT1VDSF9CQVIpCisKIEBlbmQKIAogQGltcGxl
bWVudGF0aW9uIFdLVmlldyAoUHJpdmF0ZSkKQEAgLTE0NjcsMTAgKzE0OTgsNDEgQEAgLSAodm9p
ZClzZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOgogICAgIF9kYXRhLT5faW1wbC0+c2V0
VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbih1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9u
KTsKIH0KIAotQGVuZAorLSAoQk9PTClfd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Cit7
CisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgcmV0dXJuIF9kYXRhLT5faW1wbC0+Y2xpZW50V2Fu
dHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCk7CisjZWxzZQorICAgIHJldHVybiBOTzsKKyNl
bmRpZgorfQorCistICh2b2lkKV9zZXRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6KEJP
T0wpd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Cit7CisjaWYgSEFWRShUT1VDSF9CQVIp
CisgICAgX2RhdGEtPl9pbXBsLT5zZXRDbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1Zp
ZXcod2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KTsKKyNlbmRpZgorfQogCi0jaWYgUExB
VEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMCAm
JiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2ltcG9ydCA8V2ViS2l0QWRkaXRpb25zL1dLVmll
d0FkZGl0aW9ucy5tbT4KKy0gKEFWRnVuY3Rpb25CYXJTY3J1YmJlciAqKV9tZWRpYVBsYXliYWNr
Q29udHJvbHNWaWV3Cit7CisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgaWYgKCFfZGF0YS0+X2lt
cGwtPmNsaWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpKQorICAgICAgICByZXR1
cm4gbmlsOworICAgIHJldHVybiBfZGF0YS0+X2ltcGwtPm1lZGlhUGxheWJhY2tDb250cm9sc1Zp
ZXcoKTsKKyNlbHNlCisgICAgcmV0dXJuIG5pbDsKICNlbmRpZgorfQorCistICh2b2lkKV9hZGRN
ZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OihBVkZ1bmN0aW9uQmFyU2NydWJiZXIgKiltZWRpYVBs
YXliYWNrQ29udHJvbHNWaWV3Cit7Cit9CisKKy0gKHZvaWQpX3JlbW92ZU1lZGlhUGxheWJhY2tD
b250cm9sc1ZpZXcKK3sKK30KKworQGVuZAogCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLmgJKHJldmlz
aW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1w
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1MiwxNyBAQCBPQkpDX0NMQVNTIFdLV2ViVmll
dzsKIE9CSkNfQ0xBU1MgV0tXaW5kb3dWaXNpYmlsaXR5T2JzZXJ2ZXI7CiBPQkpDX0NMQVNTIF9X
S1RodW1ibmFpbFZpZXc7CiAKLSNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKSAmJiBfX01BQ19P
U19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMAotI2ltcG9ydCA8V2ViS2l0QWRkaXRp
b25zL1dlYlZpZXdJbXBsQWRkaXRpb25zRGVjbGFyYXRpb25zLmg+Ci0jZW5kaWYKKyNpZiBIQVZF
KFRPVUNIX0JBUikKK09CSkNfQ0xBU1MgQVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNQcm92
aWRlcjsKK09CSkNfQ0xBU1MgQVZGdW5jdGlvbkJhclNjcnViYmVyOworT0JKQ19DTEFTUyBOU0Nh
bmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW07CitPQkpDX0NMQVNTIE5TQ3VzdG9tVG91Y2hCYXJJdGVt
OworT0JKQ19DTEFTUyBOU1RvdWNoQmFyOworT0JKQ19DTEFTUyBOU1RvdWNoQmFySXRlbTsKK09C
SkNfQ0xBU1MgTlNQb3BvdmVyVG91Y2hCYXJJdGVtOworT0JKQ19DTEFTUyBXS1RleHRUb3VjaEJh
ckl0ZW1Db250cm9sbGVyOworT0JKQ19DTEFTUyBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcjsK
KyNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikKIAogQHByb3RvY29sIFdlYlZpZXdJbXBsRGVsZWdh
dGUKIApAQCAtNDgwLDcgKzQ4OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJpZ2h0TW91c2VEcmFn
Z2VkKE5TRXZlbnQgKik7CiAgICAgdm9pZCByaWdodE1vdXNlVXAoTlNFdmVudCAqKTsKIAotICAg
IHZvaWQgdXBkYXRlV2ViVmlld0ltcGxBZGRpdGlvbnMoKTsKKyAgICB2b2lkIHVwZGF0ZVRvdWNo
QmFyKCk7CiAgICAgdm9pZCBmb3JjZVJlcXVlc3RDYW5kaWRhdGVzRm9yVGVzdGluZygpOwogICAg
IGJvb2wgc2hvdWxkUmVxdWVzdENhbmRpZGF0ZXMoKSBjb25zdDsKICAgICB2b2lkIHNob3dDYW5k
aWRhdGVzKE5TQXJyYXkgKmNhbmRpZGF0ZXMsIE5TU3RyaW5nICosIE5TUmVjdCByZWN0T2ZUeXBl
ZFN0cmluZywgTlNSYW5nZSBzZWxlY3RlZFJhbmdlLCBOU1ZpZXcgKiwgdm9pZCAoXmNvbXBsZXRp
b25IYW5kbGVyKShOU1RleHRDaGVja2luZ1Jlc3VsdCAqYWNjZXB0ZWRDYW5kaWRhdGUpKTsKQEAg
LTQ5NiwxMiArNTA0LDU0IEBAIHB1YmxpYzoKIAogI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5f
UkVRVUlSRUQgPj0gMTAxMjAwIAogICAgIHZvaWQgaGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoTlNU
ZXh0Q2hlY2tpbmdSZXN1bHQgKmFjY2VwdGVkQ2FuZGlkYXRlKTsKLSNpZiBVU0UoQVBQTEVfSU5U
RVJOQUxfU0RLKQotI2ltcG9ydCA8V2ViS2l0QWRkaXRpb25zL1dlYlZpZXdJbXBsQWRkaXRpb25z
Lmg+Ci0jZW5kaWYKICNlbmRpZgogCisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgTlNUb3VjaEJh
ciAqbWFrZVRvdWNoQmFyKCk7CisgICAgTlNUb3VjaEJhciAqY3VycmVudFRvdWNoQmFyKCkgY29u
c3QgeyByZXR1cm4gbV9jdXJyZW50VG91Y2hCYXIuZ2V0KCk7IH0KKyAgICBOU0NhbmRpZGF0ZUxp
c3RUb3VjaEJhckl0ZW0gKmNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0oKSBjb25zdDsKKyAgICBB
VkZ1bmN0aW9uQmFyU2NydWJiZXIgKm1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSBjb25zdDsK
KyAgICBOU1RvdWNoQmFyICp0ZXh0VG91Y2hCYXIoKSBjb25zdDsKKyAgICB2b2lkIGRpc21pc3NU
ZXh0VG91Y2hCYXJQb3BvdmVySXRlbVdpdGhJZGVudGlmaWVyKE5TU3RyaW5nICopOworCisgICAg
Ym9vbCBjbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSBjb25zdCB7IHJldHVy
biBtX2NsaWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzsgfQorICAgIHZvaWQgc2V0
Q2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KGJvb2wgY2xpZW50V2FudHNNZWRp
YVBsYXliYWNrQ29udHJvbHNWaWV3KSB7IG1fY2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJv
bHNWaWV3ID0gY2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OyB9CisKKyAgICB2
b2lkIHVwZGF0ZVRvdWNoQmFyQW5kUmVmcmVzaFRleHRCYXJJZGVudGlmaWVycygpOworICAgIHZv
aWQgc2V0SXNDdXN0b21pemluZ1RvdWNoQmFyKGJvb2wgaXNDdXN0b21pemluZ1RvdWNoQmFyKSB7
IG1faXNDdXN0b21pemluZ1RvdWNoQmFyID0gaXNDdXN0b21pemluZ1RvdWNoQmFyOyB9OworI2Vu
ZGlmIC8vIEhBVkUoVE9VQ0hfQkFSKQorCiBwcml2YXRlOgorI2lmIEhBVkUoVE9VQ0hfQkFSKQor
ICAgIHZvaWQgc2V0VXBUZXh0VG91Y2hCYXIoTlNUb3VjaEJhciAqKTsKKyAgICB2b2lkIHVwZGF0
ZVRleHRUb3VjaEJhcigpOworICAgIHZvaWQgdXBkYXRlTWVkaWFUb3VjaEJhcigpOworCisgICAg
Ym9vbCB1c2VNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCkgY29uc3Q7CisgICAgYm9vbCBpc1Jp
Y2hseUVkaXRhYmxlKCkgY29uc3Q7CisKKyAgICBib29sIG1fY2xpZW50V2FudHNNZWRpYVBsYXli
YWNrQ29udHJvbHNWaWV3IHsgZmFsc2UgfTsKKyAgICBib29sIG1fY2FuQ3JlYXRlVG91Y2hCYXJz
IHsgZmFsc2UgfTsKKyAgICBib29sIG1fc3RhcnRlZExpc3RlbmluZ1RvQ3VzdG9taXphdGlvbkV2
ZW50cyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzVXBkYXRpbmdUZXh0VG91Y2hCYXIgeyBmYWxz
ZSB9OworICAgIGJvb2wgbV9pc0N1c3RvbWl6aW5nVG91Y2hCYXIgeyBmYWxzZSB9OworCisgICAg
UmV0YWluUHRyPE5TVG91Y2hCYXI+IG1fY3VycmVudFRvdWNoQmFyOworICAgIFJldGFpblB0cjxO
U1RvdWNoQmFyPiBtX3JpY2hUZXh0VG91Y2hCYXI7CisgICAgUmV0YWluUHRyPE5TVG91Y2hCYXI+
IG1fcGxhaW5UZXh0VG91Y2hCYXI7CisgICAgUmV0YWluUHRyPFdLVGV4dFRvdWNoQmFySXRlbUNv
bnRyb2xsZXI+IG1fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXI7CisgICAgUmV0YWluUHRyPE5T
Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbT4gbV9yaWNoVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJh
ckl0ZW07CisgICAgUmV0YWluUHRyPE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbT4gbV9wbGFp
blRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtOworICAgIFJldGFpblB0cjxOU0FycmF5PiBt
X2VtcHR5Q2FuZGlkYXRlc0FycmF5OworICAgIFJldGFpblB0cjxXZWJQbGF5YmFja0NvbnRyb2xz
TWFuYWdlcj4gbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlcjsKKyAgICBSZXRhaW5QdHI8TlNDdXN0
b21Ub3VjaEJhckl0ZW0+IG1fZXhpdEZ1bGxTY3JlZW5CdXR0b247CisKKyNpZiBFTkFCTEUoV0VC
X1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgUmV0YWluUHRyPEFWRnVuY3Rpb25CYXJQ
bGF5YmFja0NvbnRyb2xzUHJvdmlkZXI+IG1fbWVkaWFUb3VjaEJhclByb3ZpZGVyOworICAgIFJl
dGFpblB0cjxBVkZ1bmN0aW9uQmFyU2NydWJiZXI+IG1fbWVkaWFQbGF5YmFja0NvbnRyb2xzVmll
dzsKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisjZW5k
aWYgLy8gSEFWRShUT1VDSF9CQVIpCisKICAgICBXZWFrUHRyPFdlYlZpZXdJbXBsPiBjcmVhdGVX
ZWFrUHRyKCkgeyByZXR1cm4gbV93ZWFrUHRyRmFjdG9yeS5jcmVhdGVXZWFrUHRyKCk7IH0KIAog
ICAgIGJvb2wgc3VwcG9ydHNBcmJpdHJhcnlMYXlvdXRNb2RlcygpIGNvbnN0OwpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQkocmV2aXNpb24g
MjA4NDA1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC02MCwxMSArNjAsMTMgQEAKICNpbXBvcnQgIldlYkV2ZW50RmFj
dG9yeS5oIgogI2ltcG9ydCAiV2ViSW5zcGVjdG9yUHJveHkuaCIKICNpbXBvcnQgIldlYlBhZ2VQ
cm94eS5oIgorI2ltcG9ydCAiV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCiAjaW1w
b3J0ICJXZWJQcm9jZXNzUG9vbC5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW1w
b3J0ICJfV0tSZW1vdGVPYmplY3RSZWdpc3RyeUludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tUaHVt
Ym5haWxWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgPEhJVG9vbGJveC9DYXJib25FdmVudHNDb3Jl
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0FWS2l0U1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0FYT2Jq
ZWN0Q2FjaGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvQWN0aXZpdHlTdGF0ZS5oPgogI2ltcG9ydCA8
V2ViQ29yZS9Db2xvck1hYy5oPgpAQCAtODAsNiArODIsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9O
U0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L05TU3BlbGxDaGVja2VyU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05TVGV4dEZpbmRlclNQSS5o
PgorI2ltcG9ydCA8V2ViQ29yZS9OU1RvdWNoQmFyU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05T
V2luZG93U1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+CkBAIC05MCwxMyArOTMsMTkgQEAKICNp
bXBvcnQgPFdlYkNvcmUvV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcuaD4KICNpbXBv
cnQgPFdlYkNvcmUvV2ViQ29yZUZ1bGxTY3JlZW5XaW5kb3cuaD4KICNpbXBvcnQgPFdlYkNvcmUv
V2ViQ29yZU5TU3RyaW5nRXh0cmFzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1dlYlBsYXliYWNrQ29u
dHJvbHNNYW5hZ2VyLmg+CiAjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KICNpbXBv
cnQgPHN5cy9zdGF0Lmg+CiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbXBvcnQg
PHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KIAotI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0j
aW1wb3J0IDxXZWJLaXRBZGRpdGlvbnMvV2ViVmlld0ltcGxJbmNsdWRlcy5oPgotI2VuZGlmCisj
aWYgSEFWRShUT1VDSF9CQVIpICYmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdF
UikKK1NPRlRfTElOS19GUkFNRVdPUksoQVZLaXQpCitTT0ZUX0xJTktfQ0xBU1MoQVZLaXQsIEFW
RnVuY3Rpb25CYXJQbGF5YmFja0NvbnRyb2xzUHJvdmlkZXIpCitTT0ZUX0xJTktfQ0xBU1MoQVZL
aXQsIEFWRnVuY3Rpb25CYXJTY3J1YmJlcikKKworTlNTdHJpbmcgKiBjb25zdCBXS01lZGlhRXhp
dEZ1bGxTY3JlZW5JdGVtID0gQCJXS01lZGlhRXhpdEZ1bGxTY3JlZW5JdGVtIjsKKyNlbmRpZiAv
LyBIQVZFKFRPVUNIX0JBUikgJiYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VS
KQogCiBTT0ZUX0xJTktfQ09OU1RBTlRfTUFZX0ZBSUwoTG9va3VwLCBMVU5vdGlmaWNhdGlvblBv
cG92ZXJXaWxsQ2xvc2UsIE5TU3RyaW5nICopCiAKQEAgLTQzMywxMiArNDQyLDY5NiBAQCAtIChC
T09MKXRyeVRvUGVyZm9ybTooU0VMKWFjdGlvbiB3aXRoOihpCiAKIEBlbmQKIAotI2lmIF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwICYmIFVTRShBUFBMRV9JTlRFUk5B
TF9TREspCi0jaW1wb3J0IDxXZWJLaXRBZGRpdGlvbnMvV2ViVmlld0ltcGxBZGRpdGlvbnMubW0+
Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCisjaWYgSEFWRShUT1VDSF9CQVIpCisKK0BpbnRl
cmZhY2UgV0tUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgOiBOU1ZpZXdDb250cm9sbGVy
IHsKKyAgICBMaXN0VHlwZSBfY3VycmVudExpc3RUeXBlOworCitAcHJpdmF0ZQorICAgIFdlYlZp
ZXdJbXBsKiBfd2ViVmlld0ltcGw7Cit9CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBMaXN0VHlw
ZSBjdXJyZW50TGlzdFR5cGU7CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZpZXdJbXBs
OihXZWJWaWV3SW1wbCopd2ViVmlld0ltcGw7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdL
VGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyCisKK0BzeW50aGVzaXplIGN1cnJlbnRMaXN0
VHlwZT1fY3VycmVudExpc3RUeXBlOworCitzdGF0aWMgY29uc3QgZG91YmxlIGxpc3RDb250cm9s
U2VnbWVudFdpZHRoID0gNjc7CitzdGF0aWMgY29uc3QgZG91YmxlIGV4aXRGdWxsU2NyZWVuQnV0
dG9uV2lkdGggPSA2NDsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIG5vTGlzdFNlZ21lbnQgPSAw
Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHVub3JkZXJlZExpc3RTZWdtZW50ID0gMTsKK3N0YXRp
YyBjb25zdCB1bnNpZ25lZCBvcmRlcmVkTGlzdFNlZ21lbnQgPSAyOworCistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhXZWJWaWV3SW1wbDooV2ViVmlld0ltcGwqKXdlYlZpZXdJbXBsCit7CisgICAg
aWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBf
d2ViVmlld0ltcGwgPSB3ZWJWaWV3SW1wbDsKKworICAgIE5TU2VnbWVudGVkQ29udHJvbCAqaW5z
ZXJ0TGlzdENvbnRyb2wgPSBbTlNTZWdtZW50ZWRDb250cm9sIHNlZ21lbnRlZENvbnRyb2xXaXRo
TGFiZWxzOkBbIFdlYkNvcmU6Omluc2VydExpc3RUeXBlTm9uZSgpLCBXZWJDb3JlOjppbnNlcnRM
aXN0VHlwZUJ1bGxldGVkKCksIFdlYkNvcmU6Omluc2VydExpc3RUeXBlTnVtYmVyZWQoKSBdIHRy
YWNraW5nTW9kZTpOU1NlZ21lbnRTd2l0Y2hUcmFja2luZ1NlbGVjdE9uZSB0YXJnZXQ6c2VsZiBh
Y3Rpb246QHNlbGVjdG9yKF9zZWxlY3RMaXN0OildOworICAgIFtpbnNlcnRMaXN0Q29udHJvbCBz
ZXRXaWR0aDpsaXN0Q29udHJvbFNlZ21lbnRXaWR0aCBmb3JTZWdtZW50Om5vTGlzdFNlZ21lbnRd
OworICAgIFtpbnNlcnRMaXN0Q29udHJvbCBzZXRXaWR0aDpsaXN0Q29udHJvbFNlZ21lbnRXaWR0
aCBmb3JTZWdtZW50OnVub3JkZXJlZExpc3RTZWdtZW50XTsKKyAgICBbaW5zZXJ0TGlzdENvbnRy
b2wgc2V0V2lkdGg6bGlzdENvbnRyb2xTZWdtZW50V2lkdGggZm9yU2VnbWVudDpvcmRlcmVkTGlz
dFNlZ21lbnRdOworICAgIGluc2VydExpc3RDb250cm9sLmZvbnQgPSBbTlNGb250IHN5c3RlbUZv
bnRPZlNpemU6MTVdOworCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBj
bGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisgICAg
aWQgc2VnbWVudEVsZW1lbnQgPSBOU0FjY2Vzc2liaWxpdHlVbmlnbm9yZWREZXNjZW5kYW50KGlu
c2VydExpc3RDb250cm9sKTsKKyAgICBOU0FycmF5ICpzZWdtZW50cyA9IFtzZWdtZW50RWxlbWVu
dCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5BdHRy
aWJ1dGVdOworICAgIEFTU0VSVChzZWdtZW50cy5jb3VudCA9PSAzKTsKKyAgICBbW3NlZ21lbnRz
IG9iamVjdEF0SW5kZXg6bm9MaXN0U2VnbWVudF0gYWNjZXNzaWJpbGl0eVNldE92ZXJyaWRlVmFs
dWU6V2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVOb25lKCkgZm9yQXR0cmlidXRlOk5TQWNjZXNzaWJp
bGl0eURlc2NyaXB0aW9uQXR0cmlidXRlXTsKKyAgICBbW3NlZ21lbnRzIG9iamVjdEF0SW5kZXg6
dW5vcmRlcmVkTGlzdFNlZ21lbnRdIGFjY2Vzc2liaWxpdHlTZXRPdmVycmlkZVZhbHVlOldlYkNv
cmU6Omluc2VydExpc3RUeXBlQnVsbGV0ZWRBY2Nlc3NpYmlsaXR5VGl0bGUoKSBmb3JBdHRyaWJ1
dGU6TlNBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25BdHRyaWJ1dGVdOworICAgIFtbc2VnbWVudHMg
b2JqZWN0QXRJbmRleDpvcmRlcmVkTGlzdFNlZ21lbnRdIGFjY2Vzc2liaWxpdHlTZXRPdmVycmlk
ZVZhbHVlOldlYkNvcmU6Omluc2VydExpc3RUeXBlTnVtYmVyZWRBY2Nlc3NpYmlsaXR5VGl0bGUo
KSBmb3JBdHRyaWJ1dGU6TlNBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25BdHRyaWJ1dGVdOworI3By
YWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorCisgICAgc2VsZi52aWV3ID0gaW5zZXJ0TGlzdENv
bnRyb2w7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkaWREZXN0cm95Vmlldwor
eworICAgIF93ZWJWaWV3SW1wbCA9IG51bGxwdHI7Cit9CisKKy0gKHZvaWQpX3NlbGVjdExpc3Q6
KGlkKXNlbmRlcgoreworICAgIGlmICghX3dlYlZpZXdJbXBsKQorICAgICAgICByZXR1cm47CisK
KyAgICBOU1NlZ21lbnRlZENvbnRyb2wgKmluc2VydExpc3RDb250cm9sID0gKE5TU2VnbWVudGVk
Q29udHJvbCAqKXNlbGYudmlldzsKKyAgICBpZiAoaW5zZXJ0TGlzdENvbnRyb2wuc2VsZWN0ZWRT
ZWdtZW50ID09IG5vTGlzdFNlZ21lbnQpIHsKKyAgICAgICAgLy8gVGhlcmUgaXMgbm8gInJlbW92
ZSBsaXN0IiBlZGl0IGNvbW1hbmQsIGJ1dCBJbnNlcnRPcmRlcmVkTGlzdCBhbmQgSW5zZXJ0VW5v
cmRlcmVkTGlzdCBib3RoCisgICAgICAgIC8vIGJlaGF2ZSBhcyB0b2dnbGVzLCBzbyB3ZSBjYW4g
aW52b2tlIHRoZSBhcHByb3ByaWF0ZSBlZGl0IGNvbW1hbmQgZGVwZW5kaW5nIG9uIG91ciBfY3Vy
cmVudExpc3RUeXBlCisgICAgICAgIC8vIHRvIHJlbW92ZSBhbiBleGlzdGluZyBsaXN0LiBXZSBk
b24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIGlmIF9jdXJyZW50TGlzdFR5cGUgaXMgTm9MaXN0Lgor
ICAgICAgICBpZiAoX2N1cnJlbnRMaXN0VHlwZSA9PSBPcmRlcmVkTGlzdCkKKyAgICAgICAgICAg
IF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZChAIkluc2VydE9yZGVyZWRM
aXN0IiwgQCIiKTsKKyAgICAgICAgZWxzZSBpZiAoX2N1cnJlbnRMaXN0VHlwZSA9PSBVbm9yZGVy
ZWRMaXN0KQorICAgICAgICAgICAgX3dlYlZpZXdJbXBsLT5wYWdlKCkuZXhlY3V0ZUVkaXRDb21t
YW5kKEAiSW5zZXJ0VW5vcmRlcmVkTGlzdCIsIEAiIik7CisgICAgfSBlbHNlIGlmIChpbnNlcnRM
aXN0Q29udHJvbC5zZWxlY3RlZFNlZ21lbnQgPT0gdW5vcmRlcmVkTGlzdFNlZ21lbnQpCisgICAg
ICAgIF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZChAIkluc2VydFVub3Jk
ZXJlZExpc3QiLCBAIiIpOworICAgIGVsc2UgaWYgKGluc2VydExpc3RDb250cm9sLnNlbGVjdGVk
U2VnbWVudCA9PSBvcmRlcmVkTGlzdFNlZ21lbnQpCisgICAgICAgIF93ZWJWaWV3SW1wbC0+cGFn
ZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZChAIkluc2VydE9yZGVyZWRMaXN0IiwgQCIiKTsKKworICAg
IF93ZWJWaWV3SW1wbC0+ZGlzbWlzc1RleHRUb3VjaEJhclBvcG92ZXJJdGVtV2l0aElkZW50aWZp
ZXIoTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dExpc3QpOworfQorCistICh2b2lkKXNldEN1
cnJlbnRMaXN0VHlwZTooTGlzdFR5cGUpbGlzdFR5cGUKK3sKKyAgICBOU1NlZ21lbnRlZENvbnRy
b2wgKmluc2VydExpc3RDb250cm9sID0gKE5TU2VnbWVudGVkQ29udHJvbCAqKXNlbGYudmlldzsK
KyAgICBzd2l0Y2ggKGxpc3RUeXBlKSB7CisgICAgY2FzZSBOb0xpc3Q6CisgICAgICAgIFtpbnNl
cnRMaXN0Q29udHJvbCBzZXRTZWxlY3RlZDpZRVMgZm9yU2VnbWVudDpub0xpc3RTZWdtZW50XTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBPcmRlcmVkTGlzdDoKKyAgICAgICAgW2luc2VydExp
c3RDb250cm9sIHNldFNlbGVjdGVkOllFUyBmb3JTZWdtZW50Om9yZGVyZWRMaXN0U2VnbWVudF07
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVW5vcmRlcmVkTGlzdDoKKyAgICAgICAgW2luc2Vy
dExpc3RDb250cm9sIHNldFNlbGVjdGVkOllFUyBmb3JTZWdtZW50OnVub3JkZXJlZExpc3RTZWdt
ZW50XTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgX2N1cnJlbnRMaXN0VHlwZSA9IGxp
c3RUeXBlOworfQorCitAZW5kCisKK0BpbnRlcmZhY2UgV0tUZXh0VG91Y2hCYXJJdGVtQ29udHJv
bGxlciA6IE5TVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgPE5TQ2FuZGlkYXRlTGlzdFRvdWNo
QmFySXRlbURlbGVnYXRlLCBOU1RvdWNoQmFyRGVsZWdhdGU+IHsKKyAgICBCT09MIF90ZXh0SXNC
b2xkOworICAgIEJPT0wgX3RleHRJc0l0YWxpYzsKKyAgICBCT09MIF90ZXh0SXNVbmRlcmxpbmVk
OworICAgIE5TVGV4dEFsaWdubWVudCBfY3VycmVudFRleHRBbGlnbm1lbnQ7CisgICAgUmV0YWlu
UHRyPE5TQ29sb3I+IF90ZXh0Q29sb3I7CisgICAgUmV0YWluUHRyPFdLVGV4dExpc3RUb3VjaEJh
clZpZXdDb250cm9sbGVyPiBfd2tUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXI7CisKK0Bw
cml2YXRlCisgICAgV2ViVmlld0ltcGwqIF93ZWJWaWV3SW1wbDsKK30KKworQHByb3BlcnR5IChu
b25hdG9taWMpIEJPT0wgdGV4dElzQm9sZDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIHRl
eHRJc0l0YWxpYzsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIHRleHRJc1VuZGVybGluZWQ7
CitAcHJvcGVydHkgKG5vbmF0b21pYykgTlNUZXh0QWxpZ25tZW50IGN1cnJlbnRUZXh0QWxpZ25t
ZW50OworQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgcmVhZHdyaXRlKSBOU0NvbG9yICp0
ZXh0Q29sb3I7CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZpZXdJbXBsOihXZWJWaWV3
SW1wbCopd2ViVmlld0ltcGw7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1RleHRUb3VjaEJh
ckl0ZW1Db250cm9sbGVyCisKK0BzeW50aGVzaXplIHRleHRJc0JvbGQ9X3RleHRJc0JvbGQ7CitA
c3ludGhlc2l6ZSB0ZXh0SXNJdGFsaWM9X3RleHRJc0l0YWxpYzsKK0BzeW50aGVzaXplIHRleHRJ
c1VuZGVybGluZWQ9X3RleHRJc1VuZGVybGluZWQ7CitAc3ludGhlc2l6ZSBjdXJyZW50VGV4dEFs
aWdubWVudD1fY3VycmVudFRleHRBbGlnbm1lbnQ7CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFdlYlZpZXdJbXBsOihXZWJWaWV3SW1wbCopd2ViVmlld0ltcGwKK3sKKyAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF93ZWJWaWV3SW1w
bCA9IHdlYlZpZXdJbXBsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGlkRGVz
dHJveVZpZXcKK3sKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJl
bW92ZU9ic2VydmVyOnNlbGZdOworICAgIF93ZWJWaWV3SW1wbCA9IG51bGxwdHI7CisgICAgW193
a1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciBkaWREZXN0cm95Vmlld107Cit9CisKKyNw
cmFnbWEgbWFyayBOU1RvdWNoQmFyRGVsZWdhdGUKKworLSAoTlNUb3VjaEJhckl0ZW0gKil0b3Vj
aEJhcjooTlNUb3VjaEJhciAqKXRvdWNoQmFyIG1ha2VJdGVtRm9ySWRlbnRpZmllcjooTlNTdHJp
bmcgKilpZGVudGlmaWVyCit7CisgICAgcmV0dXJuIFtzZWxmIGl0ZW1Gb3JJZGVudGlmaWVyOmlk
ZW50aWZpZXJdOworfQorCistIChudWxsYWJsZSBOU1RvdWNoQmFySXRlbSAqKWl0ZW1Gb3JJZGVu
dGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIKK3sKKyAgICBOU1RvdWNoQmFySXRlbSAqaXRl
bSA9IFtzdXBlciBpdGVtRm9ySWRlbnRpZmllcjppZGVudGlmaWVyXTsKKyAgICBCT09MIGlzVGV4
dEZvcm1hdEl0ZW0gPSBbaWRlbnRpZmllciBpc0VxdWFsVG9TdHJpbmc6TlNUb3VjaEJhckl0ZW1J
ZGVudGlmaWVyVGV4dEZvcm1hdF07CisKKyAgICBpZiAoaXNUZXh0Rm9ybWF0SXRlbSB8fCBbaWRl
bnRpZmllciBpc0VxdWFsVG9TdHJpbmc6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dFN0eWxl
XSkKKyAgICAgICAgc2VsZi50ZXh0U3R5bGUuYWN0aW9uID0gQHNlbGVjdG9yKF93a0NoYW5nZVRl
eHRTdHlsZTopOworCisgICAgaWYgKGlzVGV4dEZvcm1hdEl0ZW0gfHwgW2lkZW50aWZpZXIgaXNF
cXVhbFRvU3RyaW5nOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRBbGlnbm1lbnRdKQorICAg
ICAgICBzZWxmLnRleHRBbGlnbm1lbnRzLmFjdGlvbiA9IEBzZWxlY3Rvcihfd2tDaGFuZ2VUZXh0
QWxpZ25tZW50Oik7CisKKyAgICBOU0NvbG9yUGlja2VyVG91Y2hCYXJJdGVtICpjb2xvclBpY2tl
ckl0ZW0gPSBuaWw7CisgICAgaWYgKFtpZGVudGlmaWVyIGlzRXF1YWxUb1N0cmluZzpOU1RvdWNo
QmFySXRlbUlkZW50aWZpZXJUZXh0Q29sb3JQaWNrZXJdICYmIFtpdGVtIGlzS2luZE9mQ2xhc3M6
W05TQ29sb3JQaWNrZXJUb3VjaEJhckl0ZW0gY2xhc3NdXSkKKyAgICAgICAgY29sb3JQaWNrZXJJ
dGVtID0gKE5TQ29sb3JQaWNrZXJUb3VjaEJhckl0ZW0gKilpdGVtOworICAgIGlmIChpc1RleHRG
b3JtYXRJdGVtKQorICAgICAgICBjb2xvclBpY2tlckl0ZW0gPSBzZWxmLmNvbG9yUGlja2VySXRl
bTsKKyAgICBpZiAoY29sb3JQaWNrZXJJdGVtKSB7CisgICAgICAgIGNvbG9yUGlja2VySXRlbS50
YXJnZXQgPSBzZWxmOworICAgICAgICBjb2xvclBpY2tlckl0ZW0uYWN0aW9uID0gQHNlbGVjdG9y
KF93a0NoYW5nZUNvbG9yOik7CisgICAgICAgIGNvbG9yUGlja2VySXRlbS5zaG93c0FscGhhID0g
Tk87CisgICAgfQorCisgICAgcmV0dXJuIGl0ZW07Cit9CisKKyNwcmFnbWEgbWFyayBOU0NhbmRp
ZGF0ZUxpc3RUb3VjaEJhckl0ZW1EZWxlZ2F0ZQorCistICh2b2lkKWNhbmRpZGF0ZUxpc3RUb3Vj
aEJhckl0ZW06KE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSAqKWFuSXRlbSBlbmRTZWxlY3Rp
bmdDYW5kaWRhdGVBdEluZGV4OihOU0ludGVnZXIpaW5kZXgKK3sKKyAgICBpZiAoaW5kZXggPT0g
TlNOb3RGb3VuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFfd2ViVmlld0ltcGwpCisg
ICAgICAgIHJldHVybjsKKworICAgIE5TQXJyYXkgKmNhbmRpZGF0ZXMgPSBhbkl0ZW0uY2FuZGlk
YXRlczsKKyAgICBpZiAoKE5TVUludGVnZXIpaW5kZXggPj0gY2FuZGlkYXRlcy5jb3VudCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWQgY2FuZGlkYXRlID0gY2FuZGlkYXRlc1tpbmRleF07Cisg
ICAgQVNTRVJUKFtjYW5kaWRhdGUgaXNLaW5kT2ZDbGFzczpbTlNUZXh0Q2hlY2tpbmdSZXN1bHQg
Y2xhc3NdXSk7CisKKyAgICBfd2ViVmlld0ltcGwtPmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKChO
U1RleHRDaGVja2luZ1Jlc3VsdCAqKWNhbmRpZGF0ZSk7Cit9CisKKy0gKHZvaWQpY2FuZGlkYXRl
TGlzdFRvdWNoQmFySXRlbTooTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtICopYW5JdGVtIGNo
YW5nZWRDYW5kaWRhdGVMaXN0VmlzaWJpbGl0eTooQk9PTClpc1Zpc2libGUKK3sKKyAgICBpZiAo
IV93ZWJWaWV3SW1wbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGlzVmlzaWJsZSkKKyAg
ICAgICAgX3dlYlZpZXdJbXBsLT5yZXF1ZXN0Q2FuZGlkYXRlc0ZvclNlbGVjdGlvbklmTmVlZGVk
KCk7CisKKyAgICBfd2ViVmlld0ltcGwtPnVwZGF0ZVRvdWNoQmFyKCk7Cit9CisKKyNwcmFnbWEg
bWFyayBOU05vdGlmaWNhdGlvbkNlbnRlciBvYnNlcnZlcnMKKworLSAodm9pZCl0b3VjaEJhckRp
ZEV4aXRDdXN0b21pemF0aW9uOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAg
IGlmICghX3dlYlZpZXdJbXBsKQorICAgICAgICByZXR1cm47CisKKyAgICBfd2ViVmlld0ltcGwt
PnNldElzQ3VzdG9taXppbmdUb3VjaEJhcihmYWxzZSk7CisgICAgX3dlYlZpZXdJbXBsLT51cGRh
dGVUb3VjaEJhcigpOworfQorCistICh2b2lkKXRvdWNoQmFyV2lsbEVudGVyQ3VzdG9taXphdGlv
bjooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBpZiAoIV93ZWJWaWV3SW1w
bCkKKyAgICAgICAgcmV0dXJuOworCisgICAgX3dlYlZpZXdJbXBsLT5zZXRJc0N1c3RvbWl6aW5n
VG91Y2hCYXIodHJ1ZSk7Cit9CisKKy0gKHZvaWQpZGlkQ2hhbmdlQXV0b21hdGljVGV4dENvbXBs
ZXRpb246KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgaWYgKCFfd2ViVmll
d0ltcGwpCisgICAgICAgIHJldHVybjsKKworICAgIF93ZWJWaWV3SW1wbC0+dXBkYXRlVG91Y2hC
YXJBbmRSZWZyZXNoVGV4dEJhcklkZW50aWZpZXJzKCk7Cit9CisKKworI3ByYWdtYSBtYXJrIE5T
VGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIKKworLSAoV0tUZXh0TGlzdFRvdWNoQmFyVmlld0Nv
bnRyb2xsZXIgKil0ZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIKK3sKKyAgICByZXR1cm4g
KFdLVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyICopW3NlbGYgdGV4dExpc3RWaWV3Q29u
dHJvbGxlcl07Cit9CisKKy0gKHZvaWQpc2V0VGV4dElzQm9sZDooQk9PTClib2xkCit7CisgICAg
X3RleHRJc0JvbGQgPSBib2xkOworICAgIGlmIChbc2VsZi50ZXh0U3R5bGUgaXNTZWxlY3RlZEZv
clNlZ21lbnQ6MF0gIT0gX3RleHRJc0JvbGQpCisgICAgICAgIFtzZWxmLnRleHRTdHlsZSBzZXRT
ZWxlY3RlZDpfdGV4dElzQm9sZCBmb3JTZWdtZW50OjBdOworfQorCistICh2b2lkKXNldFRleHRJ
c0l0YWxpYzooQk9PTClpdGFsaWMKK3sKKyAgICBfdGV4dElzSXRhbGljID0gaXRhbGljOworICAg
IGlmIChbc2VsZi50ZXh0U3R5bGUgaXNTZWxlY3RlZEZvclNlZ21lbnQ6MV0gIT0gX3RleHRJc0l0
YWxpYykKKyAgICAgICAgW3NlbGYudGV4dFN0eWxlIHNldFNlbGVjdGVkOl90ZXh0SXNJdGFsaWMg
Zm9yU2VnbWVudDoxXTsKK30KKworLSAodm9pZClzZXRUZXh0SXNVbmRlcmxpbmVkOihCT09MKXVu
ZGVybGluZWQKK3sKKyAgICBfdGV4dElzVW5kZXJsaW5lZCA9IHVuZGVybGluZWQ7CisgICAgaWYg
KFtzZWxmLnRleHRTdHlsZSBpc1NlbGVjdGVkRm9yU2VnbWVudDoyXSAhPSBfdGV4dElzVW5kZXJs
aW5lZCkKKyAgICAgICAgW3NlbGYudGV4dFN0eWxlIHNldFNlbGVjdGVkOl90ZXh0SXNVbmRlcmxp
bmVkIGZvclNlZ21lbnQ6Ml07Cit9CisKKy0gKHZvaWQpX3drQ2hhbmdlVGV4dFN0eWxlOihpZClz
ZW5kZXIKK3sKKyAgICBpZiAoIV93ZWJWaWV3SW1wbCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKFtzZWxmLnRleHRTdHlsZSBpc1NlbGVjdGVkRm9yU2VnbWVudDowXSAhPSBfdGV4dElzQm9s
ZCkgeworICAgICAgICBfdGV4dElzQm9sZCA9ICFfdGV4dElzQm9sZDsKKyAgICAgICAgX3dlYlZp
ZXdJbXBsLT5wYWdlKCkuZXhlY3V0ZUVkaXRDb21tYW5kKEAiVG9nZ2xlQm9sZCIsIEAiIik7Cisg
ICAgfQorCisgICAgaWYgKFtzZWxmLnRleHRTdHlsZSBpc1NlbGVjdGVkRm9yU2VnbWVudDoxXSAh
PSBfdGV4dElzSXRhbGljKSB7CisgICAgICAgIF90ZXh0SXNJdGFsaWMgPSAhX3RleHRJc0l0YWxp
YzsKKyAgICAgICAgX3dlYlZpZXdJbXBsLT5wYWdlKCkuZXhlY3V0ZUVkaXRDb21tYW5kKCJUb2dn
bGVJdGFsaWMiLCBAIiIpOworICAgIH0KKworICAgIGlmIChbc2VsZi50ZXh0U3R5bGUgaXNTZWxl
Y3RlZEZvclNlZ21lbnQ6Ml0gIT0gX3RleHRJc1VuZGVybGluZWQpIHsKKyAgICAgICAgX3RleHRJ
c1VuZGVybGluZWQgPSAhX3RleHRJc1VuZGVybGluZWQ7CisgICAgICAgIF93ZWJWaWV3SW1wbC0+
cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZCgiVG9nZ2xlVW5kZXJsaW5lIiwgQCIiKTsKKyAgICB9
Cit9CisKKy0gKHZvaWQpc2V0Q3VycmVudFRleHRBbGlnbm1lbnQ6KE5TVGV4dEFsaWdubWVudClh
bGlnbm1lbnQKK3sKKyAgICBfY3VycmVudFRleHRBbGlnbm1lbnQgPSBhbGlnbm1lbnQ7CisgICAg
W3NlbGYudGV4dEFsaWdubWVudHMgc2VsZWN0U2VnbWVudFdpdGhUYWc6X2N1cnJlbnRUZXh0QWxp
Z25tZW50XTsKK30KKworLSAodm9pZClfd2tDaGFuZ2VUZXh0QWxpZ25tZW50OihpZClzZW5kZXIK
K3sKKyAgICBpZiAoIV93ZWJWaWV3SW1wbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNUZXh0
QWxpZ25tZW50IGFsaWdubWVudCA9IChOU1RleHRBbGlnbm1lbnQpW3NlbGYudGV4dEFsaWdubWVu
dHMuY2VsbCB0YWdGb3JTZWdtZW50OltzZWxmLnRleHRBbGlnbm1lbnRzIHNlbGVjdGVkU2VnbWVu
dF1dOworICAgIHN3aXRjaCAoYWxpZ25tZW50KSB7CisgICAgY2FzZSBOU1RleHRBbGlnbm1lbnRM
ZWZ0OiB7CisgICAgICAgIF9jdXJyZW50VGV4dEFsaWdubWVudCA9IE5TVGV4dEFsaWdubWVudExl
ZnQ7CisgICAgICAgIF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZCgiQWxp
Z25MZWZ0IiwgQCIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgTlNUZXh0QWxp
Z25tZW50UmlnaHQ6IHsKKyAgICAgICAgX2N1cnJlbnRUZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxp
Z25tZW50UmlnaHQ7CisgICAgICAgIF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29t
bWFuZCgiQWxpZ25SaWdodCIsIEAiIik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IE5TVGV4dEFsaWdubWVudENlbnRlcjogeworICAgICAgICBfY3VycmVudFRleHRBbGlnbm1lbnQg
PSBOU1RleHRBbGlnbm1lbnRDZW50ZXI7CisgICAgICAgIF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4
ZWN1dGVFZGl0Q29tbWFuZCgiQWxpZ25DZW50ZXIiLCBAIiIpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgY2FzZSBOU1RleHRBbGlnbm1lbnRKdXN0aWZpZWQ6IHsKKyAgICAgICAgX2N1cnJl
bnRUZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25tZW50SnVzdGlmaWVkOworICAgICAgICBfd2Vi
Vmlld0ltcGwtPnBhZ2UoKS5leGVjdXRlRWRpdENvbW1hbmQoIkFsaWduSnVzdGlmaWVkIiwgQCIi
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIF93ZWJWaWV3SW1wbC0+ZGlzbWlzc1RleHRUb3VjaEJhclBvcG92ZXJJdGVt
V2l0aElkZW50aWZpZXIoTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEFsaWdubWVudCk7Cit9
CisKKy0gKE5TQ29sb3IgKil0ZXh0Q29sb3IKK3sKKyAgICByZXR1cm4gX3RleHRDb2xvci5nZXQo
KTsKK30KKworLSAodm9pZClzZXRUZXh0Q29sb3I6KE5TQ29sb3IgKiljb2xvcgoreworICAgIF90
ZXh0Q29sb3IgPSBjb2xvcjsKKyAgICBzZWxmLmNvbG9yUGlja2VySXRlbS5jb2xvciA9IF90ZXh0
Q29sb3IuZ2V0KCk7Cit9CisKKy0gKHZvaWQpX3drQ2hhbmdlQ29sb3I6KGlkKXNlbmRlcgorewor
ICAgIGlmICghX3dlYlZpZXdJbXBsKQorICAgICAgICByZXR1cm47CisKKyAgICBfdGV4dENvbG9y
ID0gc2VsZi5jb2xvclBpY2tlckl0ZW0uY29sb3I7CisgICAgX3dlYlZpZXdJbXBsLT5wYWdlKCku
ZXhlY3V0ZUVkaXRDb21tYW5kKCJGb3JlQ29sb3IiLCBXZWJDb3JlOjpjb2xvckZyb21OU0NvbG9y
KF90ZXh0Q29sb3IuZ2V0KCkpLnNlcmlhbGl6ZWQoKSk7Cit9CisKKy0gKE5TVmlld0NvbnRyb2xs
ZXIgKil0ZXh0TGlzdFZpZXdDb250cm9sbGVyCit7CisgICAgaWYgKCFfd2tUZXh0TGlzdFRvdWNo
QmFyVmlld0NvbnRyb2xsZXIpCisgICAgICAgIF93a1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJv
bGxlciA9IGFkb3B0TlMoW1tXS1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciBhbGxvY10g
aW5pdFdpdGhXZWJWaWV3SW1wbDpfd2ViVmlld0ltcGxdKTsKKyAgICByZXR1cm4gX3drVGV4dExp
c3RUb3VjaEJhclZpZXdDb250cm9sbGVyLmdldCgpOworfQorCitAZW5kCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworTlNUb3VjaEJhciAqV2ViVmlld0ltcGw6Om1ha2VUb3VjaEJhcigpCit7CisgICAg
aWYgKCFtX2NhbkNyZWF0ZVRvdWNoQmFycykgeworICAgICAgICBtX2NhbkNyZWF0ZVRvdWNoQmFy
cyA9IHRydWU7CisgICAgICAgIHVwZGF0ZVRvdWNoQmFyKCk7CisgICAgfQorICAgIHJldHVybiBt
X2N1cnJlbnRUb3VjaEJhci5nZXQoKTsKK30KKworTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVt
ICpXZWJWaWV3SW1wbDo6Y2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGlzUmljaGx5RWRpdGFibGUoKSA/IG1fcmljaFRleHRDYW5kaWRhdGVMaXN0VG91Y2hC
YXJJdGVtLmdldCgpIDogbV9wbGFpblRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtLmdldCgp
OworfQorCitBVkZ1bmN0aW9uQmFyU2NydWJiZXIgKldlYlZpZXdJbXBsOjptZWRpYVBsYXliYWNr
Q29udHJvbHNWaWV3KCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xT
X01BTkFHRVIpCisgICAgaWYgKG1fcGFnZS0+aGFzQWN0aXZlVmlkZW9Gb3JDb250cm9sc01hbmFn
ZXIoKSkKKyAgICAgICAgcmV0dXJuIG1fbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldy5nZXQoKTsK
KyNlbmRpZgorICAgIHJldHVybiBuaWw7Cit9CisKK2Jvb2wgV2ViVmlld0ltcGw6OnVzZU1lZGlh
UGxheWJhY2tDb250cm9sc1ZpZXcoKSBjb25zdAoreworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQ
SSkKKyAgICBpZiAoaGFzRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIoKSkKKyAgICAgICAgcmV0
dXJuICFbbV9mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBpc0Z1bGxTY3JlZW5dOworI2VuZGlm
CisgICAgcmV0dXJuIG1fY2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OworfQor
Cit2b2lkIFdlYlZpZXdJbXBsOjpkaXNtaXNzVGV4dFRvdWNoQmFyUG9wb3Zlckl0ZW1XaXRoSWRl
bnRpZmllcihOU1N0cmluZyAqaWRlbnRpZmllcikKK3sKKyAgICBOU1RvdWNoQmFySXRlbSAqZm91
bmRJdGVtID0gbmlsOworICAgIGZvciAoTlNUb3VjaEJhckl0ZW0gKml0ZW0gaW4gdGV4dFRvdWNo
QmFyKCkuaXRlbXMpIHsKKyAgICAgICAgaWYgKFtpdGVtLmlkZW50aWZpZXIgaXNFcXVhbFRvU3Ry
aW5nOmlkZW50aWZpZXJdKSB7CisgICAgICAgICAgICBmb3VuZEl0ZW0gPSBpdGVtOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoW1tpdGVtIGlkZW50aWZpZXJd
IGlzRXF1YWxUb1N0cmluZzpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Rm9ybWF0XSkgewor
ICAgICAgICAgICAgZm9yIChOU1RvdWNoQmFySXRlbSAqY2hpbGRJdGVtIGluIFsoTlNHcm91cFRv
dWNoQmFySXRlbSAqKWl0ZW0gZ3JvdXBUb3VjaEJhcl0uaXRlbXMpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoW2NoaWxkSXRlbS5pZGVudGlmaWVyIGlzRXF1YWxUb1N0cmluZzppZGVudGlmaWVyXSkg
eworICAgICAgICAgICAgICAgICAgICBmb3VuZEl0ZW0gPSBjaGlsZEl0ZW07CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKFtmb3VuZEl0ZW0gaXNL
aW5kT2ZDbGFzczpbTlNQb3BvdmVyVG91Y2hCYXJJdGVtIGNsYXNzXV0pCisgICAgICAgIFsoTlNQ
b3BvdmVyVG91Y2hCYXJJdGVtICopZm91bmRJdGVtIGRpc21pc3NQb3BvdmVyOm5pbF07Cit9CisK
K3N0YXRpYyBOU0FycmF5PE5TU3RyaW5nICo+ICp0ZXh0VG91Y2hCYXJDdXN0b21pemF0aW9uQWxs
b3dlZElkZW50aWZpZXJzKCkKK3sKKyAgICByZXR1cm4gQFsgTlNUb3VjaEJhckl0ZW1JZGVudGlm
aWVyQ2hhcmFjdGVyUGlja2VyLCBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Q29sb3JQaWNr
ZXIsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRTdHlsZSwgTlNUb3VjaEJhckl0ZW1JZGVu
dGlmaWVyVGV4dEFsaWdubWVudCwgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dExpc3QsIE5T
VG91Y2hCYXJJdGVtSWRlbnRpZmllckZsZXhpYmxlU3BhY2UgXTsKK30KKworc3RhdGljIE5TQXJy
YXk8TlNTdHJpbmcgKj4gKnBsYWluVGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkRlZmF1bHRJdGVt
SWRlbnRpZmllcnMoKQoreworICAgIHJldHVybiBAWyBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJD
aGFyYWN0ZXJQaWNrZXIsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckNhbmRpZGF0ZUxpc3QgXTsK
K30KKworc3RhdGljIE5TQXJyYXk8TlNTdHJpbmcgKj4gKnJpY2hUZXh0VG91Y2hCYXJDdXN0b21p
emF0aW9uRGVmYXVsdEl0ZW1JZGVudGlmaWVycygpCit7CisgICAgcmV0dXJuIEBbIE5TVG91Y2hC
YXJJdGVtSWRlbnRpZmllckNoYXJhY3RlclBpY2tlciwgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVy
VGV4dEZvcm1hdCwgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyQ2FuZGlkYXRlTGlzdCBdOworfQor
Cit2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVUb3VjaEJhckFuZFJlZnJlc2hUZXh0QmFySWRlbnRp
ZmllcnMoKQoreworICAgIGlmIChtX3JpY2hUZXh0VG91Y2hCYXIpCisgICAgICAgIHNldFVwVGV4
dFRvdWNoQmFyKG1fcmljaFRleHRUb3VjaEJhci5nZXQoKSk7CisKKyAgICBpZiAobV9wbGFpblRl
eHRUb3VjaEJhcikKKyAgICAgICAgc2V0VXBUZXh0VG91Y2hCYXIobV9wbGFpblRleHRUb3VjaEJh
ci5nZXQoKSk7CisKKyAgICB1cGRhdGVUb3VjaEJhcigpOworfQorCit2b2lkIFdlYlZpZXdJbXBs
OjpzZXRVcFRleHRUb3VjaEJhcihOU1RvdWNoQmFyICp0b3VjaEJhcikKK3sKKyAgICBib29sIGlz
UmljaFRleHRUb3VjaEJhciA9IHRvdWNoQmFyID09IG1fcmljaFRleHRUb3VjaEJhci5nZXQoKTsK
KyAgICBbdG91Y2hCYXIgc2V0RGVsZWdhdGU6bV90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlci5n
ZXQoKV07CisgICAgW3RvdWNoQmFyIHNldERlZmF1bHRJdGVtczpbTlNNdXRhYmxlU2V0IHNldFdp
dGhPYmplY3RzOmlzUmljaFRleHRUb3VjaEJhciA/IG1fcmljaFRleHRDYW5kaWRhdGVMaXN0VG91
Y2hCYXJJdGVtLmdldCgpIDogbV9wbGFpblRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtLmdl
dCgpLCBuaWxdXTsKKyAgICBbdG91Y2hCYXIgc2V0Q3VzdG9taXphdGlvbkFsbG93ZWRJdGVtSWRl
bnRpZmllcnM6dGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkFsbG93ZWRJZGVudGlmaWVycygpXTsK
KyAgICBbdG91Y2hCYXIgc2V0Q3VzdG9taXphdGlvbkRlZmF1bHRJdGVtSWRlbnRpZmllcnM6aXNS
aWNoVGV4dFRvdWNoQmFyID8gcmljaFRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25EZWZhdWx0SXRl
bUlkZW50aWZpZXJzKCkgOiBwbGFpblRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25EZWZhdWx0SXRl
bUlkZW50aWZpZXJzKCldOworCisgICAgaWYgKE5TR3JvdXBUb3VjaEJhckl0ZW0gKnRleHRGb3Jt
YXRJdGVtID0gKE5TR3JvdXBUb3VjaEJhckl0ZW0gKilbdG91Y2hCYXIgaXRlbUZvcklkZW50aWZp
ZXI6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEZvcm1hdF0pCisgICAgICAgIHRleHRGb3Jt
YXRJdGVtLmdyb3VwVG91Y2hCYXIuY3VzdG9taXphdGlvbklkZW50aWZpZXIgPSBAIldLVGV4dEZv
cm1hdFRvdWNoQmFyIjsKK30KKworYm9vbCBXZWJWaWV3SW1wbDo6aXNSaWNobHlFZGl0YWJsZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0NvbnRlbnRSaWNo
bHlFZGl0YWJsZSAmJiAhbV9wYWdlLT5uZWVkc1BsYWluVGV4dFF1aXJrKCk7Cit9CisKK05TVG91
Y2hCYXIgKldlYlZpZXdJbXBsOjp0ZXh0VG91Y2hCYXIoKSBjb25zdAoreworICAgIHJldHVybiBp
c1JpY2hseUVkaXRhYmxlKCkgPyBtX3JpY2hUZXh0VG91Y2hCYXIuZ2V0KCkgOiBtX3BsYWluVGV4
dFRvdWNoQmFyLmdldCgpOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVUZXh0VG91Y2hC
YXIoKQoreworICAgIGlmICghbV9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxl
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9pc1VwZGF0aW5nVGV4dFRvdWNoQmFyKQor
ICAgICAgICByZXR1cm47CisKKyAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gaXNVcGRhdGluZ1Rl
eHRGdW5jdGlvbkJhcihtX2lzVXBkYXRpbmdUZXh0VG91Y2hCYXIsIHRydWUpOworCisgICAgaWYg
KCFtX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyKQorICAgICAgICBtX3RleHRUb3VjaEJhckl0
ZW1Db250cm9sbGVyID0gYWRvcHROUyhbW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgYWxs
b2NdIGluaXRXaXRoV2ViVmlld0ltcGw6dGhpc10pOworCisgICAgaWYgKCFtX3N0YXJ0ZWRMaXN0
ZW5pbmdUb0N1c3RvbWl6YXRpb25FdmVudHMpIHsKKyAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNl
bnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjptX3RleHRUb3VjaEJhckl0ZW1Db250cm9s
bGVyLmdldCgpIHNlbGVjdG9yOkBzZWxlY3Rvcih0b3VjaEJhckRpZEV4aXRDdXN0b21pemF0aW9u
OikgbmFtZTpOU1RvdWNoQmFyRGlkRXhpdEN1c3RvbWl6YXRpb24gb2JqZWN0Om5pbF07CisgICAg
ICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6bV90
ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlci5nZXQoKSBzZWxlY3RvcjpAc2VsZWN0b3IodG91Y2hC
YXJXaWxsRW50ZXJDdXN0b21pemF0aW9uOikgbmFtZTpOU1RvdWNoQmFyV2lsbEVudGVyQ3VzdG9t
aXphdGlvbiBvYmplY3Q6bmlsXTsKKyAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZh
dWx0Q2VudGVyXSBhZGRPYnNlcnZlcjptX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyLmdldCgp
IHNlbGVjdG9yOkBzZWxlY3RvcihkaWRDaGFuZ2VBdXRvbWF0aWNUZXh0Q29tcGxldGlvbjopIG5h
bWU6TlNTcGVsbENoZWNrZXJEaWRDaGFuZ2VBdXRvbWF0aWNUZXh0Q29tcGxldGlvbk5vdGlmaWNh
dGlvbiBvYmplY3Q6bmlsXTsKKworICAgICAgICBtX3N0YXJ0ZWRMaXN0ZW5pbmdUb0N1c3RvbWl6
YXRpb25FdmVudHMgPSB0cnVlOworICAgIH0KKworICAgIGlmICghbV9yaWNoVGV4dENhbmRpZGF0
ZUxpc3RUb3VjaEJhckl0ZW0gfHwgIW1fcGxhaW5UZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRl
bSkgeworICAgICAgICBtX3JpY2hUZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSA9IGFkb3B0
TlMoW1tOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gYWxsb2NdIGluaXRXaXRoSWRlbnRpZmll
cjpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJDYW5kaWRhdGVMaXN0XSk7CisgICAgICAgIFttX3Jp
Y2hUZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSBzZXREZWxlZ2F0ZTptX3RleHRUb3VjaEJh
ckl0ZW1Db250cm9sbGVyLmdldCgpXTsKKyAgICAgICAgbV9wbGFpblRleHRDYW5kaWRhdGVMaXN0
VG91Y2hCYXJJdGVtID0gYWRvcHROUyhbW05TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSBhbGxv
Y10gaW5pdFdpdGhJZGVudGlmaWVyOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckNhbmRpZGF0ZUxp
c3RdKTsKKyAgICAgICAgW21fcGxhaW5UZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSBzZXRE
ZWxlZ2F0ZTptX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyLmdldCgpXTsKKyAgICAgICAgcmVx
dWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb25JZk5lZWRlZCgpOworICAgIH0KKworICAgIGlmICgh
bV9yaWNoVGV4dFRvdWNoQmFyKSB7CisgICAgICAgIG1fcmljaFRleHRUb3VjaEJhciA9IGFkb3B0
TlMoW1tOU1RvdWNoQmFyIGFsbG9jXSBpbml0XSk7CisgICAgICAgIHNldFVwVGV4dFRvdWNoQmFy
KG1fcmljaFRleHRUb3VjaEJhci5nZXQoKSk7CisgICAgICAgIFttX3JpY2hUZXh0VG91Y2hCYXIg
c2V0Q3VzdG9taXphdGlvbklkZW50aWZpZXI6QCJXS1JpY2hUZXh0VG91Y2hCYXIiXTsKKyAgICB9
CisKKyAgICBpZiAoIW1fcGxhaW5UZXh0VG91Y2hCYXIpIHsKKyAgICAgICAgbV9wbGFpblRleHRU
b3VjaEJhciA9IGFkb3B0TlMoW1tOU1RvdWNoQmFyIGFsbG9jXSBpbml0XSk7CisgICAgICAgIHNl
dFVwVGV4dFRvdWNoQmFyKG1fcGxhaW5UZXh0VG91Y2hCYXIuZ2V0KCkpOworICAgICAgICBbbV9w
bGFpblRleHRUb3VjaEJhciBzZXRDdXN0b21pemF0aW9uSWRlbnRpZmllcjpAIldLUGxhaW5UZXh0
VG91Y2hCYXIiXTsKKyAgICB9CisKKyAgICBpZiAoW05TU3BlbGxDaGVja2VyIGlzQXV0b21hdGlj
VGV4dENvbXBsZXRpb25FbmFibGVkXSAmJiAhbV9pc0N1c3RvbWl6aW5nVG91Y2hCYXIpIHsKKyAg
ICAgICAgQk9PTCBzaG93Q2FuZGlkYXRlc0xpc3QgPSAhbV9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNl
bGVjdGlvbklzUmFuZ2UgfHwgbV9pc0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRhdGU7CisgICAgICAg
IFtjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtKCkgdXBkYXRlV2l0aEluc2VydGlvblBvaW50Vmlz
aWJpbGl0eTpzaG93Q2FuZGlkYXRlc0xpc3RdOworICAgICAgICBbbV92aWV3IF9kaWRVcGRhdGVD
YW5kaWRhdGVMaXN0VmlzaWJpbGl0eTpzaG93Q2FuZGlkYXRlc0xpc3RdOworICAgIH0KKworICAg
IGlmIChtX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNJblBhc3N3b3JkRmllbGQpIHsKKyAgICAgICAg
Ly8gV2UgZG9uJ3QgcmVxdWVzdCBjYW5kaWRhdGVzIGZvciBwYXNzd29yZCBmaWVsZHMuIElmIHRo
ZSB1c2VyIHdhcyBwcmV2aW91c2x5IGluIGEgbm9uLXBhc3N3b3JkIGZpZWxkLCB0aGVuIHRoZQor
ICAgICAgICAvLyBvbGQgY2FuZGlkYXRlcyB3aWxsIHN0aWxsIHNob3cgYnkgZGVmYXVsdCwgc28g
d2UgY2xlYXIgdGhlbSBoZXJlIGJ5IHNldHRpbmcgYW4gZW1wdHkgYXJyYXkgb2YgY2FuZGlkYXRl
cy4KKyAgICAgICAgaWYgKCFtX2VtcHR5Q2FuZGlkYXRlc0FycmF5KQorICAgICAgICAgICAgbV9l
bXB0eUNhbmRpZGF0ZXNBcnJheSA9IGFkb3B0TlMoW1tOU0FycmF5IGFsbG9jXSBpbml0XSk7Cisg
ICAgICAgIFtjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtKCkgc2V0Q2FuZGlkYXRlczptX2VtcHR5
Q2FuZGlkYXRlc0FycmF5LmdldCgpIGZvclNlbGVjdGVkUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgMCkg
aW5TdHJpbmc6bmlsXTsKKyAgICB9CisKKyAgICBOU1RvdWNoQmFyICp0ZXh0VG91Y2hCYXIgPSB0
aGlzLT50ZXh0VG91Y2hCYXIoKTsKKyAgICBCT09MIGlzU2hvd2luZ0NvbWJpbmVkVGV4dEZvcm1h
dEl0ZW0gPSBbdGV4dFRvdWNoQmFyLml0ZW1JZGVudGlmaWVycyBjb250YWluc09iamVjdDpOU1Rv
dWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Rm9ybWF0XTsKKyAgICBbdGV4dFRvdWNoQmFyIHNldFBy
aW5jaXBhbEl0ZW1JZGVudGlmaWVyOmlzU2hvd2luZ0NvbWJpbmVkVGV4dEZvcm1hdEl0ZW0gPyBO
U1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Rm9ybWF0IDogbmlsXTsKKworICAgIC8vIFNldCBj
dXJyZW50IHR5cGluZyBhdHRyaWJ1dGVzIGZvciByaWNoIHRleHQuIFRoaXMgd2lsbCBlbnN1cmUg
dGhhdCB0aGUgYnV0dG9ucyByZWZsZWN0IHRoZSBzdGF0ZSBvZgorICAgIC8vIHRoZSB0ZXh0IHdo
ZW4gY2hhbmdpbmcgc2VsZWN0aW9uIHRocm91Z2hvdXQgdGhlIGRvY3VtZW50LgorICAgIGlmIChp
c1JpY2hseUVkaXRhYmxlKCkpIHsKKyAgICAgICAgY29uc3QgRWRpdG9yU3RhdGUmIGVkaXRvclN0
YXRlID0gbV9wYWdlLT5lZGl0b3JTdGF0ZSgpOworICAgICAgICBpZiAoIWVkaXRvclN0YXRlLmlz
TWlzc2luZ1Bvc3RMYXlvdXREYXRhKSB7CisgICAgICAgICAgICBbbV90ZXh0VG91Y2hCYXJJdGVt
Q29udHJvbGxlciBzZXRUZXh0SXNCb2xkOihib29sKShtX3BhZ2UtPmVkaXRvclN0YXRlKCkucG9z
dExheW91dERhdGEoKS50eXBpbmdBdHRyaWJ1dGVzICYgQXR0cmlidXRlQm9sZCldOworICAgICAg
ICAgICAgW21fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzSXRhbGljOihib29s
KShtX3BhZ2UtPmVkaXRvclN0YXRlKCkucG9zdExheW91dERhdGEoKS50eXBpbmdBdHRyaWJ1dGVz
ICYgQXR0cmlidXRlSXRhbGljcyldOworICAgICAgICAgICAgW21fdGV4dFRvdWNoQmFySXRlbUNv
bnRyb2xsZXIgc2V0VGV4dElzVW5kZXJsaW5lZDooYm9vbCkobV9wYWdlLT5lZGl0b3JTdGF0ZSgp
LnBvc3RMYXlvdXREYXRhKCkudHlwaW5nQXR0cmlidXRlcyAmIEF0dHJpYnV0ZVVuZGVybGluZSld
OworICAgICAgICAgICAgW21fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dENvbG9y
Om5zQ29sb3IoZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEoKS50ZXh0Q29sb3IpXTsKKyAgICAg
ICAgICAgIFtbbV90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciB0ZXh0TGlzdFRvdWNoQmFyVmll
d0NvbnRyb2xsZXJdIHNldEN1cnJlbnRMaXN0VHlwZTooTGlzdFR5cGUpbV9wYWdlLT5lZGl0b3JT
dGF0ZSgpLnBvc3RMYXlvdXREYXRhKCkuZW5jbG9zaW5nTGlzdFR5cGVdOworCisgICAgICAgICAg
ICBOU1RleHRBbGlnbm1lbnQgdGV4dEFsaWdubWVudDsKKyAgICAgICAgICAgIHN3aXRjaCAoZWRp
dG9yU3RhdGUucG9zdExheW91dERhdGEoKS50ZXh0QWxpZ25tZW50KSB7CisgICAgICAgICAgICBj
YXNlIE5vQWxpZ25tZW50OgorICAgICAgICAgICAgICAgIHRleHRBbGlnbm1lbnQgPSBOU1RleHRB
bGlnbm1lbnROYXR1cmFsOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBMZWZ0QWxpZ25tZW50OgorICAgICAgICAgICAgICAgIHRleHRBbGlnbm1lbnQgPSBOU1RleHRB
bGlnbm1lbnRMZWZ0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBS
aWdodEFsaWdubWVudDoKKyAgICAgICAgICAgICAgICB0ZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxp
Z25tZW50UmlnaHQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENl
bnRlckFsaWdubWVudDoKKyAgICAgICAgICAgICAgICB0ZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxp
Z25tZW50Q2VudGVyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBK
dXN0aWZpZWRBbGlnbm1lbnQ6CisgICAgICAgICAgICAgICAgdGV4dEFsaWdubWVudCA9IE5TVGV4
dEFsaWdubWVudEp1c3RpZmllZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIFttX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldEN1cnJlbnRU
ZXh0QWxpZ25tZW50OnRleHRBbGlnbm1lbnRdOworICAgICAgICB9CisgICAgICAgIEJPT0wgaXNT
aG93aW5nQ2FuZGlkYXRlTGlzdEl0ZW0gPSBbdGV4dFRvdWNoQmFyLml0ZW1JZGVudGlmaWVycyBj
b250YWluc09iamVjdDpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJDYW5kaWRhdGVMaXN0XSAmJiBb
TlNTcGVsbENoZWNrZXIgaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkXTsKKyAgICAg
ICAgW21fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VXNlc05hcnJvd1RleHRTdHlsZUl0
ZW06aXNTaG93aW5nQ29tYmluZWRUZXh0Rm9ybWF0SXRlbSAmJiBpc1Nob3dpbmdDYW5kaWRhdGVM
aXN0SXRlbV07CisgICAgfQorfQorCit2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVNZWRpYVRvdWNo
QmFyKCkKK3sKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAg
aWYgKCFtX21lZGlhVG91Y2hCYXJQcm92aWRlcikKKyAgICAgICAgbV9tZWRpYVRvdWNoQmFyUHJv
dmlkZXIgPSBhZG9wdE5TKFthbGxvY0FWRnVuY3Rpb25CYXJQbGF5YmFja0NvbnRyb2xzUHJvdmlk
ZXJJbnN0YW5jZSgpIGluaXRdKTsKKworICAgIGlmICghbV9tZWRpYVBsYXliYWNrQ29udHJvbHNW
aWV3KQorICAgICAgICBtX21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcgPSBhZG9wdE5TKFthbGxv
Y0FWRnVuY3Rpb25CYXJTY3J1YmJlckluc3RhbmNlKCkgaW5pdF0pOworCisgICAgaWYgKCFtX3Bs
YXliYWNrQ29udHJvbHNNYW5hZ2VyKQorICAgICAgICBtX3BsYXliYWNrQ29udHJvbHNNYW5hZ2Vy
ID0gYWRvcHROUyhbW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIGFsbG9jXSBpbml0XSk7CisK
KyAgICBpZiAoUGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UqIGludGVyZmFjZSA9
IG1fcGFnZS0+cGxheWJhY2tTZXNzaW9uTWFuYWdlcigpLT5jb250cm9sc01hbmFnZXJJbnRlcmZh
Y2UoKSkKKyAgICAgICAgW21fcGxheWJhY2tDb250cm9sc01hbmFnZXIgc2V0V2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjOmludGVyZmFjZV07CisKKyAgICBbbV9tZWRpYVRvdWNoQmFyUHJv
dmlkZXIgc2V0UGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXI6bV9wbGF5YmFja0NvbnRyb2xzTWFu
YWdlci5nZXQoKV07CisgICAgW21fbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyBzZXRQbGF5YmFj
a0NvbnRyb2xzQ29udHJvbGxlcjptX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmdldCgpXTsKKwor
ICAgIGlmICghdXNlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpKSB7CisjaWYgRU5BQkxFKEZV
TExTQ1JFRU5fQVBJKQorICAgICAgICAvLyBJZiB3ZSBjYW4ndCBoYXZlIGEgbWVkaWEgcG9wb3Zl
ciBmdW5jdGlvbiBiYXIgaXRlbSwgaXQgbWlnaHQgYmUgYmVjYXVzZSB3ZSBhcmUgaW4gZnVsbCBz
Y3JlZW4uCisgICAgICAgIC8vIElmIHNvLCBjdXN0b21pemUgdGhlIGVzY2FwZSBrZXkuCisgICAg
ICAgIE5TVG91Y2hCYXIgKnRvdWNoQmFyID0gW21fbWVkaWFUb3VjaEJhclByb3ZpZGVyIHJlc3Bv
bmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IodG91Y2hCYXIpXSA/IFsoaWQpbV9tZWRpYVRvdWNoQmFy
UHJvdmlkZXIuZ2V0KCkgdG91Y2hCYXJdIDogWyhpZCltX21lZGlhVG91Y2hCYXJQcm92aWRlci5n
ZXQoKSB0b3VjaEJhcl07CisgICAgICAgIGlmIChoYXNGdWxsU2NyZWVuV2luZG93Q29udHJvbGxl
cigpICYmIFttX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGlzRnVsbFNjcmVlbl0pIHsKKyAg
ICAgICAgICAgIGlmICghbV9leGl0RnVsbFNjcmVlbkJ1dHRvbikgeworICAgICAgICAgICAgICAg
IG1fZXhpdEZ1bGxTY3JlZW5CdXR0b24gPSBhZG9wdE5TKFtbTlNDdXN0b21Ub3VjaEJhckl0ZW0g
YWxsb2NdIGluaXRXaXRoSWRlbnRpZmllcjpXS01lZGlhRXhpdEZ1bGxTY3JlZW5JdGVtXSk7CisK
KyAgICAgICAgICAgICAgICBOU0ltYWdlICppbWFnZSA9IFtOU0ltYWdlIGltYWdlTmFtZWQ6TlNJ
bWFnZU5hbWVUb3VjaEJhckV4aXRGdWxsU2NyZWVuVGVtcGxhdGVdOworICAgICAgICAgICAgICAg
IFtpbWFnZSBzZXRUZW1wbGF0ZTpZRVNdOworCisgICAgICAgICAgICAgICAgTlNCdXR0b24gKmV4
aXRGdWxsU2NyZWVuQnV0dG9uID0gW05TQnV0dG9uIGJ1dHRvbldpdGhUaXRsZTppbWFnZSA/IEAi
IiA6IEAiRXhpdCIgaW1hZ2U6aW1hZ2UgdGFyZ2V0Om1fZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xs
ZXIuZ2V0KCkgYWN0aW9uOkBzZWxlY3RvcihyZXF1ZXN0RXhpdEZ1bGxTY3JlZW4pXTsKKyAgICAg
ICAgICAgICAgICBbZXhpdEZ1bGxTY3JlZW5CdXR0b24gc2V0QWNjZXNzaWJpbGl0eVRpdGxlOldl
YkNvcmU6OmV4aXRGdWxsU2NyZWVuQnV0dG9uQWNjZXNzaWJpbGl0eVRpdGxlKCldOworCisgICAg
ICAgICAgICAgICAgW1tleGl0RnVsbFNjcmVlbkJ1dHRvbi53aWR0aEFuY2hvciBjb25zdHJhaW50
TGVzc1RoYW5PckVxdWFsVG9Db25zdGFudDpleGl0RnVsbFNjcmVlbkJ1dHRvbldpZHRoXSBzZXRB
Y3RpdmU6WUVTXTsKKyAgICAgICAgICAgICAgICBbbV9leGl0RnVsbFNjcmVlbkJ1dHRvbiBzZXRW
aWV3OmV4aXRGdWxsU2NyZWVuQnV0dG9uXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRv
dWNoQmFyLmVzY2FwZUtleVJlcGxhY2VtZW50SXRlbSA9IG1fZXhpdEZ1bGxTY3JlZW5CdXR0b24u
Z2V0KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdG91Y2hCYXIuZXNjYXBlS2V5UmVw
bGFjZW1lbnRJdGVtID0gbmlsOworI2VuZGlmCisgICAgICAgIC8vIFRoZSByZXN0IG9mIHRoZSB3
b3JrIHRvIHVwZGF0ZSB0aGUgbWVkaWEgZnVuY3Rpb24gYmFyIG9ubHkgYXBwbGllcyB0byB0aGUg
cG9wb3ZlciB2ZXJzaW9uLCBzbyByZXR1cm4gZWFybHkuCisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAobV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlciAmJiBtX3ZpZXcgPT0gbV92aWV3
LndpbmRvdy5maXJzdFJlc3BvbmRlciAmJiBbbV92aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3IoX3dlYl9kaWRBZGRNZWRpYUNvbnRyb2xzTWFuYWdlcjopXSkKKyAgICAgICAgW21fdmll
dyBfd2ViX2RpZEFkZE1lZGlhQ29udHJvbHNNYW5hZ2VyOm1fbWVkaWFQbGF5YmFja0NvbnRyb2xz
Vmlldy5nZXQoKV07CisjZW5kaWYKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6Zm9yY2VSZXF1ZXN0
Q2FuZGlkYXRlc0ZvclRlc3RpbmcoKQoreworICAgIG1fY2FuQ3JlYXRlVG91Y2hCYXJzID0gdHJ1
ZTsKKyAgICB1cGRhdGVUb3VjaEJhcigpOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVU
b3VjaEJhcigpCit7CisgICAgaWYgKCFtX2NhbkNyZWF0ZVRvdWNoQmFycykKKyAgICAgICAgcmV0
dXJuOworCisgICAgTlNUb3VjaEJhciAqdG91Y2hCYXIgPSBuaWw7CisgICAgYm9vbCB1c2VyQWN0
aW9uUmVxdWlyZW1lbnRzSGF2ZUJlZW5NZXQgPSBtX3JlcXVpcmVzVXNlckFjdGlvbkZvckVkaXRp
bmdDb250cm9sc01hbmFnZXIgPyBtX3BhZ2UtPmhhc0hhZFNlbGVjdGlvbkNoYW5nZXNGcm9tVXNl
ckludGVyYWN0aW9uKCkgOiB0cnVlOworICAgIGlmIChtX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXND
b250ZW50RWRpdGFibGUgJiYgIW1fcGFnZS0+bmVlZHNIaWRkZW5Db250ZW50RWRpdGFibGVRdWly
aygpKSB7CisgICAgICAgIHVwZGF0ZVRleHRUb3VjaEJhcigpOworICAgICAgICBpZiAodXNlckFj
dGlvblJlcXVpcmVtZW50c0hhdmVCZWVuTWV0KQorICAgICAgICAgICAgdG91Y2hCYXIgPSB0ZXh0
VG91Y2hCYXIoKTsKKyAgICB9CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5B
R0VSKQorICAgIGVsc2UgaWYgKG1fcGFnZS0+aGFzQWN0aXZlVmlkZW9Gb3JDb250cm9sc01hbmFn
ZXIoKSkgeworICAgICAgICB1cGRhdGVNZWRpYVRvdWNoQmFyKCk7CisgICAgICAgIC8vIElmIHVz
ZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSBpcyB0cnVlLCB0aGVuIHdlIGFyZSByZWx5aW5n
IG9uIHRoZSBBUEkgY2xpZW50IHRvIGRpc3BsYXkgYSBwb3BvdmVyIHZlcnNpb24KKyAgICAgICAg
Ly8gb2YgdGhlIG1lZGlhIHRpbWVsaW5lIGluIHRoZWlyIG93biBmdW5jdGlvbiBiYXIuIElmIGl0
IGlzIGZhbHNlLCB0aGVuIHdlIHdpbGwgZGlzcGxheSB0aGUgbWVkaWEgdGltZWxpbmUgaW4gb3Vy
CisgICAgICAgIC8vIGZ1bmN0aW9uIGJhci4KKyAgICAgICAgaWYgKCF1c2VNZWRpYVBsYXliYWNr
Q29udHJvbHNWaWV3KCkpCisgICAgICAgICAgICB0b3VjaEJhciA9IFttX21lZGlhVG91Y2hCYXJQ
cm92aWRlciByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHRvdWNoQmFyKV0gPyBbKGlkKW1f
bWVkaWFUb3VjaEJhclByb3ZpZGVyLmdldCgpIHRvdWNoQmFyXSA6IFsoaWQpbV9tZWRpYVRvdWNo
QmFyUHJvdmlkZXIuZ2V0KCkgdG91Y2hCYXJdOworICAgIH0gZWxzZSBpZiAoW21fbWVkaWFUb3Vj
aEJhclByb3ZpZGVyIHBsYXliYWNrQ29udHJvbHNDb250cm9sbGVyXSkgeworICAgICAgICBpZiAo
bV9jbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcpIHsKKyAgICAgICAgICAgIGlm
IChbbV92aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYl9kaWRSZW1vdmVNZWRp
YUNvbnRyb2xzTWFuYWdlcildICYmIG1fdmlldyA9PSBtX3ZpZXcud2luZG93LmZpcnN0UmVzcG9u
ZGVyKQorICAgICAgICAgICAgICAgIFttX3ZpZXcgX3dlYl9kaWRSZW1vdmVNZWRpYUNvbnRyb2xz
TWFuYWdlcl07CisgICAgICAgIH0KKyAgICAgICAgW21fbWVkaWFUb3VjaEJhclByb3ZpZGVyIHNl
dFBsYXliYWNrQ29udHJvbHNDb250cm9sbGVyOm5pbF07CisgICAgICAgIFttX21lZGlhUGxheWJh
Y2tDb250cm9sc1ZpZXcgc2V0UGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXI6bmlsXTsKKyAgICB9
CisjZW5kaWYKKworICAgIGlmICh0b3VjaEJhciA9PSBtX2N1cnJlbnRUb3VjaEJhcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gSWYgbV9lZGl0YWJsZUVsZW1lbnRJc0ZvY3VzZWQgaXMgdHJ1
ZSwgdGhlbiB3ZSBtYXkgaGF2ZSBhIG5vbi1lZGl0YWJsZSBzZWxlY3Rpb24gcmlnaHQgbm93IGp1
c3QgYmVjYXVzZQorICAgIC8vIHRoZSB1c2VyIGlzIGNsaWNraW5nIG9yIHRhYmJpbmcgYmV0d2Vl
biBlZGl0YWJsZSBmaWVsZHMuCisgICAgaWYgKG1fZWRpdGFibGVFbGVtZW50SXNGb2N1c2VkICYm
IHRvdWNoQmFyICE9IHRleHRUb3VjaEJhcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2N1
cnJlbnRUb3VjaEJhciA9IHRvdWNoQmFyOworICAgIFttX3ZpZXcgd2lsbENoYW5nZVZhbHVlRm9y
S2V5OkAidG91Y2hCYXIiXTsKKyAgICBbbV92aWV3IHNldFRvdWNoQmFyOm1fY3VycmVudFRvdWNo
QmFyLmdldCgpXTsKKyAgICBbbV92aWV3IGRpZENoYW5nZVZhbHVlRm9yS2V5OkAidG91Y2hCYXIi
XTsKK30KKworYm9vbCBXZWJWaWV3SW1wbDo6c2hvdWxkUmVxdWVzdENhbmRpZGF0ZXMoKSBjb25z
dAoreworICAgIHJldHVybiAhbV9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzSW5QYXNzd29yZEZpZWxk
ICYmIGNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0oKS5jYW5kaWRhdGVMaXN0VmlzaWJsZTsKK30K
Kwordm9pZCBXZWJWaWV3SW1wbDo6c2hvd0NhbmRpZGF0ZXMoTlNBcnJheSAqY2FuZGlkYXRlcywg
TlNTdHJpbmcgKnN0cmluZywgTlNSZWN0IHJlY3RPZlR5cGVkU3RyaW5nLCBOU1JhbmdlIHNlbGVj
dGVkUmFuZ2UsIE5TVmlldyAqdmlldywgdm9pZCAoXmNvbXBsZXRpb25IYW5kbGVyKShOU1RleHRD
aGVja2luZ1Jlc3VsdCAqYWNjZXB0ZWRDYW5kaWRhdGUpKQoreworICAgIFtjYW5kaWRhdGVMaXN0
VG91Y2hCYXJJdGVtKCkgc2V0Q2FuZGlkYXRlczpjYW5kaWRhdGVzIGZvclNlbGVjdGVkUmFuZ2U6
c2VsZWN0ZWRSYW5nZSBpblN0cmluZzpzdHJpbmddOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjp3
ZWJWaWV3SW1wbEFkZGl0aW9uc1dpbGxEZXN0cm95VmlldygpCit7CisgICAgW21fdGV4dFRvdWNo
QmFySXRlbUNvbnRyb2xsZXIgZGlkRGVzdHJveVZpZXddOworCisjaWYgRU5BQkxFKFdFQl9QTEFZ
QkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIFttX21lZGlhVG91Y2hCYXJQcm92aWRlciBzZXRQ
bGF5YmFja0NvbnRyb2xzQ29udHJvbGxlcjpuaWxdOworICAgIFttX21lZGlhUGxheWJhY2tDb250
cm9sc1ZpZXcgc2V0UGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXI6bmlsXTsKKyNlbmRpZgorfQor
Cit2b2lkIFdlYlZpZXdJbXBsOjpzZXRFZGl0YWJsZUVsZW1lbnRJc0ZvY3VzZWQoYm9vbCBlZGl0
YWJsZUVsZW1lbnRJc0ZvY3VzZWQpCit7CisgICAgbV9lZGl0YWJsZUVsZW1lbnRJc0ZvY3VzZWQg
PSBlZGl0YWJsZUVsZW1lbnRJc0ZvY3VzZWQ7CisKKyAgICAvLyBJZiB0aGUgZWRpdGFibGUgZWxl
bWVudHMgaGF2ZSBibHVycmVkLCB0aGVuIHdlIG1pZ2h0IG5lZWQgdG8gZ2V0IHJpZCBvZiB0aGUg
ZWRpdGluZyBmdW5jdGlvbiBiYXIuCisgICAgaWYgKCFtX2VkaXRhYmxlRWxlbWVudElzRm9jdXNl
ZCkKKyAgICAgICAgdXBkYXRlVG91Y2hCYXIoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CiAjZWxzZQogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZVdl
YlZpZXdJbXBsQWRkaXRpb25zKCkKK3ZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZVRvdWNoQmFyKCkK
IHsKIH0KIApAQCAtNDY1LDcgKzExNTgsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRFZGl0YWJs
ZUVsZW1lbnRJc0ZvCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAotI2VuZGlmIC8vIF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwICYmIFVTRShBUFBMRV9JTlRFUk5B
TF9TREspCisjZW5kaWYgLy8gSEFWRShUT1VDSF9CQVIpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewog
CkBAIC02MTUsNyArMTMwOCw3IEBAIGJvb2wgV2ViVmlld0ltcGw6OmJlY29tZUZpcnN0UmVzcG9u
ZGVyKCkKIAogICAgIG1faW5CZWNvbWVGaXJzdFJlc3BvbmRlciA9IGZhbHNlOwogCi0gICAgdXBk
YXRlV2ViVmlld0ltcGxBZGRpdGlvbnMoKTsKKyAgICB1cGRhdGVUb3VjaEJhcigpOwogCiAgICAg
aWYgKGRpcmVjdGlvbiAhPSBOU0RpcmVjdFNlbGVjdGlvbikgewogICAgICAgICBOU0V2ZW50ICpl
dmVudCA9IFtOU0FwcCBjdXJyZW50RXZlbnRdOwpAQCAtMTgwOCw3ICsyNTAxLDcgQEAgdm9pZCBX
ZWJWaWV3SW1wbDo6c2VsZWN0aW9uRGlkQ2hhbmdlKCkKICAgICBpZiAoIW1faXNIYW5kbGluZ0Fj
Y2VwdGVkQ2FuZGlkYXRlKQogICAgICAgICBtX3NvZnRTcGFjZVJhbmdlID0gTlNNYWtlUmFuZ2Uo
TlNOb3RGb3VuZCwgMCk7CiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAx
MDEyMDAKLSAgICB1cGRhdGVXZWJWaWV3SW1wbEFkZGl0aW9ucygpOworICAgIHVwZGF0ZVRvdWNo
QmFyKCk7CiAgICAgaWYgKCFtX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNNaXNzaW5nUG9zdExheW91
dERhdGEpCiAgICAgICAgIHJlcXVlc3RDYW5kaWRhdGVzRm9yU2VsZWN0aW9uSWZOZWVkZWQoKTsK
ICNlbmRpZgpAQCAtMjQ0OCw3ICszMTQxLDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6ZGlkSGFuZGxl
QWNjZXB0ZWRDYW5kaQogdm9pZCBXZWJWaWV3SW1wbDo6dmlkZW9Db250cm9sc01hbmFnZXJEaWRD
aGFuZ2UoKQogewogI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAw
Ci0gICAgdXBkYXRlV2ViVmlld0ltcGxBZGRpdGlvbnMoKTsKKyAgICB1cGRhdGVUb3VjaEJhcigp
OwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODQwNSkKKysr
IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3
IEBACisyMDE2LTExLTA0ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAg
ICBTdXBwb3J0IFRvdWNoQmFyIGluIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NDM3CisgICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0K
KyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjg4NzY1MjQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5tbToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlv
bik6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OnVwZGF0ZUVkaXRvclN0YXRlQWZ0ZXJMYXlv
dXRJZkVkaXRhYmlsaXR5Q2hhbmdlZCk6CisgICAgICAgICogV2ViVmlldy9XZWJIVE1MVmlldy5t
bToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbV0pOgor
ICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bX1dlYlRleHRMaXN0VG91
Y2hCYXJWaWV3Q29udHJvbGxlciBpbml0V2l0aFdlYlZpZXc6XSk6CisgICAgICAgICgtW19XZWJU
ZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgX3NlbGVjdExpc3Q6XSk6CisgICAgICAgICgt
W19XZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgc2V0Q3VycmVudExpc3RUeXBlOl0p
OgorICAgICAgICAoLVtXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBpbml0V2l0aFdlYlZp
ZXc6XSk6CisgICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIGl0ZW1Gb3JJ
ZGVudGlmaWVyOl0pOgorICAgICAgICAoLVtXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciB3
ZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXJdKToKKyAgICAgICAgKC1bV2ViVGV4dFRv
dWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzQm9sZDpdKToKKyAgICAgICAgKC1bV2ViVGV4
dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzSXRhbGljOl0pOgorICAgICAgICAoLVtX
ZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRUZXh0SXNVbmRlcmxpbmVkOl0pOgorICAg
ICAgICAoLVtXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBfd2ViQ2hhbmdlVGV4dFN0eWxl
Ol0pOgorICAgICAgICAoLVtXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRDdXJyZW50
VGV4dEFsaWdubWVudDpdKToKKyAgICAgICAgKC1bV2ViVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xs
ZXIgX3dlYkNoYW5nZVRleHRBbGlnbm1lbnQ6XSk6CisgICAgICAgICgtW1dlYlRleHRUb3VjaEJh
ckl0ZW1Db250cm9sbGVyIHRleHRDb2xvcl0pOgorICAgICAgICAoLVtXZWJUZXh0VG91Y2hCYXJJ
dGVtQ29udHJvbGxlciBzZXRUZXh0Q29sb3I6XSk6CisgICAgICAgICgtW1dlYlRleHRUb3VjaEJh
ckl0ZW1Db250cm9sbGVyIF93ZWJDaGFuZ2VDb2xvcjpdKToKKyAgICAgICAgKC1bV2ViVGV4dFRv
dWNoQmFySXRlbUNvbnRyb2xsZXIgdGV4dExpc3RWaWV3Q29udHJvbGxlcl0pOgorICAgICAgICAo
LVtXZWJWaWV3IF9jb21tb25Jbml0aWFsaXphdGlvbldpdGhGcmFtZU5hbWU6Z3JvdXBOYW1lOl0p
OgorICAgICAgICAoLVtXZWJWaWV3IHNob3dDYW5kaWRhdGVzOmZvclN0cmluZzppblJlY3Q6Zm9y
U2VsZWN0ZWRSYW5nZTp2aWV3OmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXZWJW
aWV3IHNob3VsZFJlcXVlc3RDYW5kaWRhdGVzXSk6CisgICAgICAgICgtW1dlYlZpZXcgZm9yY2VS
ZXF1ZXN0Q2FuZGlkYXRlc0ZvclRlc3RpbmddKToKKyAgICAgICAgKC1bV2ViVmlldyBtYWtlVG91
Y2hCYXJdKToKKyAgICAgICAgKC1bV2ViVmlldyB0b3VjaEJhcjptYWtlSXRlbUZvcklkZW50aWZp
ZXI6XSk6CisgICAgICAgICh0ZXh0Q2hlY2tpbmdSZXN1bHRGcm9tTlNUZXh0Q2hlY2tpbmdSZXN1
bHQpOgorICAgICAgICAoLVtXZWJWaWV3IGNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW06ZW5kU2Vs
ZWN0aW5nQ2FuZGlkYXRlQXRJbmRleDpdKToKKyAgICAgICAgKC1bV2ViVmlldyBjYW5kaWRhdGVM
aXN0VG91Y2hCYXJJdGVtOmNoYW5nZWRDYW5kaWRhdGVMaXN0VmlzaWJpbGl0eTpdKToKKyAgICAg
ICAgKC1bV2ViVmlldyBfc2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlckZvck1lZGlhRWxlbWVu
dDpdKToKKyAgICAgICAgKC1bV2ViVmlldyBfY2xlYXJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcl0p
OgorICAgICAgICAoLVtXZWJWaWV3IF9kaXNtaXNzVGV4dFRvdWNoQmFyUG9wb3Zlckl0ZW1XaXRo
SWRlbnRpZmllcjpdKToKKyAgICAgICAgKC1bV2ViVmlldyBfdGV4dFRvdWNoQmFyQ3VzdG9taXph
dGlvbkFsbG93ZWRJZGVudGlmaWVyc10pOgorICAgICAgICAoLVtXZWJWaWV3IF9wbGFpblRleHRU
b3VjaEJhckN1c3RvbWl6YXRpb25EZWZhdWx0SXRlbUlkZW50aWZpZXJzXSk6CisgICAgICAgICgt
W1dlYlZpZXcgX3JpY2hUZXh0VG91Y2hCYXJDdXN0b21pemF0aW9uRGVmYXVsdEl0ZW1JZGVudGlm
aWVyc10pOgorICAgICAgICAoLVtXZWJWaWV3IHRvdWNoQmFyRGlkRXhpdEN1c3RvbWl6YXRpb246
XSk6CisgICAgICAgICgtW1dlYlZpZXcgdG91Y2hCYXJXaWxsRW50ZXJDdXN0b21pemF0aW9uOl0p
OgorICAgICAgICAoLVtXZWJWaWV3IGRpZENoYW5nZUF1dG9tYXRpY1RleHRDb21wbGV0aW9uOl0p
OgorICAgICAgICAoLVtXZWJWaWV3IHNldFVwVGV4dFRvdWNoQmFyOl0pOgorICAgICAgICAoLVtX
ZWJWaWV3IF9pc1JpY2hseUVkaXRhYmxlXSk6CisgICAgICAgICgtW1dlYlZpZXcgdGV4dFRvdWNo
QmFyXSk6CisgICAgICAgICgtW1dlYlZpZXcgdXBkYXRlVGV4dFRvdWNoQmFyXSk6CisgICAgICAg
ICgtW1dlYlZpZXcgdXBkYXRlTWVkaWFUb3VjaEJhcl0pOgorICAgICAgICAoLVtXZWJWaWV3IHVw
ZGF0ZVRvdWNoQmFyXSk6CisgICAgICAgICgtW1dlYlZpZXcgcHJlcGFyZUZvck1vdXNlRG93bl0p
OgorICAgICAgICAoLVtXZWJWaWV3IHByZXBhcmVGb3JNb3VzZVVwXSk6CisgICAgICAgICgtW1dl
YlZpZXcgd2ViVmlld0FkZGl0aW9uc1dpbGxEZXN0cm95Vmlld10pOgorICAgICAgICAoLVtXZWJW
aWV3IGNhbmRpZGF0ZUxpc3RdKToKKyAgICAgICAgKC1bV2ViVmlldyB1cGRhdGVXZWJWaWV3QWRk
aXRpb25zXSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3RGF0YS5oOgorICAg
ICAgICAqIFdlYlZpZXcvV2ViVmlld0ludGVybmFsLmg6CisgICAgICAgICogV2ViVmlldy9XZWJW
aWV3UHJpdmF0ZS5oOgorCiAyMDE2LTExLTA0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFs
bGF3YUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEgc2V0dGluZyBhbmQgcHJlZmVyZW5jZXMg
dG8gZW5hYmxlL2Rpc2FibGUgYXN5bmMgaW1hZ2UgZGVjb2RpbmcKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0JKHJldmlz
aW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQ3LDcgKzM0Nyw3IEBAIHZvaWQgV2ViRWRp
dG9yQ2xpZW50OjpyZXNwb25kVG9DaGFuZ2VkU2UKICAgICBOU1ZpZXc8V2ViRG9jdW1lbnRWaWV3
PiAqZG9jdW1lbnRWaWV3ID0gW1traXQoZnJhbWUpIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsK
ICAgICBpZiAoW2RvY3VtZW50VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11d
KSB7CiAgICAgICAgIFsoV2ViSFRNTFZpZXcgKilkb2N1bWVudFZpZXcgX3NlbGVjdGlvbkNoYW5n
ZWRdOwotICAgICAgICBbbV93ZWJWaWV3IHVwZGF0ZVdlYlZpZXdBZGRpdGlvbnNdOworICAgICAg
ICBbbV93ZWJWaWV3IHVwZGF0ZVRvdWNoQmFyXTsKICAgICAgICAgbV9sYXN0RWRpdG9yU3RhdGVX
YXNDb250ZW50RWRpdGFibGUgPSBbKFdlYkhUTUxWaWV3ICopZG9jdW1lbnRWaWV3IF9pc0VkaXRh
YmxlXSA/IEVkaXRvclN0YXRlSXNDb250ZW50RWRpdGFibGU6OlllcyA6IEVkaXRvclN0YXRlSXND
b250ZW50RWRpdGFibGU6Ok5vOwogICAgIH0KIApAQCAtNjY3LDcgKzY2Nyw3IEBAIHZvaWQgV2Vi
RWRpdG9yQ2xpZW50Ojp1cGRhdGVFZGl0b3JTdGF0ZUEKIAogICAgIEVkaXRvclN0YXRlSXNDb250
ZW50RWRpdGFibGUgZWRpdG9yU3RhdGVJc0NvbnRlbnRFZGl0YWJsZSA9IFsoV2ViSFRNTFZpZXcg
Kilkb2N1bWVudFZpZXcgX2lzRWRpdGFibGVdID8gRWRpdG9yU3RhdGVJc0NvbnRlbnRFZGl0YWJs
ZTo6WWVzIDogRWRpdG9yU3RhdGVJc0NvbnRlbnRFZGl0YWJsZTo6Tm87CiAgICAgaWYgKG1fbGFz
dEVkaXRvclN0YXRlV2FzQ29udGVudEVkaXRhYmxlICE9IGVkaXRvclN0YXRlSXNDb250ZW50RWRp
dGFibGUpCi0gICAgICAgIFttX3dlYlZpZXcgdXBkYXRlV2ViVmlld0FkZGl0aW9uc107CisgICAg
ICAgIFttX3dlYlZpZXcgdXBkYXRlVG91Y2hCYXJdOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVu
dDo6cmVnaXN0ZXJVbmRvU3RlcChQYXNzUmVmUHRyPFVuZG9TdGVwPiBjbWQpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHJldmlzaW9uIDIwODQwNSkKKysr
IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHdvcmtpbmcgY29weSkK
QEAgLTcyMzAsOCArNzIzMCwxMSBAQCAtICh2b2lkKV91cGRhdGVTZWxlY3Rpb25Gb3JJbnB1dE1h
bmFnZXIKICNlbmRpZiAvLyBQTEFURk9STShJT1MpCiB9CiAKLSNpZiBQTEFURk9STShNQUMpICYm
IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwICYmIFVTRShBUFBMRV9J
TlRFUk5BTF9TREspCi0jaW1wb3J0IDxXZWJLaXRBZGRpdGlvbnMvV2ViSFRNTFZpZXdXZWJOU1Rl
eHRJbnB1dFN1cHBvcnRBZGRpdGlvbnMubW0+CisjaWYgSEFWRShUT1VDSF9CQVIpCistIChOU0Nh
bmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gKiljYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtCit7Cisg
ICAgcmV0dXJuIFtbc2VsZiBfd2ViVmlld10gY2FuZGlkYXRlTGlzdF07Cit9CiAjZW5kaWYKIAog
QGVuZApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gMjA4
NDA1KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTgsNiArMTE4LDcgQEAKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3Qu
aD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0V4Y2VwdGlvbi5oPgogI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSlNWYWx1ZVJlZi5oPgorI2ltcG9ydCA8V2ViQ29yZS9BVktpdFNQSS5oPgogI2lt
cG9ydCA8V2ViQ29yZS9BbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdl
YkNvcmUvQW5pbWF0aW9uQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9BcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZS5oPgpAQCAtMTQ0LDYgKzE0NSw4IEBACiAjaW1wb3J0IDxXZWJDb3JlL0dl
b2xvY2F0aW9uQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9HZW9sb2NhdGlvbkVycm9y
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1M
T0xpc3RFbGVtZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxVTGlzdEVsZW1lbnQuaD4KICNp
bXBvcnQgPFdlYkNvcmUvSFRNTFZpZGVvRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IaXN0
b3J5Q29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9IaXN0b3J5SXRlbS5oPgpAQCAtMTUz
LDExICsxNTYsMTQgQEAKICNpbXBvcnQgPFdlYkNvcmUvSlNFbGVtZW50Lmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0pTTm9kZUxpc3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvSlNOb3RpZmljYXRpb24uaD4K
KyNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgogI2ltcG9ydCA8V2ViQ29yZS9M
b2dJbml0aWFsaXphdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9NSU1FVHlwZVJlZ2lzdHJ5Lmg+
CiAjaW1wb3J0IDxXZWJDb3JlL01haW5GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9NZW1vcnlD
YWNoZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvTlNTcGVsbENoZWNrZXJTUEkuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTlNUb3Vj
aEJhclNQSS5oPgogI2ltcG9ydCA8V2ViQ29yZS9OU1VSTEZpbGVUeXBlTWFwcGluZ3NTUEkuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL05vZGVMaXN0Lmg+CkBAIC0xOTIsNiArMTk4LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvV2Vi
Q29yZU9iakNFeHRyYXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVZpZXcuaD4KICNpbXBv
cnQgPFdlYkNvcmUvV2lkZ2V0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL2h0bWxlZGl0aW5nLmg+CiAj
aW1wb3J0IDxXZWJLaXRMZWdhY3kvRE9NLmg+CiAjaW1wb3J0IDxXZWJLaXRMZWdhY3kvRE9NRXh0
ZW5zaW9ucy5oPgogI2ltcG9ydCA8V2ViS2l0TGVnYWN5L0RPTVByaXZhdGUuaD4KQEAgLTIxMyw2
ICsyMjAsNyBAQAogI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgogI2ltcG9ydCA8d3RmL1J1bkxvb3Au
aD4KICNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbXBvcnQgPHd0Zi9UZW1wb3JhcnlD
aGFuZ2UuaD4KICNpbXBvcnQgPHd0Zi9zcGkvZGFyd2luL2R5bGRTUEkuaD4KIAogI2lmICFQTEFU
Rk9STShJT1MpCkBAIC0zMDcsNiArMzE1LDEyIEBACiAjaW1wb3J0IDxXZWJDb3JlL1dlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lmg+CiAjZW5kaWYKIAorI2lmIEhBVkUoVE9VQ0hf
QkFSKSAmJiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCitTT0ZUX0xJTktf
RlJBTUVXT1JLKEFWS2l0KQorU09GVF9MSU5LX0NMQVNTKEFWS2l0LCBBVkZ1bmN0aW9uQmFyUGxh
eWJhY2tDb250cm9sc1Byb3ZpZGVyKQorU09GVF9MSU5LX0NMQVNTKEFWS2l0LCBBVkZ1bmN0aW9u
QmFyU2NydWJiZXIpCisjZW5kaWYgLy8gSEFWRShUT1VDSF9CQVIpICYmIEVOQUJMRShXRUJfUExB
WUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKwogI2lmIFBMQVRGT1JNKE1BQykKIFNPRlRfTElOS19D
T05TVEFOVF9NQVlfRkFJTChMb29rdXAsIExVTm90aWZpY2F0aW9uUG9wb3ZlcldpbGxDbG9zZSwg
TlNTdHJpbmcgKikKICNlbmRpZgpAQCAtNjYyLDYgKzY3NiwyODEgQEAgc3RhdGljIEJPT0wgYXV0
b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYgogc3RhdGljIEJPT0wgYXV0b21hdGljU3BlbGxpbmdD
b3JyZWN0aW9uRW5hYmxlZDsKICNlbmRpZgogCisjaWYgSEFWRShUT1VDSF9CQVIpCisKK2VudW0g
Y2xhc3MgV2ViTGlzdFR5cGUgeworICAgIE5vbmUgPSAwLAorICAgIE9yZGVyZWQsCisgICAgVW5v
cmRlcmVkCit9OworCitAaW50ZXJmYWNlIF9XZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xs
ZXIgOiBOU1ZpZXdDb250cm9sbGVyIHsKKyAgICBXZWJMaXN0VHlwZSBfY3VycmVudExpc3RUeXBl
OworCitAcHJpdmF0ZQorICAgIFdlYlZpZXcgKl93ZWJWaWV3OworfQorCitAcHJvcGVydHkgKG5v
bmF0b21pYykgV2ViTGlzdFR5cGUgY3VycmVudExpc3RUeXBlOworCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhXZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldzsKKworQGVuZAorCitAaW1wbGVtZW50
YXRpb24gX1dlYlRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlcgorCitAc3ludGhlc2l6ZSBj
dXJyZW50TGlzdFR5cGU9X2N1cnJlbnRMaXN0VHlwZTsKKworc3RhdGljIGNvbnN0IGRvdWJsZSBs
aXN0Q29udHJvbFNlZ21lbnRXaWR0aCA9IDY3LjA7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBu
b0xpc3RTZWdtZW50ID0gMDsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCB1bm9yZGVyZWRMaXN0U2Vn
bWVudCA9IDE7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgb3JkZXJlZExpc3RTZWdtZW50ID0gMjsK
KworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcKK3sK
KyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKwor
ICAgIF93ZWJWaWV3ID0gd2ViVmlldzsKKworICAgIE5TU2VnbWVudGVkQ29udHJvbCAqaW5zZXJ0
TGlzdENvbnRyb2wgPSBbTlNTZWdtZW50ZWRDb250cm9sIHNlZ21lbnRlZENvbnRyb2xXaXRoTGFi
ZWxzOkBbIFdlYkNvcmU6Omluc2VydExpc3RUeXBlTm9uZSgpLCBXZWJDb3JlOjppbnNlcnRMaXN0
VHlwZUJ1bGxldGVkKCksIFdlYkNvcmU6Omluc2VydExpc3RUeXBlTnVtYmVyZWQoKSBdIHRyYWNr
aW5nTW9kZTpOU1NlZ21lbnRTd2l0Y2hUcmFja2luZ1NlbGVjdE9uZSB0YXJnZXQ6c2VsZiBhY3Rp
b246QHNlbGVjdG9yKF9zZWxlY3RMaXN0OildOworICAgIFtpbnNlcnRMaXN0Q29udHJvbCBzZXRX
aWR0aDpsaXN0Q29udHJvbFNlZ21lbnRXaWR0aCBmb3JTZWdtZW50Om5vTGlzdFNlZ21lbnRdOwor
ICAgIFtpbnNlcnRMaXN0Q29udHJvbCBzZXRXaWR0aDpsaXN0Q29udHJvbFNlZ21lbnRXaWR0aCBm
b3JTZWdtZW50OnVub3JkZXJlZExpc3RTZWdtZW50XTsKKyAgICBbaW5zZXJ0TGlzdENvbnRyb2wg
c2V0V2lkdGg6bGlzdENvbnRyb2xTZWdtZW50V2lkdGggZm9yU2VnbWVudDpvcmRlcmVkTGlzdFNl
Z21lbnRdOworICAgIGluc2VydExpc3RDb250cm9sLmZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRP
ZlNpemU6MTVdOworCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFu
ZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisgICAgaWQg
c2VnbWVudEVsZW1lbnQgPSBOU0FjY2Vzc2liaWxpdHlVbmlnbm9yZWREZXNjZW5kYW50KGluc2Vy
dExpc3RDb250cm9sKTsKKyAgICBOU0FycmF5ICpzZWdtZW50cyA9IFtzZWdtZW50RWxlbWVudCBh
Y2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5BdHRyaWJ1
dGVdOworICAgIEFTU0VSVChzZWdtZW50cy5jb3VudCA9PSAzKTsKKyAgICBbW3NlZ21lbnRzIG9i
amVjdEF0SW5kZXg6bm9MaXN0U2VnbWVudF0gYWNjZXNzaWJpbGl0eVNldE92ZXJyaWRlVmFsdWU6
V2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVOb25lKCkgZm9yQXR0cmlidXRlOk5TQWNjZXNzaWJpbGl0
eURlc2NyaXB0aW9uQXR0cmlidXRlXTsKKyAgICBbW3NlZ21lbnRzIG9iamVjdEF0SW5kZXg6dW5v
cmRlcmVkTGlzdFNlZ21lbnRdIGFjY2Vzc2liaWxpdHlTZXRPdmVycmlkZVZhbHVlOldlYkNvcmU6
Omluc2VydExpc3RUeXBlQnVsbGV0ZWRBY2Nlc3NpYmlsaXR5VGl0bGUoKSBmb3JBdHRyaWJ1dGU6
TlNBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25BdHRyaWJ1dGVdOworICAgIFtbc2VnbWVudHMgb2Jq
ZWN0QXRJbmRleDpvcmRlcmVkTGlzdFNlZ21lbnRdIGFjY2Vzc2liaWxpdHlTZXRPdmVycmlkZVZh
bHVlOldlYkNvcmU6Omluc2VydExpc3RUeXBlTnVtYmVyZWRBY2Nlc3NpYmlsaXR5VGl0bGUoKSBm
b3JBdHRyaWJ1dGU6TlNBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25BdHRyaWJ1dGVdOworI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIHBvcAorCisgICAgc2VsZi52aWV3ID0gaW5zZXJ0TGlzdENvbnRy
b2w7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClfc2VsZWN0TGlzdDooaWQpc2Vu
ZGVyCit7CisgICAgTlNWaWV3ICpkb2N1bWVudFZpZXcgPSBbW1tfd2ViVmlldyBfc2VsZWN0ZWRP
ck1haW5GcmFtZV0gZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOworICAgIGlmICghW2RvY3VtZW50
VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKQorICAgICAgICByZXR1cm47
CisKKyAgICBXZWJIVE1MVmlldyAqd2ViSFRNTFZpZXcgPSAoV2ViSFRNTFZpZXcgKilkb2N1bWVu
dFZpZXc7CisgICAgTlNTZWdtZW50ZWRDb250cm9sICppbnNlcnRMaXN0Q29udHJvbCA9IChOU1Nl
Z21lbnRlZENvbnRyb2wgKilzZWxmLnZpZXc7CisgICAgaWYgKGluc2VydExpc3RDb250cm9sLnNl
bGVjdGVkU2VnbWVudCA9PSBub0xpc3RTZWdtZW50KSB7CisgICAgICAgIC8vIFRoZXJlIGlzIG5v
ICJyZW1vdmUgbGlzdCIgZWRpdCBjb21tYW5kLCBidXQgX2luc2VydE9yZGVyZWRMaXN0IGFuZCBf
aW5zZXJ0VW5vcmRlcmVkTGlzdCBib3RoCisgICAgICAgIC8vIGJlaGF2ZSBhcyB0b2dnbGVzLCBz
byB3ZSBjYW4gaW52b2tlIHRoZSBhcHByb3ByaWF0ZSBtZXRob2QgZGVwZW5kaW5nIG9uIG91ciBf
Y3VycmVudExpc3RUeXBlCisgICAgICAgIC8vIHRvIHJlbW92ZSBhbiBleGlzdGluZyBsaXN0LiBX
ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIGlmIF9jdXJyZW50TGlzdFR5cGUgaXMgV2ViTGlz
dFR5cGU6Ok5vbmUuCisgICAgICAgIGlmIChfY3VycmVudExpc3RUeXBlID09IFdlYkxpc3RUeXBl
OjpPcmRlcmVkKQorICAgICAgICAgICAgW3dlYkhUTUxWaWV3IF9pbnNlcnRPcmRlcmVkTGlzdF07
CisgICAgICAgIGVsc2UgaWYgKF9jdXJyZW50TGlzdFR5cGUgPT0gV2ViTGlzdFR5cGU6OlVub3Jk
ZXJlZCkKKyAgICAgICAgICAgIFt3ZWJIVE1MVmlldyBfaW5zZXJ0VW5vcmRlcmVkTGlzdF07Cisg
ICAgfSBlbHNlIGlmIChpbnNlcnRMaXN0Q29udHJvbC5zZWxlY3RlZFNlZ21lbnQgPT0gdW5vcmRl
cmVkTGlzdFNlZ21lbnQpCisgICAgICAgIFt3ZWJIVE1MVmlldyBfaW5zZXJ0VW5vcmRlcmVkTGlz
dF07CisgICAgZWxzZSBpZiAoaW5zZXJ0TGlzdENvbnRyb2wuc2VsZWN0ZWRTZWdtZW50ID09IG9y
ZGVyZWRMaXN0U2VnbWVudCkKKyAgICAgICAgW3dlYkhUTUxWaWV3IF9pbnNlcnRPcmRlcmVkTGlz
dF07CisKKyAgICBbX3dlYlZpZXcgX2Rpc21pc3NUZXh0VG91Y2hCYXJQb3BvdmVySXRlbVdpdGhJ
ZGVudGlmaWVyOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRMaXN0XTsKK30KKworLSAodm9p
ZClzZXRDdXJyZW50TGlzdFR5cGU6KFdlYkxpc3RUeXBlKWxpc3RUeXBlCit7CisgICAgTlNTZWdt
ZW50ZWRDb250cm9sICppbnNlcnRMaXN0Q29udHJvbCA9IChOU1NlZ21lbnRlZENvbnRyb2wgKilz
ZWxmLnZpZXc7CisgICAgc3dpdGNoIChsaXN0VHlwZSkgeworICAgIGNhc2UgV2ViTGlzdFR5cGU6
Ok5vbmU6CisgICAgICAgIFtpbnNlcnRMaXN0Q29udHJvbCBzZXRTZWxlY3RlZDpZRVMgZm9yU2Vn
bWVudDpub0xpc3RTZWdtZW50XTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJMaXN0VHlw
ZTo6T3JkZXJlZDoKKyAgICAgICAgW2luc2VydExpc3RDb250cm9sIHNldFNlbGVjdGVkOllFUyBm
b3JTZWdtZW50Om9yZGVyZWRMaXN0U2VnbWVudF07CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
V2ViTGlzdFR5cGU6OlVub3JkZXJlZDoKKyAgICAgICAgW2luc2VydExpc3RDb250cm9sIHNldFNl
bGVjdGVkOllFUyBmb3JTZWdtZW50OnVub3JkZXJlZExpc3RTZWdtZW50XTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgX2N1cnJlbnRMaXN0VHlwZSA9IGxpc3RUeXBlOworfQorCitAZW5k
CisKK0BpbnRlcmZhY2UgV2ViVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgOiBOU1RleHRUb3Vj
aEJhckl0ZW1Db250cm9sbGVyIHsKKyAgICBCT09MIF90ZXh0SXNCb2xkOworICAgIEJPT0wgX3Rl
eHRJc0l0YWxpYzsKKyAgICBCT09MIF90ZXh0SXNVbmRlcmxpbmVkOworICAgIE5TVGV4dEFsaWdu
bWVudCBfY3VycmVudFRleHRBbGlnbm1lbnQ7CisgICAgUmV0YWluUHRyPE5TQ29sb3I+IF90ZXh0
Q29sb3I7CisgICAgUmV0YWluUHRyPF9XZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXI+
IF93ZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXI7CisKK0Bwcml2YXRlCisgICAgV2Vi
VmlldyAqX3dlYlZpZXc7Cit9CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIHRleHRJc0Jv
bGQ7CitAcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCB0ZXh0SXNJdGFsaWM7CitAcHJvcGVydHkg
KG5vbmF0b21pYykgQk9PTCB0ZXh0SXNVbmRlcmxpbmVkOworQHByb3BlcnR5IChub25hdG9taWMp
IE5TVGV4dEFsaWdubWVudCBjdXJyZW50VGV4dEFsaWdubWVudDsKK0Bwcm9wZXJ0eSAobm9uYXRv
bWljLCByZXRhaW4sIHJlYWR3cml0ZSkgTlNDb2xvciAqdGV4dENvbG9yOworCistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhXZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldzsKK0BlbmQKKworQGltcGxl
bWVudGF0aW9uIFdlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyCisKK0BzeW50aGVzaXplIHRl
eHRJc0JvbGQ9X3RleHRJc0JvbGQ7CitAc3ludGhlc2l6ZSB0ZXh0SXNJdGFsaWM9X3RleHRJc0l0
YWxpYzsKK0BzeW50aGVzaXplIHRleHRJc1VuZGVybGluZWQ9X3RleHRJc1VuZGVybGluZWQ7CitA
c3ludGhlc2l6ZSBjdXJyZW50VGV4dEFsaWdubWVudD1fY3VycmVudFRleHRBbGlnbm1lbnQ7CisK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3Cit7Cisg
ICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAg
ICBfd2ViVmlldyA9IHdlYlZpZXc7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoTlNUb3Vj
aEJhckl0ZW0gKilpdGVtRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyCit7Cisg
ICAgTlNUb3VjaEJhckl0ZW0gKml0ZW0gPSBbc3VwZXIgaXRlbUZvcklkZW50aWZpZXI6aWRlbnRp
Zmllcl07CisgICAgQk9PTCBpc1RleHRGb3JtYXRJdGVtID0gW2lkZW50aWZpZXIgaXNFcXVhbFRv
U3RyaW5nOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRGb3JtYXRdOworCisgICAgaWYgKGlz
VGV4dEZvcm1hdEl0ZW0gfHwgW2lkZW50aWZpZXIgaXNFcXVhbFRvU3RyaW5nOk5TVG91Y2hCYXJJ
dGVtSWRlbnRpZmllclRleHRTdHlsZV0pCisgICAgICAgIHNlbGYudGV4dFN0eWxlLmFjdGlvbiA9
IEBzZWxlY3Rvcihfd2ViQ2hhbmdlVGV4dFN0eWxlOik7CisKKyAgICBpZiAoaXNUZXh0Rm9ybWF0
SXRlbSB8fCBbaWRlbnRpZmllciBpc0VxdWFsVG9TdHJpbmc6TlNUb3VjaEJhckl0ZW1JZGVudGlm
aWVyVGV4dEFsaWdubWVudF0pCisgICAgICAgIHNlbGYudGV4dEFsaWdubWVudHMuYWN0aW9uID0g
QHNlbGVjdG9yKF93ZWJDaGFuZ2VUZXh0QWxpZ25tZW50Oik7CisKKyAgICBOU0NvbG9yUGlja2Vy
VG91Y2hCYXJJdGVtICpjb2xvclBpY2tlckl0ZW0gPSBuaWw7CisgICAgaWYgKFtpZGVudGlmaWVy
IGlzRXF1YWxUb1N0cmluZzpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Q29sb3JQaWNrZXJd
ICYmIFtpdGVtIGlzS2luZE9mQ2xhc3M6W05TQ29sb3JQaWNrZXJUb3VjaEJhckl0ZW0gY2xhc3Nd
XSkKKyAgICAgICAgY29sb3JQaWNrZXJJdGVtID0gKE5TQ29sb3JQaWNrZXJUb3VjaEJhckl0ZW0g
KilpdGVtOworICAgIGlmIChpc1RleHRGb3JtYXRJdGVtKQorICAgICAgICBjb2xvclBpY2tlckl0
ZW0gPSBzZWxmLmNvbG9yUGlja2VySXRlbTsKKyAgICBpZiAoY29sb3JQaWNrZXJJdGVtKSB7Cisg
ICAgICAgIGNvbG9yUGlja2VySXRlbS50YXJnZXQgPSBzZWxmOworICAgICAgICBjb2xvclBpY2tl
ckl0ZW0uYWN0aW9uID0gQHNlbGVjdG9yKF93ZWJDaGFuZ2VDb2xvcjopOworICAgICAgICBjb2xv
clBpY2tlckl0ZW0uc2hvd3NBbHBoYSA9IE5POworICAgIH0KKworICAgIHJldHVybiBpdGVtOwor
fQorCistIChfV2ViVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyICopd2ViVGV4dExpc3RU
b3VjaEJhclZpZXdDb250cm9sbGVyCit7CisgICAgcmV0dXJuIChfV2ViVGV4dExpc3RUb3VjaEJh
clZpZXdDb250cm9sbGVyICopW3NlbGYgdGV4dExpc3RWaWV3Q29udHJvbGxlcl07Cit9CisKKy0g
KHZvaWQpc2V0VGV4dElzQm9sZDooQk9PTClib2xkCit7CisgICAgX3RleHRJc0JvbGQgPSBib2xk
OworICAgIGlmIChbc2VsZi50ZXh0U3R5bGUgaXNTZWxlY3RlZEZvclNlZ21lbnQ6MF0gIT0gX3Rl
eHRJc0JvbGQpCisgICAgICAgIFtzZWxmLnRleHRTdHlsZSBzZXRTZWxlY3RlZDpfdGV4dElzQm9s
ZCBmb3JTZWdtZW50OjBdOworfQorCistICh2b2lkKXNldFRleHRJc0l0YWxpYzooQk9PTClpdGFs
aWMKK3sKKyAgICBfdGV4dElzSXRhbGljID0gaXRhbGljOworICAgIGlmIChbc2VsZi50ZXh0U3R5
bGUgaXNTZWxlY3RlZEZvclNlZ21lbnQ6MV0gIT0gX3RleHRJc0l0YWxpYykKKyAgICAgICAgW3Nl
bGYudGV4dFN0eWxlIHNldFNlbGVjdGVkOl90ZXh0SXNJdGFsaWMgZm9yU2VnbWVudDoxXTsKK30K
KworLSAodm9pZClzZXRUZXh0SXNVbmRlcmxpbmVkOihCT09MKXVuZGVybGluZWQKK3sKKyAgICBf
dGV4dElzVW5kZXJsaW5lZCA9IHVuZGVybGluZWQ7CisgICAgaWYgKFtzZWxmLnRleHRTdHlsZSBp
c1NlbGVjdGVkRm9yU2VnbWVudDoyXSAhPSBfdGV4dElzVW5kZXJsaW5lZCkKKyAgICAgICAgW3Nl
bGYudGV4dFN0eWxlIHNldFNlbGVjdGVkOl90ZXh0SXNVbmRlcmxpbmVkIGZvclNlZ21lbnQ6Ml07
Cit9CisKKy0gKHZvaWQpX3dlYkNoYW5nZVRleHRTdHlsZTooaWQpc2VuZGVyCit7CisgICAgaWYg
KFtzZWxmLnRleHRTdHlsZSBpc1NlbGVjdGVkRm9yU2VnbWVudDowXSAhPSBfdGV4dElzQm9sZCkg
eworICAgICAgICBfdGV4dElzQm9sZCA9ICFfdGV4dElzQm9sZDsKKyAgICAgICAgW193ZWJWaWV3
IF9leGVjdXRlQ29yZUNvbW1hbmRCeU5hbWU6QCJUb2dnbGVCb2xkIiB2YWx1ZTpAIiJdOworICAg
IH0KKworICAgIGlmIChbc2VsZi50ZXh0U3R5bGUgaXNTZWxlY3RlZEZvclNlZ21lbnQ6MV0gIT0g
X3RleHRJc0l0YWxpYykgeworICAgICAgICBfdGV4dElzSXRhbGljID0gIV90ZXh0SXNJdGFsaWM7
CisgICAgICAgIFtfd2ViVmlldyBfZXhlY3V0ZUNvcmVDb21tYW5kQnlOYW1lOkAiVG9nZ2xlSXRh
bGljIiB2YWx1ZTpAIiJdOworICAgIH0KKworICAgIGlmIChbc2VsZi50ZXh0U3R5bGUgaXNTZWxl
Y3RlZEZvclNlZ21lbnQ6Ml0gIT0gX3RleHRJc1VuZGVybGluZWQpIHsKKyAgICAgICAgX3RleHRJ
c1VuZGVybGluZWQgPSAhX3RleHRJc1VuZGVybGluZWQ7CisgICAgICAgIFtfd2ViVmlldyBfZXhl
Y3V0ZUNvcmVDb21tYW5kQnlOYW1lOkAiVG9nZ2xlVW5kZXJsaW5lIiB2YWx1ZTpAIiJdOworICAg
IH0KK30KKworLSAodm9pZClzZXRDdXJyZW50VGV4dEFsaWdubWVudDooTlNUZXh0QWxpZ25tZW50
KWFsaWdubWVudAoreworICAgIF9jdXJyZW50VGV4dEFsaWdubWVudCA9IGFsaWdubWVudDsKKyAg
ICBbc2VsZi50ZXh0QWxpZ25tZW50cyBzZWxlY3RTZWdtZW50V2l0aFRhZzpfY3VycmVudFRleHRB
bGlnbm1lbnRdOworfQorCistICh2b2lkKV93ZWJDaGFuZ2VUZXh0QWxpZ25tZW50OihpZClzZW5k
ZXIKK3sKKyAgICBOU1RleHRBbGlnbm1lbnQgYWxpZ25tZW50ID0gKE5TVGV4dEFsaWdubWVudClb
c2VsZi50ZXh0QWxpZ25tZW50cy5jZWxsIHRhZ0ZvclNlZ21lbnQ6W3NlbGYudGV4dEFsaWdubWVu
dHMgc2VsZWN0ZWRTZWdtZW50XV07CisgICAgc3dpdGNoIChhbGlnbm1lbnQpIHsKKyAgICBjYXNl
IE5TVGV4dEFsaWdubWVudExlZnQ6IHsKKyAgICAgICAgX2N1cnJlbnRUZXh0QWxpZ25tZW50ID0g
TlNUZXh0QWxpZ25tZW50TGVmdDsKKyAgICAgICAgW193ZWJWaWV3IGFsaWduTGVmdDpzZW5kZXJd
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBOU1RleHRBbGlnbm1lbnRSaWdodDog
eworICAgICAgICBfY3VycmVudFRleHRBbGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRSaWdodDsK
KyAgICAgICAgW193ZWJWaWV3IGFsaWduUmlnaHQ6c2VuZGVyXTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgTlNUZXh0QWxpZ25tZW50Q2VudGVyOiB7CisgICAgICAgIF9jdXJyZW50
VGV4dEFsaWdubWVudCA9IE5TVGV4dEFsaWdubWVudENlbnRlcjsKKyAgICAgICAgW193ZWJWaWV3
IGFsaWduQ2VudGVyOnNlbmRlcl07CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIE5T
VGV4dEFsaWdubWVudEp1c3RpZmllZDogeworICAgICAgICBfY3VycmVudFRleHRBbGlnbm1lbnQg
PSBOU1RleHRBbGlnbm1lbnRKdXN0aWZpZWQ7CisgICAgICAgIFtfd2ViVmlldyBhbGlnbkp1c3Rp
ZmllZDpzZW5kZXJdOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgW193ZWJWaWV3IF9kaXNtaXNzVGV4dFRvdWNoQmFyUG9w
b3Zlckl0ZW1XaXRoSWRlbnRpZmllcjpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0QWxpZ25t
ZW50XTsKK30KKworLSAoTlNDb2xvciAqKXRleHRDb2xvcgoreworICAgIHJldHVybiBfdGV4dENv
bG9yLmdldCgpOworfQorCistICh2b2lkKXNldFRleHRDb2xvcjooTlNDb2xvciAqKWNvbG9yCit7
CisgICAgX3RleHRDb2xvciA9IGNvbG9yOworICAgIHNlbGYuY29sb3JQaWNrZXJJdGVtLmNvbG9y
ID0gX3RleHRDb2xvci5nZXQoKTsKK30KKworLSAodm9pZClfd2ViQ2hhbmdlQ29sb3I6KGlkKXNl
bmRlcgoreworICAgIF90ZXh0Q29sb3IgPSBzZWxmLmNvbG9yUGlja2VySXRlbS5jb2xvcjsKKyAg
ICBbX3dlYlZpZXcgX2V4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZTpAIkZvcmVDb2xvciIgdmFsdWU6
IFdlYkNvcmU6OmNvbG9yRnJvbU5TQ29sb3IoX3RleHRDb2xvci5nZXQoKSkuc2VyaWFsaXplZCgp
XTsKK30KKworLSAoTlNWaWV3Q29udHJvbGxlciAqKXRleHRMaXN0Vmlld0NvbnRyb2xsZXIKK3sK
KyAgICBpZiAoIV93ZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIpCisgICAgICAgIF93
ZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgPSBhZG9wdE5TKFtbX1dlYlRleHRMaXN0
VG91Y2hCYXJWaWV3Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3Ol93ZWJWaWV3XSk7
CisgICAgcmV0dXJuIF93ZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIuZ2V0KCk7Cit9
CisKK0BlbmQKKworI2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFSKQorCiBAaW1wbGVtZW50YXRpb24g
V2ViVmlldyAoQWxsV2ViVmlld3MpCiAKIHN0YXRpYyBDRlNldENhbGxCYWNrcyBOb25SZXRhaW5p
bmdTZXRDYWxsYmFja3MgPSB7CkBAIC05NzAsNyArMTI1OSw3IEBAIC0gKHZvaWQpX2NvbW1vbklu
aXRpYWxpemF0aW9uV2l0aEZyYW1lTmEKICAgICB9CiAjZW5kaWYKIAotICAgIFtzZWxmIHVwZGF0
ZVdlYlZpZXdBZGRpdGlvbnNdOworICAgIFtzZWxmIHVwZGF0ZVRvdWNoQmFyXTsKIAogI2lmICFQ
TEFURk9STShJT1MpCiAgICAgc3RhdGljIGJvb2wgZGlkT25lVGltZUluaXRpYWxpemF0aW9uID0g
ZmFsc2U7CkBAIC00NjkyLDYgKzQ5ODEsNDUgQEAgLSAodm9pZClfc2V0Rm9udEZhbGxiYWNrUHJl
ZmVyc1BpY3RvZ3JhcAogICAgICAgICBfcHJpdmF0ZS0+cGFnZS0+c2V0dGluZ3MoKS5zZXRGb250
RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHMoZmxhZyk7CiB9CiAKKyNpZiBIQVZFKFRPVUNIX0JB
UikKKworLSAodm9pZClzaG93Q2FuZGlkYXRlczooTlNBcnJheTxOU1RleHRDaGVja2luZ1Jlc3Vs
dCAqPiAqKWNhbmRpZGF0ZXMgZm9yU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBpblJlY3Q6KE5T
UmVjdClyZWN0T2ZUeXBlZFN0cmluZyBmb3JTZWxlY3RlZFJhbmdlOihOU1JhbmdlKXJhbmdlIHZp
ZXc6KE5TVmlldyAqKXZpZXcgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TVGV4dENoZWNr
aW5nUmVzdWx0ICphY2NlcHRlZENhbmRpZGF0ZSkpY29tcGxldGlvbkJsb2NrCit7CisgICAgW3Nl
bGYuY2FuZGlkYXRlTGlzdCBzZXRDYW5kaWRhdGVzOmNhbmRpZGF0ZXMgZm9yU2VsZWN0ZWRSYW5n
ZTpyYW5nZSBpblN0cmluZzpzdHJpbmddOworfQorCistIChCT09MKXNob3VsZFJlcXVlc3RDYW5k
aWRhdGVzCit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX3NlbGVjdGVkT3JN
YWluRnJhbWVdKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuIE5POworCisg
ICAgcmV0dXJuICFjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29y
ZEZpZWxkKCkgJiYgc2VsZi5jYW5kaWRhdGVMaXN0LmNhbmRpZGF0ZUxpc3RWaXNpYmxlOworfQor
CistICh2b2lkKWZvcmNlUmVxdWVzdENhbmRpZGF0ZXNGb3JUZXN0aW5nCit7CisgICAgX3ByaXZh
dGUtPl9jYW5DcmVhdGVUb3VjaEJhcnMgPSBZRVM7CisgICAgW3NlbGYgdXBkYXRlVG91Y2hCYXJd
OworfQorCisjZWxzZQorCistICh2b2lkKXNob3dDYW5kaWRhdGVzOihOU0FycmF5ICopY2FuZGlk
YXRlcyBmb3JTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIGluUmVjdDooTlNSZWN0KXJlY3RPZlR5
cGVkU3RyaW5nIGZvclNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UgdmlldzooTlNWaWV3ICop
dmlldyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNUZXh0Q2hlY2tpbmdSZXN1bHQgKmFj
Y2VwdGVkQ2FuZGlkYXRlKSljb21wbGV0aW9uQmxvY2sKK3sKK30KKworLSAodm9pZClmb3JjZVJl
cXVlc3RDYW5kaWRhdGVzRm9yVGVzdGluZworeworfQorCistIChCT09MKXNob3VsZFJlcXVlc3RD
YW5kaWRhdGVzCit7CisgICAgcmV0dXJuIE5POworfQorCisjZW5kaWYgLy8gSEFWRShUT1VDSF9C
QVIpCisKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIF9XZWJTYWZlRm9yd2FyZGVyCkBAIC00ODA0
LDYgKzUxMzIsMTEgQEAgLSAoTlNNZXRob2RTaWduYXR1cmUgKiltZXRob2RTaWduYXR1cmVGbwog
QGVuZAogI2VuZGlmCiAKKyNpZiBIQVZFKFRPVUNIX0JBUikKK0BpbnRlcmZhY2UgV2ViVmlldyAo
KSA8TlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtRGVsZWdhdGUsIE5TVG91Y2hCYXJEZWxlZ2F0
ZSwgTlNUb3VjaEJhclByb3ZpZGVyPgorQGVuZAorI2VuZGlmCisKIEBpbXBsZW1lbnRhdGlvbiBX
ZWJWaWV3CiAKICsgKHZvaWQpaW5pdGlhbGl6ZQpAQCAtNjQ4OCw2ICs2ODIxLDg3IEBAIC0gKE5T
VmlldyAqKXByZXZpb3VzVmFsaWRLZXlWaWV3CiAgICAgcmV0dXJuIFtwcmV2aW91c1ZpZXcgcHJl
dmlvdXNWYWxpZEtleVZpZXddOwogfQogCisjaWYgSEFWRShUT1VDSF9CQVIpCisKK0BkeW5hbWlj
IHRvdWNoQmFyOworCistIChOU1RvdWNoQmFyICopbWFrZVRvdWNoQmFyCit7CisgICAgaWYgKCFf
cHJpdmF0ZS0+X2NhbkNyZWF0ZVRvdWNoQmFycykgeworICAgICAgICBfcHJpdmF0ZS0+X2NhbkNy
ZWF0ZVRvdWNoQmFycyA9IFlFUzsKKyAgICAgICAgW3NlbGYgdXBkYXRlVG91Y2hCYXJdOworICAg
IH0KKyAgICByZXR1cm4gX3ByaXZhdGUtPl9jdXJyZW50VG91Y2hCYXIuZ2V0KCk7Cit9CisKKy0g
KE5TVG91Y2hCYXJJdGVtICopdG91Y2hCYXI6KE5TVG91Y2hCYXIgKil0b3VjaEJhciBtYWtlSXRl
bUZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcgoreworICAgIGlmICh0b3VjaEJh
ciA9PSBfcHJpdmF0ZS0+X3JpY2hUZXh0VG91Y2hCYXIgfHwgdG91Y2hCYXIgPT0gX3ByaXZhdGUt
Pl9wbGFpblRleHRUb3VjaEJhcikKKyAgICAgICAgcmV0dXJuIFtfcHJpdmF0ZS0+X3RleHRUb3Vj
aEJhckl0ZW1Db250cm9sbGVyIGl0ZW1Gb3JJZGVudGlmaWVyOmlkZW50aWZpZXJdOworCisgICAg
cmV0dXJuIG5pbDsKK30KKworc3RhdGljIFRleHRDaGVja2luZ1Jlc3VsdCB0ZXh0Q2hlY2tpbmdS
ZXN1bHRGcm9tTlNUZXh0Q2hlY2tpbmdSZXN1bHQoTlNUZXh0Q2hlY2tpbmdSZXN1bHQgKm5zUmVz
dWx0KQoreworICAgIFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CisKKyAgICBz
d2l0Y2ggKFtuc1Jlc3VsdCByZXN1bHRUeXBlXSkgeworICAgIGNhc2UgTlNUZXh0Q2hlY2tpbmdU
eXBlU3BlbGxpbmc6CisgICAgICAgIHJlc3VsdC50eXBlID0gV2ViQ29yZTo6VGV4dENoZWNraW5n
VHlwZVNwZWxsaW5nOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5TVGV4dENoZWNraW5nVHlw
ZVJlcGxhY2VtZW50OgorICAgICAgICByZXN1bHQudHlwZSA9IFdlYkNvcmU6OlRleHRDaGVja2lu
Z1R5cGVSZXBsYWNlbWVudDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOU1RleHRDaGVja2lu
Z1R5cGVDb3JyZWN0aW9uOgorICAgICAgICByZXN1bHQudHlwZSA9IFdlYkNvcmU6OlRleHRDaGVj
a2luZ1R5cGVDb3JyZWN0aW9uOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXN1bHQudHlwZSA9IFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGVOb25lOworICAgIH0KKwor
ICAgIE5TUmFuZ2UgcmVzdWx0UmFuZ2UgPSBuc1Jlc3VsdC5yYW5nZTsKKyAgICByZXN1bHQubG9j
YXRpb24gPSByZXN1bHRSYW5nZS5sb2NhdGlvbjsKKyAgICByZXN1bHQubGVuZ3RoID0gcmVzdWx0
UmFuZ2UubGVuZ3RoOworICAgIHJlc3VsdC5yZXBsYWNlbWVudCA9IG5zUmVzdWx0LnJlcGxhY2Vt
ZW50U3RyaW5nOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAodm9pZCljYW5kaWRhdGVM
aXN0VG91Y2hCYXJJdGVtOihOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gKilhbkl0ZW0gZW5k
U2VsZWN0aW5nQ2FuZGlkYXRlQXRJbmRleDooTlNJbnRlZ2VyKWluZGV4Cit7CisgICAgaWYgKGlu
ZGV4ID09IE5TTm90Rm91bmQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChhbkl0ZW0gIT0g
c2VsZi5jYW5kaWRhdGVMaXN0KQorICAgICAgICByZXR1cm47CisKKyAgICBOU0FycmF5ICpjYW5k
aWRhdGVzID0gYW5JdGVtLmNhbmRpZGF0ZXM7CisgICAgaWYgKChOU1VJbnRlZ2VyKWluZGV4ID49
IGNhbmRpZGF0ZXMuY291bnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlkIGNhbmRpZGF0ZSA9
IGNhbmRpZGF0ZXNbaW5kZXhdOworICAgIEFTU0VSVChbY2FuZGlkYXRlIGlzS2luZE9mQ2xhc3M6
W05TVGV4dENoZWNraW5nUmVzdWx0IGNsYXNzXV0pOworCisgICAgaWYgKEZyYW1lKiBjb3JlRnJh
bWUgPSBjb3JlKHNlbGYuX3NlbGVjdGVkT3JNYWluRnJhbWUpKQorICAgICAgICBjb3JlRnJhbWUt
PmVkaXRvcigpLmNsaWVudCgpLT5oYW5kbGVBY2NlcHRlZENhbmRpZGF0ZVdpdGhTb2Z0U3BhY2Vz
KHRleHRDaGVja2luZ1Jlc3VsdEZyb21OU1RleHRDaGVja2luZ1Jlc3VsdCgoTlNUZXh0Q2hlY2tp
bmdSZXN1bHQgKiljYW5kaWRhdGUpKTsKK30KKworLSAodm9pZCljYW5kaWRhdGVMaXN0VG91Y2hC
YXJJdGVtOihOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gKilhbkl0ZW0gY2hhbmdlZENhbmRp
ZGF0ZUxpc3RWaXNpYmlsaXR5OihCT09MKWlzVmlzaWJsZQoreworICAgIGlmIChhbkl0ZW0gIT0g
c2VsZi5jYW5kaWRhdGVMaXN0KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaXNWaXNpYmxl
KSB7CisgICAgICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfc2VsZWN0ZWRP
ck1haW5GcmFtZV0pKQorICAgICAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+
cmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb24oY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSk7CisgICAgfQorCisgICAgW3NlbGYgdXBkYXRlVG91Y2hCYXJdOworfQorCisjZW5k
aWYgLy8gSEFWRShUT1VDSF9CQVIpCisKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdlYlZpZXcg
KFdlYklCQWN0aW9ucykKQEAgLTY3NDYsNDggKzcxNjAsNiBAQCAtIChCT09MKXZhbGlkYXRlVXNl
ckludGVyZmFjZUl0ZW06KGlkIDxOCiAKIEBlbmQKIAotI2lmIFBMQVRGT1JNKE1BQykgJiYgX19N
QUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAgJiYgVVNFKEFQUExFX0lOVEVS
TkFMX1NESykKLSNpbXBvcnQgPFdlYktpdEFkZGl0aW9ucy9XZWJWaWV3QWRkaXRpb25zLm1tPgot
I2Vsc2UKLUBpbXBsZW1lbnRhdGlvbiBXZWJWaWV3IChXZWJVcGRhdGVXZWJWaWV3QWRkaXRpb25z
KQotCi0tICh2b2lkKXVwZGF0ZVdlYlZpZXdBZGRpdGlvbnMKLXsKLX0KLQotLSAodm9pZClwcmVw
YXJlRm9yTW91c2VEb3duCi17Ci19Ci0KLS0gKHZvaWQpcHJlcGFyZUZvck1vdXNlVXAKLXsKLX0K
LQotLSAodm9pZClzaG93Q2FuZGlkYXRlczooTlNBcnJheSAqKWNhbmRpZGF0ZXMgZm9yU3RyaW5n
OihOU1N0cmluZyAqKXN0cmluZyBpblJlY3Q6KE5TUmVjdClyZWN0T2ZUeXBlZFN0cmluZyBmb3JT
ZWxlY3RlZFJhbmdlOihOU1JhbmdlKXJhbmdlIHZpZXc6KE5TVmlldyAqKXZpZXcgY29tcGxldGlv
bkhhbmRsZXI6KHZvaWQgKF4pKE5TVGV4dENoZWNraW5nUmVzdWx0ICphY2NlcHRlZENhbmRpZGF0
ZSkpY29tcGxldGlvbkJsb2NrCi17Ci19Ci0KLS0gKHZvaWQpZm9yY2VSZXF1ZXN0Q2FuZGlkYXRl
c0ZvclRlc3RpbmcKLXsKLX0KLQotLSAoQk9PTClzaG91bGRSZXF1ZXN0Q2FuZGlkYXRlcwotewot
ICAgIHJldHVybiBOTzsKLX0KLQotLSAodm9pZCl3ZWJWaWV3QWRkaXRpb25zV2lsbERlc3Ryb3lW
aWV3Ci17Ci19Ci0KLS0gKGlkKWNhbmRpZGF0ZUxpc3QKLXsKLSAgICByZXR1cm4gbmlsOwotfQot
Ci1AZW5kCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID49IDEwMTIwMCAmJiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotCiBAaW1wbGVt
ZW50YXRpb24gV2ViVmlldyAoV2ViUGVuZGluZ1B1YmxpYykKIAogLSAodm9pZClzY2hlZHVsZUlu
UnVuTG9vcDooTlNSdW5Mb29wICopcnVuTG9vcCBmb3JNb2RlOihOU1N0cmluZyAqKW1vZGUKQEAg
LTg2NTYsNyArOTAyOCw3IEBAIC0gKHZvaWQpX3NldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXJG
b3IKICAgICBpZiAoIV9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCiAgICAgICAg
IF9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UgPSBXZWJQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VNYWM6OmNyZWF0ZSgqX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKTsKIAot
ICAgIFtzZWxmIHVwZGF0ZVdlYlZpZXdBZGRpdGlvbnNdOworICAgIFtzZWxmIHVwZGF0ZVRvdWNo
QmFyXTsKIH0KIAogLSAodm9pZClfY2xlYXJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcgpAQCAtODY2
OSw3ICs5MDQxLDcgQEAgLSAodm9pZClfY2xlYXJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcgogCiAg
ICAgX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbk1vZGVsID0gbnVsbHB0cjsKICAgICBfcHJpdmF0
ZS0+cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlID0gbnVsbHB0cjsKLSAgICBbc2VsZiB1cGRhdGVX
ZWJWaWV3QWRkaXRpb25zXTsKKyAgICBbc2VsZiB1cGRhdGVUb3VjaEJhcl07CiB9CiAjZW5kaWYg
Ly8gUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCiAjZW5k
aWYgLy8gRU5BQkxFKFZJREVPKQpAQCAtODg5OCw2ICs5MjcwLDM0MiBAQCAtICh2b2lkKV9zZXRN
b2NrTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlCiB9CiAjZW5kaWYKIAorI2lmIEhBVkUoVE9VQ0hf
QkFSKQorLSAodm9pZClfZGlzbWlzc1RleHRUb3VjaEJhclBvcG92ZXJJdGVtV2l0aElkZW50aWZp
ZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcgoreworICAgIE5TVG91Y2hCYXJJdGVtICpmb3VuZEl0
ZW0gPSBuaWw7CisgICAgZm9yIChOU1RvdWNoQmFySXRlbSAqaXRlbSBpbiBzZWxmLnRleHRUb3Vj
aEJhci5pdGVtcykgeworICAgICAgICBpZiAoW2l0ZW0uaWRlbnRpZmllciBpc0VxdWFsVG9TdHJp
bmc6aWRlbnRpZmllcl0pIHsKKyAgICAgICAgICAgIGZvdW5kSXRlbSA9IGl0ZW07CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChbaXRlbS5pZGVudGlmaWVyIGlz
RXF1YWxUb1N0cmluZzpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Rm9ybWF0XSkgeworICAg
ICAgICAgICAgZm9yIChOU1RvdWNoQmFySXRlbSAqY2hpbGRJdGVtIGluIFsoTlNHcm91cFRvdWNo
QmFySXRlbSAqKWl0ZW0gZ3JvdXBUb3VjaEJhcl0uaXRlbXMpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoW2NoaWxkSXRlbS5pZGVudGlmaWVyIGlzRXF1YWxUb1N0cmluZzppZGVudGlmaWVyXSkgewor
ICAgICAgICAgICAgICAgICAgICBmb3VuZEl0ZW0gPSBjaGlsZEl0ZW07CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKFtmb3VuZEl0ZW0gaXNLaW5k
T2ZDbGFzczpbTlNQb3BvdmVyVG91Y2hCYXJJdGVtIGNsYXNzXV0pCisgICAgICAgIFsoTlNQb3Bv
dmVyVG91Y2hCYXJJdGVtICopZm91bmRJdGVtIGRpc21pc3NQb3BvdmVyOm5pbF07Cit9CisKKy0g
KE5TQXJyYXk8TlNTdHJpbmcgKj4gKilfdGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkFsbG93ZWRJ
ZGVudGlmaWVycworeworICAgIHJldHVybiBAWyBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJDaGFy
YWN0ZXJQaWNrZXIsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRDb2xvclBpY2tlciwgTlNU
b3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dFN0eWxlLCBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJU
ZXh0QWxpZ25tZW50LCBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0TGlzdCwgTlNUb3VjaEJh
ckl0ZW1JZGVudGlmaWVyRmxleGlibGVTcGFjZSBdOworfQorCistIChOU0FycmF5PE5TU3RyaW5n
ICo+ICopX3BsYWluVGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkRlZmF1bHRJdGVtSWRlbnRpZmll
cnMKK3sKKyAgICByZXR1cm4gQFsgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyQ2hhcmFjdGVyUGlj
a2VyLCBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJDYW5kaWRhdGVMaXN0IF07Cit9CisKKy0gKE5T
QXJyYXk8TlNTdHJpbmcgKj4gKilfcmljaFRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25EZWZhdWx0
SXRlbUlkZW50aWZpZXJzCit7CisgICAgcmV0dXJuIEBbIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmll
ckNoYXJhY3RlclBpY2tlciwgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEZvcm1hdCwgTlNU
b3VjaEJhckl0ZW1JZGVudGlmaWVyQ2FuZGlkYXRlTGlzdCBdOworfQorCistICh2b2lkKXRvdWNo
QmFyRGlkRXhpdEN1c3RvbWl6YXRpb246KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7
CisgICAgX3ByaXZhdGUtPl9pc0N1c3RvbWl6aW5nVG91Y2hCYXIgPSBOTzsKKyAgICBbc2VsZiB1
cGRhdGVUb3VjaEJhcl07Cit9CisKKy0gKHZvaWQpdG91Y2hCYXJXaWxsRW50ZXJDdXN0b21pemF0
aW9uOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIF9wcml2YXRlLT5faXND
dXN0b21pemluZ1RvdWNoQmFyID0gWUVTOworfQorCistICh2b2lkKWRpZENoYW5nZUF1dG9tYXRp
Y1RleHRDb21wbGV0aW9uOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIGlm
IChfcHJpdmF0ZS0+X3JpY2hUZXh0VG91Y2hCYXIpCisgICAgICAgIFtzZWxmIHNldFVwVGV4dFRv
dWNoQmFyOl9wcml2YXRlLT5fcmljaFRleHRUb3VjaEJhci5nZXQoKV07CisKKyAgICBpZiAoX3By
aXZhdGUtPl9wbGFpblRleHRUb3VjaEJhcikKKyAgICAgICAgW3NlbGYgc2V0VXBUZXh0VG91Y2hC
YXI6X3ByaXZhdGUtPl9wbGFpblRleHRUb3VjaEJhci5nZXQoKV07CisKKyAgICBbc2VsZiB1cGRh
dGVUb3VjaEJhcl07Cit9CisKKy0gKHZvaWQpc2V0VXBUZXh0VG91Y2hCYXI6KE5TVG91Y2hCYXIg
Kil0ZXh0VG91Y2hCYXIKK3sKKyAgICBCT09MIGlzUmljaFRleHRUb3VjaEJhciA9IHRleHRUb3Vj
aEJhciA9PSBfcHJpdmF0ZS0+X3JpY2hUZXh0VG91Y2hCYXI7CisgICAgW3RleHRUb3VjaEJhciBz
ZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICBbdGV4dFRvdWNoQmFyIHNldERlZmF1bHRJdGVtczpbTlNN
dXRhYmxlU2V0IHNldFdpdGhPYmplY3RzOmlzUmljaFRleHRUb3VjaEJhciA/IF9wcml2YXRlLT5f
cmljaFRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtLmdldCgpIDogX3ByaXZhdGUtPl9wbGFp
blRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtLmdldCgpLCBuaWxdXTsKKyAgICBbdGV4dFRv
dWNoQmFyIHNldEN1c3RvbWl6YXRpb25BbGxvd2VkSXRlbUlkZW50aWZpZXJzOltzZWxmIF90ZXh0
VG91Y2hCYXJDdXN0b21pemF0aW9uQWxsb3dlZElkZW50aWZpZXJzXV07CisKKyAgICBOU0FycmF5
PE5TU3RyaW5nICo+ICpkZWZhdWx0SWRlbnRpZmllcnMgPSBpc1JpY2hUZXh0VG91Y2hCYXIgPyBb
c2VsZiBfcmljaFRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25EZWZhdWx0SXRlbUlkZW50aWZpZXJz
XSA6IFtzZWxmIF9wbGFpblRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25EZWZhdWx0SXRlbUlkZW50
aWZpZXJzXTsKKyAgICBbdGV4dFRvdWNoQmFyIHNldEN1c3RvbWl6YXRpb25EZWZhdWx0SXRlbUlk
ZW50aWZpZXJzOmRlZmF1bHRJZGVudGlmaWVyc107CisKKyAgICBpZiAoTlNHcm91cFRvdWNoQmFy
SXRlbSAqdGV4dEZvcm1hdEl0ZW0gPSAoTlNHcm91cFRvdWNoQmFySXRlbSAqKVt0ZXh0VG91Y2hC
YXIgaXRlbUZvcklkZW50aWZpZXI6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEZvcm1hdF0p
CisgICAgICAgIHRleHRGb3JtYXRJdGVtLmdyb3VwVG91Y2hCYXIuY3VzdG9taXphdGlvbklkZW50
aWZpZXIgPSBAIldlYlRleHRGb3JtYXRUb3VjaEJhciI7Cit9CisKKy0gKEJPT0wpX2lzUmljaGx5
RWRpdGFibGUKK3sKKyAgICBOU1ZpZXcgKmRvY3VtZW50VmlldyA9IHNlbGYuX3NlbGVjdGVkT3JN
YWluRnJhbWUuZnJhbWVWaWV3LmRvY3VtZW50VmlldzsKKyAgICBpZiAoIVtkb2N1bWVudFZpZXcg
aXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuIE5POwor
CisgICAgV2ViSFRNTFZpZXcgKndlYkhUTUxWaWV3ID0gKFdlYkhUTUxWaWV3ICopZG9jdW1lbnRW
aWV3OworICAgIHJldHVybiB3ZWJIVE1MVmlldy5faXNFZGl0YWJsZSAmJiB3ZWJIVE1MVmlldy5f
Y2FuRWRpdFJpY2hseTsKK30KKworLSAoTlNUb3VjaEJhciAqKXRleHRUb3VjaEJhcgoreworICAg
IGlmIChzZWxmLl9pc1JpY2hseUVkaXRhYmxlKQorICAgICAgICByZXR1cm4gX3ByaXZhdGUtPl9y
aWNoVGV4dFRvdWNoQmFyLmdldCgpOworCisgICAgcmV0dXJuIF9wcml2YXRlLT5fcGxhaW5UZXh0
VG91Y2hCYXIuZ2V0KCk7Cit9CisKKy0gKHZvaWQpdXBkYXRlVGV4dFRvdWNoQmFyCit7CisgICAg
aWYgKF9wcml2YXRlLT5faXNEZWZlcnJpbmdUZXh0VG91Y2hCYXJVcGRhdGVzKSB7CisgICAgICAg
IF9wcml2YXRlLT5fbmVlZHNEZWZlcnJlZFRleHRUb3VjaEJhclVwZGF0ZSA9IFlFUzsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIE5TVmlldyAqZG9jdW1lbnRWaWV3ID0gW1tbc2VsZiBf
c2VsZWN0ZWRPck1haW5GcmFtZV0gZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOworICAgIGlmICgh
W2RvY3VtZW50VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgV2ViSFRNTFZpZXcgKndlYkhUTUxWaWV3ID0gKFdlYkhUTUxW
aWV3ICopZG9jdW1lbnRWaWV3OworICAgIGlmICghW3dlYkhUTUxWaWV3IF9pc0VkaXRhYmxlXSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX3Nl
bGVjdGVkT3JNYWluRnJhbWVdKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKF9wcml2YXRlLT5faXNVcGRhdGluZ1RleHRUb3VjaEJhcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgVGVtcG9yYXJ5Q2hhbmdlPEJPT0w+IGlzVXBkYXRpbmdUZXh0VG91Y2hC
YXIoX3ByaXZhdGUtPl9pc1VwZGF0aW5nVGV4dFRvdWNoQmFyLCBZRVMpOworCisgICAgaWYgKCFf
cHJpdmF0ZS0+X3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyKQorICAgICAgICBfcHJpdmF0ZS0+
X3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyID0gYWRvcHROUyhbW1dlYlRleHRUb3VjaEJhckl0
ZW1Db250cm9sbGVyIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6c2VsZl0pOworCisgICAgaWYgKCFf
cHJpdmF0ZS0+X3N0YXJ0ZWRMaXN0ZW5pbmdUb0N1c3RvbWl6YXRpb25FdmVudHMpIHsKKyAgICAg
ICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxm
IHNlbGVjdG9yOkBzZWxlY3Rvcih0b3VjaEJhckRpZEV4aXRDdXN0b21pemF0aW9uOikgbmFtZTpO
U1RvdWNoQmFyRGlkRXhpdEN1c3RvbWl6YXRpb24gb2JqZWN0Om5pbF07CisgICAgICAgIFtbTlNO
b3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3Rv
cjpAc2VsZWN0b3IodG91Y2hCYXJXaWxsRW50ZXJDdXN0b21pemF0aW9uOikgbmFtZTpOU1RvdWNo
QmFyV2lsbEVudGVyQ3VzdG9taXphdGlvbiBvYmplY3Q6bmlsXTsKKyAgICAgICAgW1tOU05vdGlm
aWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBz
ZWxlY3RvcihkaWRDaGFuZ2VBdXRvbWF0aWNUZXh0Q29tcGxldGlvbjopIG5hbWU6TlNTcGVsbENo
ZWNrZXJEaWRDaGFuZ2VBdXRvbWF0aWNUZXh0Q29tcGxldGlvbk5vdGlmaWNhdGlvbiBvYmplY3Q6
bmlsXTsKKyAgICAgICAgX3ByaXZhdGUtPl9zdGFydGVkTGlzdGVuaW5nVG9DdXN0b21pemF0aW9u
RXZlbnRzID0gWUVTOworICAgIH0KKworICAgIGlmICghX3ByaXZhdGUtPl9wbGFpblRleHRDYW5k
aWRhdGVMaXN0VG91Y2hCYXJJdGVtIHx8ICFfcHJpdmF0ZS0+X3JpY2hUZXh0Q2FuZGlkYXRlTGlz
dFRvdWNoQmFySXRlbSkgeworICAgICAgICBfcHJpdmF0ZS0+X3BsYWluVGV4dENhbmRpZGF0ZUxp
c3RUb3VjaEJhckl0ZW0gPSBhZG9wdE5TKFtbTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtIGFs
bG9jXSBpbml0V2l0aElkZW50aWZpZXI6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyQ2FuZGlkYXRl
TGlzdF0pOworICAgICAgICBbX3ByaXZhdGUtPl9wbGFpblRleHRDYW5kaWRhdGVMaXN0VG91Y2hC
YXJJdGVtIHNldERlbGVnYXRlOnNlbGZdOworICAgICAgICBfcHJpdmF0ZS0+X3JpY2hUZXh0Q2Fu
ZGlkYXRlTGlzdFRvdWNoQmFySXRlbSA9IGFkb3B0TlMoW1tOU0NhbmRpZGF0ZUxpc3RUb3VjaEJh
ckl0ZW0gYWxsb2NdIGluaXRXaXRoSWRlbnRpZmllcjpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJD
YW5kaWRhdGVMaXN0XSk7CisgICAgICAgIFtfcHJpdmF0ZS0+X3JpY2hUZXh0Q2FuZGlkYXRlTGlz
dFRvdWNoQmFySXRlbSBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICAgICAgY29yZUZyYW1lLT5lZGl0
b3IoKS5jbGllbnQoKS0+cmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb24oY29yZUZyYW1lLT5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgfQorCisgICAgaWYgKCFfcHJpdmF0ZS0+X3Jp
Y2hUZXh0VG91Y2hCYXIpIHsKKyAgICAgICAgX3ByaXZhdGUtPl9yaWNoVGV4dFRvdWNoQmFyID0g
YWRvcHROUyhbW05TVG91Y2hCYXIgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgW3NlbGYgc2V0VXBU
ZXh0VG91Y2hCYXI6X3ByaXZhdGUtPl9yaWNoVGV4dFRvdWNoQmFyLmdldCgpXTsKKyAgICAgICAg
W19wcml2YXRlLT5fcmljaFRleHRUb3VjaEJhciBzZXRDdXN0b21pemF0aW9uSWRlbnRpZmllcjpA
IldlYlJpY2hUZXh0VG91Y2hCYXIiXTsKKyAgICB9CisKKyAgICBpZiAoIV9wcml2YXRlLT5fcGxh
aW5UZXh0VG91Y2hCYXIpIHsKKyAgICAgICAgX3ByaXZhdGUtPl9wbGFpblRleHRUb3VjaEJhciA9
IGFkb3B0TlMoW1tOU1RvdWNoQmFyIGFsbG9jXSBpbml0XSk7CisgICAgICAgIFtzZWxmIHNldFVw
VGV4dFRvdWNoQmFyOl9wcml2YXRlLT5fcGxhaW5UZXh0VG91Y2hCYXIuZ2V0KCldOworICAgICAg
ICBbX3ByaXZhdGUtPl9wbGFpblRleHRUb3VjaEJhciBzZXRDdXN0b21pemF0aW9uSWRlbnRpZmll
cjpAIldlYlBsYWluVGV4dFRvdWNoQmFyIl07CisgICAgfQorCisgICAgaWYgKFtOU1NwZWxsQ2hl
Y2tlciBpc0F1dG9tYXRpY1RleHRDb21wbGV0aW9uRW5hYmxlZF0gJiYgIV9wcml2YXRlLT5faXND
dXN0b21pemluZ1RvdWNoQmFyKSB7CisgICAgICAgIEJPT0wgc2hvdWxkU2hvd0NhbmRpZGF0ZUxp
c3QgPSAhY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkgfHwgY29y
ZUZyYW1lLT5lZGl0b3IoKS5pZ25vcmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZSgpOworICAg
ICAgICBbc2VsZi5jYW5kaWRhdGVMaXN0IHVwZGF0ZVdpdGhJbnNlcnRpb25Qb2ludFZpc2liaWxp
dHk6c2hvdWxkU2hvd0NhbmRpZGF0ZUxpc3RdOworICAgIH0KKworICAgIGlmIChjb3JlRnJhbWUt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpIHsKKyAgICAgICAg
Ly8gV2UgZG9uJ3QgcmVxdWVzdCBjYW5kaWRhdGVzIGZvciBwYXNzd29yZCBmaWVsZHMuIElmIHRo
ZSB1c2VyIHdhcyBwcmV2aW91c2x5IGluIGEgbm9uLXBhc3N3b3JkIGZpZWxkLCB0aGVuIHRoZQor
ICAgICAgICAvLyBvbGQgY2FuZGlkYXRlcyB3aWxsIHN0aWxsIHNob3cgYnkgZGVmYXVsdCwgc28g
d2UgY2xlYXIgdGhlbSBoZXJlIGJ5IHNldHRpbmcgYW4gZW1wdHkgYXJyYXkgb2YgY2FuZGlkYXRl
cy4KKyAgICAgICAgaWYgKCFfcHJpdmF0ZS0+X2VtcHR5Q2FuZGlkYXRlc0FycmF5KQorICAgICAg
ICAgICAgX3ByaXZhdGUtPl9lbXB0eUNhbmRpZGF0ZXNBcnJheSA9IGFkb3B0TlMoW1tOU0FycmF5
IGFsbG9jXSBpbml0XSk7CisgICAgICAgIFtzZWxmLmNhbmRpZGF0ZUxpc3Qgc2V0Q2FuZGlkYXRl
czpfcHJpdmF0ZS0+X2VtcHR5Q2FuZGlkYXRlc0FycmF5LmdldCgpIGZvclNlbGVjdGVkUmFuZ2U6
TlNNYWtlUmFuZ2UoMCwgMCkgaW5TdHJpbmc6bmlsXTsKKyAgICB9CisKKyAgICBOU1RvdWNoQmFy
ICp0ZXh0VG91Y2hCYXIgPSBzZWxmLnRleHRUb3VjaEJhcjsKKyAgICBOU0FycmF5PE5TU3RyaW5n
ICo+ICppdGVtSWRlbnRpZmllcnMgPSB0ZXh0VG91Y2hCYXIuaXRlbUlkZW50aWZpZXJzOworICAg
IEJPT0wgaXNTaG93aW5nQ29tYmluZWRUZXh0Rm9ybWF0SXRlbSA9IFtpdGVtSWRlbnRpZmllcnMg
Y29udGFpbnNPYmplY3Q6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEZvcm1hdF07CisgICAg
W3RleHRUb3VjaEJhciBzZXRQcmluY2lwYWxJdGVtSWRlbnRpZmllcjppc1Nob3dpbmdDb21iaW5l
ZFRleHRGb3JtYXRJdGVtID8gTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEZvcm1hdCA6IG5p
bF07CisKKyAgICAvLyBTZXQgY3VycmVudCB0eXBpbmcgYXR0cmlidXRlcyBmb3IgcmljaCB0ZXh0
LiBUaGlzIHdpbGwgZW5zdXJlIHRoYXQgdGhlIGJ1dHRvbnMgcmVmbGVjdCB0aGUgc3RhdGUgb2YK
KyAgICAvLyB0aGUgdGV4dCB3aGVuIGNoYW5naW5nIHNlbGVjdGlvbiB0aHJvdWdob3V0IHRoZSBk
b2N1bWVudC4KKyAgICBpZiAod2ViSFRNTFZpZXcuX2NhbkVkaXRSaWNobHkpIHsKKyAgICAgICAg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gY29yZUZyYW1lLT5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKTsKKyAgICAgICAgaWYgKCFzZWxlY3Rpb24uaXNOb25lKCkpIHsKKyAgICAg
ICAgICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsKKyAgICAgICAgICAgIGlmIChhdXRvKiBzdHlsZSA9
IEVkaXRvcjo6c3R5bGVGb3JTZWxlY3Rpb25TdGFydChjb3JlRnJhbWUsIG5vZGVUb1JlbW92ZSkp
IHsKKyAgICAgICAgICAgICAgICBbX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxl
ciBzZXRUZXh0SXNCb2xkOihzdHlsZS0+Zm9udENhc2NhZGUoKS53ZWlnaHQoKSA+PSBGb250V2Vp
Z2h0Qm9sZCldOworICAgICAgICAgICAgICAgIFtfcHJpdmF0ZS0+X3RleHRUb3VjaEJhckl0ZW1D
b250cm9sbGVyIHNldFRleHRJc0l0YWxpYzooc3R5bGUtPmZvbnRDYXNjYWRlKCkuaXRhbGljKCkg
PT0gRm9udEl0YWxpY09uKV07CisKKyAgICAgICAgICAgICAgICBSZWZQdHI8RWRpdGluZ1N0eWxl
PiB0eXBpbmdTdHlsZSA9IGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKTsKKyAg
ICAgICAgICAgICAgICBpZiAodHlwaW5nU3R5bGUgJiYgdHlwaW5nU3R5bGUtPnN0eWxlKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gdHlwaW5nU3R5bGUtPnN0eWxlKCkt
PmdldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVj
dCk7CisgICAgICAgICAgICAgICAgICAgIFtfcHJpdmF0ZS0+X3RleHRUb3VjaEJhckl0ZW1Db250
cm9sbGVyIHNldFRleHRJc1VuZGVybGluZWQ6dmFsdWUuY29udGFpbnMoInVuZGVybGluZSIpXTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgW19wcml2YXRlLT5f
dGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzVW5kZXJsaW5lZDooc3R5bGUtPnRl
eHREZWNvcmF0aW9uc0luRWZmZWN0KCkgJiBUZXh0RGVjb3JhdGlvblVuZGVybGluZSldOworCisg
ICAgICAgICAgICAgICAgaWYgKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVy
dHlDb2xvcikuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICBbX3ByaXZhdGUtPl90ZXh0
VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRUZXh0Q29sb3I6bnNDb2xvcihzdHlsZS0+dmlzaXRl
ZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKV07CisKKyAgICAgICAgICAgICAgICBO
U1RleHRBbGlnbm1lbnQgdGV4dEFsaWdubWVudDsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0
eWxlLT50ZXh0QWxpZ24oKSkgeworICAgICAgICAgICAgICAgIGNhc2UgUklHSFQ6CisgICAgICAg
ICAgICAgICAgY2FzZSBXRUJLSVRfUklHSFQ6CisgICAgICAgICAgICAgICAgICAgIHRleHRBbGln
bm1lbnQgPSBOU1RleHRBbGlnbm1lbnRSaWdodDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSBMRUZUOgorICAgICAgICAgICAgICAgIGNhc2UgV0VCS0lU
X0xFRlQ6CisgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbm1lbnQgPSBOU1RleHRBbGlnbm1l
bnRMZWZ0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNl
IENFTlRFUjoKKyAgICAgICAgICAgICAgICBjYXNlIFdFQktJVF9DRU5URVI6CisgICAgICAgICAg
ICAgICAgICAgIHRleHRBbGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRDZW50ZXI7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSlVTVElGWToKKyAgICAg
ICAgICAgICAgICAgICAgdGV4dEFsaWdubWVudCA9IE5TVGV4dEFsaWdubWVudEp1c3RpZmllZDsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBUQVNUQVJU
OgorICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ25tZW50ID0gc3R5bGUtPmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSA/IE5TVGV4dEFsaWdubWVudExlZnQgOiBOU1RleHRBbGlnbm1lbnRSaWdo
dDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBUQUVO
RDoKKyAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWdubWVudCA9IHN0eWxlLT5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkgPyBOU1RleHRBbGlnbm1lbnRSaWdodCA6IE5TVGV4dEFsaWdubWVudExl
ZnQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBbX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRDdXJy
ZW50VGV4dEFsaWdubWVudDp0ZXh0QWxpZ25tZW50XTsKKworICAgICAgICAgICAgICAgIEhUTUxF
bGVtZW50KiBlbmNsb3NpbmdMaXN0RWxlbWVudCA9IGVuY2xvc2luZ0xpc3Qoc2VsZWN0aW9uLnN0
YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKGVuY2xvc2luZ0xp
c3RFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpczxIVE1MVUxpc3RFbGVtZW50
PigqZW5jbG9zaW5nTGlzdEVsZW1lbnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgW1tfcHJp
dmF0ZS0+X3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHdlYlRleHRMaXN0VG91Y2hCYXJWaWV3
Q29udHJvbGxlcl0gc2V0Q3VycmVudExpc3RUeXBlOldlYkxpc3RUeXBlOjpVbm9yZGVyZWRdOwor
ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpczxIVE1MT0xpc3RFbGVtZW50PigqZW5jbG9z
aW5nTGlzdEVsZW1lbnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgW1tfcHJpdmF0ZS0+X3Rl
eHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHdlYlRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxl
cl0gc2V0Q3VycmVudExpc3RUeXBlOldlYkxpc3RUeXBlOjpPcmRlcmVkXTsKKyAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIFtbX3ByaXZh
dGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciB3ZWJUZXh0TGlzdFRvdWNoQmFyVmlld0Nv
bnRyb2xsZXJdIHNldEN1cnJlbnRMaXN0VHlwZTpXZWJMaXN0VHlwZTo6Tm9uZV07CisKKyAgICAg
ICAgICAgICAgICBpZiAobm9kZVRvUmVtb3ZlKQorICAgICAgICAgICAgICAgICAgICBub2RlVG9S
ZW1vdmUtPnJlbW92ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEJPT0wg
aXNTaG93aW5nQ2FuZGlkYXRlTGlzdEl0ZW0gPSBbaXRlbUlkZW50aWZpZXJzIGNvbnRhaW5zT2Jq
ZWN0Ok5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckNhbmRpZGF0ZUxpc3RdICYmIFtOU1NwZWxsQ2hl
Y2tlciBpc0F1dG9tYXRpY1RleHRDb21wbGV0aW9uRW5hYmxlZF07CisgICAgICAgIFtfcHJpdmF0
ZS0+X3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFVzZXNOYXJyb3dUZXh0U3R5bGVJdGVt
OmlzU2hvd2luZ0NvbWJpbmVkVGV4dEZvcm1hdEl0ZW0gJiYgaXNTaG93aW5nQ2FuZGlkYXRlTGlz
dEl0ZW1dOworICAgIH0KK30KKworLSAodm9pZCl1cGRhdGVNZWRpYVRvdWNoQmFyCit7CisjaWYg
RU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIGlmICghX3ByaXZhdGUt
Pm1lZGlhVG91Y2hCYXJQcm92aWRlcikKKyAgICAgICAgX3ByaXZhdGUtPm1lZGlhVG91Y2hCYXJQ
cm92aWRlciA9IGFkb3B0TlMoW2FsbG9jQVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNQcm92
aWRlckluc3RhbmNlKCkgaW5pdF0pOworCisgICAgaWYgKCFbX3ByaXZhdGUtPm1lZGlhVG91Y2hC
YXJQcm92aWRlciBwbGF5YmFja0NvbnRyb2xzQ29udHJvbGxlcl0pIHsKKyAgICAgICAgQVNTRVJU
KF9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpOworICAgICAgICBXZWJQbGF5YmFj
a0NvbnRyb2xzTWFuYWdlciAqbWFuYWdlciA9IF9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2UtPnBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCk7CisgICAgICAgIFtfcHJpdmF0ZS0+bWVk
aWFUb3VjaEJhclByb3ZpZGVyIHNldFBsYXliYWNrQ29udHJvbHNDb250cm9sbGVyOihpZCA8QVZG
dW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNDb250cm9sbGluZz4pbWFuYWdlcl07CisgICAgICAg
IFtfcHJpdmF0ZS0+bWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyBzZXRQbGF5YmFja0NvbnRyb2xz
Q29udHJvbGxlcjooaWQgPEFWRnVuY3Rpb25CYXJQbGF5YmFja0NvbnRyb2xzQ29udHJvbGxpbmc+
KW1hbmFnZXJdOworICAgIH0KKyNlbmRpZgorfQorCistICh2b2lkKXVwZGF0ZVRvdWNoQmFyCit7
CisgICAgaWYgKCFfcHJpdmF0ZS0+X2NhbkNyZWF0ZVRvdWNoQmFycykKKyAgICAgICAgcmV0dXJu
OworCisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJh
bWVdKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNUb3Vj
aEJhciAqdG91Y2hCYXIgPSBuaWw7CisgICAgTlNWaWV3ICpkb2N1bWVudFZpZXcgPSBbW1tzZWxm
IF9zZWxlY3RlZE9yTWFpbkZyYW1lXSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CisgICAgaWYg
KFtkb2N1bWVudFZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkgeworICAg
ICAgICBXZWJIVE1MVmlldyAqd2ViSFRNTFZpZXcgPSAoV2ViSFRNTFZpZXcgKilkb2N1bWVudFZp
ZXc7CisgICAgICAgIGlmIChbd2ViSFRNTFZpZXcgX2lzRWRpdGFibGVdKSB7CisgICAgICAgICAg
ICBbc2VsZiB1cGRhdGVUZXh0VG91Y2hCYXJdOworICAgICAgICAgICAgdG91Y2hCYXIgPSBbc2Vs
ZiB0ZXh0VG91Y2hCYXJdOworICAgICAgICB9CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05U
Uk9MU19NQU5BR0VSKQorICAgICAgICBlbHNlIGlmIChbc2VsZiBfaGFzQWN0aXZlVmlkZW9Gb3JD
b250cm9sc0ludGVyZmFjZV0pIHsKKyAgICAgICAgICAgIFtzZWxmIHVwZGF0ZU1lZGlhVG91Y2hC
YXJdOworICAgICAgICAgICAgdG91Y2hCYXIgPSBbX3ByaXZhdGUtPm1lZGlhVG91Y2hCYXJQcm92
aWRlciByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHRvdWNoQmFyKV0gPyBbKGlkKV9wcml2
YXRlLT5tZWRpYVRvdWNoQmFyUHJvdmlkZXIgdG91Y2hCYXJdIDogWyhpZClfcHJpdmF0ZS0+bWVk
aWFUb3VjaEJhclByb3ZpZGVyIHRvdWNoQmFyXTsKKyAgICAgICAgfSBlbHNlIGlmIChbX3ByaXZh
dGUtPm1lZGlhVG91Y2hCYXJQcm92aWRlciBwbGF5YmFja0NvbnRyb2xzQ29udHJvbGxlcl0pIHsK
KyAgICAgICAgICAgIFtfcHJpdmF0ZS0+bWVkaWFUb3VjaEJhclByb3ZpZGVyIHNldFBsYXliYWNr
Q29udHJvbHNDb250cm9sbGVyOm5pbF07CisgICAgICAgICAgICBbX3ByaXZhdGUtPm1lZGlhUGxh
eWJhY2tDb250cm9sc1ZpZXcgc2V0UGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXI6bmlsXTsKKyAg
ICAgICAgfQorI2VuZGlmCisgICAgfQorCisgICAgaWYgKHRvdWNoQmFyID09IF9wcml2YXRlLT5f
Y3VycmVudFRvdWNoQmFyKQorICAgICAgICByZXR1cm47CisKKyAgICBfcHJpdmF0ZS0+X2N1cnJl
bnRUb3VjaEJhciA9IHRvdWNoQmFyOworICAgIFtzZWxmIHdpbGxDaGFuZ2VWYWx1ZUZvcktleTpA
InRvdWNoQmFyIl07CisgICAgW3NlbGYgc2V0VG91Y2hCYXI6X3ByaXZhdGUtPl9jdXJyZW50VG91
Y2hCYXIuZ2V0KCldOworICAgIFtzZWxmIGRpZENoYW5nZVZhbHVlRm9yS2V5OkAidG91Y2hCYXIi
XTsKK30KKworLSAodm9pZClwcmVwYXJlRm9yTW91c2VEb3duCit7CisgICAgX3ByaXZhdGUtPl9u
ZWVkc0RlZmVycmVkVGV4dFRvdWNoQmFyVXBkYXRlID0gTk87CisgICAgX3ByaXZhdGUtPl9pc0Rl
ZmVycmluZ1RleHRUb3VjaEJhclVwZGF0ZXMgPSBZRVM7Cit9CisKKy0gKHZvaWQpcHJlcGFyZUZv
ck1vdXNlVXAKK3sKKyAgICBpZiAoIV9wcml2YXRlLT5faXNEZWZlcnJpbmdUZXh0VG91Y2hCYXJV
cGRhdGVzKQorICAgICAgICByZXR1cm47CisKKyAgICBfcHJpdmF0ZS0+X2lzRGVmZXJyaW5nVGV4
dFRvdWNoQmFyVXBkYXRlcyA9IE5POworICAgIGlmIChfcHJpdmF0ZS0+X25lZWRzRGVmZXJyZWRU
ZXh0VG91Y2hCYXJVcGRhdGUpIHsKKyAgICAgICAgLy8gT25seSB0cmlnZ2VyIGFub3RoZXIgdXBk
YXRlIGlmIHdlIGF0dGVtcHRlZCBhbmQgYmFpbGVkIGZyb20gYW4gdXBkYXRlIGR1cmluZyB0aGUg
ZGVmZXJyYWwuCisgICAgICAgIFtzZWxmIHVwZGF0ZVRvdWNoQmFyXTsKKyAgICB9Cit9CisKKy0g
KHZvaWQpd2ViVmlld0FkZGl0aW9uc1dpbGxEZXN0cm95VmlldworeworICAgIFtbTlNOb3RpZmlj
YXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZl07Cit9CisKKy0g
KE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSAqKWNhbmRpZGF0ZUxpc3QKK3sKKyAgICByZXR1
cm4gc2VsZi5faXNSaWNobHlFZGl0YWJsZSA/IF9wcml2YXRlLT5fcmljaFRleHRDYW5kaWRhdGVM
aXN0VG91Y2hCYXJJdGVtLmdldCgpIDogX3ByaXZhdGUtPl9wbGFpblRleHRDYW5kaWRhdGVMaXN0
VG91Y2hCYXJJdGVtLmdldCgpOworfQorI2Vsc2UKKworLSAodm9pZCl1cGRhdGVUb3VjaEJhcgor
eworfQorCistICh2b2lkKXByZXBhcmVGb3JNb3VzZURvd24KK3sKK30KKworLSAodm9pZClwcmVw
YXJlRm9yTW91c2VVcAoreworfQorCistICh2b2lkKXdlYlZpZXdBZGRpdGlvbnNXaWxsRGVzdHJv
eVZpZXcKK3sKK30KKworLSAoaWQpY2FuZGlkYXRlTGlzdAoreworICAgIHJldHVybiBuaWw7Cit9
CisKKyNlbmRpZgorCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJWaWV3IChXZWJWaWV3RGV2
aWNlT3JpZW50YXRpb24pCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdE
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0
YS5oCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZp
ZXdEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw4ICsxMDEsMTAgQEAgY2xhc3MgV2ViVmll
d0dyb3VwOwogY2xhc3MgV2ViU2VsZWN0aW9uU2VydmljZUNvbnRyb2xsZXI7CiAjZW5kaWYKIAot
I2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAx
MDEyMDAgJiYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLSNpbXBvcnQgPFdlYktpdEFkZGl0aW9u
cy9XZWJWaWV3RGF0YUFkZGl0aW9uc0RlY2xhcmF0aW9ucy5oPgorI2lmIEhBVkUoVE9VQ0hfQkFS
KQorQGNsYXNzIFdlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyOworQGNsYXNzIEFWRnVuY3Rp
b25CYXJQbGF5YmFja0NvbnRyb2xzUHJvdmlkZXI7CitAY2xhc3MgQVZGdW5jdGlvbkJhclNjcnVi
YmVyOwogI2VuZGlmCiAKIGNsYXNzIFdlYlZpZXdMYXllckZsdXNoU2NoZWR1bGVyIDogcHVibGlj
IFdlYkNvcmU6OkxheWVyRmx1c2hTY2hlZHVsZXIgewpAQCAtMTc4LDkgKzE4MCwyNCBAQCBAaW50
ZXJmYWNlIFdlYlZpZXdQcml2YXRlIDogTlNPYmplY3QgewogI2lmIFBMQVRGT1JNKE1BQykKICAg
ICBXZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyICppbW1lZGlhdGVBY3Rpb25Db250cm9sbGVy
OwogCi0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAgJiYgVVNF
KEFQUExFX0lOVEVSTkFMX1NESykKLSNpbXBvcnQgPFdlYktpdEFkZGl0aW9ucy9XZWJWaWV3RGF0
YUFkZGl0aW9ucy5oPgotI2VuZGlmCisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgUmV0YWluUHRy
PE5TVG91Y2hCYXI+IF9jdXJyZW50VG91Y2hCYXI7CisgICAgUmV0YWluUHRyPE5TVG91Y2hCYXI+
IF9wbGFpblRleHRUb3VjaEJhcjsKKyAgICBSZXRhaW5QdHI8TlNUb3VjaEJhcj4gX3JpY2hUZXh0
VG91Y2hCYXI7CisgICAgUmV0YWluUHRyPFdlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyPiBf
dGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXI7CisgICAgUmV0YWluUHRyPE5TQ2FuZGlkYXRlTGlz
dFRvdWNoQmFySXRlbT4gX3JpY2hUZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTsKKyAgICBS
ZXRhaW5QdHI8TlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtPiBfcGxhaW5UZXh0Q2FuZGlkYXRl
TGlzdFRvdWNoQmFySXRlbTsKKyAgICBSZXRhaW5QdHI8TlNBcnJheT4gX2VtcHR5Q2FuZGlkYXRl
c0FycmF5OworICAgIFJldGFpblB0cjxBVkZ1bmN0aW9uQmFyUGxheWJhY2tDb250cm9sc1Byb3Zp
ZGVyPiBtZWRpYVRvdWNoQmFyUHJvdmlkZXI7CisgICAgUmV0YWluUHRyPEFWRnVuY3Rpb25CYXJT
Y3J1YmJlcj4gbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzsKKworICAgIEJPT0wgX2NhbkNyZWF0
ZVRvdWNoQmFyczsKKyAgICBCT09MIF9pc1VwZGF0aW5nVGV4dFRvdWNoQmFyOworICAgIEJPT0wg
X3N0YXJ0ZWRMaXN0ZW5pbmdUb0N1c3RvbWl6YXRpb25FdmVudHM7CisgICAgQk9PTCBfaXNDdXN0
b21pemluZ1RvdWNoQmFyOworICAgIEJPT0wgX2lzRGVmZXJyaW5nVGV4dFRvdWNoQmFyVXBkYXRl
czsKKyAgICBCT09MIF9uZWVkc0RlZmVycmVkVGV4dFRvdWNoQmFyVXBkYXRlOworI2VuZGlmIC8v
IEhBVkUoVE9VQ0hfQkFSKQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlRleHRJbmRp
Y2F0b3JXaW5kb3c+IHRleHRJbmRpY2F0b3JXaW5kb3c7CiAgICAgQk9PTCBoYXNJbml0aWFsaXpl
ZExvb2t1cE9ic2VydmVyOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3
SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZp
ZXdJbnRlcm5hbC5oCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlZpZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw3IEBAIGNs
YXNzIFdlYlNlbGVjdGlvblNlcnZpY2VDb250cm9sbGVyOwogCiAjZW5kaWYKIAorQGNsYXNzIE5T
Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTsKIEBjbGFzcyBXZWJCYXNlUGx1Z2luUGFja2FnZTsK
IEBjbGFzcyBXZWJEb3dubG9hZDsKIEBjbGFzcyBXZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVy
OwpAQCAtMjkzLDEyICsyOTQsMTEgQEAgQGludGVyZmFjZSBXZWJWaWV3IChXZWJWaWV3T3RoZXJJ
bnRlcm5hbAogLSAodm9pZClfc2V0TW9ja01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJOYW1lOihO
U1N0cmluZyAqKW5hbWUgc3RhdGU6KFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRDb250ZXh0
OjpTdGF0ZSlzdGF0ZTsKICNlbmRpZgogCi1AZW5kCi0KLUBpbnRlcmZhY2UgV2ViVmlldyAoV2Vi
VXBkYXRlV2ViVmlld0FkZGl0aW9ucykKIC0gKHZvaWQpcHJlcGFyZUZvck1vdXNlVXA7CiAtICh2
b2lkKXByZXBhcmVGb3JNb3VzZURvd247Ci0tICh2b2lkKXVwZGF0ZVdlYlZpZXdBZGRpdGlvbnM7
CistICh2b2lkKXVwZGF0ZVRvdWNoQmFyOwogLSAodm9pZCl3ZWJWaWV3QWRkaXRpb25zV2lsbERl
c3Ryb3lWaWV3OwotLSAoaWQpY2FuZGlkYXRlTGlzdDsKKy0gKHZvaWQpX2Rpc21pc3NUZXh0VG91
Y2hCYXJQb3BvdmVySXRlbVdpdGhJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXI7Cist
IChOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gKiljYW5kaWRhdGVMaXN0OworCiBAZW5kCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdQcml2YXRlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3UHJpdmF0ZS5oCShyZXZpc2lv
biAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdQcml2YXRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTg4OSw2ICs4ODksMTAgQEAgQ291bGQgYmUgd29ydGggYWRkaW5n
IHRvIHRoZSBBUEkuCiAKIC0gKHZvaWQpX3NldEZvbnRGYWxsYmFja1ByZWZlcnNQaWN0b2dyYXBo
czooQk9PTClmbGFnOwogCistICh2b2lkKXNob3dDYW5kaWRhdGVzOihOU0FycmF5ICopY2FuZGlk
YXRlcyBmb3JTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIGluUmVjdDooTlNSZWN0KXJlY3RPZlR5
cGVkU3RyaW5nIGZvclNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UgdmlldzooTlNWaWV3ICop
dmlldyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNUZXh0Q2hlY2tpbmdSZXN1bHQgKmFj
Y2VwdGVkQ2FuZGlkYXRlKSljb21wbGV0aW9uQmxvY2s7CistICh2b2lkKWZvcmNlUmVxdWVzdENh
bmRpZGF0ZXNGb3JUZXN0aW5nOworLSAoQk9PTClzaG91bGRSZXF1ZXN0Q2FuZGlkYXRlczsKKwog
QGVuZAogCiAjaWYgIVRBUkdFVF9PU19JUEhPTkUKQEAgLTEwNjEsMTIgKzEwNjUsNiBAQCBAaW50
ZXJmYWNlIE5TT2JqZWN0IChXZWJWaWV3UmVzb3VyY2VMb2FkCiAtIChOU0NhY2hlZFVSTFJlc3Bv
bnNlICopd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciByZXNvdXJjZTooaWQpaWRlbnRpZmllciB3
aWxsQ2FjaGVSZXNwb25zZTooTlNDYWNoZWRVUkxSZXNwb25zZSAqKXJlc3BvbnNlIGZyb21EYXRh
U291cmNlOihXZWJEYXRhU291cmNlICopZGF0YVNvdXJjZTsKIEBlbmQKIAotQGludGVyZmFjZSBX
ZWJWaWV3IChXZWJTaG93Q2FuZGlkYXRlcykKLS0gKHZvaWQpc2hvd0NhbmRpZGF0ZXM6KE5TQXJy
YXkgKiljYW5kaWRhdGVzIGZvclN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgaW5SZWN0OihOU1Jl
Y3QpcmVjdE9mVHlwZWRTdHJpbmcgZm9yU2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlyYW5nZSB2aWV3
OihOU1ZpZXcgKil2aWV3IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU1RleHRDaGVja2lu
Z1Jlc3VsdCAqYWNjZXB0ZWRDYW5kaWRhdGUpKWNvbXBsZXRpb25CbG9jazsKLS0gKHZvaWQpZm9y
Y2VSZXF1ZXN0Q2FuZGlkYXRlc0ZvclRlc3Rpbmc7Ci0tIChCT09MKXNob3VsZFJlcXVlc3RDYW5k
aWRhdGVzOwotQGVuZAotCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewogI2VuZGlm
CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyMDg0MDUpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNyBAQAorMjAxNi0xMS0wNCAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgU3VwcG9ydCBUb3VjaEJhciBpbiBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDQzNworICAgICAgICAtYW5kIGNvcnJlc3Bv
bmRpbmctCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzI4ODc2NTI0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBtYWtlcyBNaW5pQnJvd3NlciBz
dXBwb3J0IFRvdWNoQmFyIGN1c3RvbWl6YXRpb24uIAorCisgICAgICAgICogTWluaUJyb3dzZXIv
bWFjL0FwcERlbGVnYXRlLm06CisgICAgICAgICgtW0Jyb3dzZXJBcHBEZWxlZ2F0ZSBhd2FrZUZy
b21OaWJdKToKKwogMjAxNi0xMS0wNCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3
ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMDgyOTMuCklu
ZGV4OiBUb29scy9NaW5pQnJvd3Nlci9tYWMvQXBwRGVsZWdhdGUubQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9NaW5pQnJvd3Nlci9tYWMvQXBwRGVsZWdhdGUubQkocmV2aXNpb24gMjA4NDA1KQorKysg
VG9vbHMvTWluaUJyb3dzZXIvbWFjL0FwcERlbGVnYXRlLm0JKHdvcmtpbmcgY29weSkKQEAgLTQ3
LDYgKzQ3LDEwIEBAIGVudW0gewogICAgIFdlYktpdDJOZXdXaW5kb3dUYWcgPSAyCiB9OwogCitA
aW50ZXJmYWNlIE5TQXBwbGljYXRpb24gKFRvdWNoQmFyKQorQHByb3BlcnR5IChnZXR0ZXI9aXNB
dXRvbWF0aWNDdXN0b21pemVUb3VjaEJhck1lbnVJdGVtRW5hYmxlZCkgQk9PTCBhdXRvbWF0aWND
dXN0b21pemVUb3VjaEJhck1lbnVJdGVtRW5hYmxlZDsKK0BlbmQKKwogQGltcGxlbWVudGF0aW9u
IEJyb3dzZXJBcHBEZWxlZ2F0ZQogCiAtIChpZClpbml0CkBAIC03Myw2ICs3Nyw5IEBAIC0gKHZv
aWQpYXdha2VGcm9tTmliCiAjZW5kaWYKIAogICAgIFtbTlNBcHAgbWFpbk1lbnVdIGluc2VydEl0
ZW06W2l0ZW0gYXV0b3JlbGVhc2VdIGF0SW5kZXg6W1tOU0FwcCBtYWluTWVudV0gaW5kZXhPZkl0
ZW1XaXRoVGl0bGU6QCJEZWJ1ZyJdXTsKKworICAgIGlmIChbTlNBcHAgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3RvcihzZXRBdXRvbWF0aWNDdXN0b21pemVUb3VjaEJhck1lbnVJdGVtRW5hYmxl
ZDopXSkKKyAgICAgICAgW05TQXBwIHNldEF1dG9tYXRpY0N1c3RvbWl6ZVRvdWNoQmFyTWVudUl0
ZW1FbmFibGVkOllFU107CiB9CiAKICNpZiBXS19BUElfRU5BQkxFRAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294046</attachid>
            <date>2016-11-06 21:37:34 -0800</date>
            <delta_ts>2016-11-07 17:37:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-10.txt</filename>
            <type>text/plain</type>
            <size>118522</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE2LTExLTA0ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBTdXBwb3J0IFRvdWNoQmFyIGluIFdl
YktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0
NDM3CisgICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0v
Mjg4NzY1MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9y
bS9zcGkvY29jb2EvQVZLaXRTUEkuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcGkvY29jb2EvTlNU
b3VjaEJhclNQSS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxD
aGVja2VyU1BJLmg6CisKIDIwMTYtMTEtMDQgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgogCiAgICAgICAgIEluZGV4ZWREQiAyLjA6IENsZWFuIHVwIG1vcmUgdHJhbnNhY3Rpb24g
YWJvcnQgYW5kIGV4Y2VwdGlvbiB0aHJvd2luZyBiZWhhdmlvciBmcm9tIElEQk9iamVjdFN0b3Jl
LgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMjA4NDA1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNTY0LDEwICsxNTY0LDEw
IEBACiAJCTQxNjJBNDU3MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQxNjJBNDU1MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
LmNwcCAqLzsgfTsKIAkJNDE2MkE0NTgxMDExNDY0NzAwREZGM0VEIC8qIEpTRGVkaWNhdGVkV29y
a2VyR2xvYmFsU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQxNjJBNDU2MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlLmggKi87IH07CiAJCTQxNkUyOUE2MTAyRkE5NjIwMDdGQzE0RSAvKiBXb3JrZXJSZXBv
cnRpbmdQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDE2RTI5QTUxMDJGQTk2MjAwN0ZDMTRFIC8qIFdvcmtlclJlcG9ydGluZ1Byb3h5LmggKi87
IH07CisJCTQxNkU2RkU4MUJCRDEyREYwMDBBM0Y2NCAvKiBSZWFkYWJsZVN0cmVhbUludGVybmFs
c0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTQxNkU2RkU4MUJCRDEyREYwMDBBNjAyMyAvKiBGZXRjaEludGVybmFsc0J1aWx0aW5zLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMx
MTBEMDBCNzY0QjkgLyogRmV0Y2hJbnRlcm5hbHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjAz
MyAvKiBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEM5IC8qIFN0cmVhbUlu
dGVybmFsc0J1aWx0aW5zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJNDE2RTZGRTgxQkJEMTJERjAwMEEzRjY0IC8qIFJlYWRhYmxlQnl0ZVN0cmVh
bUludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVCeXRlU3RyZWFt
SW50ZXJuYWxzQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQk0MTZFNkZFODFCQkQxMkRGMDAwQTYwNDMgLyogUmVhZGFibGVTdHJlYW1J
bnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOUIwM0Q4MDYxQkIzMTEwRDAwQjczRjY0IC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJu
YWxzQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk0MTZFNkZFODFCQkQxMkRGMDAwQTYwNDMgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50
ZXJuYWxzQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRl
cm5hbHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjA1MyAvKiBXcml0YWJsZVN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RTkgLyogV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNC
dWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTQxNkU2RkU5MUJCRDEyRTUwMDBBNjA0MyAvKiBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFC
QjMxMTBEMDBCNzY0RDggLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxNkU2RkU5MUJCRDEyRTUwMDBB
NjA1MyAvKiBXcml0YWJsZVN0cmVhbUJ1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RTggLyogV3JpdGFi
bGVTdHJlYW1CdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0yNTkwLDggKzI1OTAsOCBAQAogCQk2QjY5M0EyRTFDNTFBODJFMDBCMDNC
RUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZCNjkzQTJEMUM1MUE4MkUwMEIwM0JFRiAvKiBSZXNvdXJjZUxv
YWRPYnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTZCNjkzQTM0MUM1MUE5NUQwMEIwM0JFRiAvKiBSZXNvdXJjZUxvYWRPYnNlcnZlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QjY5M0Ez
MzFDNTFBOTVEMDBCMDNCRUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwICovOyB9OwogCQk2
QzRDOTZERTFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNEM5
NkRBMUFENDQ4MzUwMDM2M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuY3Bw
ICovOyB9OwotCQk2QzRDOTZERjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJl
YW1Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2QzRDOTZEQjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250
cm9sbGVyLmggKi87IH07CiAJCTZDNEM5NkRFMUFENDQ4MzUwMDM2NUE1MCAvKiBKU1JlYWRhYmxl
U3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkM0Qzk2REExQUQ0NDgzNTAwMzY1QTUwIC8qIEpTUmVhZGFibGVT
dHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHAgKi87IH07CisJCTZDNEM5NkRGMUFENDQ4MzUwMDM2
M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNEM5NkRCMUFENDQ4MzUwMDM2M0Y2NCAv
KiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaCAqLzsgfTsKIAkJNkM0Qzk2REYxQUQ0
NDgzNTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0Qzk2REIxQUQ0NDgz
NTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5oICovOyB9Owog
CQk2QzYzODg5NUE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlh
dG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM2
Mzg4OTNBOTZDQ0VFNTBDOEM5NDZDIC8qIENhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2QzYz
ODg5NkE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzYzODg5
NEE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5jcHAg
Ki87IH07CkBAIC0zMjc0LDYgKzMyNzQsNyBAQAogCQk5MzMwOUVBMzA5OUVCNzhDMDA1NkU1ODEg
LyogU2hhcmVkVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzMzA5RUEwMDk5RUI3OEMwMDU2RTU4MSAvKiBTaGFyZWRUaW1lci5oICovOyB9Owog
CQk5MzMwOUVBNDA5OUVCNzhDMDA1NkU1ODEgLyogVGltZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlFQTEwOTlFQjc4QzAwNTZFNTgxIC8q
IFRpbWVyLmNwcCAqLzsgfTsKIAkJOTMzNTRBM0MwQjI0RjhDOTAwM0Y2REVBIC8qIFVJRXZlbnRX
aXRoS2V5U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTMzNTRBM0IwQjI0RjhDOTAwM0Y2REVBIC8qIFVJRXZlbnRXaXRoS2V5U3RhdGUuY3Bw
ICovOyB9OworCQk5MzM1QjQ5RDFEQ0JFRjdDMDBFRDQ2OEUgLyogTlNUb3VjaEJhclNQSS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzNUI0OUIxRENC
RUY3MTAwRUQ0NjhFIC8qIE5TVG91Y2hCYXJTUEkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5MzNBMTQyRTBCN0QxODg2MDBBNTNGRkQgLyogVGV4
dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzM0ExNDJCMEI3RDE4ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuY3BwICovOyB9OwogCQk5MzNB
MTQzMDBCN0QxODg2MDBBNTNGRkQgLyogVGV4dEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzNBMTQyRDBCN0QxODg2MDBBNTNGRkQgLyogVGV4
dEV2ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJOTMzQTE0QjgwQjdEMUQ1MjAwQTUzRkZEIC8qIEpTVGV4dEV2ZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzM0ExNEI2MEI3RDFENTIwMEE1
M0ZGRCAvKiBKU1RleHRFdmVudC5jcHAgKi87IH07CkBAIC05NzgyLDggKzk3ODMsOCBAQAogCQk2
QjY5M0EyRDFDNTFBODJFMDBCMDNCRUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkI2OTNBMzMxQzUxQTk1RDAwQjAzQkVGIC8qIFJlc291
cmNlTG9hZE9ic2VydmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlc291cmNlTG9hZE9ic2VydmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NkM0Qzk2REExQUQ0NDgzNTAwMzYzRjY0IC8qIEpTUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1JlYWRhYmxlQnl0
ZVN0cmVhbUNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzRD
OTZEQjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUmVhZGFibGVCeXRlU3RyZWFtQ29u
dHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QzRDOTZEQTFBRDQ0ODM1
MDAzNjVBNTAgLyogSlNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29u
dHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZDNEM5NkRCMUFENDQ4
MzUwMDM2M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZDNEM5NkRCMUFENDQ4MzUwMDM2NUE1MCAv
KiBKU1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZDNjM4ODkzQTk2Q0NFRTUwQzhDOTQ2QyAvKiBDYWNo
ZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTZDNjM4ODk0QTk2Q0NFRTUwQzhDOTQ2QyAvKiBDYWNoZWRSZXNvdXJj
ZVJlcXVlc3RJbml0aWF0b3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTEwNzIyLDYgKzEwNzIzLDcgQEAKIAkJOTMzMkFCOEIxNjUzQTk3OTAw
RDgyN0VDIC8qIEZFTGlnaHRpbmdORU9OLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZFTGlnaHRpbmdORU9OLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMzJB
QjhDMTY1M0E5NzkwMEQ4MjdFQyAvKiBORU9OSGVscGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBORU9OSGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5MzM1NEEzQjBCMjRGOEM5MDAzRjZERUEgLyogVUlFdmVudFdpdGhLZXlTdGF0ZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVSUV2ZW50V2l0aEtleVN0YXRlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTMzNUI0OUIxRENCRUY3MTAwRUQ0NjhF
IC8qIE5TVG91Y2hCYXJTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTlNU
b3VjaEJhclNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzNBMTQyQjBCN0Qx
ODg2MDBBNTNGRkQgLyogVGV4dEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFRleHRFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkz
M0ExNDJDMEI3RDE4ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFRleHRFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzM0Ex
NDJEMEI3RDE4ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGV4dEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MTE3NSw4ICsxMTE3Nyw4IEBACiAJCTk5MDhCMEYwMUJDQUNGOTEwMEVEM0Y2NCAvKiBSZWFkYWJs
ZUJ5dGVTdHJlYW1Db250cm9sbGVyLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0
OyBwYXRoID0gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlci5qczsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTkwOEIwRjExQkNBQ0Y5MTAwRUQwRjU1IC8qIFN0cmVhbUludGVybmFs
cy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFN0cmVhbUludGVy
bmFscy5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkwOEIwRjExQkNBQ0Y5MTAw
RUQwRjY1IC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzLmpzICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVhZGFibGVTdHJlYW1JbnRlcm5hbHMuanM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk5MDhCMEYxMUJDQUNGOTEwMEVEM0Y2NCAvKiBSZWFkYWJs
ZUJ5dGVTdHJlYW1JbnRlcm5hbHMuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7
IHBhdGggPSBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHMuanM7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTk5MDhCMEYxMUJDQUNGOTEwMEVEMEY3NSAvKiBXcml0YWJsZVN0cmVhbUlu
dGVybmFscy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFdyaXRh
YmxlU3RyZWFtSW50ZXJuYWxzLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OTA4
QjBGMTFCQ0FDRjkxMDBFRDNGNjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzLmpzICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVhZGFibGVCeXRlU3RyZWFt
SW50ZXJuYWxzLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGMjFCQ0FD
RjkxMDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyLmpzICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVy
LmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGMzFCQ0FDRkZFMDBFRDBG
NjUgLyogQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJ5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3lCdWlsdGlu
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5MDhCMEY1MUJDQUQwN0QwMEVE
MEY2NSAvKiBCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5QnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTE4NCwxNSArMTExODYsMTMgQEAKIAkJ
OTkwOEIwRjcxQkNBRDA3RDAwRUQwRjY1IC8qIENvdW50UXVldWluZ1N0cmF0ZWd5QnVpbHRpbnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ291bnRRdWV1aW5nU3RyYXRlZ3lC
dWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGOTFCQ0FEMDdE
MDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkwOEIwRjkxQkNBRDA3RDAwRUQwRjc1IC8qIFdyaXRhYmxl
U3RyZWFtQnVpbHRpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V3JpdGFibGVTdHJlYW1CdWlsdGlucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTk5MDhCMEZBMUJDQUQwN0QwMEVEM0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVy
QnVpbHRpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFi
bGVCeXRlU3RyZWFtQ29udHJvbGxlckJ1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJOTkwOEIwRkIxQkNBRDA3RDAwRUQzRjY0IC8qIFJlYWRhYmxlQnl0ZVN0cmVhbUNv
bnRyb2xsZXJCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFk
YWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQnVpbHRpbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTkwOEIwRkExQkNBRDA3RDAwRUQwRjY1IC8qIFJlYWRhYmxlU3RyZWFtRGVmYXVs
dENvbnRyb2xsZXJCdWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQnVpbHRpbnMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGQjFCQ0FEMDdEMDBFRDBGNjUgLyogUmVhZGFi
bGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckJ1aWx0aW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJCdWlsdGlucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGRDFCQ0FEMDdEMDBFRDBGNDUgLyog
RmV0Y2hJbnRlcm5hbHNCdWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGZXRjaEludGVybmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTkwOEIwRkQxQkNBRDA3RDAwRUQwRjU1IC8qIFN0cmVhbUludGVybmFsc0J1aWx0
aW5zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTkwOEIwRkQx
QkNBRDA3RDAwRUQzRjY0IC8qIFJlYWRhYmxlQnl0ZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlYWRhYmxlQnl0ZVN0cmVh
bUludGVybmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkw
OEIwRkQxQkNBRDA3RDAwRUQwRjY1IC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFibGVTdHJlYW1J
bnRlcm5hbHNCdWlsdGlucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5MDhC
MEZEMUJDQUQwN0QwMEVEMEY3NSAvKiBXcml0YWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdyaXRhYmxlU3RyZWFtSW50
ZXJuYWxzQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OTA4QjBG
RDFCQ0FEMDdEMDBFRDNGNjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFibGVCeXRlU3Ry
ZWFtSW50ZXJuYWxzQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
OTA4QjBGRTFCQ0FEMDdEMDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyQnVp
bHRpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFibGVT
dHJlYW1EZWZhdWx0UmVhZGVyQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5OTA4QjBGRjFCQ0FEMDdEMDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVh
ZGVyQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVhZGFibGVT
dHJlYW1EZWZhdWx0UmVhZGVyQnVpbHRpbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTkyMDM5ODAxOEI5NUJDNjAwQjM5QUY5IC8qIFVzZXJJbnB1dEJyaWRnZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVc2VySW5wdXRCcmlkZ2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEyMzAsMTAgKzExMjMwLDEwIEBACiAJCTlBNTI4
RTgyMTdEN0Y1MkYwMEFBOTUxOCAvKiBGbG9hdGluZ09iamVjdHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRmxvYXRpbmdPYmplY3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTlBQjFGMzdFMThFMjQ4OUEwMDUzNDc0MyAvKiBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUFCMUYzN0YxOEUy
NDg5QTAwNTM0NzQzIC8qIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAv
KiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0QjkgLyog
RmV0Y2hJbnRlcm5hbHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGZXRjaEludGVybmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTlCMDNEODA2MUJCMzExMEQwMEI3NjRDOSAvKiBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDgg
LyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5h
bHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZUJ5
dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZVN0cmVhbUlu
dGVybmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMDNEODA2
MUJCMzExMEQwMEI3NjRFOCAvKiBXcml0YWJsZVN0cmVhbUJ1aWx0aW5zLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyaXRhYmxlU3RyZWFtQnVpbHRpbnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEU5IC8qIFdyaXRhYmxl
U3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTcyNTcsNiArMTcyNTcsNyBAQAogCQkJCTJEREI5N0YzMTlGOUFFQ0EwMDIw
MjVEOCAvKiBOU0V4dGVuc2lvblNQSS5oICovLAogCQkJCUNFMTI1MjNBMUExNjcxMTAwMDg2NDQ4
MCAvKiBOU0ZpbGVNYW5hZ2VyU1BJLmggKi8sCiAJCQkJQ0UxMjUyNTIxQTFCRUMwNjAwODY0NDgw
IC8qIE5TU3RyaW5nU1BJLmggKi8sCisJCQkJOTMzNUI0OUIxRENCRUY3MTAwRUQ0NjhFIC8qIE5T
VG91Y2hCYXJTUEkuaCAqLywKIAkJCQkzMUIzMTNEQTFCNjk4NzE2MDBGMkFBQkMgLyogTlNVUkxD
b25uZWN0aW9uU1BJLmggKi8sCiAJCQkJQ0UxMjUyNTQxQTFCRUMwRTAwODY0NDgwIC8qIE5TVVJM
RG93bmxvYWRTUEkuaCAqLywKIAkJCQk2NTNFRjgzODE5QTA0M0FFMDA1MjIwMkMgLyogTlNVUkxG
aWxlVHlwZU1hcHBpbmdzU1BJLmggKi8sCkBAIC0xNzMzMyw4ICsxNzMzNCw2IEBACiAJCQkJNDRB
MjhBQUUxMkRGQjhCRjAwQUU5MjNCIC8qIE1hdGhNTE5hbWVzLmggKi8sCiAJCQkJNzFFMjE4Mzgx
NzM1OUZCODAwNkU2RTREIC8qIFBsdWdJbnNSZXNvdXJjZXMuaCAqLywKIAkJCQk3MUUyMTgzOTE3
MzU5RkI4MDA2RTZFNEQgLyogUGx1Z0luc1Jlc291cmNlc0RhdGEuY3BwICovLAotCQkJCTk5MDhC
MEZBMUJDQUQwN0QwMDc2M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQnVpbHRp
bnMuY3BwICovLAotCQkJCTk5MDhCMEZCMUJDQUQwN0QwMDc2M0Y2NCAvKiBSZWFkYWJsZUJ5dGVT
dHJlYW1Db250cm9sbGVyQnVpbHRpbnMuaCAqLywKIAkJCQk5OTA4QjBGRDFCQ0FEMDdEMDBFRDNG
NjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuY3BwICovLAogCQkJCTlC
MDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oICovLAogCQkJCTk5MDhCMEY5MUJDQUQwN0QwMEVEMEY2NSAvKiBSZWFkYWJsZVN0cmVh
bUJ1aWx0aW5zLmNwcCAqLywKQEAgLTI1MDc3LDcgKzI1MDc2LDYgQEAKIAkJCQlCQzFCREYyNTE1
NkMxOEM3MDAxQzEyNDMgLyogRE9NRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTJFRDYwOUJE
MTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgx
ODVGM0IwOTc2NTc2NjAwNTgyNkQ5IC8qIERPTUltcGxlbWVudGF0aW9uLmggaW4gSGVhZGVycyAq
LywKLQkJCQlFMzVDQTE0RTFEQkMzQTQyMDBGODM1MTYgLyogRE9NSklUQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMxNTBFQTcxREE3MjE5MzAwMTk0MDEyIC8q
IERPTUpJVEhlbHBlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE5QzZFNEU0MEQ3NDVFMDUwMDY0
NDJFOSAvKiBET01NaW1lVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTlDNkU0RTgwRDc0NUUx
ODAwNjQ0MkU5IC8qIERPTU1pbWVUeXBlQXJyYXkuaCBpbiBIZWFkZXJzICovLApAQCAtMjY3OTEs
OSArMjY3ODksOSBAQAogCQkJCUY1NUIzRENFMTI1MUYxMkQwMDNFRjI2OSAvKiBSYW5nZUlucHV0
VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU4NEU5RTExNzY2OEJGMTAwODE1QjY4IC8qIFJh
c3RlclNoYXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODREODI3QzExRDMzM0VEMDA5NzI5OTAg
LyogUmF3RGF0YURvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQk0MTZFNkZFODFC
QkQxMkRGMDAwQTNGNjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCBp
biBIZWFkZXJzICovLAorCQkJCTQxNkU2RkU4MUJCRDEyREYwMDBBM0Y2NCAvKiBSZWFkYWJsZVN0
cmVhbUludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTZFNkZFOTFCQkQx
MkU1MDAwQTYwNDMgLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJNDE2RTZGRTgxQkJEMTJERjAwMEE2MDQzIC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVp
bHRpbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjA0MyAvKiBS
ZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkQzMTYwM0MxMkIwMjY3NjAwQzFBMzU5IC8qIFJlYWx0aW1lQW5hbHlzZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTRBNEY2NTcxMUFBOTk3RjEwMEUzOENERCAvKiBSZWFsdGltZU1lZGlhU291cmNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0QTRGNjU3MjFBQTk5N0YxMDBFMzhDREQgLyogUmVhbHRp
bWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzg3NSw2ICsy
Nzg3Myw3IEBACiAJCQkJMUNBRjM0ODEwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVj
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUNBRjM0ODMwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNj
cmlwdE9iamVjdFByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNTY5RDFCMEQ3RTJCODIw
MDdDMzk4MyAvKiBXZWJTY3JpcHRPYmplY3RQcm90b2NvbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
OTMzNUI0OUQxRENCRUY3QzAwRUQ0NjhFIC8qIE5TVG91Y2hCYXJTUEkuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk3QUFCRDFCMTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk3QUFCRDFFMTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXRDaGFubmVsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5N0FBQkQxRjE0RkEwOUQ1MDA3NDU3QUUgLyogV2ViU29ja2V0
Q2hhbm5lbENsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODgzNCw3ICsyODgzMyw2IEBACiAJ
CQkJQkMxQkRGMjQxNTZDMTg4MzAwMUMxMjQzIC8qIERPTUVycm9yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTJFRDYwOUJDMTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBODE4NUYzRTA5NzY1NzY2MDA1ODI2RDkgLyogRE9NSW1wbGVtZW50YXRp
b24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRTM1Q0ExNEQxREJDM0EzRjAwRjgzNTE2IC8qIERP
TUpJVEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTlDNkU0
RTMwRDc0NUUwNTAwNjQ0MkU5IC8qIERPTU1pbWVUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE5QzZFNEU3MEQ3NDVFMTgwMDY0NDJFOSAvKiBET01NaW1lVHlwZUFycmF5LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTUyQjZDOUMyMTVFM0Y0REYwMDY5MEIwNSAvKiBET01OYW1lZEZsb3dDb2xs
ZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
c3BpL2NvY29hL0FWS2l0U1BJLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vc3BpL2NvY29hL0FWS2l0U1BJLmgJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3NwaS9jb2NvYS9BVktpdFNQSS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2
ICs2MSw4IEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIEFWUGxheWVyQ29udHIKIEBwcm9w
ZXJ0eSAoTlNfTk9OQVRPTUlDX0lPU09OTFksIHJlYWRvbmx5KSBBVlBsYXllckNvbnRyb2xsZXJT
dGF0dXMgc3RhdHVzOwogQGVuZAogCitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCiBAY2xhc3Mg
QVZQbGF5ZXJMYXllcjsKIAogQGludGVyZmFjZSBBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXll
clZpZXcgOiBVSVZpZXcKQEAgLTEwMCw2ICsxMDIsOCBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRl
Z2VyLCBBVlBsYXllclZpZXdDCiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wg
cGljdHVyZUluUGljdHVyZVdhc1N0YXJ0ZWRXaGVuRW50ZXJpbmdCYWNrZ3JvdW5kOwogQGVuZAog
CitOU19BU1NVTUVfTk9OTlVMTF9FTkQKKwogI2VuZGlmIC8vIFVTRShBUFBMRV9JTlRFUk5BTF9T
REspCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogCkBAIC0xMzIsNiArMTM2LDggQEAgTlNfQ0xB
U1NfQVZBSUxBQkxFX01BQygxMF8xMSkKIAogI2VuZGlmIC8vIEVOQUJMRShXSVJFTEVTU19QTEFZ
QkFDS19UQVJHRVQpICYmICFQTEFURk9STShJT1MpCiAKK05TX0FTU1VNRV9OT05OVUxMX0JFR0lO
CisKIEBpbnRlcmZhY2UgQVZWYWx1ZVRpbWluZyA6IE5TT2JqZWN0IDxOU0NvZGluZywgTlNDb3B5
aW5nLCBOU011dGFibGVDb3B5aW5nPiAKIEBlbmQKIApAQCAtMTM5LDMgKzE0NSwzMiBAQCBOU19D
TEFTU19BVkFJTEFCTEVfTUFDKDEwXzExKQogKyAoQVZWYWx1ZVRpbWluZyAqKXZhbHVlVGltaW5n
V2l0aEFuY2hvclZhbHVlOihkb3VibGUpYW5jaG9yVmFsdWUgYW5jaG9yVGltZVN0YW1wOihOU1Rp
bWVJbnRlcnZhbCl0aW1lU3RhbXAgcmF0ZTooZG91YmxlKXJhdGU7CiBAcHJvcGVydHkgKE5TX05P
TkFUT01JQ19JT1NPTkxZLCByZWFkb25seSkgZG91YmxlIGN1cnJlbnRWYWx1ZTsKIEBlbmQKKwor
TlNfQVNTVU1FX05PTk5VTExfRU5ECisKKyNpZiBQTEFURk9STShNQUMpCisjaWYgRU5BQkxFKFdF
Ql9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorI2ltcG9ydCA8QVZLaXQvQVZGdW5jdGlvbkJh
clBsYXliYWNrQ29udHJvbHNQcm92aWRlci5oPgorI2ltcG9ydCA8QVZLaXQvQVZGdW5jdGlvbkJh
clNjcnViYmVyLmg+CisjZWxzZQorCitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCitAcHJvdG9j
b2wgQVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNDb250cm9sbGluZyA8TlNPYmplY3Q+CitA
cHJvcGVydHkgKHJlYWRvbmx5KSBOU1RpbWVJbnRlcnZhbCBjb250ZW50RHVyYXRpb247CitAcHJv
cGVydHkgKHJlYWRvbmx5LCBudWxsYWJsZSkgQVZWYWx1ZVRpbWluZyAqdGltaW5nOworQHByb3Bl
cnR5IChyZWFkb25seSwgZ2V0dGVyPWlzU2Vla2luZykgQk9PTCBzZWVraW5nOworQHByb3BlcnR5
IChyZWFkb25seSkgTlNUaW1lSW50ZXJ2YWwgc2Vla1RvVGltZTsKKy0gKHZvaWQpc2Vla1RvVGlt
ZTooTlNUaW1lSW50ZXJ2YWwpdGltZSB0b2xlcmFuY2VCZWZvcmU6KE5TVGltZUludGVydmFsKXRv
bGVyYW5jZUJlZm9yZSB0b2xlcmFuY2VBZnRlcjooTlNUaW1lSW50ZXJ2YWwpdG9sZXJhbmNlQWZ0
ZXI7CitAcHJvcGVydHkgKHJlYWRvbmx5KSBCT09MIGhhc0VuYWJsZWRBdWRpbzsKK0Bwcm9wZXJ0
eSAocmVhZG9ubHkpIEJPT0wgaGFzRW5hYmxlZFZpZGVvOworQGVuZAorCitAaW50ZXJmYWNlIEFW
RnVuY3Rpb25CYXJTY3J1YmJlciA6IE5TVmlldworQHByb3BlcnR5IChhc3NpZ24sIG51bGxhYmxl
KSBpZDxBVkZ1bmN0aW9uQmFyUGxheWJhY2tDb250cm9sc0NvbnRyb2xsaW5nPiBwbGF5YmFja0Nv
bnRyb2xzQ29udHJvbGxlcjsKK0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisjZW5kaWYgLy8gUExB
VEZPUk0oTUFDKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL2NvY29hL05TVG91
Y2hCYXJTUEkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvY29j
b2EvTlNUb3VjaEJhclNQSS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NwaS9jb2NvYS9OU1RvdWNoQmFyU1BJLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZiBQTEFURk9STShNQUMpICYmIEhBVkUoVE9VQ0hfQkFSKQor
I2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCisKKyNpbXBvcnQgPEFwcEtpdC9OU0Z1bmN0aW9u
QmFyX1ByaXZhdGUuaD4KKyNpbXBvcnQgPEFwcEtpdC9OU1RleHRUb3VjaEJhckl0ZW1Db250cm9s
bGVyX1dlYktpdFNQSS5oPgorI2ltcG9ydCA8QXBwS2l0L05TVG91Y2hCYXJfUHJpdmF0ZS5oPgor
CisjZWxzZQorCitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCitAaW50ZXJmYWNlIE5TVG91Y2hC
YXJJdGVtIDogTlNPYmplY3QKK0BlbmQKKworQGludGVyZmFjZSBOU0NvbG9yUGlja2VyVG91Y2hC
YXJJdGVtIDogTlNUb3VjaEJhckl0ZW0KK0BlbmQKKworQGludGVyZmFjZSBOU1RvdWNoQmFyIDog
TlNPYmplY3QKK0Bwcm9wZXJ0eSAocmVhZG9ubHksIGNvcHksIG51bGxhYmxlKSBOU0FycmF5PE5T
VG91Y2hCYXJJdGVtICo+ICppdGVtczsKK0Bwcm9wZXJ0eSAoc3Ryb25nLCBudWxsYWJsZSkgTlNU
b3VjaEJhckl0ZW0gKmVzY2FwZUtleVJlcGxhY2VtZW50SXRlbTsKK0BlbmQKKworQGludGVyZmFj
ZSBOU1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIDogTlNPYmplY3QKKworQHByb3BlcnR5IChy
ZWFkb25seSwgc3Ryb25nLCBudWxsYWJsZSkgTlNDb2xvclBpY2tlclRvdWNoQmFySXRlbSAqY29s
b3JQaWNrZXJJdGVtOworQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nLCBudWxsYWJsZSkgTlNT
ZWdtZW50ZWRDb250cm9sICp0ZXh0U3R5bGU7CitAcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcs
IG51bGxhYmxlKSBOU1NlZ21lbnRlZENvbnRyb2wgKnRleHRBbGlnbm1lbnRzOworQHByb3BlcnR5
IChudWxsYWJsZSwgc3Ryb25nKSBOU1ZpZXdDb250cm9sbGVyICp0ZXh0TGlzdFZpZXdDb250cm9s
bGVyOworQHByb3BlcnR5IEJPT0wgdXNlc05hcnJvd1RleHRTdHlsZUl0ZW07CisKKy0gKG51bGxh
YmxlIE5TVG91Y2hCYXJJdGVtICopaXRlbUZvcklkZW50aWZpZXI6KG51bGxhYmxlIE5TU3RyaW5n
ICopaWRlbnRpZmllcjsKKworQGVuZAorCisjZGVmaW5lIE5TVG91Y2hCYXJXaWxsRW50ZXJDdXN0
b21pemF0aW9uIEAiTlNUb3VjaEJhcldpbGxFbnRlckN1c3RvbWl6YXRpb24iCisjZGVmaW5lIE5T
VG91Y2hCYXJEaWRFeGl0Q3VzdG9taXphdGlvbiBAIk5TVG91Y2hCYXJEaWRFeGl0Q3VzdG9taXph
dGlvbiIKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECisKKyNlbmRpZiAvLyBVU0UoQVBQTEVfSU5U
RVJOQUxfU0RLKQorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykgJiYgSEFWRShUT1VDSF9CQVIpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxDaGVja2VyU1BJLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL21hYy9OU1NwZWxsQ2hl
Y2tlclNQSS5oCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9z
cGkvbWFjL05TU3BlbGxDaGVja2VyU1BJLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcg
QEAKIC8vIEZJWE1FOiBUaGlzIGhlYWRlciBzaG91bGQgaW5jbHVkZSBzeXN0ZW0gaGVhZGVycyB3
aGVuIHBvc3NpYmxlLgogCiBleHRlcm4gTlNTdHJpbmcgKk5TVGV4dENoZWNraW5nSW5zZXJ0aW9u
UG9pbnRLZXk7CitleHRlcm4gTlNOb3RpZmljYXRpb25OYW1lIGNvbnN0IE5TU3BlbGxDaGVja2Vy
RGlkQ2hhbmdlQXV0b21hdGljVGV4dENvbXBsZXRpb25Ob3RpZmljYXRpb247CiAKIEBpbnRlcmZh
Y2UgTlNTcGVsbENoZWNrZXIgKCkKIC0gKE5TSW50ZWdlcilyZXF1ZXN0Q2FuZGlkYXRlc0ZvclNl
bGVjdGVkUmFuZ2U6KE5TUmFuZ2Upc2VsZWN0ZWRSYW5nZSBpblN0cmluZzooTlNTdHJpbmcgKilz
dHJpbmdUb0NoZWNrIHR5cGVzOihOU1RleHRDaGVja2luZ1R5cGVzKWNoZWNraW5nVHlwZXMgb3B0
aW9uczooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKW9wdGlvbnMgaW5TcGVsbERvY3Vt
ZW50V2l0aFRhZzooTlNJbnRlZ2VyKXRhZyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNJ
bnRlZ2VyIHNlcXVlbmNlTnVtYmVyLCBOU0FycmF5PE5TVGV4dENoZWNraW5nUmVzdWx0ICo+ICpj
YW5kaWRhdGVzKSljb21wbGV0aW9uSGFuZGxlcjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIw
ODQwNSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDkwIEBACisyMDE2LTExLTA0ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKwor
ICAgICAgICBTdXBwb3J0IFRvdWNoQmFyIGluIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NDM3CisgICAgICAgIC1hbmQgY29ycmVzcG9u
ZGluZy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjg4NzY1MjQKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tW
aWV3UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1t
OgorICAgICAgICAoLVtXS1dlYlZpZXcgbWFrZVRvdWNoQmFyXSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
d2ViX2RpZEFkZE1lZGlhQ29udHJvbHNNYW5hZ2VyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3dlYl9kaWRSZW1vdmVNZWRpYUNvbnRyb2xzTWFuYWdlcl0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX2ludGVyYWN0V2l0aE1lZGlhQ29udHJvbHNGb3JUZXN0aW5nXSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfc2V0V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Ol0pOgorICAgICAgICAo
LVtXS1dlYlZpZXcgX21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXddKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9hZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Ol0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX3JlbW92ZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXddKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL21hYy9XS1ZpZXcubW06CisgICAgICAgICgtW1dLVmlldyBtYWtlVG91Y2hCYXJdKToKKyAg
ICAgICAgKC1bV0tWaWV3IGNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW1dKToKKyAgICAgICAgKC1b
V0tWaWV3IF93ZWJfZGlkQWRkTWVkaWFDb250cm9sc01hbmFnZXI6XSk6CisgICAgICAgICgtW1dL
VmlldyBfd2ViX2RpZFJlbW92ZU1lZGlhQ29udHJvbHNNYW5hZ2VyXSk6CisgICAgICAgICgtW1dL
VmlldyBfd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3XSk6CisgICAgICAgICgtW1dLVmll
dyBfc2V0V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Ol0pOgorICAgICAgICAoLVtXS1Zp
ZXcgX21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXddKToKKyAgICAgICAgKC1bV0tWaWV3IF9hZGRN
ZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Ol0pOgorICAgICAgICAoLVtXS1ZpZXcgX3JlbW92ZU1l
ZGlhUGxheWJhY2tDb250cm9sc1ZpZXddKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2Vi
Vmlld0ltcGwuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmN1cnJlbnRUb3VjaEJh
cik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjbGllbnRXYW50c01lZGlhUGxheWJh
Y2tDb250cm9sc1ZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Q2xpZW50
V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0ltcGw6OnNldElzQ3VzdG9taXppbmdUb3VjaEJhcik6CisgICAgICAgICogVUlQcm9jZXNzL0Nv
Y29hL1dlYlZpZXdJbXBsLm1tOgorICAgICAgICAoLVtXS1RleHRMaXN0VG91Y2hCYXJWaWV3Q29u
dHJvbGxlciBpbml0V2l0aFdlYlZpZXdJbXBsOl0pOgorICAgICAgICAoLVtXS1RleHRMaXN0VG91
Y2hCYXJWaWV3Q29udHJvbGxlciBkaWREZXN0cm95Vmlld10pOgorICAgICAgICAoLVtXS1RleHRM
aXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciBfc2VsZWN0TGlzdDpdKToKKyAgICAgICAgKC1bV0tU
ZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgc2V0Q3VycmVudExpc3RUeXBlOl0pOgorICAg
ICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIGluaXRXaXRoV2ViVmlld0ltcGw6
XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgZGlkRGVzdHJveVZp
ZXddKToKKyAgICAgICAgKC1bV0tUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciB0b3VjaEJhcjpt
YWtlSXRlbUZvcklkZW50aWZpZXI6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNv
bnRyb2xsZXIgaXRlbUZvcklkZW50aWZpZXI6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFy
SXRlbUNvbnRyb2xsZXIgY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTplbmRTZWxlY3RpbmdDYW5k
aWRhdGVBdEluZGV4Ol0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVy
IGNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW06Y2hhbmdlZENhbmRpZGF0ZUxpc3RWaXNpYmlsaXR5
Ol0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHRleHRMaXN0VG91
Y2hCYXJWaWV3Q29udHJvbGxlcl0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250
cm9sbGVyIHNldFRleHRJc0JvbGQ6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNv
bnRyb2xsZXIgc2V0VGV4dElzSXRhbGljOl0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0
ZW1Db250cm9sbGVyIHNldFRleHRJc1VuZGVybGluZWQ6XSk6CisgICAgICAgICgtW1dLVGV4dFRv
dWNoQmFySXRlbUNvbnRyb2xsZXIgX3drQ2hhbmdlVGV4dFN0eWxlOl0pOgorICAgICAgICAoLVtX
S1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldEN1cnJlbnRUZXh0QWxpZ25tZW50Ol0pOgor
ICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIF93a0NoYW5nZVRleHRBbGln
bm1lbnQ6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgdGV4dENv
bG9yXSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dENv
bG9yOl0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIF93a0NoYW5n
ZUNvbG9yOl0pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHRleHRM
aXN0Vmlld0NvbnRyb2xsZXJdKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6Om1ha2VU
b3VjaEJhcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjYW5kaWRhdGVMaXN0VG91
Y2hCYXJJdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6Om1lZGlhUGxheWJhY2tD
b250cm9sc1ZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dXNlTWVkaWFQbGF5
YmFja0NvbnRyb2xzVmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkaXNtaXNz
VGV4dFRvdWNoQmFyUG9wb3Zlckl0ZW1XaXRoSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6
OnRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25BbGxvd2VkSWRlbnRpZmllcnMpOgorICAgICAgICAo
V2ViS2l0OjpwbGFpblRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25EZWZhdWx0SXRlbUlkZW50aWZp
ZXJzKToKKyAgICAgICAgKFdlYktpdDo6cmljaFRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25EZWZh
dWx0SXRlbUlkZW50aWZpZXJzKToKKyAgICAgICAgKFdlYktpdDo6dG91Y2hCYXJEaWRFeGl0Q3Vz
dG9taXphdGlvbik6CisgICAgICAgIChXZWJLaXQ6OnRvdWNoQmFyV2lsbEVudGVyQ3VzdG9taXph
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OmRpZENoYW5nZUF1dG9tYXRpY1RleHRDb21wbGV0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0ZVRvdWNoQmFyQW5kUmVmcmVz
aFRleHRCYXJJZGVudGlmaWVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRV
cFRleHRUb3VjaEJhcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjppc1JpY2hseUVk
aXRhYmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnRleHRUb3VjaEJhcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVUZXh0VG91Y2hCYXIpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dXBkYXRlTWVkaWFUb3VjaEJhcik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpmb3JjZVJlcXVlc3RDYW5kaWRhdGVzRm9yVGVzdGluZyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVUb3VjaEJhcik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpzaG91bGRSZXF1ZXN0Q2FuZGlkYXRlcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpzaG93Q2FuZGlkYXRlcyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjp3ZWJWaWV3SW1wbEFkZGl0aW9uc1dpbGxEZXN0cm95Vmlldyk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRFZGl0YWJsZUVsZW1lbnRJc0ZvY3VzZWQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YmVjb21lRmlyc3RSZXNwb25kZXIpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2VsZWN0aW9uRGlkQ2hhbmdlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OnZpZGVvQ29udHJvbHNNYW5hZ2VyRGlkQ2hhbmdlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0ZVdlYlZpZXdJbXBsQWRkaXRpb25zKTogRGVs
ZXRlZC4KKwogMjAxNi0xMS0wNCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMDgyOTMuCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVmlld1ByaXZhdGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVmlld1ByaXZh
dGUuaAkocmV2aXNpb24gMjA4NDA1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1ZpZXdQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDggQEAKICNp
bXBvcnQgPFdlYktpdC9XS1ZpZXcuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tPdmVybGF5U2Nyb2xs
YmFyU3R5bGUuaD4KIAorQGNsYXNzIEFWRnVuY3Rpb25CYXJTY3J1YmJlcjsKKwogQGludGVyZmFj
ZSBXS1ZpZXcgKFByaXZhdGUpCiAKIC8qIEMgU1BJIHN1cHBvcnQuICovCkBAIC0xMzIsNiArMTM0
LDExIEBACiAKIC0gKHZvaWQpX2dlc3R1cmVFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmU6KE5T
RXZlbnQgKilldmVudDsKIAorQHByb3BlcnR5IChub25hdG9taWMsIHJlYWR3cml0ZSwgc2V0dGVy
PV9zZXRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6KSBCT09MIF93YW50c01lZGlhUGxh
eWJhY2tDb250cm9sc1ZpZXc7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEFWRnVu
Y3Rpb25CYXJTY3J1YmJlciAqX21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc7CistICh2b2lkKV9h
ZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OihBVkZ1bmN0aW9uQmFyU2NydWJiZXIgKiltZWRp
YVBsYXliYWNrQ29udHJvbHNWaWV3OworLSAodm9pZClfcmVtb3ZlTWVkaWFQbGF5YmFja0NvbnRy
b2xzVmlldzsKKwogQGVuZAogCiAjZW5kaWYgLy8gIVRBUkdFVF9PU19JUEhPTkUKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCShyZXZp
c2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vi
Vmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTc0LDcgKzE3NCwxMiBAQCBzdGF0aWMgY29uc3Qg
dWludDMyX3QgZmlyc3RTREtWZXJzaW9uV2l0CiAKIEBpbnRlcmZhY2UgV0tXZWJWaWV3ICgpIDxX
ZWJWaWV3SW1wbERlbGVnYXRlLCBOU1RleHRJbnB1dENsaWVudD4KIEBlbmQKLSNlbmRpZgorCisj
aWYgSEFWRShUT1VDSF9CQVIpCitAaW50ZXJmYWNlIFdLV2ViVmlldyAoKSA8TlNUb3VjaEJhclBy
b3ZpZGVyPgorQGVuZAorI2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFSKQorI2VuZGlmIC8vIFBMQVRG
T1JNKE1BQykKIAogc3RhdGljIEhhc2hNYXA8V2ViS2l0OjpXZWJQYWdlUHJveHkqLCBXS1dlYlZp
ZXcgKj4mIHBhZ2VUb1ZpZXdNYXAoKQogewpAQCAtMzE1NSw2ICszMTYwLDM4IEBAIC0gKHZvaWQp
X3dlYl9nZXN0dXJlRXZlbnRXYXNOb3RIYW5kbGVkQnkKIAogI2VuZGlmIC8vIFBMQVRGT1JNKE1B
QykKIAorI2lmIEhBVkUoVE9VQ0hfQkFSKQorCitAZHluYW1pYyB0b3VjaEJhcjsKKworLSAoTlNU
b3VjaEJhciAqKW1ha2VUb3VjaEJhcgoreworICAgIHJldHVybiBfaW1wbC0+bWFrZVRvdWNoQmFy
KCk7Cit9CisKKy0gKE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSAqKWNhbmRpZGF0ZUxpc3RU
b3VjaEJhckl0ZW0KK3sKKyAgICByZXR1cm4gX2ltcGwtPmNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0
ZW0oKTsKK30KKworLSAodm9pZClfd2ViX2RpZEFkZE1lZGlhQ29udHJvbHNNYW5hZ2VyOihpZClj
b250cm9sc01hbmFnZXIKK3sKKyAgICBbc2VsZiBfYWRkTWVkaWFQbGF5YmFja0NvbnRyb2xzVmll
dzpjb250cm9sc01hbmFnZXJdOworfQorCistICh2b2lkKV93ZWJfZGlkUmVtb3ZlTWVkaWFDb250
cm9sc01hbmFnZXIKK3sKKyAgICBbc2VsZiBfcmVtb3ZlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmll
d107Cit9CisKKy0gKHZvaWQpX2ludGVyYWN0V2l0aE1lZGlhQ29udHJvbHNGb3JUZXN0aW5nCit7
CisgICAgW3NlbGYgX3NldFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzpZRVNdOworICAg
IFtzZWxmIG1ha2VUb3VjaEJhcl07Cit9CisKKyNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikKKwog
QGVuZAogCiBAaW1wbGVtZW50YXRpb24gV0tXZWJWaWV3IChXS1ByaXZhdGUpCkBAIC00NTI5LDYg
KzQ1NjYsNDEgQEAgLSAodm9pZClzZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOgogICAg
IF9pbXBsLT5zZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKHVzZXJJbnRlcmZhY2VMYXlv
dXREaXJlY3Rpb24pOwogfQogCistIChCT09MKV93YW50c01lZGlhUGxheWJhY2tDb250cm9sc1Zp
ZXcKK3sKKyNpZiBIQVZFKFRPVUNIX0JBUikKKyAgICByZXR1cm4gX2ltcGwtPmNsaWVudFdhbnRz
TWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpOworI2Vsc2UKKyAgICByZXR1cm4gTk87CisjZW5k
aWYKK30KKworLSAodm9pZClfc2V0V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OihCT09M
KXdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldworeworI2lmIEhBVkUoVE9VQ0hfQkFSKQor
ICAgIF9pbXBsLT5zZXRDbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcod2FudHNN
ZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KTsKKyNlbmRpZgorfQorCistIChBVkZ1bmN0aW9uQmFy
U2NydWJiZXIgKilfbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldworeworI2lmIEhBVkUoVE9VQ0hf
QkFSKQorICAgIHJldHVybiBfaW1wbC0+Y2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNW
aWV3KCkgPyBfaW1wbC0+bWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpIDogbmlsOworI2Vsc2UK
KyAgICByZXR1cm4gbmlsOworI2VuZGlmCit9CisKKy8vIFRoaXMgbWV0aG9kIGlzIGZvciBzdWJj
bGFzc2VzIHRvIG92ZXJyaWRlLgorLSAodm9pZClfYWRkTWVkaWFQbGF5YmFja0NvbnRyb2xzVmll
dzooQVZGdW5jdGlvbkJhclNjcnViYmVyICopbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldworewor
fQorCisvLyBUaGlzIG1ldGhvZCBpcyBmb3Igc3ViY2xhc3NlcyB0byBvdmVycmlkZS4KKy0gKHZv
aWQpX3JlbW92ZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcKK3sKK30KKwogI2VuZGlmCiAKIEBl
bmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJp
dmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJWaWV3UHJpdmF0ZS5oCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NTIsNiArNTIsNyBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tJbW1lZGlhdGVBCiAK
ICNlbmRpZgogCitAY2xhc3MgQVZGdW5jdGlvbkJhclNjcnViYmVyOwogQGNsYXNzIFdLQnJvd3Np
bmdDb250ZXh0SGFuZGxlOwogQGNsYXNzIF9XS0ZyYW1lSGFuZGxlOwogQGNsYXNzIF9XS0hpdFRl
c3RSZXN1bHQ7CkBAIC0yMDIsNiArMjAzLDEyIEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIs
IF9XS0ltbWVkaWF0ZUEKIC0gKE5TUHJpbnRPcGVyYXRpb24gKilfcHJpbnRPcGVyYXRpb25XaXRo
UHJpbnRJbmZvOihOU1ByaW50SW5mbyAqKXByaW50SW5mbzsKIC0gKE5TUHJpbnRPcGVyYXRpb24g
KilfcHJpbnRPcGVyYXRpb25XaXRoUHJpbnRJbmZvOihOU1ByaW50SW5mbyAqKXByaW50SW5mbyBm
b3JGcmFtZTooX1dLRnJhbWVIYW5kbGUgKilmcmFtZUhhbmRsZSBXS19BUElfQVZBSUxBQkxFKG1h
Y29zeCgxMC4xMiksIGlvcygxMC4wKSk7CiAKKy8vIEZJWE1FOiBUaGlzIFNQSSBzaG91bGQgYmVj
b21lIGEgcGFydCBvZiB0aGUgV0tVSURlbGVnYXRlLiByZGFyOi8vcHJvYmxlbS8yNjU2MTUzNwor
QHByb3BlcnR5IChub25hdG9taWMsIHJlYWR3cml0ZSwgc2V0dGVyPV9zZXRXYW50c01lZGlhUGxh
eWJhY2tDb250cm9sc1ZpZXc6KSBCT09MIF93YW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcg
V0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSkpOworQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5KSBBVkZ1bmN0aW9uQmFyU2NydWJiZXIgKl9tZWRpYVBsYXliYWNrQ29udHJv
bHNWaWV3IFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpKTsKKy0gKHZvaWQpX2Fk
ZE1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6KEFWRnVuY3Rpb25CYXJTY3J1YmJlciAqKW1lZGlh
UGxheWJhY2tDb250cm9sc1ZpZXcgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSkp
OworLSAodm9pZClfcmVtb3ZlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyBXS19BUElfQVZBSUxB
QkxFKG1hY29zeChXS19NQUNfVEJBKSk7CisKICNlbmRpZgogCiAtIChXS05hdmlnYXRpb24gKilf
cmVsb2FkV2l0aG91dENvbnRlbnRCbG9ja2VycyBXS19BUElfQVZBSUxBQkxFKG1hY29zeCgxMC4x
MiksIGlvcygxMC4wKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9X
S1ZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMv
V0tWaWV3Lm1tCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL21hYy9XS1ZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDExIEBAIEBpbnRl
cmZhY2UgV0tWaWV3RGF0YSA6IE5TT2JqZWN0IHsKIEBpbnRlcmZhY2UgV0tWaWV3ICgpIDxXZWJW
aWV3SW1wbERlbGVnYXRlPgogQGVuZAogCisjaWYgSEFWRShUT1VDSF9CQVIpCitAaW50ZXJmYWNl
IFdLVmlldyAoKSA8TlNUb3VjaEJhclByb3ZpZGVyPgorQGVuZAorI2VuZGlmCisKIEBpbXBsZW1l
bnRhdGlvbiBXS1ZpZXcKIAogI2lmIFdLX0FQSV9FTkFCTEVECkBAIC05NzcsNiArOTgyLDMyIEBA
IC0gKHZvaWQpX2RpZFVwZGF0ZUNhbmRpZGF0ZUxpc3RWaXNpYmlsaXQKIHsKIH0KIAorI2lmIEhB
VkUoVE9VQ0hfQkFSKQorCitAZHluYW1pYyB0b3VjaEJhcjsKKworLSAoTlNUb3VjaEJhciAqKW1h
a2VUb3VjaEJhcgoreworICAgIHJldHVybiBfZGF0YS0+X2ltcGwtPm1ha2VUb3VjaEJhcigpOwor
fQorCistIChOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gKiljYW5kaWRhdGVMaXN0VG91Y2hC
YXJJdGVtCit7CisgICAgcmV0dXJuIF9kYXRhLT5faW1wbC0+Y2FuZGlkYXRlTGlzdFRvdWNoQmFy
SXRlbSgpOworfQorCistICh2b2lkKV93ZWJfZGlkQWRkTWVkaWFDb250cm9sc01hbmFnZXI6KGlk
KWNvbnRyb2xzTWFuYWdlcgoreworICAgIFtzZWxmIF9hZGRNZWRpYVBsYXliYWNrQ29udHJvbHNW
aWV3OmNvbnRyb2xzTWFuYWdlcl07Cit9CisKKy0gKHZvaWQpX3dlYl9kaWRSZW1vdmVNZWRpYUNv
bnRyb2xzTWFuYWdlcgoreworICAgIFtzZWxmIF9yZW1vdmVNZWRpYVBsYXliYWNrQ29udHJvbHNW
aWV3XTsKK30KKworI2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFSKQorCiBAZW5kCiAKIEBpbXBsZW1l
bnRhdGlvbiBXS1ZpZXcgKFByaXZhdGUpCkBAIC0xNDY3LDEwICsxNDk4LDQxIEBAIC0gKHZvaWQp
c2V0VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbjoKICAgICBfZGF0YS0+X2ltcGwtPnNldFVz
ZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24odXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbik7
CiB9CiAKLUBlbmQKKy0gKEJPT0wpX3dhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldworewor
I2lmIEhBVkUoVE9VQ0hfQkFSKQorICAgIHJldHVybiBfZGF0YS0+X2ltcGwtPmNsaWVudFdhbnRz
TWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpOworI2Vsc2UKKyAgICByZXR1cm4gTk87CisjZW5k
aWYKK30KIAotI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFV
SVJFRCA+PSAxMDEyMDAgJiYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLSNpbXBvcnQgPFdlYktp
dEFkZGl0aW9ucy9XS1ZpZXdBZGRpdGlvbnMubW0+CistICh2b2lkKV9zZXRXYW50c01lZGlhUGxh
eWJhY2tDb250cm9sc1ZpZXc6KEJPT0wpd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Cit7
CisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgX2RhdGEtPl9pbXBsLT5zZXRDbGllbnRXYW50c01l
ZGlhUGxheWJhY2tDb250cm9sc1ZpZXcod2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KTsK
KyNlbmRpZgorfQorCistIChBVkZ1bmN0aW9uQmFyU2NydWJiZXIgKilfbWVkaWFQbGF5YmFja0Nv
bnRyb2xzVmlldworeworI2lmIEhBVkUoVE9VQ0hfQkFSKQorICAgIHJldHVybiBfZGF0YS0+X2lt
cGwtPmNsaWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpID8gX2RhdGEtPl9pbXBs
LT5tZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCkgOiBuaWw7CisjZWxzZQorICAgIHJldHVybiBu
aWw7CiAjZW5kaWYKK30KKworLy8gVGhpcyBtZXRob2QgaXMgZm9yIHN1YmNsYXNzZXMgdG8gb3Zl
cnJpZGUuCistICh2b2lkKV9hZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OihBVkZ1bmN0aW9u
QmFyU2NydWJiZXIgKiltZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Cit7Cit9CisKKy8vIFRoaXMg
bWV0aG9kIGlzIGZvciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlLgorLSAodm9pZClfcmVtb3ZlTWVk
aWFQbGF5YmFja0NvbnRyb2xzVmlldworeworfQorCitAZW5kCiAKICNlbmRpZiAvLyBQTEFURk9S
TShNQUMpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0lt
cGwuaAkocmV2aXNpb24gMjA4NDA1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29h
L1dlYlZpZXdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDE3IEBAIE9CSkNfQ0xB
U1MgV0tXZWJWaWV3OwogT0JKQ19DTEFTUyBXS1dpbmRvd1Zpc2liaWxpdHlPYnNlcnZlcjsKIE9C
SkNfQ0xBU1MgX1dLVGh1bWJuYWlsVmlldzsKIAotI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREsp
ICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwCi0jaW1wb3J0IDxX
ZWJLaXRBZGRpdGlvbnMvV2ViVmlld0ltcGxBZGRpdGlvbnNEZWNsYXJhdGlvbnMuaD4KLSNlbmRp
ZgorI2lmIEhBVkUoVE9VQ0hfQkFSKQorT0JKQ19DTEFTUyBBVkZ1bmN0aW9uQmFyUGxheWJhY2tD
b250cm9sc1Byb3ZpZGVyOworT0JKQ19DTEFTUyBBVkZ1bmN0aW9uQmFyU2NydWJiZXI7CitPQkpD
X0NMQVNTIE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTsKK09CSkNfQ0xBU1MgTlNDdXN0b21U
b3VjaEJhckl0ZW07CitPQkpDX0NMQVNTIE5TVG91Y2hCYXI7CitPQkpDX0NMQVNTIE5TVG91Y2hC
YXJJdGVtOworT0JKQ19DTEFTUyBOU1BvcG92ZXJUb3VjaEJhckl0ZW07CitPQkpDX0NMQVNTIFdL
VGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXI7CitPQkpDX0NMQVNTIFdlYlBsYXliYWNrQ29udHJv
bHNNYW5hZ2VyOworI2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFSKQogCiBAcHJvdG9jb2wgV2ViVmll
d0ltcGxEZWxlZ2F0ZQogCkBAIC00ODAsNyArNDg4LDYgQEAgcHVibGljOgogICAgIHZvaWQgcmln
aHRNb3VzZURyYWdnZWQoTlNFdmVudCAqKTsKICAgICB2b2lkIHJpZ2h0TW91c2VVcChOU0V2ZW50
ICopOwogCi0gICAgdm9pZCB1cGRhdGVXZWJWaWV3SW1wbEFkZGl0aW9ucygpOwogICAgIHZvaWQg
Zm9yY2VSZXF1ZXN0Q2FuZGlkYXRlc0ZvclRlc3RpbmcoKTsKICAgICBib29sIHNob3VsZFJlcXVl
c3RDYW5kaWRhdGVzKCkgY29uc3Q7CiAgICAgdm9pZCBzaG93Q2FuZGlkYXRlcyhOU0FycmF5ICpj
YW5kaWRhdGVzLCBOU1N0cmluZyAqLCBOU1JlY3QgcmVjdE9mVHlwZWRTdHJpbmcsIE5TUmFuZ2Ug
c2VsZWN0ZWRSYW5nZSwgTlNWaWV3ICosIHZvaWQgKF5jb21wbGV0aW9uSGFuZGxlcikoTlNUZXh0
Q2hlY2tpbmdSZXN1bHQgKmFjY2VwdGVkQ2FuZGlkYXRlKSk7CkBAIC00OTYsMTIgKzUwMyw1NSBA
QCBwdWJsaWM6CiAKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIw
MCAKICAgICB2b2lkIGhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKE5TVGV4dENoZWNraW5nUmVzdWx0
ICphY2NlcHRlZENhbmRpZGF0ZSk7Ci0jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLSNpbXBv
cnQgPFdlYktpdEFkZGl0aW9ucy9XZWJWaWV3SW1wbEFkZGl0aW9ucy5oPgotI2VuZGlmCiAjZW5k
aWYKIAorI2lmIEhBVkUoVE9VQ0hfQkFSKQorICAgIE5TVG91Y2hCYXIgKm1ha2VUb3VjaEJhcigp
OworICAgIHZvaWQgdXBkYXRlVG91Y2hCYXIoKTsKKyAgICBOU1RvdWNoQmFyICpjdXJyZW50VG91
Y2hCYXIoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRUb3VjaEJhci5nZXQoKTsgfQorICAgIE5T
Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSAqY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSgpIGNv
bnN0OworICAgIEFWRnVuY3Rpb25CYXJTY3J1YmJlciAqbWVkaWFQbGF5YmFja0NvbnRyb2xzVmll
dygpIGNvbnN0OworICAgIE5TVG91Y2hCYXIgKnRleHRUb3VjaEJhcigpIGNvbnN0OworICAgIHZv
aWQgZGlzbWlzc1RleHRUb3VjaEJhclBvcG92ZXJJdGVtV2l0aElkZW50aWZpZXIoTlNTdHJpbmcg
Kik7CisKKyAgICBib29sIGNsaWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpIGNv
bnN0IHsgcmV0dXJuIG1fY2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OyB9Cisg
ICAgdm9pZCBzZXRDbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoYm9vbCBjbGll
bnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcpIHsgbV9jbGllbnRXYW50c01lZGlhUGxh
eWJhY2tDb250cm9sc1ZpZXcgPSBjbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc7
IH0KKworICAgIHZvaWQgdXBkYXRlVG91Y2hCYXJBbmRSZWZyZXNoVGV4dEJhcklkZW50aWZpZXJz
KCk7CisgICAgdm9pZCBzZXRJc0N1c3RvbWl6aW5nVG91Y2hCYXIoYm9vbCBpc0N1c3RvbWl6aW5n
VG91Y2hCYXIpIHsgbV9pc0N1c3RvbWl6aW5nVG91Y2hCYXIgPSBpc0N1c3RvbWl6aW5nVG91Y2hC
YXI7IH07CisjZW5kaWYgLy8gSEFWRShUT1VDSF9CQVIpCisKIHByaXZhdGU6CisjaWYgSEFWRShU
T1VDSF9CQVIpCisgICAgdm9pZCBzZXRVcFRleHRUb3VjaEJhcihOU1RvdWNoQmFyICopOworICAg
IHZvaWQgdXBkYXRlVGV4dFRvdWNoQmFyKCk7CisgICAgdm9pZCB1cGRhdGVNZWRpYVRvdWNoQmFy
KCk7CisKKyAgICBib29sIHVzZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSBjb25zdDsKKyAg
ICBib29sIGlzUmljaGx5RWRpdGFibGUoKSBjb25zdDsKKworICAgIGJvb2wgbV9jbGllbnRXYW50
c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcgeyBmYWxzZSB9OworICAgIGJvb2wgbV9jYW5DcmVh
dGVUb3VjaEJhcnMgeyBmYWxzZSB9OworICAgIGJvb2wgbV9zdGFydGVkTGlzdGVuaW5nVG9DdXN0
b21pemF0aW9uRXZlbnRzIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNVcGRhdGluZ1RleHRUb3Vj
aEJhciB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzQ3VzdG9taXppbmdUb3VjaEJhciB7IGZhbHNl
IH07CisKKyAgICBSZXRhaW5QdHI8TlNUb3VjaEJhcj4gbV9jdXJyZW50VG91Y2hCYXI7CisgICAg
UmV0YWluUHRyPE5TVG91Y2hCYXI+IG1fcmljaFRleHRUb3VjaEJhcjsKKyAgICBSZXRhaW5QdHI8
TlNUb3VjaEJhcj4gbV9wbGFpblRleHRUb3VjaEJhcjsKKyAgICBSZXRhaW5QdHI8V0tUZXh0VG91
Y2hCYXJJdGVtQ29udHJvbGxlcj4gbV90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlcjsKKyAgICBS
ZXRhaW5QdHI8TlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtPiBtX3JpY2hUZXh0Q2FuZGlkYXRl
TGlzdFRvdWNoQmFySXRlbTsKKyAgICBSZXRhaW5QdHI8TlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJ
dGVtPiBtX3BsYWluVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW07CisgICAgUmV0YWluUHRy
PE5TQXJyYXk+IG1fZW1wdHlDYW5kaWRhdGVzQXJyYXk7CisgICAgUmV0YWluUHRyPFdlYlBsYXli
YWNrQ29udHJvbHNNYW5hZ2VyPiBtX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyOworICAgIFJldGFp
blB0cjxOU0N1c3RvbVRvdWNoQmFySXRlbT4gbV9leGl0RnVsbFNjcmVlbkJ1dHRvbjsKKworI2lm
IEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBSZXRhaW5QdHI8QVZG
dW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNQcm92aWRlcj4gbV9tZWRpYVRvdWNoQmFyUHJvdmlk
ZXI7CisgICAgUmV0YWluUHRyPEFWRnVuY3Rpb25CYXJTY3J1YmJlcj4gbV9tZWRpYVBsYXliYWNr
Q29udHJvbHNWaWV3OworI2VuZGlmIC8vIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFO
QUdFUikKKyNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikKKwogICAgIFdlYWtQdHI8V2ViVmlld0lt
cGw+IGNyZWF0ZVdlYWtQdHIoKSB7IHJldHVybiBtX3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdlYWtQ
dHIoKTsgfQogCiAgICAgYm9vbCBzdXBwb3J0c0FyYml0cmFyeUxheW91dE1vZGVzKCkgY29uc3Q7
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1t
CShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2Vi
Vmlld0ltcGwubW0JKHdvcmtpbmcgY29weSkKQEAgLTYwLDExICs2MCwxMyBAQAogI2ltcG9ydCAi
V2ViRXZlbnRGYWN0b3J5LmgiCiAjaW1wb3J0ICJXZWJJbnNwZWN0b3JQcm94eS5oIgogI2ltcG9y
dCAiV2ViUGFnZVByb3h5LmgiCisjaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkuaCIKICNpbXBvcnQgIldlYlByb2Nlc3NQb29sLmgiCiAjaW1wb3J0ICJXZWJQcm9jZXNzUHJv
eHkuaCIKICNpbXBvcnQgIl9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5SW50ZXJuYWwuaCIKICNpbXBv
cnQgIl9XS1RodW1ibmFpbFZpZXdJbnRlcm5hbC5oIgogI2ltcG9ydCA8SElUb29sYm94L0NhcmJv
bkV2ZW50c0NvcmUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQVZLaXRTUEkuaD4KICNpbXBvcnQgPFdl
YkNvcmUvQVhPYmplY3RDYWNoZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9BY3Rpdml0eVN0YXRlLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0NvbG9yTWFjLmg+CkBAIC04MCw2ICs4Miw3IEBACiAjaW1wb3J0
IDxXZWJDb3JlL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KICNpbXBv
cnQgPFdlYkNvcmUvTlNTcGVsbENoZWNrZXJTUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvTlNUZXh0
RmluZGVyU1BJLmg+CisjaW1wb3J0IDxXZWJDb3JlL05TVG91Y2hCYXJTUEkuaD4KICNpbXBvcnQg
PFdlYkNvcmUvTlNXaW5kb3dTUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1FdmVudEZh
Y3RvcnlNYWMuaD4KICNpbXBvcnQgPFdlYkNvcmUvU29mdExpbmtpbmcuaD4KQEAgLTkwLDEzICs5
MywxOSBAQAogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmll
dy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlRnVsbFNjcmVlbldpbmRvdy5oPgogI2ltcG9y
dCA8V2ViQ29yZS9XZWJDb3JlTlNTdHJpbmdFeHRyYXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV2Vi
UGxheWJhY2tDb250cm9sc01hbmFnZXIuaD4KICNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFj
ZS5oPgogI2ltcG9ydCA8c3lzL3N0YXQuaD4KICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgorI2ltcG9ydCA8d3RmL1RlbXBvcmFyeUNoYW5nZS5oPgogCi0jaWYgVVNFKEFQUExFX0lOVEVS
TkFMX1NESykKLSNpbXBvcnQgPFdlYktpdEFkZGl0aW9ucy9XZWJWaWV3SW1wbEluY2x1ZGVzLmg+
Ci0jZW5kaWYKKyNpZiBIQVZFKFRPVUNIX0JBUikgJiYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05U
Uk9MU19NQU5BR0VSKQorU09GVF9MSU5LX0ZSQU1FV09SSyhBVktpdCkKK1NPRlRfTElOS19DTEFT
UyhBVktpdCwgQVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNQcm92aWRlcikKK1NPRlRfTElO
S19DTEFTUyhBVktpdCwgQVZGdW5jdGlvbkJhclNjcnViYmVyKQorCitzdGF0aWMgTlNTdHJpbmcg
KiBjb25zdCBXS01lZGlhRXhpdEZ1bGxTY3JlZW5JdGVtID0gQCJXS01lZGlhRXhpdEZ1bGxTY3Jl
ZW5JdGVtIjsKKyNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikgJiYgRU5BQkxFKFdFQl9QTEFZQkFD
S19DT05UUk9MU19NQU5BR0VSKQogCiBTT0ZUX0xJTktfQ09OU1RBTlRfTUFZX0ZBSUwoTG9va3Vw
LCBMVU5vdGlmaWNhdGlvblBvcG92ZXJXaWxsQ2xvc2UsIE5TU3RyaW5nICopCiAKQEAgLTQzMywx
NSArNDQyLDcwNCBAQCAtIChCT09MKXRyeVRvUGVyZm9ybTooU0VMKWFjdGlvbiB3aXRoOihpCiAK
IEBlbmQKIAotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwICYm
IFVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0jaW1wb3J0IDxXZWJLaXRBZGRpdGlvbnMvV2ViVmll
d0ltcGxBZGRpdGlvbnMubW0+Ci0jZWxzZQordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworI2lm
IEhBVkUoVE9VQ0hfQkFSKQorCitAaW50ZXJmYWNlIFdLVGV4dExpc3RUb3VjaEJhclZpZXdDb250
cm9sbGVyIDogTlNWaWV3Q29udHJvbGxlciB7CitAcHJpdmF0ZQorICAgIFdlYlZpZXdJbXBsKiBf
d2ViVmlld0ltcGw7Cit9CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBMaXN0VHlwZSBjdXJyZW50
TGlzdFR5cGU7CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZpZXdJbXBsOihXZWJWaWV3
SW1wbCopd2ViVmlld0ltcGw7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLVGV4dExpc3RU
b3VjaEJhclZpZXdDb250cm9sbGVyCisKK0BzeW50aGVzaXplIGN1cnJlbnRMaXN0VHlwZT1fY3Vy
cmVudExpc3RUeXBlOworCitzdGF0aWMgY29uc3QgQ0dGbG9hdCBsaXN0Q29udHJvbFNlZ21lbnRX
aWR0aCA9IDY3Oworc3RhdGljIGNvbnN0IENHRmxvYXQgZXhpdEZ1bGxTY3JlZW5CdXR0b25XaWR0
aCA9IDY0OworCitzdGF0aWMgY29uc3QgTlNVSW50ZWdlciBub0xpc3RTZWdtZW50ID0gMDsKK3N0
YXRpYyBjb25zdCBOU1VJbnRlZ2VyIHVub3JkZXJlZExpc3RTZWdtZW50ID0gMTsKK3N0YXRpYyBj
b25zdCBOU1VJbnRlZ2VyIG9yZGVyZWRMaXN0U2VnbWVudCA9IDI7CisKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFdlYlZpZXdJbXBsOihXZWJWaWV3SW1wbCopd2ViVmlld0ltcGwKK3sKKyAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF93
ZWJWaWV3SW1wbCA9IHdlYlZpZXdJbXBsOworCisgICAgTlNTZWdtZW50ZWRDb250cm9sICppbnNl
cnRMaXN0Q29udHJvbCA9IFtOU1NlZ21lbnRlZENvbnRyb2wgc2VnbWVudGVkQ29udHJvbFdpdGhM
YWJlbHM6QFsgV2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVOb25lKCksIFdlYkNvcmU6Omluc2VydExp
c3RUeXBlQnVsbGV0ZWQoKSwgV2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVOdW1iZXJlZCgpIF0gdHJh
Y2tpbmdNb2RlOk5TU2VnbWVudFN3aXRjaFRyYWNraW5nU2VsZWN0T25lIHRhcmdldDpzZWxmIGFj
dGlvbjpAc2VsZWN0b3IoX3NlbGVjdExpc3Q6KV07CisgICAgW2luc2VydExpc3RDb250cm9sIHNl
dFdpZHRoOmxpc3RDb250cm9sU2VnbWVudFdpZHRoIGZvclNlZ21lbnQ6bm9MaXN0U2VnbWVudF07
CisgICAgW2luc2VydExpc3RDb250cm9sIHNldFdpZHRoOmxpc3RDb250cm9sU2VnbWVudFdpZHRo
IGZvclNlZ21lbnQ6dW5vcmRlcmVkTGlzdFNlZ21lbnRdOworICAgIFtpbnNlcnRMaXN0Q29udHJv
bCBzZXRXaWR0aDpsaXN0Q29udHJvbFNlZ21lbnRXaWR0aCBmb3JTZWdtZW50Om9yZGVyZWRMaXN0
U2VnbWVudF07CisgICAgaW5zZXJ0TGlzdENvbnRyb2wuZm9udCA9IFtOU0ZvbnQgc3lzdGVtRm9u
dE9mU2l6ZToxNV07CisKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNs
YW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyAgICBp
ZCBzZWdtZW50RWxlbWVudCA9IE5TQWNjZXNzaWJpbGl0eVVuaWdub3JlZERlc2NlbmRhbnQoaW5z
ZXJ0TGlzdENvbnRyb2wpOworICAgIE5TQXJyYXkgKnNlZ21lbnRzID0gW3NlZ21lbnRFbGVtZW50
IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlDaGlsZHJlbkF0dHJp
YnV0ZV07CisgICAgQVNTRVJUKHNlZ21lbnRzLmNvdW50ID09IDMpOworICAgIFtzZWdtZW50c1tu
b0xpc3RTZWdtZW50XSBhY2Nlc3NpYmlsaXR5U2V0T3ZlcnJpZGVWYWx1ZTpXZWJDb3JlOjppbnNl
cnRMaXN0VHlwZU5vbmUoKSBmb3JBdHRyaWJ1dGU6TlNBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25B
dHRyaWJ1dGVdOworICAgIFtzZWdtZW50c1t1bm9yZGVyZWRMaXN0U2VnbWVudF0gYWNjZXNzaWJp
bGl0eVNldE92ZXJyaWRlVmFsdWU6V2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVCdWxsZXRlZEFjY2Vz
c2liaWxpdHlUaXRsZSgpIGZvckF0dHJpYnV0ZTpOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkF0
dHJpYnV0ZV07CisgICAgW3NlZ21lbnRzW29yZGVyZWRMaXN0U2VnbWVudF0gYWNjZXNzaWJpbGl0
eVNldE92ZXJyaWRlVmFsdWU6V2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVOdW1iZXJlZEFjY2Vzc2li
aWxpdHlUaXRsZSgpIGZvckF0dHJpYnV0ZTpOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkF0dHJp
YnV0ZV07CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisKKyAgICBzZWxmLnZpZXcgPSBp
bnNlcnRMaXN0Q29udHJvbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRpZERl
c3Ryb3lWaWV3Cit7CisgICAgX3dlYlZpZXdJbXBsID0gbnVsbHB0cjsKK30KKworLSAodm9pZClf
c2VsZWN0TGlzdDooaWQpc2VuZGVyCit7CisgICAgaWYgKCFfd2ViVmlld0ltcGwpCisgICAgICAg
IHJldHVybjsKKworICAgIE5TU2VnbWVudGVkQ29udHJvbCAqaW5zZXJ0TGlzdENvbnRyb2wgPSAo
TlNTZWdtZW50ZWRDb250cm9sICopc2VsZi52aWV3OworICAgIHN3aXRjaChpbnNlcnRMaXN0Q29u
dHJvbC5zZWxlY3RlZFNlZ21lbnQpIHsKKyAgICBjYXNlIG5vTGlzdFNlZ21lbnQ6CisgICAgICAg
IC8vIFRoZXJlIGlzIG5vICJyZW1vdmUgbGlzdCIgZWRpdCBjb21tYW5kLCBidXQgSW5zZXJ0T3Jk
ZXJlZExpc3QgYW5kIEluc2VydFVub3JkZXJlZExpc3QgYm90aAorICAgICAgICAvLyBiZWhhdmUg
YXMgdG9nZ2xlcywgc28gd2UgY2FuIGludm9rZSB0aGUgYXBwcm9wcmlhdGUgZWRpdCBjb21tYW5k
IGRlcGVuZGluZyBvbiBvdXIgX2N1cnJlbnRMaXN0VHlwZQorICAgICAgICAvLyB0byByZW1vdmUg
YW4gZXhpc3RpbmcgbGlzdC4gV2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZyBpZiBfY3VycmVu
dExpc3RUeXBlIGlzIE5vTGlzdC4KKyAgICAgICAgaWYgKF9jdXJyZW50TGlzdFR5cGUgPT0gT3Jk
ZXJlZExpc3QpCisgICAgICAgICAgICBfd2ViVmlld0ltcGwtPnBhZ2UoKS5leGVjdXRlRWRpdENv
bW1hbmQoQCJJbnNlcnRPcmRlcmVkTGlzdCIsIEAiIik7CisgICAgICAgIGVsc2UgaWYgKF9jdXJy
ZW50TGlzdFR5cGUgPT0gVW5vcmRlcmVkTGlzdCkKKyAgICAgICAgICAgIF93ZWJWaWV3SW1wbC0+
cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZChAIkluc2VydFVub3JkZXJlZExpc3QiLCBAIiIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIHVub3JkZXJlZExpc3RTZWdtZW50OgorICAgICAgICBf
d2ViVmlld0ltcGwtPnBhZ2UoKS5leGVjdXRlRWRpdENvbW1hbmQoQCJJbnNlcnRVbm9yZGVyZWRM
aXN0IiwgQCIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcmRlcmVkTGlzdFNlZ21lbnQ6
CisgICAgICAgIF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZChAIkluc2Vy
dE9yZGVyZWRMaXN0IiwgQCIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgX3dlYlZp
ZXdJbXBsLT5kaXNtaXNzVGV4dFRvdWNoQmFyUG9wb3Zlckl0ZW1XaXRoSWRlbnRpZmllcihOU1Rv
dWNoQmFySXRlbUlkZW50aWZpZXJUZXh0TGlzdCk7Cit9CisKKy0gKHZvaWQpc2V0Q3VycmVudExp
c3RUeXBlOihMaXN0VHlwZSlsaXN0VHlwZQoreworICAgIE5TU2VnbWVudGVkQ29udHJvbCAqaW5z
ZXJ0TGlzdENvbnRyb2wgPSAoTlNTZWdtZW50ZWRDb250cm9sICopc2VsZi52aWV3OworICAgIHN3
aXRjaCAobGlzdFR5cGUpIHsKKyAgICBjYXNlIE5vTGlzdDoKKyAgICAgICAgW2luc2VydExpc3RD
b250cm9sIHNldFNlbGVjdGVkOllFUyBmb3JTZWdtZW50Om5vTGlzdFNlZ21lbnRdOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIE9yZGVyZWRMaXN0OgorICAgICAgICBbaW5zZXJ0TGlzdENvbnRy
b2wgc2V0U2VsZWN0ZWQ6WUVTIGZvclNlZ21lbnQ6b3JkZXJlZExpc3RTZWdtZW50XTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBVbm9yZGVyZWRMaXN0OgorICAgICAgICBbaW5zZXJ0TGlzdENv
bnRyb2wgc2V0U2VsZWN0ZWQ6WUVTIGZvclNlZ21lbnQ6dW5vcmRlcmVkTGlzdFNlZ21lbnRdOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBfY3VycmVudExpc3RUeXBlID0gbGlzdFR5cGU7
Cit9CisKK0BlbmQKKworQGludGVyZmFjZSBXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIDog
TlNUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciA8TlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVt
RGVsZWdhdGUsIE5TVG91Y2hCYXJEZWxlZ2F0ZT4geworQHByaXZhdGUKKyAgICBCT09MIF90ZXh0
SXNCb2xkOworICAgIEJPT0wgX3RleHRJc0l0YWxpYzsKKyAgICBCT09MIF90ZXh0SXNVbmRlcmxp
bmVkOworICAgIE5TVGV4dEFsaWdubWVudCBfY3VycmVudFRleHRBbGlnbm1lbnQ7CisgICAgUmV0
YWluUHRyPE5TQ29sb3I+IF90ZXh0Q29sb3I7CisgICAgUmV0YWluUHRyPFdLVGV4dExpc3RUb3Vj
aEJhclZpZXdDb250cm9sbGVyPiBfdGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyOworCitA
cHJpdmF0ZQorICAgIFdlYlZpZXdJbXBsKiBfd2ViVmlld0ltcGw7Cit9CisKK0Bwcm9wZXJ0eSAo
bm9uYXRvbWljKSBCT09MIHRleHRJc0JvbGQ7CitAcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCB0
ZXh0SXNJdGFsaWM7CitAcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCB0ZXh0SXNVbmRlcmxpbmVk
OworQHByb3BlcnR5IChub25hdG9taWMpIE5TVGV4dEFsaWdubWVudCBjdXJyZW50VGV4dEFsaWdu
bWVudDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHJlYWR3cml0ZSkgTlNDb2xvciAq
dGV4dENvbG9yOworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWV3SW1wbDooV2ViVmll
d0ltcGwqKXdlYlZpZXdJbXBsOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tUZXh0VG91Y2hC
YXJJdGVtQ29udHJvbGxlcgorCitAc3ludGhlc2l6ZSB0ZXh0SXNCb2xkPV90ZXh0SXNCb2xkOwor
QHN5bnRoZXNpemUgdGV4dElzSXRhbGljPV90ZXh0SXNJdGFsaWM7CitAc3ludGhlc2l6ZSB0ZXh0
SXNVbmRlcmxpbmVkPV90ZXh0SXNVbmRlcmxpbmVkOworQHN5bnRoZXNpemUgY3VycmVudFRleHRB
bGlnbm1lbnQ9X2N1cnJlbnRUZXh0QWxpZ25tZW50OworCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhXZWJWaWV3SW1wbDooV2ViVmlld0ltcGwqKXdlYlZpZXdJbXBsCit7CisgICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfd2ViVmlld0lt
cGwgPSB3ZWJWaWV3SW1wbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRpZERl
c3Ryb3lWaWV3Cit7CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBy
ZW1vdmVPYnNlcnZlcjpzZWxmXTsKKyAgICBfd2ViVmlld0ltcGwgPSBudWxscHRyOworICAgIFtf
dGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyIGRpZERlc3Ryb3lWaWV3XTsKK30KKworI3By
YWdtYSBtYXJrIE5TVG91Y2hCYXJEZWxlZ2F0ZQorCistIChOU1RvdWNoQmFySXRlbSAqKXRvdWNo
QmFyOihOU1RvdWNoQmFyICopdG91Y2hCYXIgbWFrZUl0ZW1Gb3JJZGVudGlmaWVyOihOU1N0cmlu
ZyAqKWlkZW50aWZpZXIKK3sKKyAgICByZXR1cm4gW3NlbGYgaXRlbUZvcklkZW50aWZpZXI6aWRl
bnRpZmllcl07Cit9CisKKy0gKG51bGxhYmxlIE5TVG91Y2hCYXJJdGVtICopaXRlbUZvcklkZW50
aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcgoreworICAgIE5TVG91Y2hCYXJJdGVtICppdGVt
ID0gW3N1cGVyIGl0ZW1Gb3JJZGVudGlmaWVyOmlkZW50aWZpZXJdOworICAgIEJPT0wgaXNUZXh0
Rm9ybWF0SXRlbSA9IFtpZGVudGlmaWVyIGlzRXF1YWxUb1N0cmluZzpOU1RvdWNoQmFySXRlbUlk
ZW50aWZpZXJUZXh0Rm9ybWF0XTsKKworICAgIGlmIChpc1RleHRGb3JtYXRJdGVtIHx8IFtpZGVu
dGlmaWVyIGlzRXF1YWxUb1N0cmluZzpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0U3R5bGVd
KQorICAgICAgICBzZWxmLnRleHRTdHlsZS5hY3Rpb24gPSBAc2VsZWN0b3IoX3drQ2hhbmdlVGV4
dFN0eWxlOik7CisKKyAgICBpZiAoaXNUZXh0Rm9ybWF0SXRlbSB8fCBbaWRlbnRpZmllciBpc0Vx
dWFsVG9TdHJpbmc6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEFsaWdubWVudF0pCisgICAg
ICAgIHNlbGYudGV4dEFsaWdubWVudHMuYWN0aW9uID0gQHNlbGVjdG9yKF93a0NoYW5nZVRleHRB
bGlnbm1lbnQ6KTsKKworICAgIE5TQ29sb3JQaWNrZXJUb3VjaEJhckl0ZW0gKmNvbG9yUGlja2Vy
SXRlbSA9IG5pbDsKKyAgICBpZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRvU3RyaW5nOk5TVG91Y2hC
YXJJdGVtSWRlbnRpZmllclRleHRDb2xvclBpY2tlcl0gJiYgW2l0ZW0gaXNLaW5kT2ZDbGFzczpb
TlNDb2xvclBpY2tlclRvdWNoQmFySXRlbSBjbGFzc11dKQorICAgICAgICBjb2xvclBpY2tlckl0
ZW0gPSAoTlNDb2xvclBpY2tlclRvdWNoQmFySXRlbSAqKWl0ZW07CisgICAgaWYgKGlzVGV4dEZv
cm1hdEl0ZW0pCisgICAgICAgIGNvbG9yUGlja2VySXRlbSA9IHNlbGYuY29sb3JQaWNrZXJJdGVt
OworICAgIGlmIChjb2xvclBpY2tlckl0ZW0pIHsKKyAgICAgICAgY29sb3JQaWNrZXJJdGVtLnRh
cmdldCA9IHNlbGY7CisgICAgICAgIGNvbG9yUGlja2VySXRlbS5hY3Rpb24gPSBAc2VsZWN0b3Io
X3drQ2hhbmdlQ29sb3I6KTsKKyAgICAgICAgY29sb3JQaWNrZXJJdGVtLnNob3dzQWxwaGEgPSBO
TzsKKyAgICB9CisKKyAgICByZXR1cm4gaXRlbTsKK30KKworI3ByYWdtYSBtYXJrIE5TQ2FuZGlk
YXRlTGlzdFRvdWNoQmFySXRlbURlbGVnYXRlCisKKy0gKHZvaWQpY2FuZGlkYXRlTGlzdFRvdWNo
QmFySXRlbTooTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtICopYW5JdGVtIGVuZFNlbGVjdGlu
Z0NhbmRpZGF0ZUF0SW5kZXg6KE5TSW50ZWdlcilpbmRleAoreworICAgIGlmIChpbmRleCA9PSBO
U05vdEZvdW5kKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIV93ZWJWaWV3SW1wbCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgTlNBcnJheSAqY2FuZGlkYXRlcyA9IGFuSXRlbS5jYW5kaWRh
dGVzOworICAgIGlmICgoTlNVSW50ZWdlcilpbmRleCA+PSBjYW5kaWRhdGVzLmNvdW50KQorICAg
ICAgICByZXR1cm47CisKKyAgICBOU1RleHRDaGVja2luZ1Jlc3VsdCAqY2FuZGlkYXRlID0gY2Fu
ZGlkYXRlc1tpbmRleF07CisgICAgQVNTRVJUKFtjYW5kaWRhdGUgaXNLaW5kT2ZDbGFzczpbTlNU
ZXh0Q2hlY2tpbmdSZXN1bHQgY2xhc3NdXSk7CisKKyAgICBfd2ViVmlld0ltcGwtPmhhbmRsZUFj
Y2VwdGVkQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7Cit9CisKKy0gKHZvaWQpY2FuZGlkYXRlTGlzdFRv
dWNoQmFySXRlbTooTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtICopYW5JdGVtIGNoYW5nZWRD
YW5kaWRhdGVMaXN0VmlzaWJpbGl0eTooQk9PTClpc1Zpc2libGUKK3sKKyAgICBpZiAoIV93ZWJW
aWV3SW1wbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGlzVmlzaWJsZSkKKyAgICAgICAg
X3dlYlZpZXdJbXBsLT5yZXF1ZXN0Q2FuZGlkYXRlc0ZvclNlbGVjdGlvbklmTmVlZGVkKCk7CisK
KyAgICBfd2ViVmlld0ltcGwtPnVwZGF0ZVRvdWNoQmFyKCk7Cit9CisKKyNwcmFnbWEgbWFyayBO
U05vdGlmaWNhdGlvbkNlbnRlciBvYnNlcnZlcnMKKworLSAodm9pZCl0b3VjaEJhckRpZEV4aXRD
dXN0b21pemF0aW9uOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIGlmICgh
X3dlYlZpZXdJbXBsKQorICAgICAgICByZXR1cm47CisKKyAgICBfd2ViVmlld0ltcGwtPnNldElz
Q3VzdG9taXppbmdUb3VjaEJhcihmYWxzZSk7CisgICAgX3dlYlZpZXdJbXBsLT51cGRhdGVUb3Vj
aEJhcigpOworfQorCistICh2b2lkKXRvdWNoQmFyV2lsbEVudGVyQ3VzdG9taXphdGlvbjooTlNO
b3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBpZiAoIV93ZWJWaWV3SW1wbCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgX3dlYlZpZXdJbXBsLT5zZXRJc0N1c3RvbWl6aW5nVG91Y2hC
YXIodHJ1ZSk7Cit9CisKKy0gKHZvaWQpZGlkQ2hhbmdlQXV0b21hdGljVGV4dENvbXBsZXRpb246
KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgaWYgKCFfd2ViVmlld0ltcGwp
CisgICAgICAgIHJldHVybjsKKworICAgIF93ZWJWaWV3SW1wbC0+dXBkYXRlVG91Y2hCYXJBbmRS
ZWZyZXNoVGV4dEJhcklkZW50aWZpZXJzKCk7Cit9CisKKworI3ByYWdtYSBtYXJrIE5TVGV4dFRv
dWNoQmFySXRlbUNvbnRyb2xsZXIKKworLSAoV0tUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xs
ZXIgKil0ZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIKK3sKKyAgICByZXR1cm4gKFdLVGV4
dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyICopc2VsZi50ZXh0TGlzdFZpZXdDb250cm9sbGVy
OworfQorCistICh2b2lkKXNldFRleHRJc0JvbGQ6KEJPT0wpYm9sZAoreworICAgIF90ZXh0SXNC
b2xkID0gYm9sZDsKKyAgICBpZiAoW3NlbGYudGV4dFN0eWxlIGlzU2VsZWN0ZWRGb3JTZWdtZW50
OjBdICE9IF90ZXh0SXNCb2xkKQorICAgICAgICBbc2VsZi50ZXh0U3R5bGUgc2V0U2VsZWN0ZWQ6
X3RleHRJc0JvbGQgZm9yU2VnbWVudDowXTsKK30KKworLSAodm9pZClzZXRUZXh0SXNJdGFsaWM6
KEJPT0wpaXRhbGljCit7CisgICAgX3RleHRJc0l0YWxpYyA9IGl0YWxpYzsKKyAgICBpZiAoW3Nl
bGYudGV4dFN0eWxlIGlzU2VsZWN0ZWRGb3JTZWdtZW50OjFdICE9IF90ZXh0SXNJdGFsaWMpCisg
ICAgICAgIFtzZWxmLnRleHRTdHlsZSBzZXRTZWxlY3RlZDpfdGV4dElzSXRhbGljIGZvclNlZ21l
bnQ6MV07Cit9CisKKy0gKHZvaWQpc2V0VGV4dElzVW5kZXJsaW5lZDooQk9PTCl1bmRlcmxpbmVk
Cit7CisgICAgX3RleHRJc1VuZGVybGluZWQgPSB1bmRlcmxpbmVkOworICAgIGlmIChbc2VsZi50
ZXh0U3R5bGUgaXNTZWxlY3RlZEZvclNlZ21lbnQ6Ml0gIT0gX3RleHRJc1VuZGVybGluZWQpCisg
ICAgICAgIFtzZWxmLnRleHRTdHlsZSBzZXRTZWxlY3RlZDpfdGV4dElzVW5kZXJsaW5lZCBmb3JT
ZWdtZW50OjJdOworfQorCistICh2b2lkKV93a0NoYW5nZVRleHRTdHlsZTooaWQpc2VuZGVyCit7
CisgICAgaWYgKCFfd2ViVmlld0ltcGwpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChbc2Vs
Zi50ZXh0U3R5bGUgaXNTZWxlY3RlZEZvclNlZ21lbnQ6MF0gIT0gX3RleHRJc0JvbGQpIHsKKyAg
ICAgICAgX3RleHRJc0JvbGQgPSAhX3RleHRJc0JvbGQ7CisgICAgICAgIF93ZWJWaWV3SW1wbC0+
cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZChAIlRvZ2dsZUJvbGQiLCBAIiIpOworICAgIH0KKwor
ICAgIGlmIChbc2VsZi50ZXh0U3R5bGUgaXNTZWxlY3RlZEZvclNlZ21lbnQ6MV0gIT0gX3RleHRJ
c0l0YWxpYykgeworICAgICAgICBfdGV4dElzSXRhbGljID0gIV90ZXh0SXNJdGFsaWM7CisgICAg
ICAgIF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZCgiVG9nZ2xlSXRhbGlj
IiwgQCIiKTsKKyAgICB9CisKKyAgICBpZiAoW3NlbGYudGV4dFN0eWxlIGlzU2VsZWN0ZWRGb3JT
ZWdtZW50OjJdICE9IF90ZXh0SXNVbmRlcmxpbmVkKSB7CisgICAgICAgIF90ZXh0SXNVbmRlcmxp
bmVkID0gIV90ZXh0SXNVbmRlcmxpbmVkOworICAgICAgICBfd2ViVmlld0ltcGwtPnBhZ2UoKS5l
eGVjdXRlRWRpdENvbW1hbmQoIlRvZ2dsZVVuZGVybGluZSIsIEAiIik7CisgICAgfQorfQorCist
ICh2b2lkKXNldEN1cnJlbnRUZXh0QWxpZ25tZW50OihOU1RleHRBbGlnbm1lbnQpYWxpZ25tZW50
Cit7CisgICAgX2N1cnJlbnRUZXh0QWxpZ25tZW50ID0gYWxpZ25tZW50OworICAgIFtzZWxmLnRl
eHRBbGlnbm1lbnRzIHNlbGVjdFNlZ21lbnRXaXRoVGFnOl9jdXJyZW50VGV4dEFsaWdubWVudF07
Cit9CisKKy0gKHZvaWQpX3drQ2hhbmdlVGV4dEFsaWdubWVudDooaWQpc2VuZGVyCit7CisgICAg
aWYgKCFfd2ViVmlld0ltcGwpCisgICAgICAgIHJldHVybjsKKworICAgIE5TVGV4dEFsaWdubWVu
dCBhbGlnbm1lbnQgPSAoTlNUZXh0QWxpZ25tZW50KVtzZWxmLnRleHRBbGlnbm1lbnRzLmNlbGwg
dGFnRm9yU2VnbWVudDpzZWxmLnRleHRBbGlnbm1lbnRzLnNlbGVjdGVkU2VnbWVudF07CisgICAg
c3dpdGNoIChhbGlnbm1lbnQpIHsKKyAgICBjYXNlIE5TVGV4dEFsaWdubWVudExlZnQ6IHsKKyAg
ICAgICAgX2N1cnJlbnRUZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25tZW50TGVmdDsKKyAgICAg
ICAgX3dlYlZpZXdJbXBsLT5wYWdlKCkuZXhlY3V0ZUVkaXRDb21tYW5kKCJBbGlnbkxlZnQiLCBA
IiIpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBOU1RleHRBbGlnbm1lbnRSaWdo
dDogeworICAgICAgICBfY3VycmVudFRleHRBbGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRSaWdo
dDsKKyAgICAgICAgX3dlYlZpZXdJbXBsLT5wYWdlKCkuZXhlY3V0ZUVkaXRDb21tYW5kKCJBbGln
blJpZ2h0IiwgQCIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgTlNUZXh0QWxp
Z25tZW50Q2VudGVyOiB7CisgICAgICAgIF9jdXJyZW50VGV4dEFsaWdubWVudCA9IE5TVGV4dEFs
aWdubWVudENlbnRlcjsKKyAgICAgICAgX3dlYlZpZXdJbXBsLT5wYWdlKCkuZXhlY3V0ZUVkaXRD
b21tYW5kKCJBbGlnbkNlbnRlciIsIEAiIik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIE5TVGV4dEFsaWdubWVudEp1c3RpZmllZDogeworICAgICAgICBfY3VycmVudFRleHRBbGln
bm1lbnQgPSBOU1RleHRBbGlnbm1lbnRKdXN0aWZpZWQ7CisgICAgICAgIF93ZWJWaWV3SW1wbC0+
cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZCgiQWxpZ25KdXN0aWZpZWQiLCBAIiIpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgX3dlYlZpZXdJbXBsLT5kaXNtaXNzVGV4dFRvdWNoQmFyUG9wb3Zlckl0ZW1XaXRoSWRlbnRp
ZmllcihOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0QWxpZ25tZW50KTsKK30KKworLSAoTlND
b2xvciAqKXRleHRDb2xvcgoreworICAgIHJldHVybiBfdGV4dENvbG9yLmdldCgpOworfQorCist
ICh2b2lkKXNldFRleHRDb2xvcjooTlNDb2xvciAqKWNvbG9yCit7CisgICAgX3RleHRDb2xvciA9
IGNvbG9yOworICAgIHNlbGYuY29sb3JQaWNrZXJJdGVtLmNvbG9yID0gX3RleHRDb2xvci5nZXQo
KTsKK30KKworLSAodm9pZClfd2tDaGFuZ2VDb2xvcjooaWQpc2VuZGVyCit7CisgICAgaWYgKCFf
d2ViVmlld0ltcGwpCisgICAgICAgIHJldHVybjsKKworICAgIF90ZXh0Q29sb3IgPSBzZWxmLmNv
bG9yUGlja2VySXRlbS5jb2xvcjsKKyAgICBfd2ViVmlld0ltcGwtPnBhZ2UoKS5leGVjdXRlRWRp
dENvbW1hbmQoIkZvcmVDb2xvciIsIFdlYkNvcmU6OmNvbG9yRnJvbU5TQ29sb3IoX3RleHRDb2xv
ci5nZXQoKSkuc2VyaWFsaXplZCgpKTsKK30KKworLSAoTlNWaWV3Q29udHJvbGxlciAqKXRleHRM
aXN0Vmlld0NvbnRyb2xsZXIKK3sKKyAgICBpZiAoIV90ZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRy
b2xsZXIpCisgICAgICAgIF90ZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgPSBhZG9wdE5T
KFtbV0tUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoV2ViVmll
d0ltcGw6X3dlYlZpZXdJbXBsXSk7CisgICAgcmV0dXJuIF90ZXh0TGlzdFRvdWNoQmFyVmlld0Nv
bnRyb2xsZXIuZ2V0KCk7Cit9CisKK0BlbmQKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXZvaWQg
V2ViVmlld0ltcGw6OnVwZGF0ZVdlYlZpZXdJbXBsQWRkaXRpb25zKCkKK05TVG91Y2hCYXIgKldl
YlZpZXdJbXBsOjptYWtlVG91Y2hCYXIoKQoreworICAgIGlmICghbV9jYW5DcmVhdGVUb3VjaEJh
cnMpIHsKKyAgICAgICAgbV9jYW5DcmVhdGVUb3VjaEJhcnMgPSB0cnVlOworICAgICAgICB1cGRh
dGVUb3VjaEJhcigpOworICAgIH0KKyAgICByZXR1cm4gbV9jdXJyZW50VG91Y2hCYXIuZ2V0KCk7
Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZVRvdWNoQmFyKCkKK3sKKyAgICBpZiAoIW1f
Y2FuQ3JlYXRlVG91Y2hCYXJzKQorICAgICAgICByZXR1cm47CisKKyAgICBOU1RvdWNoQmFyICp0
b3VjaEJhciA9IG5pbDsKKyAgICBib29sIHVzZXJBY3Rpb25SZXF1aXJlbWVudHNIYXZlQmVlbk1l
dCA9IG1fcmVxdWlyZXNVc2VyQWN0aW9uRm9yRWRpdGluZ0NvbnRyb2xzTWFuYWdlciA/IG1fcGFn
ZS0+aGFzSGFkU2VsZWN0aW9uQ2hhbmdlc0Zyb21Vc2VySW50ZXJhY3Rpb24oKSA6IHRydWU7Cisg
ICAgaWYgKG1fcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0NvbnRlbnRFZGl0YWJsZSAmJiAhbV9wYWdl
LT5uZWVkc0hpZGRlbkNvbnRlbnRFZGl0YWJsZVF1aXJrKCkpIHsKKyAgICAgICAgdXBkYXRlVGV4
dFRvdWNoQmFyKCk7CisgICAgICAgIGlmICh1c2VyQWN0aW9uUmVxdWlyZW1lbnRzSGF2ZUJlZW5N
ZXQpCisgICAgICAgICAgICB0b3VjaEJhciA9IHRleHRUb3VjaEJhcigpOworICAgIH0KKyNpZiBF
TkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgZWxzZSBpZiAobV9wYWdl
LT5oYXNBY3RpdmVWaWRlb0ZvckNvbnRyb2xzTWFuYWdlcigpKSB7CisgICAgICAgIHVwZGF0ZU1l
ZGlhVG91Y2hCYXIoKTsKKyAgICAgICAgLy8gSWYgdXNlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmll
dygpIGlzIHRydWUsIHRoZW4gd2UgYXJlIHJlbHlpbmcgb24gdGhlIEFQSSBjbGllbnQgdG8gZGlz
cGxheSBhIHBvcG92ZXIgdmVyc2lvbgorICAgICAgICAvLyBvZiB0aGUgbWVkaWEgdGltZWxpbmUg
aW4gdGhlaXIgb3duIGZ1bmN0aW9uIGJhci4gSWYgaXQgaXMgZmFsc2UsIHRoZW4gd2Ugd2lsbCBk
aXNwbGF5IHRoZSBtZWRpYSB0aW1lbGluZSBpbiBvdXIKKyAgICAgICAgLy8gZnVuY3Rpb24gYmFy
LgorICAgICAgICBpZiAoIXVzZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSkKKyAgICAgICAg
ICAgIHRvdWNoQmFyID0gW21fbWVkaWFUb3VjaEJhclByb3ZpZGVyIHJlc3BvbmRzVG9TZWxlY3Rv
cjpAc2VsZWN0b3IodG91Y2hCYXIpXSA/IFsoaWQpbV9tZWRpYVRvdWNoQmFyUHJvdmlkZXIuZ2V0
KCkgdG91Y2hCYXJdIDogWyhpZCltX21lZGlhVG91Y2hCYXJQcm92aWRlci5nZXQoKSB0b3VjaEJh
cl07CisgICAgfSBlbHNlIGlmIChbbV9tZWRpYVRvdWNoQmFyUHJvdmlkZXIgcGxheWJhY2tDb250
cm9sc0NvbnRyb2xsZXJdKSB7CisgICAgICAgIGlmIChtX2NsaWVudFdhbnRzTWVkaWFQbGF5YmFj
a0NvbnRyb2xzVmlldykgeworICAgICAgICAgICAgaWYgKFttX3ZpZXcgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3Rvcihfd2ViX2RpZFJlbW92ZU1lZGlhQ29udHJvbHNNYW5hZ2VyKV0gJiYgbV92
aWV3ID09IG1fdmlldy53aW5kb3cuZmlyc3RSZXNwb25kZXIpCisgICAgICAgICAgICAgICAgW21f
dmlldyBfd2ViX2RpZFJlbW92ZU1lZGlhQ29udHJvbHNNYW5hZ2VyXTsKKyAgICAgICAgfQorICAg
ICAgICBbbV9tZWRpYVRvdWNoQmFyUHJvdmlkZXIgc2V0UGxheWJhY2tDb250cm9sc0NvbnRyb2xs
ZXI6bmlsXTsKKyAgICAgICAgW21fbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyBzZXRQbGF5YmFj
a0NvbnRyb2xzQ29udHJvbGxlcjpuaWxdOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKHRvdWNo
QmFyID09IG1fY3VycmVudFRvdWNoQmFyKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiBt
X2VkaXRhYmxlRWxlbWVudElzRm9jdXNlZCBpcyB0cnVlLCB0aGVuIHdlIG1heSBoYXZlIGEgbm9u
LWVkaXRhYmxlIHNlbGVjdGlvbiByaWdodCBub3cganVzdCBiZWNhdXNlCisgICAgLy8gdGhlIHVz
ZXIgaXMgY2xpY2tpbmcgb3IgdGFiYmluZyBiZXR3ZWVuIGVkaXRhYmxlIGZpZWxkcy4KKyAgICBp
ZiAobV9lZGl0YWJsZUVsZW1lbnRJc0ZvY3VzZWQgJiYgdG91Y2hCYXIgIT0gdGV4dFRvdWNoQmFy
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY3VycmVudFRvdWNoQmFyID0gdG91Y2hCYXI7
CisgICAgW21fdmlldyB3aWxsQ2hhbmdlVmFsdWVGb3JLZXk6QCJ0b3VjaEJhciJdOworICAgIFtt
X3ZpZXcgc2V0VG91Y2hCYXI6bV9jdXJyZW50VG91Y2hCYXIuZ2V0KCldOworICAgIFttX3ZpZXcg
ZGlkQ2hhbmdlVmFsdWVGb3JLZXk6QCJ0b3VjaEJhciJdOworfQorCitOU0NhbmRpZGF0ZUxpc3RU
b3VjaEJhckl0ZW0gKldlYlZpZXdJbXBsOjpjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gaXNSaWNobHlFZGl0YWJsZSgpID8gbV9yaWNoVGV4dENhbmRpZGF0
ZUxpc3RUb3VjaEJhckl0ZW0uZ2V0KCkgOiBtX3BsYWluVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJh
ckl0ZW0uZ2V0KCk7Cit9CisKK0FWRnVuY3Rpb25CYXJTY3J1YmJlciAqV2ViVmlld0ltcGw6Om1l
ZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSBjb25zdAoreworI2lmIEVOQUJMRShXRUJfUExBWUJB
Q0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBpZiAobV9wYWdlLT5oYXNBY3RpdmVWaWRlb0ZvckNv
bnRyb2xzTWFuYWdlcigpKQorICAgICAgICByZXR1cm4gbV9tZWRpYVBsYXliYWNrQ29udHJvbHNW
aWV3LmdldCgpOworI2VuZGlmCisgICAgcmV0dXJuIG5pbDsKK30KKworYm9vbCBXZWJWaWV3SW1w
bDo6dXNlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpIGNvbnN0Cit7CisjaWYgRU5BQkxFKEZV
TExTQ1JFRU5fQVBJKQorICAgIGlmIChoYXNGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcigpKQor
ICAgICAgICByZXR1cm4gIVttX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGlzRnVsbFNjcmVl
bl07CisjZW5kaWYKKyAgICByZXR1cm4gbV9jbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9s
c1ZpZXc7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OmRpc21pc3NUZXh0VG91Y2hCYXJQb3BvdmVy
SXRlbVdpdGhJZGVudGlmaWVyKE5TU3RyaW5nICppZGVudGlmaWVyKQoreworICAgIE5TVG91Y2hC
YXJJdGVtICpmb3VuZEl0ZW0gPSBuaWw7CisgICAgZm9yIChOU1RvdWNoQmFySXRlbSAqaXRlbSBp
biB0ZXh0VG91Y2hCYXIoKS5pdGVtcykgeworICAgICAgICBpZiAoW2l0ZW0uaWRlbnRpZmllciBp
c0VxdWFsVG9TdHJpbmc6aWRlbnRpZmllcl0pIHsKKyAgICAgICAgICAgIGZvdW5kSXRlbSA9IGl0
ZW07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChbaXRlbS5p
ZGVudGlmaWVyIGlzRXF1YWxUb1N0cmluZzpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Rm9y
bWF0XSkgeworICAgICAgICAgICAgZm9yIChOU1RvdWNoQmFySXRlbSAqY2hpbGRJdGVtIGluICgo
TlNHcm91cFRvdWNoQmFySXRlbSAqKWl0ZW0pLmdyb3VwVG91Y2hCYXIuaXRlbXMpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoW2NoaWxkSXRlbS5pZGVudGlmaWVyIGlzRXF1YWxUb1N0cmluZzppZGVu
dGlmaWVyXSkgeworICAgICAgICAgICAgICAgICAgICBmb3VuZEl0ZW0gPSBjaGlsZEl0ZW07Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKFtmb3Vu
ZEl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNQb3BvdmVyVG91Y2hCYXJJdGVtIGNsYXNzXV0pCisgICAg
ICAgIFsoTlNQb3BvdmVyVG91Y2hCYXJJdGVtICopZm91bmRJdGVtIGRpc21pc3NQb3BvdmVyOm5p
bF07Cit9CisKK3N0YXRpYyBOU0FycmF5PE5TU3RyaW5nICo+ICp0ZXh0VG91Y2hCYXJDdXN0b21p
emF0aW9uQWxsb3dlZElkZW50aWZpZXJzKCkKK3sKKyAgICByZXR1cm4gQFsgTlNUb3VjaEJhckl0
ZW1JZGVudGlmaWVyQ2hhcmFjdGVyUGlja2VyLCBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0
Q29sb3JQaWNrZXIsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRTdHlsZSwgTlNUb3VjaEJh
ckl0ZW1JZGVudGlmaWVyVGV4dEFsaWdubWVudCwgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4
dExpc3QsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckZsZXhpYmxlU3BhY2UgXTsKK30KKworc3Rh
dGljIE5TQXJyYXk8TlNTdHJpbmcgKj4gKnBsYWluVGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkRl
ZmF1bHRJdGVtSWRlbnRpZmllcnMoKQoreworICAgIHJldHVybiBAWyBOU1RvdWNoQmFySXRlbUlk
ZW50aWZpZXJDaGFyYWN0ZXJQaWNrZXIsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckNhbmRpZGF0
ZUxpc3QgXTsKK30KKworc3RhdGljIE5TQXJyYXk8TlNTdHJpbmcgKj4gKnJpY2hUZXh0VG91Y2hC
YXJDdXN0b21pemF0aW9uRGVmYXVsdEl0ZW1JZGVudGlmaWVycygpCit7CisgICAgcmV0dXJuIEBb
IE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckNoYXJhY3RlclBpY2tlciwgTlNUb3VjaEJhckl0ZW1J
ZGVudGlmaWVyVGV4dEZvcm1hdCwgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyQ2FuZGlkYXRlTGlz
dCBdOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVUb3VjaEJhckFuZFJlZnJlc2hUZXh0
QmFySWRlbnRpZmllcnMoKQoreworICAgIGlmIChtX3JpY2hUZXh0VG91Y2hCYXIpCisgICAgICAg
IHNldFVwVGV4dFRvdWNoQmFyKG1fcmljaFRleHRUb3VjaEJhci5nZXQoKSk7CisKKyAgICBpZiAo
bV9wbGFpblRleHRUb3VjaEJhcikKKyAgICAgICAgc2V0VXBUZXh0VG91Y2hCYXIobV9wbGFpblRl
eHRUb3VjaEJhci5nZXQoKSk7CisKKyAgICB1cGRhdGVUb3VjaEJhcigpOworfQorCit2b2lkIFdl
YlZpZXdJbXBsOjpzZXRVcFRleHRUb3VjaEJhcihOU1RvdWNoQmFyICp0b3VjaEJhcikKK3sKKyAg
ICBib29sIGlzUmljaFRleHRUb3VjaEJhciA9IHRvdWNoQmFyID09IG1fcmljaFRleHRUb3VjaEJh
ci5nZXQoKTsKKyAgICBbdG91Y2hCYXIgc2V0RGVsZWdhdGU6bV90ZXh0VG91Y2hCYXJJdGVtQ29u
dHJvbGxlci5nZXQoKV07CisgICAgW3RvdWNoQmFyIHNldERlZmF1bHRJdGVtczpbTlNNdXRhYmxl
U2V0IHNldFdpdGhPYmplY3Q6aXNSaWNoVGV4dFRvdWNoQmFyID8gbV9yaWNoVGV4dENhbmRpZGF0
ZUxpc3RUb3VjaEJhckl0ZW0uZ2V0KCkgOiBtX3BsYWluVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJh
ckl0ZW0uZ2V0KCldXTsKKyAgICBbdG91Y2hCYXIgc2V0Q3VzdG9taXphdGlvbkFsbG93ZWRJdGVt
SWRlbnRpZmllcnM6dGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkFsbG93ZWRJZGVudGlmaWVycygp
XTsKKyAgICBbdG91Y2hCYXIgc2V0Q3VzdG9taXphdGlvbkRlZmF1bHRJdGVtSWRlbnRpZmllcnM6
aXNSaWNoVGV4dFRvdWNoQmFyID8gcmljaFRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25EZWZhdWx0
SXRlbUlkZW50aWZpZXJzKCkgOiBwbGFpblRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25EZWZhdWx0
SXRlbUlkZW50aWZpZXJzKCldOworCisgICAgaWYgKE5TR3JvdXBUb3VjaEJhckl0ZW0gKnRleHRG
b3JtYXRJdGVtID0gKE5TR3JvdXBUb3VjaEJhckl0ZW0gKilbdG91Y2hCYXIgaXRlbUZvcklkZW50
aWZpZXI6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEZvcm1hdF0pCisgICAgICAgIHRleHRG
b3JtYXRJdGVtLmdyb3VwVG91Y2hCYXIuY3VzdG9taXphdGlvbklkZW50aWZpZXIgPSBAIldLVGV4
dEZvcm1hdFRvdWNoQmFyIjsKK30KKworYm9vbCBXZWJWaWV3SW1wbDo6aXNSaWNobHlFZGl0YWJs
ZSgpIGNvbnN0CiB7CisgICAgcmV0dXJuIG1fcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0NvbnRlbnRS
aWNobHlFZGl0YWJsZSAmJiAhbV9wYWdlLT5uZWVkc1BsYWluVGV4dFF1aXJrKCk7CiB9CiAKK05T
VG91Y2hCYXIgKldlYlZpZXdJbXBsOjp0ZXh0VG91Y2hCYXIoKSBjb25zdAoreworICAgIHJldHVy
biBpc1JpY2hseUVkaXRhYmxlKCkgPyBtX3JpY2hUZXh0VG91Y2hCYXIuZ2V0KCkgOiBtX3BsYWlu
VGV4dFRvdWNoQmFyLmdldCgpOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVUZXh0VG91
Y2hCYXIoKQoreworICAgIGlmICghbV9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRh
YmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9pc1VwZGF0aW5nVGV4dFRvdWNoQmFy
KQorICAgICAgICByZXR1cm47CisKKyAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gaXNVcGRhdGlu
Z1RleHRGdW5jdGlvbkJhcihtX2lzVXBkYXRpbmdUZXh0VG91Y2hCYXIsIHRydWUpOworCisgICAg
aWYgKCFtX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyKQorICAgICAgICBtX3RleHRUb3VjaEJh
ckl0ZW1Db250cm9sbGVyID0gYWRvcHROUyhbW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIg
YWxsb2NdIGluaXRXaXRoV2ViVmlld0ltcGw6dGhpc10pOworCisgICAgaWYgKCFtX3N0YXJ0ZWRM
aXN0ZW5pbmdUb0N1c3RvbWl6YXRpb25FdmVudHMpIHsKKyAgICAgICAgW1tOU05vdGlmaWNhdGlv
bkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjptX3RleHRUb3VjaEJhckl0ZW1Db250
cm9sbGVyLmdldCgpIHNlbGVjdG9yOkBzZWxlY3Rvcih0b3VjaEJhckRpZEV4aXRDdXN0b21pemF0
aW9uOikgbmFtZTpOU1RvdWNoQmFyRGlkRXhpdEN1c3RvbWl6YXRpb24gb2JqZWN0Om5pbF07Cisg
ICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6
bV90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlci5nZXQoKSBzZWxlY3RvcjpAc2VsZWN0b3IodG91
Y2hCYXJXaWxsRW50ZXJDdXN0b21pemF0aW9uOikgbmFtZTpOU1RvdWNoQmFyV2lsbEVudGVyQ3Vz
dG9taXphdGlvbiBvYmplY3Q6bmlsXTsKKyAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBk
ZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjptX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyLmdl
dCgpIHNlbGVjdG9yOkBzZWxlY3RvcihkaWRDaGFuZ2VBdXRvbWF0aWNUZXh0Q29tcGxldGlvbjop
IG5hbWU6TlNTcGVsbENoZWNrZXJEaWRDaGFuZ2VBdXRvbWF0aWNUZXh0Q29tcGxldGlvbk5vdGlm
aWNhdGlvbiBvYmplY3Q6bmlsXTsKKworICAgICAgICBtX3N0YXJ0ZWRMaXN0ZW5pbmdUb0N1c3Rv
bWl6YXRpb25FdmVudHMgPSB0cnVlOworICAgIH0KKworICAgIGlmICghbV9yaWNoVGV4dENhbmRp
ZGF0ZUxpc3RUb3VjaEJhckl0ZW0gfHwgIW1fcGxhaW5UZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFy
SXRlbSkgeworICAgICAgICBtX3JpY2hUZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSA9IGFk
b3B0TlMoW1tOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gYWxsb2NdIGluaXRXaXRoSWRlbnRp
ZmllcjpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJDYW5kaWRhdGVMaXN0XSk7CisgICAgICAgIFtt
X3JpY2hUZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSBzZXREZWxlZ2F0ZTptX3RleHRUb3Vj
aEJhckl0ZW1Db250cm9sbGVyLmdldCgpXTsKKyAgICAgICAgbV9wbGFpblRleHRDYW5kaWRhdGVM
aXN0VG91Y2hCYXJJdGVtID0gYWRvcHROUyhbW05TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSBh
bGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckNhbmRpZGF0
ZUxpc3RdKTsKKyAgICAgICAgW21fcGxhaW5UZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSBz
ZXREZWxlZ2F0ZTptX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyLmdldCgpXTsKKyAgICAgICAg
cmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb25JZk5lZWRlZCgpOworICAgIH0KKworICAgIGlm
ICghbV9yaWNoVGV4dFRvdWNoQmFyKSB7CisgICAgICAgIG1fcmljaFRleHRUb3VjaEJhciA9IGFk
b3B0TlMoW1tOU1RvdWNoQmFyIGFsbG9jXSBpbml0XSk7CisgICAgICAgIHNldFVwVGV4dFRvdWNo
QmFyKG1fcmljaFRleHRUb3VjaEJhci5nZXQoKSk7CisgICAgICAgIFttX3JpY2hUZXh0VG91Y2hC
YXIgc2V0Q3VzdG9taXphdGlvbklkZW50aWZpZXI6QCJXS1JpY2hUZXh0VG91Y2hCYXIiXTsKKyAg
ICB9CisKKyAgICBpZiAoIW1fcGxhaW5UZXh0VG91Y2hCYXIpIHsKKyAgICAgICAgbV9wbGFpblRl
eHRUb3VjaEJhciA9IGFkb3B0TlMoW1tOU1RvdWNoQmFyIGFsbG9jXSBpbml0XSk7CisgICAgICAg
IHNldFVwVGV4dFRvdWNoQmFyKG1fcGxhaW5UZXh0VG91Y2hCYXIuZ2V0KCkpOworICAgICAgICBb
bV9wbGFpblRleHRUb3VjaEJhciBzZXRDdXN0b21pemF0aW9uSWRlbnRpZmllcjpAIldLUGxhaW5U
ZXh0VG91Y2hCYXIiXTsKKyAgICB9CisKKyAgICBpZiAoW05TU3BlbGxDaGVja2VyIGlzQXV0b21h
dGljVGV4dENvbXBsZXRpb25FbmFibGVkXSAmJiAhbV9pc0N1c3RvbWl6aW5nVG91Y2hCYXIpIHsK
KyAgICAgICAgQk9PTCBzaG93Q2FuZGlkYXRlc0xpc3QgPSAhbV9wYWdlLT5lZGl0b3JTdGF0ZSgp
LnNlbGVjdGlvbklzUmFuZ2UgfHwgbV9pc0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRhdGU7CisgICAg
ICAgIFtjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtKCkgdXBkYXRlV2l0aEluc2VydGlvblBvaW50
VmlzaWJpbGl0eTpzaG93Q2FuZGlkYXRlc0xpc3RdOworICAgICAgICBbbV92aWV3IF9kaWRVcGRh
dGVDYW5kaWRhdGVMaXN0VmlzaWJpbGl0eTpzaG93Q2FuZGlkYXRlc0xpc3RdOworICAgIH0KKwor
ICAgIGlmIChtX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNJblBhc3N3b3JkRmllbGQpIHsKKyAgICAg
ICAgLy8gV2UgZG9uJ3QgcmVxdWVzdCBjYW5kaWRhdGVzIGZvciBwYXNzd29yZCBmaWVsZHMuIElm
IHRoZSB1c2VyIHdhcyBwcmV2aW91c2x5IGluIGEgbm9uLXBhc3N3b3JkIGZpZWxkLCB0aGVuIHRo
ZQorICAgICAgICAvLyBvbGQgY2FuZGlkYXRlcyB3aWxsIHN0aWxsIHNob3cgYnkgZGVmYXVsdCwg
c28gd2UgY2xlYXIgdGhlbSBoZXJlIGJ5IHNldHRpbmcgYW4gZW1wdHkgYXJyYXkgb2YgY2FuZGlk
YXRlcy4KKyAgICAgICAgaWYgKCFtX2VtcHR5Q2FuZGlkYXRlc0FycmF5KQorICAgICAgICAgICAg
bV9lbXB0eUNhbmRpZGF0ZXNBcnJheSA9IGFkb3B0TlMoW1tOU0FycmF5IGFsbG9jXSBpbml0XSk7
CisgICAgICAgIFtjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtKCkgc2V0Q2FuZGlkYXRlczptX2Vt
cHR5Q2FuZGlkYXRlc0FycmF5LmdldCgpIGZvclNlbGVjdGVkUmFuZ2U6TlNNYWtlUmFuZ2UoMCwg
MCkgaW5TdHJpbmc6bmlsXTsKKyAgICB9CisKKyAgICBOU1RvdWNoQmFyICp0ZXh0VG91Y2hCYXIg
PSB0aGlzLT50ZXh0VG91Y2hCYXIoKTsKKyAgICBCT09MIGlzU2hvd2luZ0NvbWJpbmVkVGV4dEZv
cm1hdEl0ZW0gPSBbdGV4dFRvdWNoQmFyLml0ZW1JZGVudGlmaWVycyBjb250YWluc09iamVjdDpO
U1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Rm9ybWF0XTsKKyAgICBbdGV4dFRvdWNoQmFyIHNl
dFByaW5jaXBhbEl0ZW1JZGVudGlmaWVyOmlzU2hvd2luZ0NvbWJpbmVkVGV4dEZvcm1hdEl0ZW0g
PyBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Rm9ybWF0IDogbmlsXTsKKworICAgIC8vIFNl
dCBjdXJyZW50IHR5cGluZyBhdHRyaWJ1dGVzIGZvciByaWNoIHRleHQuIFRoaXMgd2lsbCBlbnN1
cmUgdGhhdCB0aGUgYnV0dG9ucyByZWZsZWN0IHRoZSBzdGF0ZSBvZgorICAgIC8vIHRoZSB0ZXh0
IHdoZW4gY2hhbmdpbmcgc2VsZWN0aW9uIHRocm91Z2hvdXQgdGhlIGRvY3VtZW50LgorICAgIGlm
IChpc1JpY2hseUVkaXRhYmxlKCkpIHsKKyAgICAgICAgY29uc3QgRWRpdG9yU3RhdGUmIGVkaXRv
clN0YXRlID0gbV9wYWdlLT5lZGl0b3JTdGF0ZSgpOworICAgICAgICBpZiAoIWVkaXRvclN0YXRl
LmlzTWlzc2luZ1Bvc3RMYXlvdXREYXRhKSB7CisgICAgICAgICAgICBbbV90ZXh0VG91Y2hCYXJJ
dGVtQ29udHJvbGxlciBzZXRUZXh0SXNCb2xkOihib29sKShtX3BhZ2UtPmVkaXRvclN0YXRlKCku
cG9zdExheW91dERhdGEoKS50eXBpbmdBdHRyaWJ1dGVzICYgQXR0cmlidXRlQm9sZCldOworICAg
ICAgICAgICAgW21fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzSXRhbGljOihi
b29sKShtX3BhZ2UtPmVkaXRvclN0YXRlKCkucG9zdExheW91dERhdGEoKS50eXBpbmdBdHRyaWJ1
dGVzICYgQXR0cmlidXRlSXRhbGljcyldOworICAgICAgICAgICAgW21fdGV4dFRvdWNoQmFySXRl
bUNvbnRyb2xsZXIgc2V0VGV4dElzVW5kZXJsaW5lZDooYm9vbCkobV9wYWdlLT5lZGl0b3JTdGF0
ZSgpLnBvc3RMYXlvdXREYXRhKCkudHlwaW5nQXR0cmlidXRlcyAmIEF0dHJpYnV0ZVVuZGVybGlu
ZSldOworICAgICAgICAgICAgW21fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dENv
bG9yOm5zQ29sb3IoZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEoKS50ZXh0Q29sb3IpXTsKKyAg
ICAgICAgICAgIFtbbV90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciB0ZXh0TGlzdFRvdWNoQmFy
Vmlld0NvbnRyb2xsZXJdIHNldEN1cnJlbnRMaXN0VHlwZTooTGlzdFR5cGUpbV9wYWdlLT5lZGl0
b3JTdGF0ZSgpLnBvc3RMYXlvdXREYXRhKCkuZW5jbG9zaW5nTGlzdFR5cGVdOworCisgICAgICAg
ICAgICBOU1RleHRBbGlnbm1lbnQgdGV4dEFsaWdubWVudDsKKyAgICAgICAgICAgIHN3aXRjaCAo
ZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEoKS50ZXh0QWxpZ25tZW50KSB7CisgICAgICAgICAg
ICBjYXNlIE5vQWxpZ25tZW50OgorICAgICAgICAgICAgICAgIHRleHRBbGlnbm1lbnQgPSBOU1Rl
eHRBbGlnbm1lbnROYXR1cmFsOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBMZWZ0QWxpZ25tZW50OgorICAgICAgICAgICAgICAgIHRleHRBbGlnbm1lbnQgPSBOU1Rl
eHRBbGlnbm1lbnRMZWZ0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBSaWdodEFsaWdubWVudDoKKyAgICAgICAgICAgICAgICB0ZXh0QWxpZ25tZW50ID0gTlNUZXh0
QWxpZ25tZW50UmlnaHQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IENlbnRlckFsaWdubWVudDoKKyAgICAgICAgICAgICAgICB0ZXh0QWxpZ25tZW50ID0gTlNUZXh0
QWxpZ25tZW50Q2VudGVyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBKdXN0aWZpZWRBbGlnbm1lbnQ6CisgICAgICAgICAgICAgICAgdGV4dEFsaWdubWVudCA9IE5T
VGV4dEFsaWdubWVudEp1c3RpZmllZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIFttX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldEN1cnJl
bnRUZXh0QWxpZ25tZW50OnRleHRBbGlnbm1lbnRdOworICAgICAgICB9CisgICAgICAgIEJPT0wg
aXNTaG93aW5nQ2FuZGlkYXRlTGlzdEl0ZW0gPSBbdGV4dFRvdWNoQmFyLml0ZW1JZGVudGlmaWVy
cyBjb250YWluc09iamVjdDpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJDYW5kaWRhdGVMaXN0XSAm
JiBbTlNTcGVsbENoZWNrZXIgaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkXTsKKyAg
ICAgICAgW21fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VXNlc05hcnJvd1RleHRTdHls
ZUl0ZW06aXNTaG93aW5nQ29tYmluZWRUZXh0Rm9ybWF0SXRlbSAmJiBpc1Nob3dpbmdDYW5kaWRh
dGVMaXN0SXRlbV07CisgICAgfQorfQorCit2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVNZWRpYVRv
dWNoQmFyKCkKK3sKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisg
ICAgaWYgKCFtX21lZGlhVG91Y2hCYXJQcm92aWRlcikKKyAgICAgICAgbV9tZWRpYVRvdWNoQmFy
UHJvdmlkZXIgPSBhZG9wdE5TKFthbGxvY0FWRnVuY3Rpb25CYXJQbGF5YmFja0NvbnRyb2xzUHJv
dmlkZXJJbnN0YW5jZSgpIGluaXRdKTsKKworICAgIGlmICghbV9tZWRpYVBsYXliYWNrQ29udHJv
bHNWaWV3KQorICAgICAgICBtX21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcgPSBhZG9wdE5TKFth
bGxvY0FWRnVuY3Rpb25CYXJTY3J1YmJlckluc3RhbmNlKCkgaW5pdF0pOworCisgICAgaWYgKCFt
X3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyKQorICAgICAgICBtX3BsYXliYWNrQ29udHJvbHNNYW5h
Z2VyID0gYWRvcHROUyhbW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIGFsbG9jXSBpbml0XSk7
CisKKyAgICBpZiAoUGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UqIGludGVyZmFj
ZSA9IG1fcGFnZS0+cGxheWJhY2tTZXNzaW9uTWFuYWdlcigpLT5jb250cm9sc01hbmFnZXJJbnRl
cmZhY2UoKSkKKyAgICAgICAgW21fcGxheWJhY2tDb250cm9sc01hbmFnZXIgc2V0V2ViUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjOmludGVyZmFjZV07CisKKyAgICBbbV9tZWRpYVRvdWNoQmFy
UHJvdmlkZXIgc2V0UGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXI6bV9wbGF5YmFja0NvbnRyb2xz
TWFuYWdlci5nZXQoKV07CisgICAgW21fbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyBzZXRQbGF5
YmFja0NvbnRyb2xzQ29udHJvbGxlcjptX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmdldCgpXTsK
KworICAgIGlmICghdXNlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpKSB7CisjaWYgRU5BQkxF
KEZVTExTQ1JFRU5fQVBJKQorICAgICAgICAvLyBJZiB3ZSBjYW4ndCBoYXZlIGEgbWVkaWEgcG9w
b3ZlciBmdW5jdGlvbiBiYXIgaXRlbSwgaXQgbWlnaHQgYmUgYmVjYXVzZSB3ZSBhcmUgaW4gZnVs
bCBzY3JlZW4uCisgICAgICAgIC8vIElmIHNvLCBjdXN0b21pemUgdGhlIGVzY2FwZSBrZXkuCisg
ICAgICAgIE5TVG91Y2hCYXIgKnRvdWNoQmFyID0gW21fbWVkaWFUb3VjaEJhclByb3ZpZGVyIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IodG91Y2hCYXIpXSA/IFsoaWQpbV9tZWRpYVRvdWNo
QmFyUHJvdmlkZXIuZ2V0KCkgdG91Y2hCYXJdIDogWyhpZCltX21lZGlhVG91Y2hCYXJQcm92aWRl
ci5nZXQoKSB0b3VjaEJhcl07CisgICAgICAgIGlmIChoYXNGdWxsU2NyZWVuV2luZG93Q29udHJv
bGxlcigpICYmIFttX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGlzRnVsbFNjcmVlbl0pIHsK
KyAgICAgICAgICAgIGlmICghbV9leGl0RnVsbFNjcmVlbkJ1dHRvbikgeworICAgICAgICAgICAg
ICAgIG1fZXhpdEZ1bGxTY3JlZW5CdXR0b24gPSBhZG9wdE5TKFtbTlNDdXN0b21Ub3VjaEJhckl0
ZW0gYWxsb2NdIGluaXRXaXRoSWRlbnRpZmllcjpXS01lZGlhRXhpdEZ1bGxTY3JlZW5JdGVtXSk7
CisKKyAgICAgICAgICAgICAgICBOU0ltYWdlICppbWFnZSA9IFtOU0ltYWdlIGltYWdlTmFtZWQ6
TlNJbWFnZU5hbWVUb3VjaEJhckV4aXRGdWxsU2NyZWVuVGVtcGxhdGVdOworICAgICAgICAgICAg
ICAgIFtpbWFnZSBzZXRUZW1wbGF0ZTpZRVNdOworCisgICAgICAgICAgICAgICAgTlNCdXR0b24g
KmV4aXRGdWxsU2NyZWVuQnV0dG9uID0gW05TQnV0dG9uIGJ1dHRvbldpdGhUaXRsZTppbWFnZSA/
IEAiIiA6IEAiRXhpdCIgaW1hZ2U6aW1hZ2UgdGFyZ2V0Om1fZnVsbFNjcmVlbldpbmRvd0NvbnRy
b2xsZXIuZ2V0KCkgYWN0aW9uOkBzZWxlY3RvcihyZXF1ZXN0RXhpdEZ1bGxTY3JlZW4pXTsKKyAg
ICAgICAgICAgICAgICBbZXhpdEZ1bGxTY3JlZW5CdXR0b24gc2V0QWNjZXNzaWJpbGl0eVRpdGxl
OldlYkNvcmU6OmV4aXRGdWxsU2NyZWVuQnV0dG9uQWNjZXNzaWJpbGl0eVRpdGxlKCldOworCisg
ICAgICAgICAgICAgICAgW1tleGl0RnVsbFNjcmVlbkJ1dHRvbi53aWR0aEFuY2hvciBjb25zdHJh
aW50TGVzc1RoYW5PckVxdWFsVG9Db25zdGFudDpleGl0RnVsbFNjcmVlbkJ1dHRvbldpZHRoXSBz
ZXRBY3RpdmU6WUVTXTsKKyAgICAgICAgICAgICAgICBbbV9leGl0RnVsbFNjcmVlbkJ1dHRvbiBz
ZXRWaWV3OmV4aXRGdWxsU2NyZWVuQnV0dG9uXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHRvdWNoQmFyLmVzY2FwZUtleVJlcGxhY2VtZW50SXRlbSA9IG1fZXhpdEZ1bGxTY3JlZW5CdXR0
b24uZ2V0KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdG91Y2hCYXIuZXNjYXBlS2V5
UmVwbGFjZW1lbnRJdGVtID0gbmlsOworI2VuZGlmCisgICAgICAgIC8vIFRoZSByZXN0IG9mIHRo
ZSB3b3JrIHRvIHVwZGF0ZSB0aGUgbWVkaWEgZnVuY3Rpb24gYmFyIG9ubHkgYXBwbGllcyB0byB0
aGUgcG9wb3ZlciB2ZXJzaW9uLCBzbyByZXR1cm4gZWFybHkuCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAobV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlciAmJiBtX3ZpZXcgPT0gbV92
aWV3LndpbmRvdy5maXJzdFJlc3BvbmRlciAmJiBbbV92aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IoX3dlYl9kaWRBZGRNZWRpYUNvbnRyb2xzTWFuYWdlcjopXSkKKyAgICAgICAgW21f
dmlldyBfd2ViX2RpZEFkZE1lZGlhQ29udHJvbHNNYW5hZ2VyOm1fbWVkaWFQbGF5YmFja0NvbnRy
b2xzVmlldy5nZXQoKV07CisjZW5kaWYKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6Zm9yY2VSZXF1
ZXN0Q2FuZGlkYXRlc0ZvclRlc3RpbmcoKQoreworICAgIG1fY2FuQ3JlYXRlVG91Y2hCYXJzID0g
dHJ1ZTsKKyNpZiBIQVZFKFRPVUNIX0JBUikKKyAgICB1cGRhdGVUb3VjaEJhcigpOworI2VuZGlm
Cit9CisKK2Jvb2wgV2ViVmlld0ltcGw6OnNob3VsZFJlcXVlc3RDYW5kaWRhdGVzKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gIW1fcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0luUGFzc3dvcmRGaWVsZCAm
JiBjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtKCkuY2FuZGlkYXRlTGlzdFZpc2libGU7Cit9CisK
K3ZvaWQgV2ViVmlld0ltcGw6OnNob3dDYW5kaWRhdGVzKE5TQXJyYXkgKmNhbmRpZGF0ZXMsIE5T
U3RyaW5nICpzdHJpbmcsIE5TUmVjdCByZWN0T2ZUeXBlZFN0cmluZywgTlNSYW5nZSBzZWxlY3Rl
ZFJhbmdlLCBOU1ZpZXcgKnZpZXcsIHZvaWQgKF5jb21wbGV0aW9uSGFuZGxlcikoTlNUZXh0Q2hl
Y2tpbmdSZXN1bHQgKmFjY2VwdGVkQ2FuZGlkYXRlKSkKK3sKKyAgICBbY2FuZGlkYXRlTGlzdFRv
dWNoQmFySXRlbSgpIHNldENhbmRpZGF0ZXM6Y2FuZGlkYXRlcyBmb3JTZWxlY3RlZFJhbmdlOnNl
bGVjdGVkUmFuZ2UgaW5TdHJpbmc6c3RyaW5nXTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6d2Vi
Vmlld0ltcGxBZGRpdGlvbnNXaWxsRGVzdHJveVZpZXcoKQoreworICAgIFttX3RleHRUb3VjaEJh
ckl0ZW1Db250cm9sbGVyIGRpZERlc3Ryb3lWaWV3XTsKKworI2lmIEVOQUJMRShXRUJfUExBWUJB
Q0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBbbV9tZWRpYVRvdWNoQmFyUHJvdmlkZXIgc2V0UGxh
eWJhY2tDb250cm9sc0NvbnRyb2xsZXI6bmlsXTsKKyAgICBbbV9tZWRpYVBsYXliYWNrQ29udHJv
bHNWaWV3IHNldFBsYXliYWNrQ29udHJvbHNDb250cm9sbGVyOm5pbF07CisjZW5kaWYKK30KKwor
dm9pZCBXZWJWaWV3SW1wbDo6c2V0RWRpdGFibGVFbGVtZW50SXNGb2N1c2VkKGJvb2wgZWRpdGFi
bGVFbGVtZW50SXNGb2N1c2VkKQoreworICAgIG1fZWRpdGFibGVFbGVtZW50SXNGb2N1c2VkID0g
ZWRpdGFibGVFbGVtZW50SXNGb2N1c2VkOworCisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgLy8g
SWYgdGhlIGVkaXRhYmxlIGVsZW1lbnRzIGhhdmUgYmx1cnJlZCwgdGhlbiB3ZSBtaWdodCBuZWVk
IHRvIGdldCByaWQgb2YgdGhlIGVkaXRpbmcgZnVuY3Rpb24gYmFyLgorICAgIGlmICghbV9lZGl0
YWJsZUVsZW1lbnRJc0ZvY3VzZWQpCisgICAgICAgIHVwZGF0ZVRvdWNoQmFyKCk7CisjZW5kaWYK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisjZWxzZQorbmFtZXNwYWNlIFdlYktpdCB7CisK
IHZvaWQgV2ViVmlld0ltcGw6OmZvcmNlUmVxdWVzdENhbmRpZGF0ZXNGb3JUZXN0aW5nKCkKIHsK
IH0KQEAgLTQ2NSw3ICsxMTYzLDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0RWRpdGFibGVFbGVt
ZW50SXNGbwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKLSNlbmRpZiAvLyBfX01BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMCAmJiBVU0UoQVBQTEVfSU5URVJOQUxfU0RL
KQorI2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFSKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAt
NjE1LDcgKzEzMTMsOSBAQCBib29sIFdlYlZpZXdJbXBsOjpiZWNvbWVGaXJzdFJlc3BvbmRlcigp
CiAKICAgICBtX2luQmVjb21lRmlyc3RSZXNwb25kZXIgPSBmYWxzZTsKIAotICAgIHVwZGF0ZVdl
YlZpZXdJbXBsQWRkaXRpb25zKCk7CisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgdXBkYXRlVG91
Y2hCYXIoKTsKKyNlbmRpZgogCiAgICAgaWYgKGRpcmVjdGlvbiAhPSBOU0RpcmVjdFNlbGVjdGlv
bikgewogICAgICAgICBOU0V2ZW50ICpldmVudCA9IFtOU0FwcCBjdXJyZW50RXZlbnRdOwpAQCAt
MTgwNyw4ICsyNTA3LDggQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2VsZWN0aW9uRGlkQ2hhbmdlKCkK
ICAgICB1cGRhdGVGb250UGFuZWxJZk5lZWRlZCgpOwogICAgIGlmICghbV9pc0hhbmRsaW5nQWNj
ZXB0ZWRDYW5kaWRhdGUpCiAgICAgICAgIG1fc29mdFNwYWNlUmFuZ2UgPSBOU01ha2VSYW5nZShO
U05vdEZvdW5kLCAwKTsKLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEw
MTIwMAotICAgIHVwZGF0ZVdlYlZpZXdJbXBsQWRkaXRpb25zKCk7CisjaWYgSEFWRShUT1VDSF9C
QVIpCisgICAgdXBkYXRlVG91Y2hCYXIoKTsKICAgICBpZiAoIW1fcGFnZS0+ZWRpdG9yU3RhdGUo
KS5pc01pc3NpbmdQb3N0TGF5b3V0RGF0YSkKICAgICAgICAgcmVxdWVzdENhbmRpZGF0ZXNGb3JT
ZWxlY3Rpb25JZk5lZWRlZCgpOwogI2VuZGlmCkBAIC0yNDQ3LDggKzMxNDcsOCBAQCB2b2lkIFdl
YlZpZXdJbXBsOjpkaWRIYW5kbGVBY2NlcHRlZENhbmRpCiAKIHZvaWQgV2ViVmlld0ltcGw6OnZp
ZGVvQ29udHJvbHNNYW5hZ2VyRGlkQ2hhbmdlKCkKIHsKLSNpZiBfX01BQ19PU19YX1ZFUlNJT05f
TUlOX1JFUVVJUkVEID49IDEwMTIwMAotICAgIHVwZGF0ZVdlYlZpZXdJbXBsQWRkaXRpb25zKCk7
CisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgdXBkYXRlVG91Y2hCYXIoKTsKICNlbmRpZgogfQog
CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2NyBAQAorMjAxNi0xMS0w
NCAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3VwcG9ydCBUb3Vj
aEJhciBpbiBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NDQzNworICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIHJkYXI6
Ly9wcm9ibGVtLzI4ODc2NTI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW06CisgICAgICAg
IChXZWJFZGl0b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAo
V2ViRWRpdG9yQ2xpZW50Ojp1cGRhdGVFZGl0b3JTdGF0ZUFmdGVyTGF5b3V0SWZFZGl0YWJpbGl0
eUNoYW5nZWQpOgorICAgICAgICAqIFdlYlZpZXcvV2ViSFRNTFZpZXcubW06CisgICAgICAgICgt
W1dlYkhUTUxWaWV3IGNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW1dKToKKyAgICAgICAgKiBXZWJW
aWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW19XZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRy
b2xsZXIgaW5pdFdpdGhXZWJWaWV3Ol0pOgorICAgICAgICAoLVtfV2ViVGV4dExpc3RUb3VjaEJh
clZpZXdDb250cm9sbGVyIF9zZWxlY3RMaXN0Ol0pOgorICAgICAgICAoLVtfV2ViVGV4dExpc3RU
b3VjaEJhclZpZXdDb250cm9sbGVyIHNldEN1cnJlbnRMaXN0VHlwZTpdKToKKyAgICAgICAgKC1b
V2ViVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgaW5pdFdpdGhXZWJWaWV3Ol0pOgorICAgICAg
ICAoLVtXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBpdGVtRm9ySWRlbnRpZmllcjpdKToK
KyAgICAgICAgKC1bV2ViVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgd2ViVGV4dExpc3RUb3Vj
aEJhclZpZXdDb250cm9sbGVyXSk6CisgICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0ZW1Db250
cm9sbGVyIHNldFRleHRJc0JvbGQ6XSk6CisgICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0ZW1D
b250cm9sbGVyIHNldFRleHRJc0l0YWxpYzpdKToKKyAgICAgICAgKC1bV2ViVGV4dFRvdWNoQmFy
SXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzVW5kZXJsaW5lZDpdKToKKyAgICAgICAgKC1bV2ViVGV4
dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgX3dlYkNoYW5nZVRleHRTdHlsZTpdKToKKyAgICAgICAg
KC1bV2ViVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0Q3VycmVudFRleHRBbGlnbm1lbnQ6
XSk6CisgICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIF93ZWJDaGFuZ2VU
ZXh0QWxpZ25tZW50Ol0pOgorICAgICAgICAoLVtXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxl
ciB0ZXh0Q29sb3JdKToKKyAgICAgICAgKC1bV2ViVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIg
c2V0VGV4dENvbG9yOl0pOgorICAgICAgICAoLVtXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxl
ciBfd2ViQ2hhbmdlQ29sb3I6XSk6CisgICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0ZW1Db250
cm9sbGVyIHRleHRMaXN0Vmlld0NvbnRyb2xsZXJdKToKKyAgICAgICAgKC1bV2ViVmlldyBfY29t
bW9uSW5pdGlhbGl6YXRpb25XaXRoRnJhbWVOYW1lOmdyb3VwTmFtZTpdKToKKyAgICAgICAgKC1b
V2ViVmlldyBzaG93Q2FuZGlkYXRlczpmb3JTdHJpbmc6aW5SZWN0OmZvclNlbGVjdGVkUmFuZ2U6
dmlldzpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV2ViVmlldyBzaG91bGRSZXF1
ZXN0Q2FuZGlkYXRlc10pOgorICAgICAgICAoLVtXZWJWaWV3IGZvcmNlUmVxdWVzdENhbmRpZGF0
ZXNGb3JUZXN0aW5nXSk6CisgICAgICAgICgtW1dlYlZpZXcgbWFrZVRvdWNoQmFyXSk6CisgICAg
ICAgICgtW1dlYlZpZXcgdG91Y2hCYXI6bWFrZUl0ZW1Gb3JJZGVudGlmaWVyOl0pOgorICAgICAg
ICAodGV4dENoZWNraW5nUmVzdWx0RnJvbU5TVGV4dENoZWNraW5nUmVzdWx0KToKKyAgICAgICAg
KC1bV2ViVmlldyBjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtOmVuZFNlbGVjdGluZ0NhbmRpZGF0
ZUF0SW5kZXg6XSk6CisgICAgICAgICgtW1dlYlZpZXcgY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRl
bTpjaGFuZ2VkQ2FuZGlkYXRlTGlzdFZpc2liaWxpdHk6XSk6CisgICAgICAgICgtW1dlYlZpZXcg
X3NldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXJGb3JNZWRpYUVsZW1lbnQ6XSk6CisgICAgICAg
ICgtW1dlYlZpZXcgX2NsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXJdKToKKyAgICAgICAgKC1b
V2ViVmlldyBfZGlzbWlzc1RleHRUb3VjaEJhclBvcG92ZXJJdGVtV2l0aElkZW50aWZpZXI6XSk6
CisgICAgICAgICgtW1dlYlZpZXcgX3RleHRUb3VjaEJhckN1c3RvbWl6YXRpb25BbGxvd2VkSWRl
bnRpZmllcnNdKToKKyAgICAgICAgKC1bV2ViVmlldyBfcGxhaW5UZXh0VG91Y2hCYXJDdXN0b21p
emF0aW9uRGVmYXVsdEl0ZW1JZGVudGlmaWVyc10pOgorICAgICAgICAoLVtXZWJWaWV3IF9yaWNo
VGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkRlZmF1bHRJdGVtSWRlbnRpZmllcnNdKToKKyAgICAg
ICAgKC1bV2ViVmlldyB0b3VjaEJhckRpZEV4aXRDdXN0b21pemF0aW9uOl0pOgorICAgICAgICAo
LVtXZWJWaWV3IHRvdWNoQmFyV2lsbEVudGVyQ3VzdG9taXphdGlvbjpdKToKKyAgICAgICAgKC1b
V2ViVmlldyBkaWRDaGFuZ2VBdXRvbWF0aWNUZXh0Q29tcGxldGlvbjpdKToKKyAgICAgICAgKC1b
V2ViVmlldyBzZXRVcFRleHRUb3VjaEJhcjpdKToKKyAgICAgICAgKC1bV2ViVmlldyBfaXNSaWNo
bHlFZGl0YWJsZV0pOgorICAgICAgICAoLVtXZWJWaWV3IHRleHRUb3VjaEJhcl0pOgorICAgICAg
ICAoLVtXZWJWaWV3IHVwZGF0ZVRleHRUb3VjaEJhcl0pOgorICAgICAgICAoLVtXZWJWaWV3IHVw
ZGF0ZU1lZGlhVG91Y2hCYXJdKToKKyAgICAgICAgKC1bV2ViVmlldyB1cGRhdGVUb3VjaEJhcl0p
OgorICAgICAgICAoLVtXZWJWaWV3IHByZXBhcmVGb3JNb3VzZURvd25dKToKKyAgICAgICAgKC1b
V2ViVmlldyBwcmVwYXJlRm9yTW91c2VVcF0pOgorICAgICAgICAoLVtXZWJWaWV3IHdlYlZpZXdB
ZGRpdGlvbnNXaWxsRGVzdHJveVZpZXddKToKKyAgICAgICAgKC1bV2ViVmlldyBjYW5kaWRhdGVM
aXN0XSk6CisgICAgICAgICgtW1dlYlZpZXcgdXBkYXRlV2ViVmlld0FkZGl0aW9uc10pOiBEZWxl
dGVkLgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlld0RhdGEuaDoKKyAgICAgICAgKiBXZWJWaWV3
L1dlYlZpZXdJbnRlcm5hbC5oOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlld1ByaXZhdGUuaDoK
KwogMjAxNi0xMS0wNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29t
PgogCiAgICAgICAgIEFkZCBhIHNldHRpbmcgYW5kIHByZWZlcmVuY2VzIHRvIGVuYWJsZS9kaXNh
YmxlIGFzeW5jIGltYWdlIGRlY29kaW5nCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCShyZXZpc2lvbiAyMDg0MDUpCisr
KyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0JKHdv
cmtpbmcgY29weSkKQEAgLTM0Nyw3ICszNDcsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVz
cG9uZFRvQ2hhbmdlZFNlCiAgICAgTlNWaWV3PFdlYkRvY3VtZW50Vmlldz4gKmRvY3VtZW50Vmll
dyA9IFtba2l0KGZyYW1lKSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CiAgICAgaWYgKFtkb2N1
bWVudFZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkgewogICAgICAgICBb
KFdlYkhUTUxWaWV3ICopZG9jdW1lbnRWaWV3IF9zZWxlY3Rpb25DaGFuZ2VkXTsKLSAgICAgICAg
W21fd2ViVmlldyB1cGRhdGVXZWJWaWV3QWRkaXRpb25zXTsKKyAgICAgICAgW21fd2ViVmlldyB1
cGRhdGVUb3VjaEJhcl07CiAgICAgICAgIG1fbGFzdEVkaXRvclN0YXRlV2FzQ29udGVudEVkaXRh
YmxlID0gWyhXZWJIVE1MVmlldyAqKWRvY3VtZW50VmlldyBfaXNFZGl0YWJsZV0gPyBFZGl0b3JT
dGF0ZUlzQ29udGVudEVkaXRhYmxlOjpZZXMgOiBFZGl0b3JTdGF0ZUlzQ29udGVudEVkaXRhYmxl
OjpObzsKICAgICB9CiAKQEAgLTY2Nyw3ICs2NjcsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6
dXBkYXRlRWRpdG9yU3RhdGVBCiAKICAgICBFZGl0b3JTdGF0ZUlzQ29udGVudEVkaXRhYmxlIGVk
aXRvclN0YXRlSXNDb250ZW50RWRpdGFibGUgPSBbKFdlYkhUTUxWaWV3ICopZG9jdW1lbnRWaWV3
IF9pc0VkaXRhYmxlXSA/IEVkaXRvclN0YXRlSXNDb250ZW50RWRpdGFibGU6OlllcyA6IEVkaXRv
clN0YXRlSXNDb250ZW50RWRpdGFibGU6Ok5vOwogICAgIGlmIChtX2xhc3RFZGl0b3JTdGF0ZVdh
c0NvbnRlbnRFZGl0YWJsZSAhPSBlZGl0b3JTdGF0ZUlzQ29udGVudEVkaXRhYmxlKQotICAgICAg
ICBbbV93ZWJWaWV3IHVwZGF0ZVdlYlZpZXdBZGRpdGlvbnNdOworICAgICAgICBbbV93ZWJWaWV3
IHVwZGF0ZVRvdWNoQmFyXTsKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlZ2lzdGVyVW5k
b1N0ZXAoUGFzc1JlZlB0cjxVbmRvU3RlcD4gY21kKQpJbmRleDogU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJIVE1MVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC03MjMwLDggKzcy
MzAsMTEgQEAgLSAodm9pZClfdXBkYXRlU2VsZWN0aW9uRm9ySW5wdXRNYW5hZ2VyCiAjZW5kaWYg
Ly8gUExBVEZPUk0oSU9TKQogfQogCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMCAmJiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQot
I2ltcG9ydCA8V2ViS2l0QWRkaXRpb25zL1dlYkhUTUxWaWV3V2ViTlNUZXh0SW5wdXRTdXBwb3J0
QWRkaXRpb25zLm1tPgorI2lmIEhBVkUoVE9VQ0hfQkFSKQorLSAoTlNDYW5kaWRhdGVMaXN0VG91
Y2hCYXJJdGVtICopY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbQoreworICAgIHJldHVybiBbW3Nl
bGYgX3dlYlZpZXddIGNhbmRpZGF0ZUxpc3RdOworfQogI2VuZGlmCiAKIEBlbmQKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYg
KzExOCw3IEBACiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CiAjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9FeGNlcHRpb24uaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTVmFs
dWVSZWYuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQVZLaXRTUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUv
QWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0FuaW1hdGlv
bkNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2Uu
aD4KQEAgLTE0NCw2ICsxNDUsOCBAQAogI2ltcG9ydCA8V2ViQ29yZS9HZW9sb2NhdGlvbkNvbnRy
b2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvR2VvbG9jYXRpb25FcnJvci5oPgogI2ltcG9ydCA8
V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTE9MaXN0RWxlbWVudC5o
PgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MVUxpc3RFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0hUTUxWaWRlb0VsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvSGlzdG9yeUNvbnRyb2xsZXIu
aD4KICNpbXBvcnQgPFdlYkNvcmUvSGlzdG9yeUl0ZW0uaD4KQEAgLTE1MywxMSArMTU2LDE0IEBA
CiAjaW1wb3J0IDxXZWJDb3JlL0pTRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9KU05vZGVM
aXN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0pTTm90aWZpY2F0aW9uLmg+CisjaW1wb3J0IDxXZWJD
b3JlL0xvY2FsaXplZFN0cmluZ3MuaD4KICNpbXBvcnQgPFdlYkNvcmUvTG9nSW5pdGlhbGl6YXRp
b24uaD4KICNpbXBvcnQgPFdlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9NYWluRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvTWVtb3J5Q2FjaGUuaD4KICNpbXBv
cnQgPFdlYkNvcmUvTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL05T
U3BlbGxDaGVja2VyU1BJLmg+CisjaW1wb3J0IDxXZWJDb3JlL05TVG91Y2hCYXJTUEkuaD4KICNp
bXBvcnQgPFdlYkNvcmUvTlNVUkxGaWxlVHlwZU1hcHBpbmdzU1BJLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9Ob2RlTGlzdC5o
PgpAQCAtMTkyLDYgKzE5OCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVPYmpDRXh0cmFz
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dp
ZGdldC5oPgorI2ltcG9ydCA8V2ViQ29yZS9odG1sZWRpdGluZy5oPgogI2ltcG9ydCA8V2ViS2l0
TGVnYWN5L0RPTS5oPgogI2ltcG9ydCA8V2ViS2l0TGVnYWN5L0RPTUV4dGVuc2lvbnMuaD4KICNp
bXBvcnQgPFdlYktpdExlZ2FjeS9ET01Qcml2YXRlLmg+CkBAIC0yMTMsNiArMjIwLDcgQEAKICNp
bXBvcnQgPHd0Zi9SZWZQdHIuaD4KICNpbXBvcnQgPHd0Zi9SdW5Mb29wLmg+CiAjaW1wb3J0IDx3
dGYvU3RkTGliRXh0cmFzLmg+CisjaW1wb3J0IDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CiAjaW1w
b3J0IDx3dGYvc3BpL2Rhcndpbi9keWxkU1BJLmg+CiAKICNpZiAhUExBVEZPUk0oSU9TKQpAQCAt
MzA3LDYgKzMxNSwxMiBAQAogI2ltcG9ydCA8V2ViQ29yZS9XZWJQbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudC5oPgogI2VuZGlmCiAKKyNpZiBIQVZFKFRPVUNIX0JBUikgJiYgRU5BQkxF
KFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorU09GVF9MSU5LX0ZSQU1FV09SSyhBVktp
dCkKK1NPRlRfTElOS19DTEFTUyhBVktpdCwgQVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNQ
cm92aWRlcikKK1NPRlRfTElOS19DTEFTUyhBVktpdCwgQVZGdW5jdGlvbkJhclNjcnViYmVyKQor
I2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFSKSAmJiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xT
X01BTkFHRVIpCisKICNpZiBQTEFURk9STShNQUMpCiBTT0ZUX0xJTktfQ09OU1RBTlRfTUFZX0ZB
SUwoTG9va3VwLCBMVU5vdGlmaWNhdGlvblBvcG92ZXJXaWxsQ2xvc2UsIE5TU3RyaW5nICopCiAj
ZW5kaWYKQEAgLTY2Miw2ICs2NzYsMjgzIEBAIHN0YXRpYyBCT09MIGF1dG9tYXRpY1RleHRSZXBs
YWNlbWVudEVuYWIKIHN0YXRpYyBCT09MIGF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJs
ZWQ7CiAjZW5kaWYKIAorI2lmIEhBVkUoVE9VQ0hfQkFSKQorCitlbnVtIGNsYXNzIFdlYkxpc3RU
eXBlIHsKKyAgICBOb25lID0gMCwKKyAgICBPcmRlcmVkLAorICAgIFVub3JkZXJlZAorfTsKKwor
QGludGVyZmFjZSBXZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgOiBOU1ZpZXdDb250
cm9sbGVyIHsKK0Bwcml2YXRlCisgICAgV2ViVmlldyAqX3dlYlZpZXc7Cit9CisKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljKSBXZWJMaXN0VHlwZSBjdXJyZW50TGlzdFR5cGU7CisKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3OworCitAZW5kCisKK0BpbXBs
ZW1lbnRhdGlvbiBXZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIKKworQHN5bnRoZXNp
emUgY3VycmVudExpc3RUeXBlPV9jdXJyZW50TGlzdFR5cGU7CisKK3N0YXRpYyBjb25zdCBDR0Zs
b2F0IGxpc3RDb250cm9sU2VnbWVudFdpZHRoID0gNjcuMDsKKworc3RhdGljIGNvbnN0IE5TVUlu
dGVnZXIgbm9MaXN0U2VnbWVudCA9IDA7CitzdGF0aWMgY29uc3QgTlNVSW50ZWdlciB1bm9yZGVy
ZWRMaXN0U2VnbWVudCA9IDE7CitzdGF0aWMgY29uc3QgTlNVSW50ZWdlciBvcmRlcmVkTGlzdFNl
Z21lbnQgPSAyOworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWV3OihXZWJWaWV3ICop
d2ViVmlldworeworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1
cm4gbmlsOworCisgICAgX3dlYlZpZXcgPSB3ZWJWaWV3OworCisgICAgTlNTZWdtZW50ZWRDb250
cm9sICppbnNlcnRMaXN0Q29udHJvbCA9IFtOU1NlZ21lbnRlZENvbnRyb2wgc2VnbWVudGVkQ29u
dHJvbFdpdGhMYWJlbHM6QFsgV2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVOb25lKCksIFdlYkNvcmU6
Omluc2VydExpc3RUeXBlQnVsbGV0ZWQoKSwgV2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVOdW1iZXJl
ZCgpIF0gdHJhY2tpbmdNb2RlOk5TU2VnbWVudFN3aXRjaFRyYWNraW5nU2VsZWN0T25lIHRhcmdl
dDpzZWxmIGFjdGlvbjpAc2VsZWN0b3IoX3NlbGVjdExpc3Q6KV07CisgICAgW2luc2VydExpc3RD
b250cm9sIHNldFdpZHRoOmxpc3RDb250cm9sU2VnbWVudFdpZHRoIGZvclNlZ21lbnQ6bm9MaXN0
U2VnbWVudF07CisgICAgW2luc2VydExpc3RDb250cm9sIHNldFdpZHRoOmxpc3RDb250cm9sU2Vn
bWVudFdpZHRoIGZvclNlZ21lbnQ6dW5vcmRlcmVkTGlzdFNlZ21lbnRdOworICAgIFtpbnNlcnRM
aXN0Q29udHJvbCBzZXRXaWR0aDpsaXN0Q29udHJvbFNlZ21lbnRXaWR0aCBmb3JTZWdtZW50Om9y
ZGVyZWRMaXN0U2VnbWVudF07CisgICAgaW5zZXJ0TGlzdENvbnRyb2wuZm9udCA9IFtOU0ZvbnQg
c3lzdGVtRm9udE9mU2l6ZToxNV07CisKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisj
cHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9u
cyIKKyAgICBpZCBzZWdtZW50RWxlbWVudCA9IE5TQWNjZXNzaWJpbGl0eVVuaWdub3JlZERlc2Nl
bmRhbnQoaW5zZXJ0TGlzdENvbnRyb2wpOworICAgIE5TQXJyYXkgKnNlZ21lbnRzID0gW3NlZ21l
bnRFbGVtZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlDaGls
ZHJlbkF0dHJpYnV0ZV07CisgICAgQVNTRVJUKHNlZ21lbnRzLmNvdW50ID09IDMpOworICAgIFtz
ZWdtZW50c1tub0xpc3RTZWdtZW50XSBhY2Nlc3NpYmlsaXR5U2V0T3ZlcnJpZGVWYWx1ZTpXZWJD
b3JlOjppbnNlcnRMaXN0VHlwZU5vbmUoKSBmb3JBdHRyaWJ1dGU6TlNBY2Nlc3NpYmlsaXR5RGVz
Y3JpcHRpb25BdHRyaWJ1dGVdOworICAgIFtzZWdtZW50c1t1bm9yZGVyZWRMaXN0U2VnbWVudF0g
YWNjZXNzaWJpbGl0eVNldE92ZXJyaWRlVmFsdWU6V2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVCdWxs
ZXRlZEFjY2Vzc2liaWxpdHlUaXRsZSgpIGZvckF0dHJpYnV0ZTpOU0FjY2Vzc2liaWxpdHlEZXNj
cmlwdGlvbkF0dHJpYnV0ZV07CisgICAgW3NlZ21lbnRzW29yZGVyZWRMaXN0U2VnbWVudF0gYWNj
ZXNzaWJpbGl0eVNldE92ZXJyaWRlVmFsdWU6V2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVOdW1iZXJl
ZEFjY2Vzc2liaWxpdHlUaXRsZSgpIGZvckF0dHJpYnV0ZTpOU0FjY2Vzc2liaWxpdHlEZXNjcmlw
dGlvbkF0dHJpYnV0ZV07CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisKKyAgICBzZWxm
LnZpZXcgPSBpbnNlcnRMaXN0Q29udHJvbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2
b2lkKV9zZWxlY3RMaXN0OihpZClzZW5kZXIKK3sKKyAgICBOU1ZpZXcgKmRvY3VtZW50VmlldyA9
IFtbW193ZWJWaWV3IF9zZWxlY3RlZE9yTWFpbkZyYW1lXSBmcmFtZVZpZXddIGRvY3VtZW50Vmll
d107CisgICAgaWYgKCFbZG9jdW1lbnRWaWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNs
YXNzXV0pCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkhUTUxWaWV3ICp3ZWJIVE1MVmlldyA9
IChXZWJIVE1MVmlldyAqKWRvY3VtZW50VmlldzsKKyAgICBOU1NlZ21lbnRlZENvbnRyb2wgKmlu
c2VydExpc3RDb250cm9sID0gKE5TU2VnbWVudGVkQ29udHJvbCAqKXNlbGYudmlldzsKKyAgICBz
d2l0Y2ggKGluc2VydExpc3RDb250cm9sLnNlbGVjdGVkU2VnbWVudCkgeworICAgIGNhc2Ugbm9M
aXN0U2VnbWVudDoKKyAgICAgICAgLy8gVGhlcmUgaXMgbm8gInJlbW92ZSBsaXN0IiBlZGl0IGNv
bW1hbmQsIGJ1dCBfaW5zZXJ0T3JkZXJlZExpc3QgYW5kIF9pbnNlcnRVbm9yZGVyZWRMaXN0IGJv
dGgKKyAgICAgICAgLy8gYmVoYXZlIGFzIHRvZ2dsZXMsIHNvIHdlIGNhbiBpbnZva2UgdGhlIGFw
cHJvcHJpYXRlIG1ldGhvZCBkZXBlbmRpbmcgb24gb3VyIF9jdXJyZW50TGlzdFR5cGUKKyAgICAg
ICAgLy8gdG8gcmVtb3ZlIGFuIGV4aXN0aW5nIGxpc3QuIFdlIGRvbid0IGhhdmUgdG8gZG8gYW55
dGhpbmcgaWYgX2N1cnJlbnRMaXN0VHlwZSBpcyBXZWJMaXN0VHlwZTo6Tm9uZS4KKyAgICAgICAg
aWYgKF9jdXJyZW50TGlzdFR5cGUgPT0gV2ViTGlzdFR5cGU6Ok9yZGVyZWQpCisgICAgICAgICAg
ICBbd2ViSFRNTFZpZXcgX2luc2VydE9yZGVyZWRMaXN0XTsKKyAgICAgICAgZWxzZSBpZiAoX2N1
cnJlbnRMaXN0VHlwZSA9PSBXZWJMaXN0VHlwZTo6VW5vcmRlcmVkKQorICAgICAgICAgICAgW3dl
YkhUTUxWaWV3IF9pbnNlcnRVbm9yZGVyZWRMaXN0XTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSB1bm9yZGVyZWRMaXN0U2VnbWVudDoKKyAgICAgICAgW3dlYkhUTUxWaWV3IF9pbnNlcnRVbm9y
ZGVyZWRMaXN0XTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcmRlcmVkTGlzdFNlZ21lbnQ6
CisgICAgICAgIFt3ZWJIVE1MVmlldyBfaW5zZXJ0T3JkZXJlZExpc3RdOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBbX3dlYlZpZXcgX2Rpc21pc3NUZXh0VG91Y2hCYXJQb3BvdmVySXRl
bVdpdGhJZGVudGlmaWVyOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRMaXN0XTsKK30KKwor
LSAodm9pZClzZXRDdXJyZW50TGlzdFR5cGU6KFdlYkxpc3RUeXBlKWxpc3RUeXBlCit7CisgICAg
TlNTZWdtZW50ZWRDb250cm9sICppbnNlcnRMaXN0Q29udHJvbCA9IChOU1NlZ21lbnRlZENvbnRy
b2wgKilzZWxmLnZpZXc7CisgICAgc3dpdGNoIChsaXN0VHlwZSkgeworICAgIGNhc2UgV2ViTGlz
dFR5cGU6Ok5vbmU6CisgICAgICAgIFtpbnNlcnRMaXN0Q29udHJvbCBzZXRTZWxlY3RlZDpZRVMg
Zm9yU2VnbWVudDpub0xpc3RTZWdtZW50XTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJM
aXN0VHlwZTo6T3JkZXJlZDoKKyAgICAgICAgW2luc2VydExpc3RDb250cm9sIHNldFNlbGVjdGVk
OllFUyBmb3JTZWdtZW50Om9yZGVyZWRMaXN0U2VnbWVudF07CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgV2ViTGlzdFR5cGU6OlVub3JkZXJlZDoKKyAgICAgICAgW2luc2VydExpc3RDb250cm9s
IHNldFNlbGVjdGVkOllFUyBmb3JTZWdtZW50OnVub3JkZXJlZExpc3RTZWdtZW50XTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgX2N1cnJlbnRMaXN0VHlwZSA9IGxpc3RUeXBlOworfQor
CitAZW5kCisKK0BpbnRlcmZhY2UgV2ViVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgOiBOU1Rl
eHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHsKK0Bwcml2YXRlCisgICAgQk9PTCBfdGV4dElzQm9s
ZDsKKyAgICBCT09MIF90ZXh0SXNJdGFsaWM7CisgICAgQk9PTCBfdGV4dElzVW5kZXJsaW5lZDsK
KyAgICBOU1RleHRBbGlnbm1lbnQgX2N1cnJlbnRUZXh0QWxpZ25tZW50OworICAgIFJldGFpblB0
cjxOU0NvbG9yPiBfdGV4dENvbG9yOworICAgIFJldGFpblB0cjxXZWJUZXh0TGlzdFRvdWNoQmFy
Vmlld0NvbnRyb2xsZXI+IF90ZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXI7CisgICAgV2Vi
VmlldyAqX3dlYlZpZXc7Cit9CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIHRleHRJc0Jv
bGQ7CitAcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCB0ZXh0SXNJdGFsaWM7CitAcHJvcGVydHkg
KG5vbmF0b21pYykgQk9PTCB0ZXh0SXNVbmRlcmxpbmVkOworQHByb3BlcnR5IChub25hdG9taWMp
IE5TVGV4dEFsaWdubWVudCBjdXJyZW50VGV4dEFsaWdubWVudDsKK0Bwcm9wZXJ0eSAobm9uYXRv
bWljLCByZXRhaW4sIHJlYWR3cml0ZSkgTlNDb2xvciAqdGV4dENvbG9yOworCistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhXZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldzsKK0BlbmQKKworQGltcGxl
bWVudGF0aW9uIFdlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyCisKK0BzeW50aGVzaXplIHRl
eHRJc0JvbGQ9X3RleHRJc0JvbGQ7CitAc3ludGhlc2l6ZSB0ZXh0SXNJdGFsaWM9X3RleHRJc0l0
YWxpYzsKK0BzeW50aGVzaXplIHRleHRJc1VuZGVybGluZWQ9X3RleHRJc1VuZGVybGluZWQ7CitA
c3ludGhlc2l6ZSBjdXJyZW50VGV4dEFsaWdubWVudD1fY3VycmVudFRleHRBbGlnbm1lbnQ7CisK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3Cit7Cisg
ICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAg
ICBfd2ViVmlldyA9IHdlYlZpZXc7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoTlNUb3Vj
aEJhckl0ZW0gKilpdGVtRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyCit7Cisg
ICAgTlNUb3VjaEJhckl0ZW0gKml0ZW0gPSBbc3VwZXIgaXRlbUZvcklkZW50aWZpZXI6aWRlbnRp
Zmllcl07CisgICAgQk9PTCBpc1RleHRGb3JtYXRJdGVtID0gW2lkZW50aWZpZXIgaXNFcXVhbFRv
U3RyaW5nOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRGb3JtYXRdOworCisgICAgaWYgKGlz
VGV4dEZvcm1hdEl0ZW0gfHwgW2lkZW50aWZpZXIgaXNFcXVhbFRvU3RyaW5nOk5TVG91Y2hCYXJJ
dGVtSWRlbnRpZmllclRleHRTdHlsZV0pCisgICAgICAgIHNlbGYudGV4dFN0eWxlLmFjdGlvbiA9
IEBzZWxlY3Rvcihfd2ViQ2hhbmdlVGV4dFN0eWxlOik7CisKKyAgICBpZiAoaXNUZXh0Rm9ybWF0
SXRlbSB8fCBbaWRlbnRpZmllciBpc0VxdWFsVG9TdHJpbmc6TlNUb3VjaEJhckl0ZW1JZGVudGlm
aWVyVGV4dEFsaWdubWVudF0pCisgICAgICAgIHNlbGYudGV4dEFsaWdubWVudHMuYWN0aW9uID0g
QHNlbGVjdG9yKF93ZWJDaGFuZ2VUZXh0QWxpZ25tZW50Oik7CisKKyAgICBOU0NvbG9yUGlja2Vy
VG91Y2hCYXJJdGVtICpjb2xvclBpY2tlckl0ZW0gPSBuaWw7CisgICAgaWYgKFtpZGVudGlmaWVy
IGlzRXF1YWxUb1N0cmluZzpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Q29sb3JQaWNrZXJd
ICYmIFtpdGVtIGlzS2luZE9mQ2xhc3M6W05TQ29sb3JQaWNrZXJUb3VjaEJhckl0ZW0gY2xhc3Nd
XSkKKyAgICAgICAgY29sb3JQaWNrZXJJdGVtID0gKE5TQ29sb3JQaWNrZXJUb3VjaEJhckl0ZW0g
KilpdGVtOworICAgIGlmIChpc1RleHRGb3JtYXRJdGVtKQorICAgICAgICBjb2xvclBpY2tlckl0
ZW0gPSBzZWxmLmNvbG9yUGlja2VySXRlbTsKKyAgICBpZiAoY29sb3JQaWNrZXJJdGVtKSB7Cisg
ICAgICAgIGNvbG9yUGlja2VySXRlbS50YXJnZXQgPSBzZWxmOworICAgICAgICBjb2xvclBpY2tl
ckl0ZW0uYWN0aW9uID0gQHNlbGVjdG9yKF93ZWJDaGFuZ2VDb2xvcjopOworICAgICAgICBjb2xv
clBpY2tlckl0ZW0uc2hvd3NBbHBoYSA9IE5POworICAgIH0KKworICAgIHJldHVybiBpdGVtOwor
fQorCistIChXZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgKil3ZWJUZXh0TGlzdFRv
dWNoQmFyVmlld0NvbnRyb2xsZXIKK3sKKyAgICByZXR1cm4gKFdlYlRleHRMaXN0VG91Y2hCYXJW
aWV3Q29udHJvbGxlciAqKXNlbGYudGV4dExpc3RWaWV3Q29udHJvbGxlcjsKK30KKworLSAodm9p
ZClzZXRUZXh0SXNCb2xkOihCT09MKWJvbGQKK3sKKyAgICBfdGV4dElzQm9sZCA9IGJvbGQ7Cisg
ICAgaWYgKFtzZWxmLnRleHRTdHlsZSBpc1NlbGVjdGVkRm9yU2VnbWVudDowXSAhPSBfdGV4dElz
Qm9sZCkKKyAgICAgICAgW3NlbGYudGV4dFN0eWxlIHNldFNlbGVjdGVkOl90ZXh0SXNCb2xkIGZv
clNlZ21lbnQ6MF07Cit9CisKKy0gKHZvaWQpc2V0VGV4dElzSXRhbGljOihCT09MKWl0YWxpYwor
eworICAgIF90ZXh0SXNJdGFsaWMgPSBpdGFsaWM7CisgICAgaWYgKFtzZWxmLnRleHRTdHlsZSBp
c1NlbGVjdGVkRm9yU2VnbWVudDoxXSAhPSBfdGV4dElzSXRhbGljKQorICAgICAgICBbc2VsZi50
ZXh0U3R5bGUgc2V0U2VsZWN0ZWQ6X3RleHRJc0l0YWxpYyBmb3JTZWdtZW50OjFdOworfQorCist
ICh2b2lkKXNldFRleHRJc1VuZGVybGluZWQ6KEJPT0wpdW5kZXJsaW5lZAoreworICAgIF90ZXh0
SXNVbmRlcmxpbmVkID0gdW5kZXJsaW5lZDsKKyAgICBpZiAoW3NlbGYudGV4dFN0eWxlIGlzU2Vs
ZWN0ZWRGb3JTZWdtZW50OjJdICE9IF90ZXh0SXNVbmRlcmxpbmVkKQorICAgICAgICBbc2VsZi50
ZXh0U3R5bGUgc2V0U2VsZWN0ZWQ6X3RleHRJc1VuZGVybGluZWQgZm9yU2VnbWVudDoyXTsKK30K
KworLSAodm9pZClfd2ViQ2hhbmdlVGV4dFN0eWxlOihpZClzZW5kZXIKK3sKKyAgICBpZiAoW3Nl
bGYudGV4dFN0eWxlIGlzU2VsZWN0ZWRGb3JTZWdtZW50OjBdICE9IF90ZXh0SXNCb2xkKSB7Cisg
ICAgICAgIF90ZXh0SXNCb2xkID0gIV90ZXh0SXNCb2xkOworICAgICAgICBbX3dlYlZpZXcgX2V4
ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZTpAIlRvZ2dsZUJvbGQiIHZhbHVlOkAiIl07CisgICAgfQor
CisgICAgaWYgKFtzZWxmLnRleHRTdHlsZSBpc1NlbGVjdGVkRm9yU2VnbWVudDoxXSAhPSBfdGV4
dElzSXRhbGljKSB7CisgICAgICAgIF90ZXh0SXNJdGFsaWMgPSAhX3RleHRJc0l0YWxpYzsKKyAg
ICAgICAgW193ZWJWaWV3IF9leGVjdXRlQ29yZUNvbW1hbmRCeU5hbWU6QCJUb2dnbGVJdGFsaWMi
IHZhbHVlOkAiIl07CisgICAgfQorCisgICAgaWYgKFtzZWxmLnRleHRTdHlsZSBpc1NlbGVjdGVk
Rm9yU2VnbWVudDoyXSAhPSBfdGV4dElzVW5kZXJsaW5lZCkgeworICAgICAgICBfdGV4dElzVW5k
ZXJsaW5lZCA9ICFfdGV4dElzVW5kZXJsaW5lZDsKKyAgICAgICAgW193ZWJWaWV3IF9leGVjdXRl
Q29yZUNvbW1hbmRCeU5hbWU6QCJUb2dnbGVVbmRlcmxpbmUiIHZhbHVlOkAiIl07CisgICAgfQor
fQorCistICh2b2lkKXNldEN1cnJlbnRUZXh0QWxpZ25tZW50OihOU1RleHRBbGlnbm1lbnQpYWxp
Z25tZW50Cit7CisgICAgX2N1cnJlbnRUZXh0QWxpZ25tZW50ID0gYWxpZ25tZW50OworICAgIFtz
ZWxmLnRleHRBbGlnbm1lbnRzIHNlbGVjdFNlZ21lbnRXaXRoVGFnOl9jdXJyZW50VGV4dEFsaWdu
bWVudF07Cit9CisKKy0gKHZvaWQpX3dlYkNoYW5nZVRleHRBbGlnbm1lbnQ6KGlkKXNlbmRlcgor
eworICAgIE5TVGV4dEFsaWdubWVudCBhbGlnbm1lbnQgPSAoTlNUZXh0QWxpZ25tZW50KVtzZWxm
LnRleHRBbGlnbm1lbnRzLmNlbGwgdGFnRm9yU2VnbWVudDpzZWxmLnRleHRBbGlnbm1lbnRzLnNl
bGVjdGVkU2VnbWVudF07CisgICAgc3dpdGNoIChhbGlnbm1lbnQpIHsKKyAgICBjYXNlIE5TVGV4
dEFsaWdubWVudExlZnQ6IHsKKyAgICAgICAgX2N1cnJlbnRUZXh0QWxpZ25tZW50ID0gTlNUZXh0
QWxpZ25tZW50TGVmdDsKKyAgICAgICAgW193ZWJWaWV3IGFsaWduTGVmdDpzZW5kZXJdOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBOU1RleHRBbGlnbm1lbnRSaWdodDogeworICAg
ICAgICBfY3VycmVudFRleHRBbGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRSaWdodDsKKyAgICAg
ICAgW193ZWJWaWV3IGFsaWduUmlnaHQ6c2VuZGVyXTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgTlNUZXh0QWxpZ25tZW50Q2VudGVyOiB7CisgICAgICAgIF9jdXJyZW50VGV4dEFs
aWdubWVudCA9IE5TVGV4dEFsaWdubWVudENlbnRlcjsKKyAgICAgICAgW193ZWJWaWV3IGFsaWdu
Q2VudGVyOnNlbmRlcl07CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIE5TVGV4dEFs
aWdubWVudEp1c3RpZmllZDogeworICAgICAgICBfY3VycmVudFRleHRBbGlnbm1lbnQgPSBOU1Rl
eHRBbGlnbm1lbnRKdXN0aWZpZWQ7CisgICAgICAgIFtfd2ViVmlldyBhbGlnbkp1c3RpZmllZDpz
ZW5kZXJdOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgW193ZWJWaWV3IF9kaXNtaXNzVGV4dFRvdWNoQmFyUG9wb3Zlckl0
ZW1XaXRoSWRlbnRpZmllcjpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0QWxpZ25tZW50XTsK
K30KKworLSAoTlNDb2xvciAqKXRleHRDb2xvcgoreworICAgIHJldHVybiBfdGV4dENvbG9yLmdl
dCgpOworfQorCistICh2b2lkKXNldFRleHRDb2xvcjooTlNDb2xvciAqKWNvbG9yCit7CisgICAg
X3RleHRDb2xvciA9IGNvbG9yOworICAgIHNlbGYuY29sb3JQaWNrZXJJdGVtLmNvbG9yID0gX3Rl
eHRDb2xvci5nZXQoKTsKK30KKworLSAodm9pZClfd2ViQ2hhbmdlQ29sb3I6KGlkKXNlbmRlcgor
eworICAgIF90ZXh0Q29sb3IgPSBzZWxmLmNvbG9yUGlja2VySXRlbS5jb2xvcjsKKyAgICBbX3dl
YlZpZXcgX2V4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZTpAIkZvcmVDb2xvciIgdmFsdWU6IFdlYkNv
cmU6OmNvbG9yRnJvbU5TQ29sb3IoX3RleHRDb2xvci5nZXQoKSkuc2VyaWFsaXplZCgpXTsKK30K
KworLSAoTlNWaWV3Q29udHJvbGxlciAqKXRleHRMaXN0Vmlld0NvbnRyb2xsZXIKK3sKKyAgICBp
ZiAoIV90ZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIpCisgICAgICAgIF90ZXh0TGlzdFRv
dWNoQmFyVmlld0NvbnRyb2xsZXIgPSBhZG9wdE5TKFtbV2ViVGV4dExpc3RUb3VjaEJhclZpZXdD
b250cm9sbGVyIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6X3dlYlZpZXddKTsKKyAgICByZXR1cm4g
X3RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlci5nZXQoKTsKK30KKworQGVuZAorCisjZW5k
aWYgLy8gSEFWRShUT1VDSF9CQVIpCisKIEBpbXBsZW1lbnRhdGlvbiBXZWJWaWV3IChBbGxXZWJW
aWV3cykKIAogc3RhdGljIENGU2V0Q2FsbEJhY2tzIE5vblJldGFpbmluZ1NldENhbGxiYWNrcyA9
IHsKQEAgLTk3MCw3ICsxMjYxLDcgQEAgLSAodm9pZClfY29tbW9uSW5pdGlhbGl6YXRpb25XaXRo
RnJhbWVOYQogICAgIH0KICNlbmRpZgogCi0gICAgW3NlbGYgdXBkYXRlV2ViVmlld0FkZGl0aW9u
c107CisgICAgW3NlbGYgdXBkYXRlVG91Y2hCYXJdOwogCiAjaWYgIVBMQVRGT1JNKElPUykKICAg
ICBzdGF0aWMgYm9vbCBkaWRPbmVUaW1lSW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKQEAgLTQ2OTIs
NiArNDk4Myw0NSBAQCAtICh2b2lkKV9zZXRGb250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwCiAg
ICAgICAgIF9wcml2YXRlLT5wYWdlLT5zZXR0aW5ncygpLnNldEZvbnRGYWxsYmFja1ByZWZlcnNQ
aWN0b2dyYXBocyhmbGFnKTsKIH0KIAorI2lmIEhBVkUoVE9VQ0hfQkFSKQorCistICh2b2lkKXNo
b3dDYW5kaWRhdGVzOihOU0FycmF5PE5TVGV4dENoZWNraW5nUmVzdWx0ICo+ICopY2FuZGlkYXRl
cyBmb3JTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIGluUmVjdDooTlNSZWN0KXJlY3RPZlR5cGVk
U3RyaW5nIGZvclNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UgdmlldzooTlNWaWV3ICopdmll
dyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNUZXh0Q2hlY2tpbmdSZXN1bHQgKmFjY2Vw
dGVkQ2FuZGlkYXRlKSljb21wbGV0aW9uQmxvY2sKK3sKKyAgICBbc2VsZi5jYW5kaWRhdGVMaXN0
IHNldENhbmRpZGF0ZXM6Y2FuZGlkYXRlcyBmb3JTZWxlY3RlZFJhbmdlOnJhbmdlIGluU3RyaW5n
OnN0cmluZ107Cit9CisKKy0gKEJPT0wpc2hvdWxkUmVxdWVzdENhbmRpZGF0ZXMKK3sKKyAgICBG
cmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfc2VsZWN0ZWRPck1haW5GcmFtZV0pOworICAg
IGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm4gTk87CisKKyAgICByZXR1cm4gIWNvcmVG
cmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSAmJiBzZWxm
LmNhbmRpZGF0ZUxpc3QuY2FuZGlkYXRlTGlzdFZpc2libGU7Cit9CisKKy0gKHZvaWQpZm9yY2VS
ZXF1ZXN0Q2FuZGlkYXRlc0ZvclRlc3RpbmcKK3sKKyAgICBfcHJpdmF0ZS0+X2NhbkNyZWF0ZVRv
dWNoQmFycyA9IFlFUzsKKyAgICBbc2VsZiB1cGRhdGVUb3VjaEJhcl07Cit9CisKKyNlbHNlCisK
Ky0gKHZvaWQpc2hvd0NhbmRpZGF0ZXM6KE5TQXJyYXkgKiljYW5kaWRhdGVzIGZvclN0cmluZzoo
TlNTdHJpbmcgKilzdHJpbmcgaW5SZWN0OihOU1JlY3QpcmVjdE9mVHlwZWRTdHJpbmcgZm9yU2Vs
ZWN0ZWRSYW5nZTooTlNSYW5nZSlyYW5nZSB2aWV3OihOU1ZpZXcgKil2aWV3IGNvbXBsZXRpb25I
YW5kbGVyOih2b2lkICheKShOU1RleHRDaGVja2luZ1Jlc3VsdCAqYWNjZXB0ZWRDYW5kaWRhdGUp
KWNvbXBsZXRpb25CbG9jaworeworfQorCistICh2b2lkKWZvcmNlUmVxdWVzdENhbmRpZGF0ZXNG
b3JUZXN0aW5nCit7Cit9CisKKy0gKEJPT0wpc2hvdWxkUmVxdWVzdENhbmRpZGF0ZXMKK3sKKyAg
ICByZXR1cm4gTk87Cit9CisKKyNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikKKwogQGVuZAogCiBA
aW1wbGVtZW50YXRpb24gX1dlYlNhZmVGb3J3YXJkZXIKQEAgLTQ4MDQsNiArNTEzNCwxMSBAQCAt
IChOU01ldGhvZFNpZ25hdHVyZSAqKW1ldGhvZFNpZ25hdHVyZUZvCiBAZW5kCiAjZW5kaWYKIAor
I2lmIEhBVkUoVE9VQ0hfQkFSKQorQGludGVyZmFjZSBXZWJWaWV3ICgpIDxOU0NhbmRpZGF0ZUxp
c3RUb3VjaEJhckl0ZW1EZWxlZ2F0ZSwgTlNUb3VjaEJhckRlbGVnYXRlLCBOU1RvdWNoQmFyUHJv
dmlkZXI+CitAZW5kCisjZW5kaWYKKwogQGltcGxlbWVudGF0aW9uIFdlYlZpZXcKIAogKyAodm9p
ZClpbml0aWFsaXplCkBAIC02NDg4LDYgKzY4MjMsODcgQEAgLSAoTlNWaWV3ICopcHJldmlvdXNW
YWxpZEtleVZpZXcKICAgICByZXR1cm4gW3ByZXZpb3VzVmlldyBwcmV2aW91c1ZhbGlkS2V5Vmll
d107CiB9CiAKKyNpZiBIQVZFKFRPVUNIX0JBUikKKworQGR5bmFtaWMgdG91Y2hCYXI7CisKKy0g
KE5TVG91Y2hCYXIgKiltYWtlVG91Y2hCYXIKK3sKKyAgICBpZiAoIV9wcml2YXRlLT5fY2FuQ3Jl
YXRlVG91Y2hCYXJzKSB7CisgICAgICAgIF9wcml2YXRlLT5fY2FuQ3JlYXRlVG91Y2hCYXJzID0g
WUVTOworICAgICAgICBbc2VsZiB1cGRhdGVUb3VjaEJhcl07CisgICAgfQorICAgIHJldHVybiBf
cHJpdmF0ZS0+X2N1cnJlbnRUb3VjaEJhci5nZXQoKTsKK30KKworLSAoTlNUb3VjaEJhckl0ZW0g
Kil0b3VjaEJhcjooTlNUb3VjaEJhciAqKXRvdWNoQmFyIG1ha2VJdGVtRm9ySWRlbnRpZmllcjoo
TlNTdHJpbmcgKilpZGVudGlmaWVyCit7CisgICAgaWYgKHRvdWNoQmFyID09IF9wcml2YXRlLT5f
cmljaFRleHRUb3VjaEJhciB8fCB0b3VjaEJhciA9PSBfcHJpdmF0ZS0+X3BsYWluVGV4dFRvdWNo
QmFyKQorICAgICAgICByZXR1cm4gW19wcml2YXRlLT5fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xs
ZXIgaXRlbUZvcklkZW50aWZpZXI6aWRlbnRpZmllcl07CisKKyAgICByZXR1cm4gbmlsOworfQor
CitzdGF0aWMgVGV4dENoZWNraW5nUmVzdWx0IHRleHRDaGVja2luZ1Jlc3VsdEZyb21OU1RleHRD
aGVja2luZ1Jlc3VsdChOU1RleHRDaGVja2luZ1Jlc3VsdCAqbnNSZXN1bHQpCit7CisgICAgV2Vi
Q29yZTo6VGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKKworICAgIHN3aXRjaCAoW25zUmVzdWx0
IHJlc3VsdFR5cGVdKSB7CisgICAgY2FzZSBOU1RleHRDaGVja2luZ1R5cGVTcGVsbGluZzoKKyAg
ICAgICAgcmVzdWx0LnR5cGUgPSBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmc7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgTlNUZXh0Q2hlY2tpbmdUeXBlUmVwbGFjZW1lbnQ6Cisg
ICAgICAgIHJlc3VsdC50eXBlID0gV2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZVJlcGxhY2VtZW50
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5TVGV4dENoZWNraW5nVHlwZUNvcnJlY3Rpb246
CisgICAgICAgIHJlc3VsdC50eXBlID0gV2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZUNvcnJlY3Rp
b247CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJlc3VsdC50eXBlID0g
V2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZU5vbmU7CisgICAgfQorCisgICAgTlNSYW5nZSByZXN1
bHRSYW5nZSA9IG5zUmVzdWx0LnJhbmdlOworICAgIHJlc3VsdC5sb2NhdGlvbiA9IHJlc3VsdFJh
bmdlLmxvY2F0aW9uOworICAgIHJlc3VsdC5sZW5ndGggPSByZXN1bHRSYW5nZS5sZW5ndGg7Cisg
ICAgcmVzdWx0LnJlcGxhY2VtZW50ID0gbnNSZXN1bHQucmVwbGFjZW1lbnRTdHJpbmc7CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCistICh2b2lkKWNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW06
KE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSAqKWFuSXRlbSBlbmRTZWxlY3RpbmdDYW5kaWRh
dGVBdEluZGV4OihOU0ludGVnZXIpaW5kZXgKK3sKKyAgICBpZiAoaW5kZXggPT0gTlNOb3RGb3Vu
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGFuSXRlbSAhPSBzZWxmLmNhbmRpZGF0ZUxp
c3QpCisgICAgICAgIHJldHVybjsKKworICAgIE5TQXJyYXkgKmNhbmRpZGF0ZXMgPSBhbkl0ZW0u
Y2FuZGlkYXRlczsKKyAgICBpZiAoKE5TVUludGVnZXIpaW5kZXggPj0gY2FuZGlkYXRlcy5jb3Vu
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWQgY2FuZGlkYXRlID0gY2FuZGlkYXRlc1tpbmRl
eF07CisgICAgQVNTRVJUKFtjYW5kaWRhdGUgaXNLaW5kT2ZDbGFzczpbTlNUZXh0Q2hlY2tpbmdS
ZXN1bHQgY2xhc3NdXSk7CisKKyAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoc2VsZi5f
c2VsZWN0ZWRPck1haW5GcmFtZSkpCisgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCkuY2xpZW50
KCktPmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlV2l0aFNvZnRTcGFjZXModGV4dENoZWNraW5nUmVz
dWx0RnJvbU5TVGV4dENoZWNraW5nUmVzdWx0KChOU1RleHRDaGVja2luZ1Jlc3VsdCAqKWNhbmRp
ZGF0ZSkpOworfQorCistICh2b2lkKWNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW06KE5TQ2FuZGlk
YXRlTGlzdFRvdWNoQmFySXRlbSAqKWFuSXRlbSBjaGFuZ2VkQ2FuZGlkYXRlTGlzdFZpc2liaWxp
dHk6KEJPT0wpaXNWaXNpYmxlCit7CisgICAgaWYgKGFuSXRlbSAhPSBzZWxmLmNhbmRpZGF0ZUxp
c3QpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChpc1Zpc2libGUpIHsKKyAgICAgICAgaWYg
KEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXSkpCisg
ICAgICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT5yZXF1ZXN0Q2FuZGlkYXRl
c0ZvclNlbGVjdGlvbihjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICB9
CisKKyAgICBbc2VsZiB1cGRhdGVUb3VjaEJhcl07Cit9CisKKyNlbmRpZiAvLyBIQVZFKFRPVUNI
X0JBUikKKwogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV2ViVmlldyAoV2ViSUJBY3Rpb25zKQpA
QCAtNjc0Niw0OCArNzE2Miw2IEBAIC0gKEJPT0wpdmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbToo
aWQgPE4KIAogQGVuZAogCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05f
TUlOX1JFUVVJUkVEID49IDEwMTIwMCAmJiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2ltcG9y
dCA8V2ViS2l0QWRkaXRpb25zL1dlYlZpZXdBZGRpdGlvbnMubW0+Ci0jZWxzZQotQGltcGxlbWVu
dGF0aW9uIFdlYlZpZXcgKFdlYlVwZGF0ZVdlYlZpZXdBZGRpdGlvbnMpCi0KLS0gKHZvaWQpdXBk
YXRlV2ViVmlld0FkZGl0aW9ucwotewotfQotCi0tICh2b2lkKXByZXBhcmVGb3JNb3VzZURvd24K
LXsKLX0KLQotLSAodm9pZClwcmVwYXJlRm9yTW91c2VVcAotewotfQotCi0tICh2b2lkKXNob3dD
YW5kaWRhdGVzOihOU0FycmF5ICopY2FuZGlkYXRlcyBmb3JTdHJpbmc6KE5TU3RyaW5nICopc3Ry
aW5nIGluUmVjdDooTlNSZWN0KXJlY3RPZlR5cGVkU3RyaW5nIGZvclNlbGVjdGVkUmFuZ2U6KE5T
UmFuZ2UpcmFuZ2UgdmlldzooTlNWaWV3ICopdmlldyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAo
XikoTlNUZXh0Q2hlY2tpbmdSZXN1bHQgKmFjY2VwdGVkQ2FuZGlkYXRlKSljb21wbGV0aW9uQmxv
Y2sKLXsKLX0KLQotLSAodm9pZClmb3JjZVJlcXVlc3RDYW5kaWRhdGVzRm9yVGVzdGluZwotewot
fQotCi0tIChCT09MKXNob3VsZFJlcXVlc3RDYW5kaWRhdGVzCi17Ci0gICAgcmV0dXJuIE5POwot
fQotCi0tICh2b2lkKXdlYlZpZXdBZGRpdGlvbnNXaWxsRGVzdHJveVZpZXcKLXsKLX0KLQotLSAo
aWQpY2FuZGlkYXRlTGlzdAotewotICAgIHJldHVybiBuaWw7Ci19Ci0KLUBlbmQKLSNlbmRpZiAv
LyBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAx
MjAwICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0KIEBpbXBsZW1lbnRhdGlvbiBXZWJWaWV3
IChXZWJQZW5kaW5nUHVibGljKQogCiAtICh2b2lkKXNjaGVkdWxlSW5SdW5Mb29wOihOU1J1bkxv
b3AgKilydW5Mb29wIGZvck1vZGU6KE5TU3RyaW5nICopbW9kZQpAQCAtODY1Niw3ICs5MDMwLDcg
QEAgLSAodm9pZClfc2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlckZvcgogICAgIGlmICghX3By
aXZhdGUtPnBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkKICAgICAgICAgX3ByaXZhdGUtPnBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZSA9IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6Y3Jl
YXRlKCpfcHJpdmF0ZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwpOwogCi0gICAgW3NlbGYgdXBkYXRl
V2ViVmlld0FkZGl0aW9uc107CisgICAgW3NlbGYgdXBkYXRlVG91Y2hCYXJdOwogfQogCiAtICh2
b2lkKV9jbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyCkBAIC04NjY5LDcgKzkwNDMsNyBAQCAt
ICh2b2lkKV9jbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyCiAKICAgICBfcHJpdmF0ZS0+cGxh
eWJhY2tTZXNzaW9uTW9kZWwgPSBudWxscHRyOwogICAgIF9wcml2YXRlLT5wbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2UgPSBudWxscHRyOwotICAgIFtzZWxmIHVwZGF0ZVdlYlZpZXdBZGRpdGlvbnNd
OworICAgIFtzZWxmIHVwZGF0ZVRvdWNoQmFyXTsKIH0KICNlbmRpZiAvLyBQTEFURk9STShNQUMp
ICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKICNlbmRpZiAvLyBFTkFCTEUoVklE
RU8pCkBAIC04ODk4LDYgKzkyNzIsMzQyIEBAIC0gKHZvaWQpX3NldE1vY2tNZWRpYVBsYXliYWNr
VGFyZ2V0UGlja2UKIH0KICNlbmRpZgogCisjaWYgSEFWRShUT1VDSF9CQVIpCistICh2b2lkKV9k
aXNtaXNzVGV4dFRvdWNoQmFyUG9wb3Zlckl0ZW1XaXRoSWRlbnRpZmllcjooTlNTdHJpbmcgKilp
ZGVudGlmaWVyCit7CisgICAgTlNUb3VjaEJhckl0ZW0gKmZvdW5kSXRlbSA9IG5pbDsKKyAgICBm
b3IgKE5TVG91Y2hCYXJJdGVtICppdGVtIGluIHNlbGYudGV4dFRvdWNoQmFyLml0ZW1zKSB7Cisg
ICAgICAgIGlmIChbaXRlbS5pZGVudGlmaWVyIGlzRXF1YWxUb1N0cmluZzppZGVudGlmaWVyXSkg
eworICAgICAgICAgICAgZm91bmRJdGVtID0gaXRlbTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKFtpdGVtLmlkZW50aWZpZXIgaXNFcXVhbFRvU3RyaW5nOk5T
VG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRGb3JtYXRdKSB7CisgICAgICAgICAgICBmb3IgKE5T
VG91Y2hCYXJJdGVtICpjaGlsZEl0ZW0gaW4gKChOU0dyb3VwVG91Y2hCYXJJdGVtICopaXRlbSku
Z3JvdXBUb3VjaEJhci5pdGVtcykgeworICAgICAgICAgICAgICAgIGlmIChbY2hpbGRJdGVtLmlk
ZW50aWZpZXIgaXNFcXVhbFRvU3RyaW5nOmlkZW50aWZpZXJdKSB7CisgICAgICAgICAgICAgICAg
ICAgIGZvdW5kSXRlbSA9IGNoaWxkSXRlbTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoW2ZvdW5kSXRlbSBpc0tpbmRPZkNsYXNzOltOU1BvcG92
ZXJUb3VjaEJhckl0ZW0gY2xhc3NdXSkKKyAgICAgICAgWyhOU1BvcG92ZXJUb3VjaEJhckl0ZW0g
Kilmb3VuZEl0ZW0gZGlzbWlzc1BvcG92ZXI6bmlsXTsKK30KKworLSAoTlNBcnJheTxOU1N0cmlu
ZyAqPiAqKV90ZXh0VG91Y2hCYXJDdXN0b21pemF0aW9uQWxsb3dlZElkZW50aWZpZXJzCit7Cisg
ICAgcmV0dXJuIEBbIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckNoYXJhY3RlclBpY2tlciwgTlNU
b3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dENvbG9yUGlja2VyLCBOU1RvdWNoQmFySXRlbUlkZW50
aWZpZXJUZXh0U3R5bGUsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRBbGlnbm1lbnQsIE5T
VG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRMaXN0LCBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJG
bGV4aWJsZVNwYWNlIF07Cit9CisKKy0gKE5TQXJyYXk8TlNTdHJpbmcgKj4gKilfcGxhaW5UZXh0
VG91Y2hCYXJDdXN0b21pemF0aW9uRGVmYXVsdEl0ZW1JZGVudGlmaWVycworeworICAgIHJldHVy
biBAWyBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJDaGFyYWN0ZXJQaWNrZXIsIE5TVG91Y2hCYXJJ
dGVtSWRlbnRpZmllckNhbmRpZGF0ZUxpc3QgXTsKK30KKworLSAoTlNBcnJheTxOU1N0cmluZyAq
PiAqKV9yaWNoVGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkRlZmF1bHRJdGVtSWRlbnRpZmllcnMK
K3sKKyAgICByZXR1cm4gQFsgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyQ2hhcmFjdGVyUGlja2Vy
LCBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Rm9ybWF0LCBOU1RvdWNoQmFySXRlbUlkZW50
aWZpZXJDYW5kaWRhdGVMaXN0IF07Cit9CisKKy0gKHZvaWQpdG91Y2hCYXJEaWRFeGl0Q3VzdG9t
aXphdGlvbjooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBfcHJpdmF0ZS0+
X2lzQ3VzdG9taXppbmdUb3VjaEJhciA9IE5POworICAgIFtzZWxmIHVwZGF0ZVRvdWNoQmFyXTsK
K30KKworLSAodm9pZCl0b3VjaEJhcldpbGxFbnRlckN1c3RvbWl6YXRpb246KE5TTm90aWZpY2F0
aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgX3ByaXZhdGUtPl9pc0N1c3RvbWl6aW5nVG91Y2hC
YXIgPSBZRVM7Cit9CisKKy0gKHZvaWQpZGlkQ2hhbmdlQXV0b21hdGljVGV4dENvbXBsZXRpb246
KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgaWYgKF9wcml2YXRlLT5fcmlj
aFRleHRUb3VjaEJhcikKKyAgICAgICAgW3NlbGYgc2V0VXBUZXh0VG91Y2hCYXI6X3ByaXZhdGUt
Pl9yaWNoVGV4dFRvdWNoQmFyLmdldCgpXTsKKworICAgIGlmIChfcHJpdmF0ZS0+X3BsYWluVGV4
dFRvdWNoQmFyKQorICAgICAgICBbc2VsZiBzZXRVcFRleHRUb3VjaEJhcjpfcHJpdmF0ZS0+X3Bs
YWluVGV4dFRvdWNoQmFyLmdldCgpXTsKKworICAgIFtzZWxmIHVwZGF0ZVRvdWNoQmFyXTsKK30K
KworLSAodm9pZClzZXRVcFRleHRUb3VjaEJhcjooTlNUb3VjaEJhciAqKXRleHRUb3VjaEJhcgor
eworICAgIEJPT0wgaXNSaWNoVGV4dFRvdWNoQmFyID0gdGV4dFRvdWNoQmFyID09IF9wcml2YXRl
LT5fcmljaFRleHRUb3VjaEJhcjsKKyAgICBbdGV4dFRvdWNoQmFyIHNldERlbGVnYXRlOnNlbGZd
OworICAgIFt0ZXh0VG91Y2hCYXIgc2V0RGVmYXVsdEl0ZW1zOltOU011dGFibGVTZXQgc2V0V2l0
aE9iamVjdDppc1JpY2hUZXh0VG91Y2hCYXIgPyBfcHJpdmF0ZS0+X3JpY2hUZXh0Q2FuZGlkYXRl
TGlzdFRvdWNoQmFySXRlbS5nZXQoKSA6IF9wcml2YXRlLT5fcGxhaW5UZXh0Q2FuZGlkYXRlTGlz
dFRvdWNoQmFySXRlbS5nZXQoKV1dOworICAgIFt0ZXh0VG91Y2hCYXIgc2V0Q3VzdG9taXphdGlv
bkFsbG93ZWRJdGVtSWRlbnRpZmllcnM6W3NlbGYgX3RleHRUb3VjaEJhckN1c3RvbWl6YXRpb25B
bGxvd2VkSWRlbnRpZmllcnNdXTsKKworICAgIE5TQXJyYXk8TlNTdHJpbmcgKj4gKmRlZmF1bHRJ
ZGVudGlmaWVycyA9IGlzUmljaFRleHRUb3VjaEJhciA/IFtzZWxmIF9yaWNoVGV4dFRvdWNoQmFy
Q3VzdG9taXphdGlvbkRlZmF1bHRJdGVtSWRlbnRpZmllcnNdIDogW3NlbGYgX3BsYWluVGV4dFRv
dWNoQmFyQ3VzdG9taXphdGlvbkRlZmF1bHRJdGVtSWRlbnRpZmllcnNdOworICAgIFt0ZXh0VG91
Y2hCYXIgc2V0Q3VzdG9taXphdGlvbkRlZmF1bHRJdGVtSWRlbnRpZmllcnM6ZGVmYXVsdElkZW50
aWZpZXJzXTsKKworICAgIGlmIChOU0dyb3VwVG91Y2hCYXJJdGVtICp0ZXh0Rm9ybWF0SXRlbSA9
IChOU0dyb3VwVG91Y2hCYXJJdGVtICopW3RleHRUb3VjaEJhciBpdGVtRm9ySWRlbnRpZmllcjpO
U1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Rm9ybWF0XSkKKyAgICAgICAgdGV4dEZvcm1hdEl0
ZW0uZ3JvdXBUb3VjaEJhci5jdXN0b21pemF0aW9uSWRlbnRpZmllciA9IEAiV2ViVGV4dEZvcm1h
dFRvdWNoQmFyIjsKK30KKworLSAoQk9PTClfaXNSaWNobHlFZGl0YWJsZQoreworICAgIE5TVmll
dyAqZG9jdW1lbnRWaWV3ID0gc2VsZi5fc2VsZWN0ZWRPck1haW5GcmFtZS5mcmFtZVZpZXcuZG9j
dW1lbnRWaWV3OworICAgIGlmICghW2RvY3VtZW50VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1M
VmlldyBjbGFzc11dKQorICAgICAgICByZXR1cm4gTk87CisKKyAgICBXZWJIVE1MVmlldyAqd2Vi
SFRNTFZpZXcgPSAoV2ViSFRNTFZpZXcgKilkb2N1bWVudFZpZXc7CisgICAgcmV0dXJuIHdlYkhU
TUxWaWV3Ll9pc0VkaXRhYmxlICYmIHdlYkhUTUxWaWV3Ll9jYW5FZGl0UmljaGx5OworfQorCist
IChOU1RvdWNoQmFyICopdGV4dFRvdWNoQmFyCit7CisgICAgaWYgKHNlbGYuX2lzUmljaGx5RWRp
dGFibGUpCisgICAgICAgIHJldHVybiBfcHJpdmF0ZS0+X3JpY2hUZXh0VG91Y2hCYXIuZ2V0KCk7
CisKKyAgICByZXR1cm4gX3ByaXZhdGUtPl9wbGFpblRleHRUb3VjaEJhci5nZXQoKTsKK30KKwor
LSAodm9pZCl1cGRhdGVUZXh0VG91Y2hCYXIKK3sKKyAgICBpZiAoX3ByaXZhdGUtPl9pc0RlZmVy
cmluZ1RleHRUb3VjaEJhclVwZGF0ZXMpIHsKKyAgICAgICAgX3ByaXZhdGUtPl9uZWVkc0RlZmVy
cmVkVGV4dFRvdWNoQmFyVXBkYXRlID0gWUVTOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgTlNWaWV3ICpkb2N1bWVudFZpZXcgPSBbW1tzZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXSBm
cmFtZVZpZXddIGRvY3VtZW50Vmlld107CisgICAgaWYgKCFbZG9jdW1lbnRWaWV3IGlzS2luZE9m
Q2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBX
ZWJIVE1MVmlldyAqd2ViSFRNTFZpZXcgPSAoV2ViSFRNTFZpZXcgKilkb2N1bWVudFZpZXc7Cisg
ICAgaWYgKCFbd2ViSFRNTFZpZXcgX2lzRWRpdGFibGVdKQorICAgICAgICByZXR1cm47CisKKyAg
ICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfc2VsZWN0ZWRPck1haW5GcmFtZV0pOwor
ICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoX3ByaXZhdGUt
Pl9pc1VwZGF0aW5nVGV4dFRvdWNoQmFyKQorICAgICAgICByZXR1cm47CisKKyAgICBUZW1wb3Jh
cnlDaGFuZ2U8Qk9PTD4gaXNVcGRhdGluZ1RleHRUb3VjaEJhcihfcHJpdmF0ZS0+X2lzVXBkYXRp
bmdUZXh0VG91Y2hCYXIsIFlFUyk7CisKKyAgICBpZiAoIV9wcml2YXRlLT5fdGV4dFRvdWNoQmFy
SXRlbUNvbnRyb2xsZXIpCisgICAgICAgIF9wcml2YXRlLT5fdGV4dFRvdWNoQmFySXRlbUNvbnRy
b2xsZXIgPSBhZG9wdE5TKFtbV2ViVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgYWxsb2NdIGlu
aXRXaXRoV2ViVmlldzpzZWxmXSk7CisKKyAgICBpZiAoIV9wcml2YXRlLT5fc3RhcnRlZExpc3Rl
bmluZ1RvQ3VzdG9taXphdGlvbkV2ZW50cykgeworICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2Vu
dGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHRv
dWNoQmFyRGlkRXhpdEN1c3RvbWl6YXRpb246KSBuYW1lOk5TVG91Y2hCYXJEaWRFeGl0Q3VzdG9t
aXphdGlvbiBvYmplY3Q6bmlsXTsKKyAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZh
dWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih0b3VjaEJhcldp
bGxFbnRlckN1c3RvbWl6YXRpb246KSBuYW1lOk5TVG91Y2hCYXJXaWxsRW50ZXJDdXN0b21pemF0
aW9uIG9iamVjdDpuaWxdOworICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRD
ZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKGRpZENoYW5nZUF1dG9t
YXRpY1RleHRDb21wbGV0aW9uOikgbmFtZTpOU1NwZWxsQ2hlY2tlckRpZENoYW5nZUF1dG9tYXRp
Y1RleHRDb21wbGV0aW9uTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOworICAgICAgICBfcHJpdmF0
ZS0+X3N0YXJ0ZWRMaXN0ZW5pbmdUb0N1c3RvbWl6YXRpb25FdmVudHMgPSBZRVM7CisgICAgfQor
CisgICAgaWYgKCFfcHJpdmF0ZS0+X3BsYWluVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0g
fHwgIV9wcml2YXRlLT5fcmljaFRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtKSB7CisgICAg
ICAgIF9wcml2YXRlLT5fcGxhaW5UZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSA9IGFkb3B0
TlMoW1tOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gYWxsb2NdIGluaXRXaXRoSWRlbnRpZmll
cjpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJDYW5kaWRhdGVMaXN0XSk7CisgICAgICAgIFtfcHJp
dmF0ZS0+X3BsYWluVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gc2V0RGVsZWdhdGU6c2Vs
Zl07CisgICAgICAgIF9wcml2YXRlLT5fcmljaFRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVt
ID0gYWRvcHROUyhbW05TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSBhbGxvY10gaW5pdFdpdGhJ
ZGVudGlmaWVyOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckNhbmRpZGF0ZUxpc3RdKTsKKyAgICAg
ICAgW19wcml2YXRlLT5fcmljaFRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtIHNldERlbGVn
YXRlOnNlbGZdOworICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT5yZXF1ZXN0
Q2FuZGlkYXRlc0ZvclNlbGVjdGlvbihjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
KTsKKyAgICB9CisKKyAgICBpZiAoIV9wcml2YXRlLT5fcmljaFRleHRUb3VjaEJhcikgeworICAg
ICAgICBfcHJpdmF0ZS0+X3JpY2hUZXh0VG91Y2hCYXIgPSBhZG9wdE5TKFtbTlNUb3VjaEJhciBh
bGxvY10gaW5pdF0pOworICAgICAgICBbc2VsZiBzZXRVcFRleHRUb3VjaEJhcjpfcHJpdmF0ZS0+
X3JpY2hUZXh0VG91Y2hCYXIuZ2V0KCldOworICAgICAgICBbX3ByaXZhdGUtPl9yaWNoVGV4dFRv
dWNoQmFyIHNldEN1c3RvbWl6YXRpb25JZGVudGlmaWVyOkAiV2ViUmljaFRleHRUb3VjaEJhciJd
OworICAgIH0KKworICAgIGlmICghX3ByaXZhdGUtPl9wbGFpblRleHRUb3VjaEJhcikgeworICAg
ICAgICBfcHJpdmF0ZS0+X3BsYWluVGV4dFRvdWNoQmFyID0gYWRvcHROUyhbW05TVG91Y2hCYXIg
YWxsb2NdIGluaXRdKTsKKyAgICAgICAgW3NlbGYgc2V0VXBUZXh0VG91Y2hCYXI6X3ByaXZhdGUt
Pl9wbGFpblRleHRUb3VjaEJhci5nZXQoKV07CisgICAgICAgIFtfcHJpdmF0ZS0+X3BsYWluVGV4
dFRvdWNoQmFyIHNldEN1c3RvbWl6YXRpb25JZGVudGlmaWVyOkAiV2ViUGxhaW5UZXh0VG91Y2hC
YXIiXTsKKyAgICB9CisKKyAgICBpZiAoW05TU3BlbGxDaGVja2VyIGlzQXV0b21hdGljVGV4dENv
bXBsZXRpb25FbmFibGVkXSAmJiAhX3ByaXZhdGUtPl9pc0N1c3RvbWl6aW5nVG91Y2hCYXIpIHsK
KyAgICAgICAgQk9PTCBzaG91bGRTaG93Q2FuZGlkYXRlTGlzdCA9ICFjb3JlRnJhbWUtPnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSB8fCBjb3JlRnJhbWUtPmVkaXRvcigpLmlnbm9y
ZUNvbXBvc2l0aW9uU2VsZWN0aW9uQ2hhbmdlKCk7CisgICAgICAgIFtzZWxmLmNhbmRpZGF0ZUxp
c3QgdXBkYXRlV2l0aEluc2VydGlvblBvaW50VmlzaWJpbGl0eTpzaG91bGRTaG93Q2FuZGlkYXRl
TGlzdF07CisgICAgfQorCisgICAgaWYgKGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuaXNJblBhc3N3b3JkRmllbGQoKSkgeworICAgICAgICAvLyBXZSBkb24ndCByZXF1ZXN0IGNh
bmRpZGF0ZXMgZm9yIHBhc3N3b3JkIGZpZWxkcy4gSWYgdGhlIHVzZXIgd2FzIHByZXZpb3VzbHkg
aW4gYSBub24tcGFzc3dvcmQgZmllbGQsIHRoZW4gdGhlCisgICAgICAgIC8vIG9sZCBjYW5kaWRh
dGVzIHdpbGwgc3RpbGwgc2hvdyBieSBkZWZhdWx0LCBzbyB3ZSBjbGVhciB0aGVtIGhlcmUgYnkg
c2V0dGluZyBhbiBlbXB0eSBhcnJheSBvZiBjYW5kaWRhdGVzLgorICAgICAgICBpZiAoIV9wcml2
YXRlLT5fZW1wdHlDYW5kaWRhdGVzQXJyYXkpCisgICAgICAgICAgICBfcHJpdmF0ZS0+X2VtcHR5
Q2FuZGlkYXRlc0FycmF5ID0gYWRvcHROUyhbW05TQXJyYXkgYWxsb2NdIGluaXRdKTsKKyAgICAg
ICAgW3NlbGYuY2FuZGlkYXRlTGlzdCBzZXRDYW5kaWRhdGVzOl9wcml2YXRlLT5fZW1wdHlDYW5k
aWRhdGVzQXJyYXkuZ2V0KCkgZm9yU2VsZWN0ZWRSYW5nZTpOU01ha2VSYW5nZSgwLCAwKSBpblN0
cmluZzpuaWxdOworICAgIH0KKworICAgIE5TVG91Y2hCYXIgKnRleHRUb3VjaEJhciA9IHNlbGYu
dGV4dFRvdWNoQmFyOworICAgIE5TQXJyYXk8TlNTdHJpbmcgKj4gKml0ZW1JZGVudGlmaWVycyA9
IHRleHRUb3VjaEJhci5pdGVtSWRlbnRpZmllcnM7CisgICAgQk9PTCBpc1Nob3dpbmdDb21iaW5l
ZFRleHRGb3JtYXRJdGVtID0gW2l0ZW1JZGVudGlmaWVycyBjb250YWluc09iamVjdDpOU1RvdWNo
QmFySXRlbUlkZW50aWZpZXJUZXh0Rm9ybWF0XTsKKyAgICBbdGV4dFRvdWNoQmFyIHNldFByaW5j
aXBhbEl0ZW1JZGVudGlmaWVyOmlzU2hvd2luZ0NvbWJpbmVkVGV4dEZvcm1hdEl0ZW0gPyBOU1Rv
dWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Rm9ybWF0IDogbmlsXTsKKworICAgIC8vIFNldCBjdXJy
ZW50IHR5cGluZyBhdHRyaWJ1dGVzIGZvciByaWNoIHRleHQuIFRoaXMgd2lsbCBlbnN1cmUgdGhh
dCB0aGUgYnV0dG9ucyByZWZsZWN0IHRoZSBzdGF0ZSBvZgorICAgIC8vIHRoZSB0ZXh0IHdoZW4g
Y2hhbmdpbmcgc2VsZWN0aW9uIHRocm91Z2hvdXQgdGhlIGRvY3VtZW50LgorICAgIGlmICh3ZWJI
VE1MVmlldy5fY2FuRWRpdFJpY2hseSkgeworICAgICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb24gPSBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgICAg
ICBpZiAoIXNlbGVjdGlvbi5pc05vbmUoKSkgeworICAgICAgICAgICAgTm9kZSogbm9kZVRvUmVt
b3ZlOworICAgICAgICAgICAgaWYgKGF1dG8qIHN0eWxlID0gRWRpdG9yOjpzdHlsZUZvclNlbGVj
dGlvblN0YXJ0KGNvcmVGcmFtZSwgbm9kZVRvUmVtb3ZlKSkgeworICAgICAgICAgICAgICAgIFtf
cHJpdmF0ZS0+X3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFRleHRJc0JvbGQ6KHN0eWxl
LT5mb250Q2FzY2FkZSgpLndlaWdodCgpID49IEZvbnRXZWlnaHRCb2xkKV07CisgICAgICAgICAg
ICAgICAgW19wcml2YXRlLT5fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzSXRh
bGljOihzdHlsZS0+Zm9udENhc2NhZGUoKS5pdGFsaWMoKSA9PSBGb250SXRhbGljT24pXTsKKwor
ICAgICAgICAgICAgICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHR5cGluZ1N0eWxlID0gY29yZUZy
YW1lLT5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpOworICAgICAgICAgICAgICAgIGlmICh0eXBp
bmdTdHlsZSAmJiB0eXBpbmdTdHlsZS0+c3R5bGUoKSkgeworICAgICAgICAgICAgICAgICAgICBT
dHJpbmcgdmFsdWUgPSB0eXBpbmdTdHlsZS0+c3R5bGUoKS0+Z2V0UHJvcGVydHlWYWx1ZShDU1NQ
cm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KTsKKyAgICAgICAgICAgICAgICAg
ICAgW19wcml2YXRlLT5fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzVW5kZXJs
aW5lZDp2YWx1ZS5jb250YWlucygidW5kZXJsaW5lIildOworICAgICAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgICAgICBbX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJv
bGxlciBzZXRUZXh0SXNVbmRlcmxpbmVkOihzdHlsZS0+dGV4dERlY29yYXRpb25zSW5FZmZlY3Qo
KSAmIFRleHREZWNvcmF0aW9uVW5kZXJsaW5lKV07CisKKyAgICAgICAgICAgICAgICBpZiAoc3R5
bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5pc1ZhbGlkKCkpCisg
ICAgICAgICAgICAgICAgICAgIFtfcHJpdmF0ZS0+X3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVy
IHNldFRleHRDb2xvcjpuc0NvbG9yKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlDb2xvcikpXTsKKworICAgICAgICAgICAgICAgIE5TVGV4dEFsaWdubWVudCB0ZXh0QWxp
Z25tZW50OworICAgICAgICAgICAgICAgIHN3aXRjaCAoc3R5bGUtPnRleHRBbGlnbigpKSB7Cisg
ICAgICAgICAgICAgICAgY2FzZSBSSUdIVDoKKyAgICAgICAgICAgICAgICBjYXNlIFdFQktJVF9S
SUdIVDoKKyAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWdubWVudCA9IE5TVGV4dEFsaWdubWVu
dFJpZ2h0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNl
IExFRlQ6CisgICAgICAgICAgICAgICAgY2FzZSBXRUJLSVRfTEVGVDoKKyAgICAgICAgICAgICAg
ICAgICAgdGV4dEFsaWdubWVudCA9IE5TVGV4dEFsaWdubWVudExlZnQ7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ0VOVEVSOgorICAgICAgICAgICAg
ICAgIGNhc2UgV0VCS0lUX0NFTlRFUjoKKyAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWdubWVu
dCA9IE5TVGV4dEFsaWdubWVudENlbnRlcjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSBKVVNUSUZZOgorICAgICAgICAgICAgICAgICAgICB0ZXh0QWxp
Z25tZW50ID0gTlNUZXh0QWxpZ25tZW50SnVzdGlmaWVkOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFRBU1RBUlQ6CisgICAgICAgICAgICAgICAgICAg
IHRleHRBbGlnbm1lbnQgPSBzdHlsZS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gTlNUZXh0
QWxpZ25tZW50TGVmdCA6IE5TVGV4dEFsaWdubWVudFJpZ2h0OworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFRBRU5EOgorICAgICAgICAgICAgICAgICAg
ICB0ZXh0QWxpZ25tZW50ID0gc3R5bGUtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IE5TVGV4
dEFsaWdubWVudFJpZ2h0IDogTlNUZXh0QWxpZ25tZW50TGVmdDsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFtfcHJpdmF0ZS0+
X3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldEN1cnJlbnRUZXh0QWxpZ25tZW50OnRleHRB
bGlnbm1lbnRdOworCisgICAgICAgICAgICAgICAgSFRNTEVsZW1lbnQqIGVuY2xvc2luZ0xpc3RF
bGVtZW50ID0gZW5jbG9zaW5nTGlzdChzZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgp
KTsKKyAgICAgICAgICAgICAgICBpZiAoZW5jbG9zaW5nTGlzdEVsZW1lbnQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGlzPEhUTUxVTGlzdEVsZW1lbnQ+KCplbmNsb3NpbmdMaXN0RWxlbWVu
dCkpCisgICAgICAgICAgICAgICAgICAgICAgICBbW19wcml2YXRlLT5fdGV4dFRvdWNoQmFySXRl
bUNvbnRyb2xsZXIgd2ViVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyXSBzZXRDdXJyZW50
TGlzdFR5cGU6V2ViTGlzdFR5cGU6OlVub3JkZXJlZF07CisgICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKGlzPEhUTUxPTGlzdEVsZW1lbnQ+KCplbmNsb3NpbmdMaXN0RWxlbWVudCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBbW19wcml2YXRlLT5fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xs
ZXIgd2ViVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyXSBzZXRDdXJyZW50TGlzdFR5cGU6
V2ViTGlzdFR5cGU6Ok9yZGVyZWRdOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgW1tfcHJpdmF0ZS0+X3RleHRUb3VjaEJhckl0ZW1D
b250cm9sbGVyIHdlYlRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlcl0gc2V0Q3VycmVudExp
c3RUeXBlOldlYkxpc3RUeXBlOjpOb25lXTsKKworICAgICAgICAgICAgICAgIGlmIChub2RlVG9S
ZW1vdmUpCisgICAgICAgICAgICAgICAgICAgIG5vZGVUb1JlbW92ZS0+cmVtb3ZlKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgQk9PTCBpc1Nob3dpbmdDYW5kaWRhdGVMaXN0
SXRlbSA9IFtpdGVtSWRlbnRpZmllcnMgY29udGFpbnNPYmplY3Q6TlNUb3VjaEJhckl0ZW1JZGVu
dGlmaWVyQ2FuZGlkYXRlTGlzdF0gJiYgW05TU3BlbGxDaGVja2VyIGlzQXV0b21hdGljVGV4dENv
bXBsZXRpb25FbmFibGVkXTsKKyAgICAgICAgW19wcml2YXRlLT5fdGV4dFRvdWNoQmFySXRlbUNv
bnRyb2xsZXIgc2V0VXNlc05hcnJvd1RleHRTdHlsZUl0ZW06aXNTaG93aW5nQ29tYmluZWRUZXh0
Rm9ybWF0SXRlbSAmJiBpc1Nob3dpbmdDYW5kaWRhdGVMaXN0SXRlbV07CisgICAgfQorfQorCist
ICh2b2lkKXVwZGF0ZU1lZGlhVG91Y2hCYXIKK3sKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NP
TlRST0xTX01BTkFHRVIpCisgICAgaWYgKCFfcHJpdmF0ZS0+bWVkaWFUb3VjaEJhclByb3ZpZGVy
KQorICAgICAgICBfcHJpdmF0ZS0+bWVkaWFUb3VjaEJhclByb3ZpZGVyID0gYWRvcHROUyhbYWxs
b2NBVkZ1bmN0aW9uQmFyUGxheWJhY2tDb250cm9sc1Byb3ZpZGVySW5zdGFuY2UoKSBpbml0XSk7
CisKKyAgICBpZiAoIVtfcHJpdmF0ZS0+bWVkaWFUb3VjaEJhclByb3ZpZGVyIHBsYXliYWNrQ29u
dHJvbHNDb250cm9sbGVyXSkgeworICAgICAgICBBU1NFUlQoX3ByaXZhdGUtPnBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZSk7CisgICAgICAgIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyICptYW5h
Z2VyID0gX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheUJhY2tDb250cm9s
c01hbmFnZXIoKTsKKyAgICAgICAgW19wcml2YXRlLT5tZWRpYVRvdWNoQmFyUHJvdmlkZXIgc2V0
UGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXI6KGlkIDxBVkZ1bmN0aW9uQmFyUGxheWJhY2tDb250
cm9sc0NvbnRyb2xsaW5nPiltYW5hZ2VyXTsKKyAgICAgICAgW19wcml2YXRlLT5tZWRpYVBsYXli
YWNrQ29udHJvbHNWaWV3IHNldFBsYXliYWNrQ29udHJvbHNDb250cm9sbGVyOihpZCA8QVZGdW5j
dGlvbkJhclBsYXliYWNrQ29udHJvbHNDb250cm9sbGluZz4pbWFuYWdlcl07CisgICAgfQorI2Vu
ZGlmCit9CisKKy0gKHZvaWQpdXBkYXRlVG91Y2hCYXIKK3sKKyAgICBpZiAoIV9wcml2YXRlLT5f
Y2FuQ3JlYXRlVG91Y2hCYXJzKQorICAgICAgICByZXR1cm47CisKKyAgICBGcmFtZSogY29yZUZy
YW1lID0gY29yZShbc2VsZiBfc2VsZWN0ZWRPck1haW5GcmFtZV0pOworICAgIGlmICghY29yZUZy
YW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBOU1RvdWNoQmFyICp0b3VjaEJhciA9IG5pbDsK
KyAgICBOU1ZpZXcgKmRvY3VtZW50VmlldyA9IFtbW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVd
IGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsKKyAgICBpZiAoW2RvY3VtZW50VmlldyBpc0tpbmRP
ZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKSB7CisgICAgICAgIFdlYkhUTUxWaWV3ICp3ZWJI
VE1MVmlldyA9IChXZWJIVE1MVmlldyAqKWRvY3VtZW50VmlldzsKKyAgICAgICAgaWYgKFt3ZWJI
VE1MVmlldyBfaXNFZGl0YWJsZV0pIHsKKyAgICAgICAgICAgIFtzZWxmIHVwZGF0ZVRleHRUb3Vj
aEJhcl07CisgICAgICAgICAgICB0b3VjaEJhciA9IFtzZWxmIHRleHRUb3VjaEJhcl07CisgICAg
ICAgIH0KKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgICAg
IGVsc2UgaWYgKFtzZWxmIF9oYXNBY3RpdmVWaWRlb0ZvckNvbnRyb2xzSW50ZXJmYWNlXSkgewor
ICAgICAgICAgICAgW3NlbGYgdXBkYXRlTWVkaWFUb3VjaEJhcl07CisgICAgICAgICAgICB0b3Vj
aEJhciA9IFtfcHJpdmF0ZS0+bWVkaWFUb3VjaEJhclByb3ZpZGVyIHJlc3BvbmRzVG9TZWxlY3Rv
cjpAc2VsZWN0b3IodG91Y2hCYXIpXSA/IFsoaWQpX3ByaXZhdGUtPm1lZGlhVG91Y2hCYXJQcm92
aWRlciB0b3VjaEJhcl0gOiBbKGlkKV9wcml2YXRlLT5tZWRpYVRvdWNoQmFyUHJvdmlkZXIgdG91
Y2hCYXJdOworICAgICAgICB9IGVsc2UgaWYgKFtfcHJpdmF0ZS0+bWVkaWFUb3VjaEJhclByb3Zp
ZGVyIHBsYXliYWNrQ29udHJvbHNDb250cm9sbGVyXSkgeworICAgICAgICAgICAgW19wcml2YXRl
LT5tZWRpYVRvdWNoQmFyUHJvdmlkZXIgc2V0UGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXI6bmls
XTsKKyAgICAgICAgICAgIFtfcHJpdmF0ZS0+bWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyBzZXRQ
bGF5YmFja0NvbnRyb2xzQ29udHJvbGxlcjpuaWxdOworICAgICAgICB9CisjZW5kaWYKKyAgICB9
CisKKyAgICBpZiAodG91Y2hCYXIgPT0gX3ByaXZhdGUtPl9jdXJyZW50VG91Y2hCYXIpCisgICAg
ICAgIHJldHVybjsKKworICAgIF9wcml2YXRlLT5fY3VycmVudFRvdWNoQmFyID0gdG91Y2hCYXI7
CisgICAgW3NlbGYgd2lsbENoYW5nZVZhbHVlRm9yS2V5OkAidG91Y2hCYXIiXTsKKyAgICBbc2Vs
ZiBzZXRUb3VjaEJhcjpfcHJpdmF0ZS0+X2N1cnJlbnRUb3VjaEJhci5nZXQoKV07CisgICAgW3Nl
bGYgZGlkQ2hhbmdlVmFsdWVGb3JLZXk6QCJ0b3VjaEJhciJdOworfQorCistICh2b2lkKXByZXBh
cmVGb3JNb3VzZURvd24KK3sKKyAgICBfcHJpdmF0ZS0+X25lZWRzRGVmZXJyZWRUZXh0VG91Y2hC
YXJVcGRhdGUgPSBOTzsKKyAgICBfcHJpdmF0ZS0+X2lzRGVmZXJyaW5nVGV4dFRvdWNoQmFyVXBk
YXRlcyA9IFlFUzsKK30KKworLSAodm9pZClwcmVwYXJlRm9yTW91c2VVcAoreworICAgIGlmICgh
X3ByaXZhdGUtPl9pc0RlZmVycmluZ1RleHRUb3VjaEJhclVwZGF0ZXMpCisgICAgICAgIHJldHVy
bjsKKworICAgIF9wcml2YXRlLT5faXNEZWZlcnJpbmdUZXh0VG91Y2hCYXJVcGRhdGVzID0gTk87
CisgICAgaWYgKF9wcml2YXRlLT5fbmVlZHNEZWZlcnJlZFRleHRUb3VjaEJhclVwZGF0ZSkgewor
ICAgICAgICAvLyBPbmx5IHRyaWdnZXIgYW5vdGhlciB1cGRhdGUgaWYgd2UgYXR0ZW1wdGVkIGFu
ZCBiYWlsZWQgZnJvbSBhbiB1cGRhdGUgZHVyaW5nIHRoZSBkZWZlcnJhbC4KKyAgICAgICAgW3Nl
bGYgdXBkYXRlVG91Y2hCYXJdOworICAgIH0KK30KKworLSAodm9pZCl3ZWJWaWV3QWRkaXRpb25z
V2lsbERlc3Ryb3lWaWV3Cit7CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2Vu
dGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmXTsKK30KKworLSAoTlNDYW5kaWRhdGVMaXN0VG91Y2hC
YXJJdGVtICopY2FuZGlkYXRlTGlzdAoreworICAgIHJldHVybiBzZWxmLl9pc1JpY2hseUVkaXRh
YmxlID8gX3ByaXZhdGUtPl9yaWNoVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0uZ2V0KCkg
OiBfcHJpdmF0ZS0+X3BsYWluVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0uZ2V0KCk7Cit9
CisjZWxzZQorCistICh2b2lkKXVwZGF0ZVRvdWNoQmFyCit7Cit9CisKKy0gKHZvaWQpcHJlcGFy
ZUZvck1vdXNlRG93bgoreworfQorCistICh2b2lkKXByZXBhcmVGb3JNb3VzZVVwCit7Cit9CisK
Ky0gKHZvaWQpd2ViVmlld0FkZGl0aW9uc1dpbGxEZXN0cm95VmlldworeworfQorCistIChpZClj
YW5kaWRhdGVMaXN0Cit7CisgICAgcmV0dXJuIG5pbDsKK30KKworI2VuZGlmCisKIEBlbmQKIAog
QGltcGxlbWVudGF0aW9uIFdlYlZpZXcgKFdlYlZpZXdEZXZpY2VPcmllbnRhdGlvbikKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLmgJKHJldmlzaW9uIDIwODQwNSkK
KysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEuaAkod29ya2luZyBjb3B5
KQpAQCAtMTAxLDggKzEwMSwxMCBAQCBjbGFzcyBXZWJWaWV3R3JvdXA7CiBjbGFzcyBXZWJTZWxl
Y3Rpb25TZXJ2aWNlQ29udHJvbGxlcjsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBf
X01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMCAmJiBVU0UoQVBQTEVfSU5U
RVJOQUxfU0RLKQotI2ltcG9ydCA8V2ViS2l0QWRkaXRpb25zL1dlYlZpZXdEYXRhQWRkaXRpb25z
RGVjbGFyYXRpb25zLmg+CisjaWYgSEFWRShUT1VDSF9CQVIpCitAY2xhc3MgV2ViVGV4dFRvdWNo
QmFySXRlbUNvbnRyb2xsZXI7CitAY2xhc3MgQVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNQ
cm92aWRlcjsKK0BjbGFzcyBBVkZ1bmN0aW9uQmFyU2NydWJiZXI7CiAjZW5kaWYKIAogY2xhc3Mg
V2ViVmlld0xheWVyRmx1c2hTY2hlZHVsZXIgOiBwdWJsaWMgV2ViQ29yZTo6TGF5ZXJGbHVzaFNj
aGVkdWxlciB7CkBAIC0xNzgsOSArMTgwLDI0IEBAIEBpbnRlcmZhY2UgV2ViVmlld1ByaXZhdGUg
OiBOU09iamVjdCB7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFdlYkltbWVkaWF0ZUFjdGlvbkNv
bnRyb2xsZXIgKmltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXI7CiAKLSNpZiBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMCAmJiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQot
I2ltcG9ydCA8V2ViS2l0QWRkaXRpb25zL1dlYlZpZXdEYXRhQWRkaXRpb25zLmg+Ci0jZW5kaWYK
KyNpZiBIQVZFKFRPVUNIX0JBUikKKyAgICBSZXRhaW5QdHI8TlNUb3VjaEJhcj4gX2N1cnJlbnRU
b3VjaEJhcjsKKyAgICBSZXRhaW5QdHI8TlNUb3VjaEJhcj4gX3BsYWluVGV4dFRvdWNoQmFyOwor
ICAgIFJldGFpblB0cjxOU1RvdWNoQmFyPiBfcmljaFRleHRUb3VjaEJhcjsKKyAgICBSZXRhaW5Q
dHI8V2ViVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXI+IF90ZXh0VG91Y2hCYXJJdGVtQ29udHJv
bGxlcjsKKyAgICBSZXRhaW5QdHI8TlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtPiBfcmljaFRl
eHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtOworICAgIFJldGFpblB0cjxOU0NhbmRpZGF0ZUxp
c3RUb3VjaEJhckl0ZW0+IF9wbGFpblRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtOworICAg
IFJldGFpblB0cjxOU0FycmF5PiBfZW1wdHlDYW5kaWRhdGVzQXJyYXk7CisgICAgUmV0YWluUHRy
PEFWRnVuY3Rpb25CYXJQbGF5YmFja0NvbnRyb2xzUHJvdmlkZXI+IG1lZGlhVG91Y2hCYXJQcm92
aWRlcjsKKyAgICBSZXRhaW5QdHI8QVZGdW5jdGlvbkJhclNjcnViYmVyPiBtZWRpYVBsYXliYWNr
Q29udHJvbHNWaWV3OworCisgICAgQk9PTCBfY2FuQ3JlYXRlVG91Y2hCYXJzOworICAgIEJPT0wg
X2lzVXBkYXRpbmdUZXh0VG91Y2hCYXI7CisgICAgQk9PTCBfc3RhcnRlZExpc3RlbmluZ1RvQ3Vz
dG9taXphdGlvbkV2ZW50czsKKyAgICBCT09MIF9pc0N1c3RvbWl6aW5nVG91Y2hCYXI7CisgICAg
Qk9PTCBfaXNEZWZlcnJpbmdUZXh0VG91Y2hCYXJVcGRhdGVzOworICAgIEJPT0wgX25lZWRzRGVm
ZXJyZWRUZXh0VG91Y2hCYXJVcGRhdGU7CisjZW5kaWYgLy8gSEFWRShUT1VDSF9CQVIpCiAKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6VGV4dEluZGljYXRvcldpbmRvdz4gdGV4dEluZGlj
YXRvcldpbmRvdzsKICAgICBCT09MIGhhc0luaXRpYWxpemVkTG9va3VwT2JzZXJ2ZXI7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmgJKHJldmlzaW9u
IDIwODQwNSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDcgQEAgY2xhc3MgV2ViU2VsZWN0aW9uU2Vydmlj
ZUNvbnRyb2xsZXI7CiAKICNlbmRpZgogCitAY2xhc3MgTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJ
dGVtOwogQGNsYXNzIFdlYkJhc2VQbHVnaW5QYWNrYWdlOwogQGNsYXNzIFdlYkRvd25sb2FkOwog
QGNsYXNzIFdlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXI7CkBAIC0yOTMsMTIgKzI5NCwxMSBA
QCBAaW50ZXJmYWNlIFdlYlZpZXcgKFdlYlZpZXdPdGhlckludGVybmFsCiAtICh2b2lkKV9zZXRN
b2NrTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlck5hbWU6KE5TU3RyaW5nICopbmFtZSBzdGF0ZToo
V2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldENvbnRleHQ6OlN0YXRlKXN0YXRlOwogI2VuZGlm
CiAKLUBlbmQKLQotQGludGVyZmFjZSBXZWJWaWV3IChXZWJVcGRhdGVXZWJWaWV3QWRkaXRpb25z
KQogLSAodm9pZClwcmVwYXJlRm9yTW91c2VVcDsKIC0gKHZvaWQpcHJlcGFyZUZvck1vdXNlRG93
bjsKLS0gKHZvaWQpdXBkYXRlV2ViVmlld0FkZGl0aW9uczsKKy0gKHZvaWQpdXBkYXRlVG91Y2hC
YXI7CiAtICh2b2lkKXdlYlZpZXdBZGRpdGlvbnNXaWxsRGVzdHJveVZpZXc7Ci0tIChpZCljYW5k
aWRhdGVMaXN0OworLSAodm9pZClfZGlzbWlzc1RleHRUb3VjaEJhclBvcG92ZXJJdGVtV2l0aElk
ZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcjsKKy0gKE5TQ2FuZGlkYXRlTGlzdFRvdWNo
QmFySXRlbSAqKWNhbmRpZGF0ZUxpc3Q7CisKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlld1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXdQcml2YXRlLmgJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld1ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtODg5
LDYgKzg4OSwxMCBAQCBDb3VsZCBiZSB3b3J0aCBhZGRpbmcgdG8gdGhlIEFQSS4KIAogLSAodm9p
ZClfc2V0Rm9udEZhbGxiYWNrUHJlZmVyc1BpY3RvZ3JhcGhzOihCT09MKWZsYWc7CiAKKy0gKHZv
aWQpc2hvd0NhbmRpZGF0ZXM6KE5TQXJyYXkgKiljYW5kaWRhdGVzIGZvclN0cmluZzooTlNTdHJp
bmcgKilzdHJpbmcgaW5SZWN0OihOU1JlY3QpcmVjdE9mVHlwZWRTdHJpbmcgZm9yU2VsZWN0ZWRS
YW5nZTooTlNSYW5nZSlyYW5nZSB2aWV3OihOU1ZpZXcgKil2aWV3IGNvbXBsZXRpb25IYW5kbGVy
Oih2b2lkICheKShOU1RleHRDaGVja2luZ1Jlc3VsdCAqYWNjZXB0ZWRDYW5kaWRhdGUpKWNvbXBs
ZXRpb25CbG9jazsKKy0gKHZvaWQpZm9yY2VSZXF1ZXN0Q2FuZGlkYXRlc0ZvclRlc3Rpbmc7Cist
IChCT09MKXNob3VsZFJlcXVlc3RDYW5kaWRhdGVzOworCiBAZW5kCiAKICNpZiAhVEFSR0VUX09T
X0lQSE9ORQpAQCAtMTA2MSwxMiArMTA2NSw2IEBAIEBpbnRlcmZhY2UgTlNPYmplY3QgKFdlYlZp
ZXdSZXNvdXJjZUxvYWQKIC0gKE5TQ2FjaGVkVVJMUmVzcG9uc2UgKil3ZWJWaWV3OihXZWJWaWV3
ICopc2VuZGVyIHJlc291cmNlOihpZClpZGVudGlmaWVyIHdpbGxDYWNoZVJlc3BvbnNlOihOU0Nh
Y2hlZFVSTFJlc3BvbnNlICopcmVzcG9uc2UgZnJvbURhdGFTb3VyY2U6KFdlYkRhdGFTb3VyY2Ug
KilkYXRhU291cmNlOwogQGVuZAogCi1AaW50ZXJmYWNlIFdlYlZpZXcgKFdlYlNob3dDYW5kaWRh
dGVzKQotLSAodm9pZClzaG93Q2FuZGlkYXRlczooTlNBcnJheSAqKWNhbmRpZGF0ZXMgZm9yU3Ry
aW5nOihOU1N0cmluZyAqKXN0cmluZyBpblJlY3Q6KE5TUmVjdClyZWN0T2ZUeXBlZFN0cmluZyBm
b3JTZWxlY3RlZFJhbmdlOihOU1JhbmdlKXJhbmdlIHZpZXc6KE5TVmlldyAqKXZpZXcgY29tcGxl
dGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TVGV4dENoZWNraW5nUmVzdWx0ICphY2NlcHRlZENhbmRp
ZGF0ZSkpY29tcGxldGlvbkJsb2NrOwotLSAodm9pZClmb3JjZVJlcXVlc3RDYW5kaWRhdGVzRm9y
VGVzdGluZzsKLS0gKEJPT0wpc2hvdWxkUmVxdWVzdENhbmRpZGF0ZXM7Ci1AZW5kCi0KICNpZmRl
ZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKSW5kZXg6IFRvb2xzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODQwNSkKKysrIFRv
b2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE2LTExLTA0
ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBTdXBwb3J0IFRvdWNo
QmFyIGluIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY0NDM3CisgICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgcmRhcjov
L3Byb2JsZW0vMjg4NzY1MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGlzIG1ha2VzIE1pbmlCcm93c2VyIHN1cHBvcnQgVG91Y2hCYXIgY3VzdG9t
aXphdGlvbi4gCisKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9tYWMvQXBwRGVsZWdhdGUubToKKyAg
ICAgICAgKC1bQnJvd3NlckFwcERlbGVnYXRlIGF3YWtlRnJvbU5pYl0pOgorCiAyMDE2LTExLTA0
ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIwODI5My4KSW5kZXg6IFRvb2xzL01pbmlCcm93c2Vy
L21hYy9BcHBEZWxlZ2F0ZS5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL01pbmlCcm93c2VyL21hYy9B
cHBEZWxlZ2F0ZS5tCShyZXZpc2lvbiAyMDg0MDUpCisrKyBUb29scy9NaW5pQnJvd3Nlci9tYWMv
QXBwRGVsZWdhdGUubQkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsMTAgQEAgZW51bSB7CiAg
ICAgV2ViS2l0Mk5ld1dpbmRvd1RhZyA9IDIKIH07CiAKK0BpbnRlcmZhY2UgTlNBcHBsaWNhdGlv
biAoVG91Y2hCYXIpCitAcHJvcGVydHkgKGdldHRlcj1pc0F1dG9tYXRpY0N1c3RvbWl6ZVRvdWNo
QmFyTWVudUl0ZW1FbmFibGVkKSBCT09MIGF1dG9tYXRpY0N1c3RvbWl6ZVRvdWNoQmFyTWVudUl0
ZW1FbmFibGVkOworQGVuZAorCiBAaW1wbGVtZW50YXRpb24gQnJvd3NlckFwcERlbGVnYXRlCiAK
IC0gKGlkKWluaXQKQEAgLTczLDYgKzc3LDkgQEAgLSAodm9pZClhd2FrZUZyb21OaWIKICNlbmRp
ZgogCiAgICAgW1tOU0FwcCBtYWluTWVudV0gaW5zZXJ0SXRlbTpbaXRlbSBhdXRvcmVsZWFzZV0g
YXRJbmRleDpbW05TQXBwIG1haW5NZW51XSBpbmRleE9mSXRlbVdpdGhUaXRsZTpAIkRlYnVnIl1d
OworCisgICAgaWYgKFtOU0FwcCByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNldEF1dG9t
YXRpY0N1c3RvbWl6ZVRvdWNoQmFyTWVudUl0ZW1FbmFibGVkOildKQorICAgICAgICBbTlNBcHAg
c2V0QXV0b21hdGljQ3VzdG9taXplVG91Y2hCYXJNZW51SXRlbUVuYWJsZWQ6WUVTXTsKIH0KIAog
I2lmIFdLX0FQSV9FTkFCTEVECg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294107</attachid>
            <date>2016-11-07 17:37:13 -0800</date>
            <delta_ts>2016-11-07 22:54:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-11.txt</filename>
            <type>text/plain</type>
            <size>119683</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE2LTExLTA0ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBTdXBwb3J0IFRvdWNoQmFyIGluIFdl
YktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0
NDM3CisgICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0v
Mjg4NzY1MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9y
bS9zcGkvY29jb2EvQVZLaXRTUEkuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcGkvY29jb2EvTlNU
b3VjaEJhclNQSS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxD
aGVja2VyU1BJLmg6CisKIDIwMTYtMTEtMDQgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgogCiAgICAgICAgIEluZGV4ZWREQiAyLjA6IENsZWFuIHVwIG1vcmUgdHJhbnNhY3Rpb24g
YWJvcnQgYW5kIGV4Y2VwdGlvbiB0aHJvd2luZyBiZWhhdmlvciBmcm9tIElEQk9iamVjdFN0b3Jl
LgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMjA4NDA1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNTY0LDEwICsxNTY0LDEw
IEBACiAJCTQxNjJBNDU3MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQxNjJBNDU1MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
LmNwcCAqLzsgfTsKIAkJNDE2MkE0NTgxMDExNDY0NzAwREZGM0VEIC8qIEpTRGVkaWNhdGVkV29y
a2VyR2xvYmFsU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQxNjJBNDU2MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlLmggKi87IH07CiAJCTQxNkUyOUE2MTAyRkE5NjIwMDdGQzE0RSAvKiBXb3JrZXJSZXBv
cnRpbmdQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDE2RTI5QTUxMDJGQTk2MjAwN0ZDMTRFIC8qIFdvcmtlclJlcG9ydGluZ1Byb3h5LmggKi87
IH07CisJCTQxNkU2RkU4MUJCRDEyREYwMDBBM0Y2NCAvKiBSZWFkYWJsZVN0cmVhbUludGVybmFs
c0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTQxNkU2RkU4MUJCRDEyREYwMDBBNjAyMyAvKiBGZXRjaEludGVybmFsc0J1aWx0aW5zLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMx
MTBEMDBCNzY0QjkgLyogRmV0Y2hJbnRlcm5hbHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjAz
MyAvKiBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEM5IC8qIFN0cmVhbUlu
dGVybmFsc0J1aWx0aW5zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJNDE2RTZGRTgxQkJEMTJERjAwMEEzRjY0IC8qIFJlYWRhYmxlQnl0ZVN0cmVh
bUludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVCeXRlU3RyZWFt
SW50ZXJuYWxzQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQk0MTZFNkZFODFCQkQxMkRGMDAwQTYwNDMgLyogUmVhZGFibGVTdHJlYW1J
bnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOUIwM0Q4MDYxQkIzMTEwRDAwQjczRjY0IC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJu
YWxzQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk0MTZFNkZFODFCQkQxMkRGMDAwQTYwNDMgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50
ZXJuYWxzQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRl
cm5hbHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjA1MyAvKiBXcml0YWJsZVN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RTkgLyogV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNC
dWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTQxNkU2RkU5MUJCRDEyRTUwMDBBNjA0MyAvKiBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFC
QjMxMTBEMDBCNzY0RDggLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxNkU2RkU5MUJCRDEyRTUwMDBB
NjA1MyAvKiBXcml0YWJsZVN0cmVhbUJ1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RTggLyogV3JpdGFi
bGVTdHJlYW1CdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0yNTkwLDggKzI1OTAsOCBAQAogCQk2QjY5M0EyRTFDNTFBODJFMDBCMDNC
RUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZCNjkzQTJEMUM1MUE4MkUwMEIwM0JFRiAvKiBSZXNvdXJjZUxv
YWRPYnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTZCNjkzQTM0MUM1MUE5NUQwMEIwM0JFRiAvKiBSZXNvdXJjZUxvYWRPYnNlcnZlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QjY5M0Ez
MzFDNTFBOTVEMDBCMDNCRUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwICovOyB9OwogCQk2
QzRDOTZERTFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNEM5
NkRBMUFENDQ4MzUwMDM2M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuY3Bw
ICovOyB9OwotCQk2QzRDOTZERjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJl
YW1Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2QzRDOTZEQjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250
cm9sbGVyLmggKi87IH07CiAJCTZDNEM5NkRFMUFENDQ4MzUwMDM2NUE1MCAvKiBKU1JlYWRhYmxl
U3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkM0Qzk2REExQUQ0NDgzNTAwMzY1QTUwIC8qIEpTUmVhZGFibGVT
dHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHAgKi87IH07CisJCTZDNEM5NkRGMUFENDQ4MzUwMDM2
M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNEM5NkRCMUFENDQ4MzUwMDM2M0Y2NCAv
KiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaCAqLzsgfTsKIAkJNkM0Qzk2REYxQUQ0
NDgzNTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0Qzk2REIxQUQ0NDgz
NTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5oICovOyB9Owog
CQk2QzYzODg5NUE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlh
dG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM2
Mzg4OTNBOTZDQ0VFNTBDOEM5NDZDIC8qIENhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2QzYz
ODg5NkE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzYzODg5
NEE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5jcHAg
Ki87IH07CkBAIC0zMjc0LDYgKzMyNzQsNyBAQAogCQk5MzMwOUVBMzA5OUVCNzhDMDA1NkU1ODEg
LyogU2hhcmVkVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzMzA5RUEwMDk5RUI3OEMwMDU2RTU4MSAvKiBTaGFyZWRUaW1lci5oICovOyB9Owog
CQk5MzMwOUVBNDA5OUVCNzhDMDA1NkU1ODEgLyogVGltZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlFQTEwOTlFQjc4QzAwNTZFNTgxIC8q
IFRpbWVyLmNwcCAqLzsgfTsKIAkJOTMzNTRBM0MwQjI0RjhDOTAwM0Y2REVBIC8qIFVJRXZlbnRX
aXRoS2V5U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTMzNTRBM0IwQjI0RjhDOTAwM0Y2REVBIC8qIFVJRXZlbnRXaXRoS2V5U3RhdGUuY3Bw
ICovOyB9OworCQk5MzM1QjQ5RDFEQ0JFRjdDMDBFRDQ2OEUgLyogTlNUb3VjaEJhclNQSS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzNUI0OUIxRENC
RUY3MTAwRUQ0NjhFIC8qIE5TVG91Y2hCYXJTUEkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5MzNBMTQyRTBCN0QxODg2MDBBNTNGRkQgLyogVGV4
dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzM0ExNDJCMEI3RDE4ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuY3BwICovOyB9OwogCQk5MzNB
MTQzMDBCN0QxODg2MDBBNTNGRkQgLyogVGV4dEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzNBMTQyRDBCN0QxODg2MDBBNTNGRkQgLyogVGV4
dEV2ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJOTMzQTE0QjgwQjdEMUQ1MjAwQTUzRkZEIC8qIEpTVGV4dEV2ZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzM0ExNEI2MEI3RDFENTIwMEE1
M0ZGRCAvKiBKU1RleHRFdmVudC5jcHAgKi87IH07CkBAIC05NzgyLDggKzk3ODMsOCBAQAogCQk2
QjY5M0EyRDFDNTFBODJFMDBCMDNCRUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkI2OTNBMzMxQzUxQTk1RDAwQjAzQkVGIC8qIFJlc291
cmNlTG9hZE9ic2VydmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlc291cmNlTG9hZE9ic2VydmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NkM0Qzk2REExQUQ0NDgzNTAwMzYzRjY0IC8qIEpTUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1JlYWRhYmxlQnl0
ZVN0cmVhbUNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzRD
OTZEQjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUmVhZGFibGVCeXRlU3RyZWFtQ29u
dHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QzRDOTZEQTFBRDQ0ODM1
MDAzNjVBNTAgLyogSlNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29u
dHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZDNEM5NkRCMUFENDQ4
MzUwMDM2M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZDNEM5NkRCMUFENDQ4MzUwMDM2NUE1MCAv
KiBKU1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZDNjM4ODkzQTk2Q0NFRTUwQzhDOTQ2QyAvKiBDYWNo
ZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTZDNjM4ODk0QTk2Q0NFRTUwQzhDOTQ2QyAvKiBDYWNoZWRSZXNvdXJj
ZVJlcXVlc3RJbml0aWF0b3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTEwNzIyLDYgKzEwNzIzLDcgQEAKIAkJOTMzMkFCOEIxNjUzQTk3OTAw
RDgyN0VDIC8qIEZFTGlnaHRpbmdORU9OLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZFTGlnaHRpbmdORU9OLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMzJB
QjhDMTY1M0E5NzkwMEQ4MjdFQyAvKiBORU9OSGVscGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBORU9OSGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5MzM1NEEzQjBCMjRGOEM5MDAzRjZERUEgLyogVUlFdmVudFdpdGhLZXlTdGF0ZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVSUV2ZW50V2l0aEtleVN0YXRlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTMzNUI0OUIxRENCRUY3MTAwRUQ0NjhF
IC8qIE5TVG91Y2hCYXJTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTlNU
b3VjaEJhclNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzNBMTQyQjBCN0Qx
ODg2MDBBNTNGRkQgLyogVGV4dEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFRleHRFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkz
M0ExNDJDMEI3RDE4ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFRleHRFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzM0Ex
NDJEMEI3RDE4ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGV4dEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MTE3NSw4ICsxMTE3Nyw4IEBACiAJCTk5MDhCMEYwMUJDQUNGOTEwMEVEM0Y2NCAvKiBSZWFkYWJs
ZUJ5dGVTdHJlYW1Db250cm9sbGVyLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0
OyBwYXRoID0gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlci5qczsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTkwOEIwRjExQkNBQ0Y5MTAwRUQwRjU1IC8qIFN0cmVhbUludGVybmFs
cy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFN0cmVhbUludGVy
bmFscy5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkwOEIwRjExQkNBQ0Y5MTAw
RUQwRjY1IC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzLmpzICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVhZGFibGVTdHJlYW1JbnRlcm5hbHMuanM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk5MDhCMEYxMUJDQUNGOTEwMEVEM0Y2NCAvKiBSZWFkYWJs
ZUJ5dGVTdHJlYW1JbnRlcm5hbHMuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7
IHBhdGggPSBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHMuanM7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTk5MDhCMEYxMUJDQUNGOTEwMEVEMEY3NSAvKiBXcml0YWJsZVN0cmVhbUlu
dGVybmFscy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFdyaXRh
YmxlU3RyZWFtSW50ZXJuYWxzLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OTA4
QjBGMTFCQ0FDRjkxMDBFRDNGNjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzLmpzICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVhZGFibGVCeXRlU3RyZWFt
SW50ZXJuYWxzLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGMjFCQ0FD
RjkxMDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyLmpzICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVy
LmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGMzFCQ0FDRkZFMDBFRDBG
NjUgLyogQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJ5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3lCdWlsdGlu
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5MDhCMEY1MUJDQUQwN0QwMEVE
MEY2NSAvKiBCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5QnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTE4NCwxNSArMTExODYsMTMgQEAKIAkJ
OTkwOEIwRjcxQkNBRDA3RDAwRUQwRjY1IC8qIENvdW50UXVldWluZ1N0cmF0ZWd5QnVpbHRpbnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ291bnRRdWV1aW5nU3RyYXRlZ3lC
dWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGOTFCQ0FEMDdE
MDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkwOEIwRjkxQkNBRDA3RDAwRUQwRjc1IC8qIFdyaXRhYmxl
U3RyZWFtQnVpbHRpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V3JpdGFibGVTdHJlYW1CdWlsdGlucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTk5MDhCMEZBMUJDQUQwN0QwMEVEM0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVy
QnVpbHRpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFi
bGVCeXRlU3RyZWFtQ29udHJvbGxlckJ1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJOTkwOEIwRkIxQkNBRDA3RDAwRUQzRjY0IC8qIFJlYWRhYmxlQnl0ZVN0cmVhbUNv
bnRyb2xsZXJCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFk
YWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQnVpbHRpbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTkwOEIwRkExQkNBRDA3RDAwRUQwRjY1IC8qIFJlYWRhYmxlU3RyZWFtRGVmYXVs
dENvbnRyb2xsZXJCdWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQnVpbHRpbnMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGQjFCQ0FEMDdEMDBFRDBGNjUgLyogUmVhZGFi
bGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckJ1aWx0aW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJCdWlsdGlucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBGRDFCQ0FEMDdEMDBFRDBGNDUgLyog
RmV0Y2hJbnRlcm5hbHNCdWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGZXRjaEludGVybmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTkwOEIwRkQxQkNBRDA3RDAwRUQwRjU1IC8qIFN0cmVhbUludGVybmFsc0J1aWx0
aW5zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTkwOEIwRkQx
QkNBRDA3RDAwRUQzRjY0IC8qIFJlYWRhYmxlQnl0ZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlYWRhYmxlQnl0ZVN0cmVh
bUludGVybmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkw
OEIwRkQxQkNBRDA3RDAwRUQwRjY1IC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFibGVTdHJlYW1J
bnRlcm5hbHNCdWlsdGlucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5MDhC
MEZEMUJDQUQwN0QwMEVEMEY3NSAvKiBXcml0YWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdyaXRhYmxlU3RyZWFtSW50
ZXJuYWxzQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OTA4QjBG
RDFCQ0FEMDdEMDBFRDNGNjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFibGVCeXRlU3Ry
ZWFtSW50ZXJuYWxzQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
OTA4QjBGRTFCQ0FEMDdEMDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyQnVp
bHRpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhZGFibGVT
dHJlYW1EZWZhdWx0UmVhZGVyQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5OTA4QjBGRjFCQ0FEMDdEMDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVh
ZGVyQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVhZGFibGVT
dHJlYW1EZWZhdWx0UmVhZGVyQnVpbHRpbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTkyMDM5ODAxOEI5NUJDNjAwQjM5QUY5IC8qIFVzZXJJbnB1dEJyaWRnZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVc2VySW5wdXRCcmlkZ2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEyMzAsMTAgKzExMjMwLDEwIEBACiAJCTlBNTI4
RTgyMTdEN0Y1MkYwMEFBOTUxOCAvKiBGbG9hdGluZ09iamVjdHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRmxvYXRpbmdPYmplY3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTlBQjFGMzdFMThFMjQ4OUEwMDUzNDc0MyAvKiBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUFCMUYzN0YxOEUy
NDg5QTAwNTM0NzQzIC8qIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAv
KiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0QjkgLyog
RmV0Y2hJbnRlcm5hbHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGZXRjaEludGVybmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTlCMDNEODA2MUJCMzExMEQwMEI3NjRDOSAvKiBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDgg
LyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5h
bHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZUJ5
dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZVN0cmVhbUlu
dGVybmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMDNEODA2
MUJCMzExMEQwMEI3NjRFOCAvKiBXcml0YWJsZVN0cmVhbUJ1aWx0aW5zLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyaXRhYmxlU3RyZWFtQnVpbHRpbnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEU5IC8qIFdyaXRhYmxl
U3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTcyNTcsNiArMTcyNTcsNyBAQAogCQkJCTJEREI5N0YzMTlGOUFFQ0EwMDIw
MjVEOCAvKiBOU0V4dGVuc2lvblNQSS5oICovLAogCQkJCUNFMTI1MjNBMUExNjcxMTAwMDg2NDQ4
MCAvKiBOU0ZpbGVNYW5hZ2VyU1BJLmggKi8sCiAJCQkJQ0UxMjUyNTIxQTFCRUMwNjAwODY0NDgw
IC8qIE5TU3RyaW5nU1BJLmggKi8sCisJCQkJOTMzNUI0OUIxRENCRUY3MTAwRUQ0NjhFIC8qIE5T
VG91Y2hCYXJTUEkuaCAqLywKIAkJCQkzMUIzMTNEQTFCNjk4NzE2MDBGMkFBQkMgLyogTlNVUkxD
b25uZWN0aW9uU1BJLmggKi8sCiAJCQkJQ0UxMjUyNTQxQTFCRUMwRTAwODY0NDgwIC8qIE5TVVJM
RG93bmxvYWRTUEkuaCAqLywKIAkJCQk2NTNFRjgzODE5QTA0M0FFMDA1MjIwMkMgLyogTlNVUkxG
aWxlVHlwZU1hcHBpbmdzU1BJLmggKi8sCkBAIC0xNzMzMyw4ICsxNzMzNCw2IEBACiAJCQkJNDRB
MjhBQUUxMkRGQjhCRjAwQUU5MjNCIC8qIE1hdGhNTE5hbWVzLmggKi8sCiAJCQkJNzFFMjE4Mzgx
NzM1OUZCODAwNkU2RTREIC8qIFBsdWdJbnNSZXNvdXJjZXMuaCAqLywKIAkJCQk3MUUyMTgzOTE3
MzU5RkI4MDA2RTZFNEQgLyogUGx1Z0luc1Jlc291cmNlc0RhdGEuY3BwICovLAotCQkJCTk5MDhC
MEZBMUJDQUQwN0QwMDc2M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQnVpbHRp
bnMuY3BwICovLAotCQkJCTk5MDhCMEZCMUJDQUQwN0QwMDc2M0Y2NCAvKiBSZWFkYWJsZUJ5dGVT
dHJlYW1Db250cm9sbGVyQnVpbHRpbnMuaCAqLywKIAkJCQk5OTA4QjBGRDFCQ0FEMDdEMDBFRDNG
NjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuY3BwICovLAogCQkJCTlC
MDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oICovLAogCQkJCTk5MDhCMEY5MUJDQUQwN0QwMEVEMEY2NSAvKiBSZWFkYWJsZVN0cmVh
bUJ1aWx0aW5zLmNwcCAqLywKQEAgLTI1MDc3LDcgKzI1MDc2LDYgQEAKIAkJCQlCQzFCREYyNTE1
NkMxOEM3MDAxQzEyNDMgLyogRE9NRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTJFRDYwOUJE
MTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgx
ODVGM0IwOTc2NTc2NjAwNTgyNkQ5IC8qIERPTUltcGxlbWVudGF0aW9uLmggaW4gSGVhZGVycyAq
LywKLQkJCQlFMzVDQTE0RTFEQkMzQTQyMDBGODM1MTYgLyogRE9NSklUQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMxNTBFQTcxREE3MjE5MzAwMTk0MDEyIC8q
IERPTUpJVEhlbHBlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE5QzZFNEU0MEQ3NDVFMDUwMDY0
NDJFOSAvKiBET01NaW1lVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTlDNkU0RTgwRDc0NUUx
ODAwNjQ0MkU5IC8qIERPTU1pbWVUeXBlQXJyYXkuaCBpbiBIZWFkZXJzICovLApAQCAtMjY3OTEs
OSArMjY3ODksOSBAQAogCQkJCUY1NUIzRENFMTI1MUYxMkQwMDNFRjI2OSAvKiBSYW5nZUlucHV0
VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU4NEU5RTExNzY2OEJGMTAwODE1QjY4IC8qIFJh
c3RlclNoYXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODREODI3QzExRDMzM0VEMDA5NzI5OTAg
LyogUmF3RGF0YURvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQk0MTZFNkZFODFC
QkQxMkRGMDAwQTNGNjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCBp
biBIZWFkZXJzICovLAorCQkJCTQxNkU2RkU4MUJCRDEyREYwMDBBM0Y2NCAvKiBSZWFkYWJsZVN0
cmVhbUludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTZFNkZFOTFCQkQx
MkU1MDAwQTYwNDMgLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJNDE2RTZGRTgxQkJEMTJERjAwMEE2MDQzIC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVp
bHRpbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjA0MyAvKiBS
ZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkQzMTYwM0MxMkIwMjY3NjAwQzFBMzU5IC8qIFJlYWx0aW1lQW5hbHlzZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTRBNEY2NTcxMUFBOTk3RjEwMEUzOENERCAvKiBSZWFsdGltZU1lZGlhU291cmNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0QTRGNjU3MjFBQTk5N0YxMDBFMzhDREQgLyogUmVhbHRp
bWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzg3NSw2ICsy
Nzg3Myw3IEBACiAJCQkJMUNBRjM0ODEwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVj
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUNBRjM0ODMwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNj
cmlwdE9iamVjdFByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNTY5RDFCMEQ3RTJCODIw
MDdDMzk4MyAvKiBXZWJTY3JpcHRPYmplY3RQcm90b2NvbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
OTMzNUI0OUQxRENCRUY3QzAwRUQ0NjhFIC8qIE5TVG91Y2hCYXJTUEkuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk3QUFCRDFCMTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk3QUFCRDFFMTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXRDaGFubmVsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5N0FBQkQxRjE0RkEwOUQ1MDA3NDU3QUUgLyogV2ViU29ja2V0
Q2hhbm5lbENsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODgzNCw3ICsyODgzMyw2IEBACiAJ
CQkJQkMxQkRGMjQxNTZDMTg4MzAwMUMxMjQzIC8qIERPTUVycm9yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTJFRDYwOUJDMTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBODE4NUYzRTA5NzY1NzY2MDA1ODI2RDkgLyogRE9NSW1wbGVtZW50YXRp
b24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRTM1Q0ExNEQxREJDM0EzRjAwRjgzNTE2IC8qIERP
TUpJVEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTlDNkU0
RTMwRDc0NUUwNTAwNjQ0MkU5IC8qIERPTU1pbWVUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE5QzZFNEU3MEQ3NDVFMTgwMDY0NDJFOSAvKiBET01NaW1lVHlwZUFycmF5LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTUyQjZDOUMyMTVFM0Y0REYwMDY5MEIwNSAvKiBET01OYW1lZEZsb3dDb2xs
ZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
c3BpL2NvY29hL0FWS2l0U1BJLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vc3BpL2NvY29hL0FWS2l0U1BJLmgJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3NwaS9jb2NvYS9BVktpdFNQSS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2
ICs2MSw4IEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIEFWUGxheWVyQ29udHIKIEBwcm9w
ZXJ0eSAoTlNfTk9OQVRPTUlDX0lPU09OTFksIHJlYWRvbmx5KSBBVlBsYXllckNvbnRyb2xsZXJT
dGF0dXMgc3RhdHVzOwogQGVuZAogCitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCiBAY2xhc3Mg
QVZQbGF5ZXJMYXllcjsKIAogQGludGVyZmFjZSBBVlBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXll
clZpZXcgOiBVSVZpZXcKQEAgLTk1LDExICs5NywxMyBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRl
Z2VyLCBBVlBsYXllclZpZXdDCiAtICh2b2lkKXN0YXJ0UGljdHVyZUluUGljdHVyZTsKIC0gKHZv
aWQpc3RvcFBpY3R1cmVJblBpY3R1cmU7CiAKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcp
IEFWUGxheWVyQ29udHJvbGxlciAqcGxheWVyQ29udHJvbGxlcjsKK0Bwcm9wZXJ0eSAobm9uYXRv
bWljLCBzdHJvbmcsIG51bGxhYmxlKSBBVlBsYXllckNvbnRyb2xsZXIgKnBsYXllckNvbnRyb2xs
ZXI7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGdldHRlcj1pc1BpY3R1cmVJblBp
Y3R1cmVBY3RpdmUpIEJPT0wgcGljdHVyZUluUGljdHVyZUFjdGl2ZTsKIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgQk9PTCBwaWN0dXJlSW5QaWN0dXJlV2FzU3RhcnRlZFdoZW5FbnRl
cmluZ0JhY2tncm91bmQ7CiBAZW5kCiAKK05TX0FTU1VNRV9OT05OVUxMX0VORAorCiAjZW5kaWYg
Ly8gVVNFKEFQUExFX0lOVEVSTkFMX1NESykKICNlbmRpZiAvLyBQTEFURk9STShJT1MpCiAKQEAg
LTEzMiw2ICsxMzYsOCBAQCBOU19DTEFTU19BVkFJTEFCTEVfTUFDKDEwXzExKQogCiAjZW5kaWYg
Ly8gRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElPUykKIAor
TlNfQVNTVU1FX05PTk5VTExfQkVHSU4KKwogQGludGVyZmFjZSBBVlZhbHVlVGltaW5nIDogTlNP
YmplY3QgPE5TQ29kaW5nLCBOU0NvcHlpbmcsIE5TTXV0YWJsZUNvcHlpbmc+IAogQGVuZAogCkBA
IC0xMzksMyArMTQ1LDMyIEBAIE5TX0NMQVNTX0FWQUlMQUJMRV9NQUMoMTBfMTEpCiArIChBVlZh
bHVlVGltaW5nICopdmFsdWVUaW1pbmdXaXRoQW5jaG9yVmFsdWU6KGRvdWJsZSlhbmNob3JWYWx1
ZSBhbmNob3JUaW1lU3RhbXA6KE5TVGltZUludGVydmFsKXRpbWVTdGFtcCByYXRlOihkb3VibGUp
cmF0ZTsKIEBwcm9wZXJ0eSAoTlNfTk9OQVRPTUlDX0lPU09OTFksIHJlYWRvbmx5KSBkb3VibGUg
Y3VycmVudFZhbHVlOwogQGVuZAorCitOU19BU1NVTUVfTk9OTlVMTF9FTkQKKworI2lmIFBMQVRG
T1JNKE1BQykKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisjaW1w
b3J0IDxBVktpdC9BVkZ1bmN0aW9uQmFyUGxheWJhY2tDb250cm9sc1Byb3ZpZGVyLmg+CisjaW1w
b3J0IDxBVktpdC9BVkZ1bmN0aW9uQmFyU2NydWJiZXIuaD4KKyNlbHNlCisKK05TX0FTU1VNRV9O
T05OVUxMX0JFR0lOCisKK0Bwcm90b2NvbCBBVkZ1bmN0aW9uQmFyUGxheWJhY2tDb250cm9sc0Nv
bnRyb2xsaW5nIDxOU09iamVjdD4KK0Bwcm9wZXJ0eSAocmVhZG9ubHkpIE5TVGltZUludGVydmFs
IGNvbnRlbnREdXJhdGlvbjsKK0Bwcm9wZXJ0eSAocmVhZG9ubHksIG51bGxhYmxlKSBBVlZhbHVl
VGltaW5nICp0aW1pbmc7CitAcHJvcGVydHkgKHJlYWRvbmx5LCBnZXR0ZXI9aXNTZWVraW5nKSBC
T09MIHNlZWtpbmc7CitAcHJvcGVydHkgKHJlYWRvbmx5KSBOU1RpbWVJbnRlcnZhbCBzZWVrVG9U
aW1lOworLSAodm9pZClzZWVrVG9UaW1lOihOU1RpbWVJbnRlcnZhbCl0aW1lIHRvbGVyYW5jZUJl
Zm9yZTooTlNUaW1lSW50ZXJ2YWwpdG9sZXJhbmNlQmVmb3JlIHRvbGVyYW5jZUFmdGVyOihOU1Rp
bWVJbnRlcnZhbCl0b2xlcmFuY2VBZnRlcjsKK0Bwcm9wZXJ0eSAocmVhZG9ubHkpIEJPT0wgaGFz
RW5hYmxlZEF1ZGlvOworQHByb3BlcnR5IChyZWFkb25seSkgQk9PTCBoYXNFbmFibGVkVmlkZW87
CitAZW5kCisKK0BpbnRlcmZhY2UgQVZGdW5jdGlvbkJhclNjcnViYmVyIDogTlNWaWV3CitAcHJv
cGVydHkgKGFzc2lnbiwgbnVsbGFibGUpIGlkPEFWRnVuY3Rpb25CYXJQbGF5YmFja0NvbnRyb2xz
Q29udHJvbGxpbmc+IHBsYXliYWNrQ29udHJvbHNDb250cm9sbGVyOworQGVuZAorCitOU19BU1NV
TUVfTk9OTlVMTF9FTkQKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNf
TUFOQUdFUikKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9zcGkvY29jb2EvTlNUb3VjaEJhclNQSS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3NwaS9jb2NvYS9OU1RvdWNoQmFyU1BJLmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL2NvY29hL05TVG91Y2hCYXJTUEkuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIFBMQVRGT1JNKE1B
QykgJiYgSEFWRShUT1VDSF9CQVIpCisjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKKworI2lt
cG9ydCA8QXBwS2l0L05TRnVuY3Rpb25CYXJfUHJpdmF0ZS5oPgorI2ltcG9ydCA8QXBwS2l0L05T
VGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXJfV2ViS2l0U1BJLmg+CisjaW1wb3J0IDxBcHBLaXQv
TlNUb3VjaEJhcl9Qcml2YXRlLmg+CisKKyNlbHNlCisKK05TX0FTU1VNRV9OT05OVUxMX0JFR0lO
CisKK0BpbnRlcmZhY2UgTlNUb3VjaEJhckl0ZW0gOiBOU09iamVjdAorQGVuZAorCitAaW50ZXJm
YWNlIE5TQ29sb3JQaWNrZXJUb3VjaEJhckl0ZW0gOiBOU1RvdWNoQmFySXRlbQorQGVuZAorCitA
aW50ZXJmYWNlIE5TVG91Y2hCYXIgOiBOU09iamVjdAorQHByb3BlcnR5IChyZWFkb25seSwgY29w
eSwgbnVsbGFibGUpIE5TQXJyYXk8TlNUb3VjaEJhckl0ZW0gKj4gKml0ZW1zOworQHByb3BlcnR5
IChzdHJvbmcsIG51bGxhYmxlKSBOU1RvdWNoQmFySXRlbSAqZXNjYXBlS2V5UmVwbGFjZW1lbnRJ
dGVtOworQGVuZAorCitAaW50ZXJmYWNlIE5TVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgOiBO
U09iamVjdAorCitAcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcsIG51bGxhYmxlKSBOU0NvbG9y
UGlja2VyVG91Y2hCYXJJdGVtICpjb2xvclBpY2tlckl0ZW07CitAcHJvcGVydHkgKHJlYWRvbmx5
LCBzdHJvbmcsIG51bGxhYmxlKSBOU1NlZ21lbnRlZENvbnRyb2wgKnRleHRTdHlsZTsKK0Bwcm9w
ZXJ0eSAocmVhZG9ubHksIHN0cm9uZywgbnVsbGFibGUpIE5TU2VnbWVudGVkQ29udHJvbCAqdGV4
dEFsaWdubWVudHM7CitAcHJvcGVydHkgKG51bGxhYmxlLCBzdHJvbmcpIE5TVmlld0NvbnRyb2xs
ZXIgKnRleHRMaXN0Vmlld0NvbnRyb2xsZXI7CitAcHJvcGVydHkgQk9PTCB1c2VzTmFycm93VGV4
dFN0eWxlSXRlbTsKKworLSAobnVsbGFibGUgTlNUb3VjaEJhckl0ZW0gKilpdGVtRm9ySWRlbnRp
ZmllcjoobnVsbGFibGUgTlNTdHJpbmcgKilpZGVudGlmaWVyOworCitAZW5kCisKKyNkZWZpbmUg
TlNUb3VjaEJhcldpbGxFbnRlckN1c3RvbWl6YXRpb24gQCJOU1RvdWNoQmFyV2lsbEVudGVyQ3Vz
dG9taXphdGlvbiIKKyNkZWZpbmUgTlNUb3VjaEJhckRpZEV4aXRDdXN0b21pemF0aW9uIEAiTlNU
b3VjaEJhckRpZEV4aXRDdXN0b21pemF0aW9uIgorCitOU19BU1NVTUVfTk9OTlVMTF9FTkQKKwor
I2VuZGlmIC8vIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCisjZW5kaWYgLy8gUExBVEZPUk0oTUFD
KSAmJiBIQVZFKFRPVUNIX0JBUikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9t
YWMvTlNTcGVsbENoZWNrZXJTUEkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9zcGkvbWFjL05TU3BlbGxDaGVja2VyU1BJLmgJKHJldmlzaW9uIDIwODQwNSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9tYWMvTlNTcGVsbENoZWNrZXJTUEkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogLy8gRklYTUU6IFRoaXMgaGVhZGVyIHNob3VsZCBp
bmNsdWRlIHN5c3RlbSBoZWFkZXJzIHdoZW4gcG9zc2libGUuCiAKIGV4dGVybiBOU1N0cmluZyAq
TlNUZXh0Q2hlY2tpbmdJbnNlcnRpb25Qb2ludEtleTsKK2V4dGVybiBOU05vdGlmaWNhdGlvbk5h
bWUgY29uc3QgTlNTcGVsbENoZWNrZXJEaWRDaGFuZ2VBdXRvbWF0aWNUZXh0Q29tcGxldGlvbk5v
dGlmaWNhdGlvbjsKIAogQGludGVyZmFjZSBOU1NwZWxsQ2hlY2tlciAoKQogLSAoTlNJbnRlZ2Vy
KXJlcXVlc3RDYW5kaWRhdGVzRm9yU2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlzZWxlY3RlZFJhbmdl
IGluU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZ1RvQ2hlY2sgdHlwZXM6KE5TVGV4dENoZWNraW5n
VHlwZXMpY2hlY2tpbmdUeXBlcyBvcHRpb25zOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+
ICopb3B0aW9ucyBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOihOU0ludGVnZXIpdGFnIGNvbXBsZXRp
b25IYW5kbGVyOih2b2lkICheKShOU0ludGVnZXIgc2VxdWVuY2VOdW1iZXIsIE5TQXJyYXk8TlNU
ZXh0Q2hlY2tpbmdSZXN1bHQgKj4gKmNhbmRpZGF0ZXMpKWNvbXBsZXRpb25IYW5kbGVyOwpJbmRl
eDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwkocmV2aXNpb24gMjA4NDA1KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTAgQEAKKzIwMTYtMTEtMDQgIEJldGggRGFraW4g
IDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIFN1cHBvcnQgVG91Y2hCYXIgaW4gV2ViS2l0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ0MzcK
KyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAgICByZGFyOi8vcHJvYmxlbS8yODg3
NjUyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ZpZXdQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBtYWtlVG91Y2hC
YXJdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW1dKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF93ZWJfZGlkQWRkTWVkaWFDb250cm9sc01hbmFnZXI6XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfd2ViX2RpZFJlbW92ZU1lZGlhQ29udHJvbHNNYW5hZ2Vy
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaW50ZXJhY3RXaXRoTWVkaWFDb250cm9sc0ZvclRl
c3RpbmddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF93YW50c01lZGlhUGxheWJhY2tDb250cm9s
c1ZpZXddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRXYW50c01lZGlhUGxheWJhY2tDb250
cm9sc1ZpZXc6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfbWVkaWFQbGF5YmFja0NvbnRyb2xz
Vmlld10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2FkZE1lZGlhUGxheWJhY2tDb250cm9sc1Zp
ZXc6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcmVtb3ZlTWVkaWFQbGF5YmFja0NvbnRyb2xz
Vmlld10pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToKKyAgICAgICAgKC1bV0tW
aWV3IG1ha2VUb3VjaEJhcl0pOgorICAgICAgICAoLVtXS1ZpZXcgY2FuZGlkYXRlTGlzdFRvdWNo
QmFySXRlbV0pOgorICAgICAgICAoLVtXS1ZpZXcgX3dlYl9kaWRBZGRNZWRpYUNvbnRyb2xzTWFu
YWdlcjpdKToKKyAgICAgICAgKC1bV0tWaWV3IF93ZWJfZGlkUmVtb3ZlTWVkaWFDb250cm9sc01h
bmFnZXJdKToKKyAgICAgICAgKC1bV0tWaWV3IF93YW50c01lZGlhUGxheWJhY2tDb250cm9sc1Zp
ZXddKToKKyAgICAgICAgKC1bV0tWaWV3IF9zZXRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1Zp
ZXc6XSk6CisgICAgICAgICgtW1dLVmlldyBfbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlld10pOgor
ICAgICAgICAoLVtXS1ZpZXcgX2FkZE1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6XSk6CisgICAg
ICAgICgtW1dLVmlldyBfcmVtb3ZlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlld10pOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3SW1wbDo6Y3VycmVudFRvdWNoQmFyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OmNsaWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXdJbXBsOjpzZXRDbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNDdXN0b21pemluZ1RvdWNoQmFyKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW06CisgICAgICAgICgtW1dL
VGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyIGluaXRXaXRoV2ViVmlld0ltcGw6XSk6Cisg
ICAgICAgICgtW1dLVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyIGRpZERlc3Ryb3lWaWV3
XSk6CisgICAgICAgICgtW1dLVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyIF9zZWxlY3RM
aXN0Ol0pOgorICAgICAgICAoLVtXS1RleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlciBzZXRD
dXJyZW50TGlzdFR5cGU6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xs
ZXIgaW5pdFdpdGhXZWJWaWV3SW1wbDpdKToKKyAgICAgICAgKC1bV0tUZXh0VG91Y2hCYXJJdGVt
Q29udHJvbGxlciBkaWREZXN0cm95Vmlld10pOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0
ZW1Db250cm9sbGVyIHRvdWNoQmFyOm1ha2VJdGVtRm9ySWRlbnRpZmllcjpdKToKKyAgICAgICAg
KC1bV0tUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBpdGVtRm9ySWRlbnRpZmllcjpdKToKKyAg
ICAgICAgKC1bV0tUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBjYW5kaWRhdGVMaXN0VG91Y2hC
YXJJdGVtOmVuZFNlbGVjdGluZ0NhbmRpZGF0ZUF0SW5kZXg6XSk6CisgICAgICAgICgtW1dLVGV4
dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTpjaGFuZ2Vk
Q2FuZGlkYXRlTGlzdFZpc2liaWxpdHk6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRl
bUNvbnRyb2xsZXIgdGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyXSk6CisgICAgICAgICgt
W1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzQm9sZDpdKToKKyAgICAgICAg
KC1bV0tUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRUZXh0SXNJdGFsaWM6XSk6CisgICAg
ICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzVW5kZXJsaW5lZDpd
KToKKyAgICAgICAgKC1bV0tUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBfd2tDaGFuZ2VUZXh0
U3R5bGU6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0Q3Vy
cmVudFRleHRBbGlnbm1lbnQ6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNvbnRy
b2xsZXIgX3drQ2hhbmdlVGV4dEFsaWdubWVudDpdKToKKyAgICAgICAgKC1bV0tUZXh0VG91Y2hC
YXJJdGVtQ29udHJvbGxlciB0ZXh0Q29sb3JdKToKKyAgICAgICAgKC1bV0tUZXh0VG91Y2hCYXJJ
dGVtQ29udHJvbGxlciBzZXRUZXh0Q29sb3I6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFy
SXRlbUNvbnRyb2xsZXIgX3drQ2hhbmdlQ29sb3I6XSk6CisgICAgICAgICgtW1dLVGV4dFRvdWNo
QmFySXRlbUNvbnRyb2xsZXIgdGV4dExpc3RWaWV3Q29udHJvbGxlcl0pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6bWFrZVRvdWNoQmFyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0ltcGw6OmNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3SW1wbDo6bWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjp1c2VNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OmRpc21pc3NUZXh0VG91Y2hCYXJQb3BvdmVySXRlbVdpdGhJZGVudGlm
aWVyKToKKyAgICAgICAgKFdlYktpdDo6dGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkFsbG93ZWRJ
ZGVudGlmaWVycyk6CisgICAgICAgIChXZWJLaXQ6OnBsYWluVGV4dFRvdWNoQmFyQ3VzdG9taXph
dGlvbkRlZmF1bHRJdGVtSWRlbnRpZmllcnMpOgorICAgICAgICAoV2ViS2l0OjpyaWNoVGV4dFRv
dWNoQmFyQ3VzdG9taXphdGlvbkRlZmF1bHRJdGVtSWRlbnRpZmllcnMpOgorICAgICAgICAoV2Vi
S2l0Ojp0b3VjaEJhckRpZEV4aXRDdXN0b21pemF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6dG91
Y2hCYXJXaWxsRW50ZXJDdXN0b21pemF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6ZGlkQ2hhbmdl
QXV0b21hdGljVGV4dENvbXBsZXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
dXBkYXRlVG91Y2hCYXJBbmRSZWZyZXNoVGV4dEJhcklkZW50aWZpZXJzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OnNldFVwVGV4dFRvdWNoQmFyKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6OmlzUmljaGx5RWRpdGFibGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6dGV4dFRvdWNoQmFyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0
ZVRleHRUb3VjaEJhcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVNZWRp
YVRvdWNoQmFyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmZvcmNlUmVxdWVzdENh
bmRpZGF0ZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0
ZVRvdWNoQmFyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNob3VsZFJlcXVlc3RD
YW5kaWRhdGVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNob3dDYW5kaWRhdGVz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OndlYlZpZXdJbXBsQWRkaXRpb25zV2ls
bERlc3Ryb3lWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldEVkaXRhYmxl
RWxlbWVudElzRm9jdXNlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpiZWNvbWVG
aXJzdFJlc3BvbmRlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZWxlY3Rpb25E
aWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dmlkZW9Db250cm9sc01h
bmFnZXJEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dXBkYXRlV2Vi
Vmlld0ltcGxBZGRpdGlvbnMpOiBEZWxldGVkLgorCiAyMDE2LTExLTA0ICBBbGV4IENocmlzdGVu
c2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9s
bGluZyBvdXQgcjIwODI5My4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tWaWV3UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tWaWV3UHJpdmF0ZS5oCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVmlld1ByaXZhdGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNiArMzEsOCBAQAogI2ltcG9ydCA8V2ViS2l0L1dLVmlldy5oPgogI2ltcG9ydCA8
V2ViS2l0L19XS092ZXJsYXlTY3JvbGxiYXJTdHlsZS5oPgogCitAY2xhc3MgQVZGdW5jdGlvbkJh
clNjcnViYmVyOworCiBAaW50ZXJmYWNlIFdLVmlldyAoUHJpdmF0ZSkKIAogLyogQyBTUEkgc3Vw
cG9ydC4gKi8KQEAgLTEzMiw2ICsxMzQsMTEgQEAKIAogLSAodm9pZClfZ2VzdHVyZUV2ZW50V2Fz
Tm90SGFuZGxlZEJ5V2ViQ29yZTooTlNFdmVudCAqKWV2ZW50OwogCitAcHJvcGVydHkgKG5vbmF0
b21pYywgcmVhZHdyaXRlLCBzZXR0ZXI9X3NldFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmll
dzopIEJPT0wgX3dhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzsKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgQVZGdW5jdGlvbkJhclNjcnViYmVyICpfbWVkaWFQbGF5YmFja0Nv
bnRyb2xzVmlldzsKKy0gKHZvaWQpX2FkZE1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6KEFWRnVu
Y3Rpb25CYXJTY3J1YmJlciAqKW1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc7CistICh2b2lkKV9y
ZW1vdmVNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OworCiBAZW5kCiAKICNlbmRpZiAvLyAhVEFS
R0VUX09TX0lQSE9ORQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYlZpZXcubW0JKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsNyAr
MTc0LDEyIEBAIHN0YXRpYyBjb25zdCB1aW50MzJfdCBmaXJzdFNES1ZlcnNpb25XaXQKIAogQGlu
dGVyZmFjZSBXS1dlYlZpZXcgKCkgPFdlYlZpZXdJbXBsRGVsZWdhdGUsIE5TVGV4dElucHV0Q2xp
ZW50PgogQGVuZAotI2VuZGlmCisKKyNpZiBIQVZFKFRPVUNIX0JBUikKK0BpbnRlcmZhY2UgV0tX
ZWJWaWV3ICgpIDxOU1RvdWNoQmFyUHJvdmlkZXI+CitAZW5kCisjZW5kaWYgLy8gSEFWRShUT1VD
SF9CQVIpCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiBzdGF0aWMgSGFzaE1hcDxXZWJLaXQ6
OldlYlBhZ2VQcm94eSosIFdLV2ViVmlldyAqPiYgcGFnZVRvVmlld01hcCgpCiB7CkBAIC0zMTU1
LDYgKzMxNjAsMzggQEAgLSAodm9pZClfd2ViX2dlc3R1cmVFdmVudFdhc05vdEhhbmRsZWRCeQog
CiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCisjaWYgSEFWRShUT1VDSF9CQVIpCisKK0BkeW5h
bWljIHRvdWNoQmFyOworCistIChOU1RvdWNoQmFyICopbWFrZVRvdWNoQmFyCit7CisgICAgcmV0
dXJuIF9pbXBsLT5tYWtlVG91Y2hCYXIoKTsKK30KKworLSAoTlNDYW5kaWRhdGVMaXN0VG91Y2hC
YXJJdGVtICopY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbQoreworICAgIHJldHVybiBfaW1wbC0+
Y2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSgpOworfQorCistICh2b2lkKV93ZWJfZGlkQWRkTWVk
aWFDb250cm9sc01hbmFnZXI6KGlkKWNvbnRyb2xzTWFuYWdlcgoreworICAgIFtzZWxmIF9hZGRN
ZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OmNvbnRyb2xzTWFuYWdlcl07Cit9CisKKy0gKHZvaWQp
X3dlYl9kaWRSZW1vdmVNZWRpYUNvbnRyb2xzTWFuYWdlcgoreworICAgIFtzZWxmIF9yZW1vdmVN
ZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3XTsKK30KKworLSAodm9pZClfaW50ZXJhY3RXaXRoTWVk
aWFDb250cm9sc0ZvclRlc3RpbmcKK3sKKyAgICBbc2VsZiBfc2V0V2FudHNNZWRpYVBsYXliYWNr
Q29udHJvbHNWaWV3OllFU107CisgICAgW3NlbGYgbWFrZVRvdWNoQmFyXTsKK30KKworI2VuZGlm
IC8vIEhBVkUoVE9VQ0hfQkFSKQorCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcg
KFdLUHJpdmF0ZSkKQEAgLTQ1MjksNiArNDU2Niw0MSBAQCAtICh2b2lkKXNldFVzZXJJbnRlcmZh
Y2VMYXlvdXREaXJlY3Rpb246CiAgICAgX2ltcGwtPnNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJl
Y3Rpb24odXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbik7CiB9CiAKKy0gKEJPT0wpX3dhbnRz
TWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldworeworI2lmIEhBVkUoVE9VQ0hfQkFSKQorICAgIHJl
dHVybiBfaW1wbC0+Y2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCk7CisjZWxz
ZQorICAgIHJldHVybiBOTzsKKyNlbmRpZgorfQorCistICh2b2lkKV9zZXRXYW50c01lZGlhUGxh
eWJhY2tDb250cm9sc1ZpZXc6KEJPT0wpd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Cit7
CisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgX2ltcGwtPnNldENsaWVudFdhbnRzTWVkaWFQbGF5
YmFja0NvbnRyb2xzVmlldyh3YW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcpOworI2VuZGlm
Cit9CisKKy0gKEFWRnVuY3Rpb25CYXJTY3J1YmJlciAqKV9tZWRpYVBsYXliYWNrQ29udHJvbHNW
aWV3Cit7CisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgcmV0dXJuIF9pbXBsLT5jbGllbnRXYW50
c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSA/IF9pbXBsLT5tZWRpYVBsYXliYWNrQ29udHJv
bHNWaWV3KCkgOiBuaWw7CisjZWxzZQorICAgIHJldHVybiBuaWw7CisjZW5kaWYKK30KKworLy8g
VGhpcyBtZXRob2QgaXMgZm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUuCistICh2b2lkKV9hZGRN
ZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OihBVkZ1bmN0aW9uQmFyU2NydWJiZXIgKiltZWRpYVBs
YXliYWNrQ29udHJvbHNWaWV3Cit7Cit9CisKKy8vIFRoaXMgbWV0aG9kIGlzIGZvciBzdWJjbGFz
c2VzIHRvIG92ZXJyaWRlLgorLSAodm9pZClfcmVtb3ZlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmll
dworeworfQorCiAjZW5kaWYKIAogQGVuZApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgJKHJldmlzaW9uIDIwODQw
NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw3IEBAIHR5cGVkZWYgTlNfRU5VTShOU0lu
dGVnZXIsIF9XS0ltbWVkaWF0ZUEKIAogI2VuZGlmCiAKK0BjbGFzcyBBVkZ1bmN0aW9uQmFyU2Ny
dWJiZXI7CiBAY2xhc3MgV0tCcm93c2luZ0NvbnRleHRIYW5kbGU7CiBAY2xhc3MgX1dLRnJhbWVI
YW5kbGU7CiBAY2xhc3MgX1dLSGl0VGVzdFJlc3VsdDsKQEAgLTIwMiw2ICsyMDMsMTIgQEAgdHlw
ZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dLSW1tZWRpYXRlQQogLSAoTlNQcmludE9wZXJhdGlv
biAqKV9wcmludE9wZXJhdGlvbldpdGhQcmludEluZm86KE5TUHJpbnRJbmZvICopcHJpbnRJbmZv
OwogLSAoTlNQcmludE9wZXJhdGlvbiAqKV9wcmludE9wZXJhdGlvbldpdGhQcmludEluZm86KE5T
UHJpbnRJbmZvICopcHJpbnRJbmZvIGZvckZyYW1lOihfV0tGcmFtZUhhbmRsZSAqKWZyYW1lSGFu
ZGxlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjEyKSwgaW9zKDEwLjApKTsKIAorLy8gRklY
TUU6IFRoaXMgU1BJIHNob3VsZCBiZWNvbWUgYSBwYXJ0IG9mIHRoZSBXS1VJRGVsZWdhdGUuIHJk
YXI6Ly9wcm9ibGVtLzI2NTYxNTM3CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZHdyaXRlLCBz
ZXR0ZXI9X3NldFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzopIEJPT0wgX3dhbnRzTWVk
aWFQbGF5YmFja0NvbnRyb2xzVmlldyBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJB
KSk7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEFWRnVuY3Rpb25CYXJTY3J1YmJl
ciAqX21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tf
TUFDX1RCQSkpOworLSAodm9pZClfYWRkTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzooQVZGdW5j
dGlvbkJhclNjcnViYmVyICopbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyBXS19BUElfQVZBSUxB
QkxFKG1hY29zeChXS19NQUNfVEJBKSk7CistICh2b2lkKV9yZW1vdmVNZWRpYVBsYXliYWNrQ29u
dHJvbHNWaWV3IFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpKTsKKwogI2VuZGlm
CiAKIC0gKFdLTmF2aWdhdGlvbiAqKV9yZWxvYWRXaXRob3V0Q29udGVudEJsb2NrZXJzIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3N4KDEwLjEyKSwgaW9zKDEwLjApKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHJldmlzaW9uIDIwODQwNSkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkod29ya2luZyBjb3B5KQpA
QCAtNTUsNiArNTUsMTEgQEAgQGludGVyZmFjZSBXS1ZpZXdEYXRhIDogTlNPYmplY3QgewogQGlu
dGVyZmFjZSBXS1ZpZXcgKCkgPFdlYlZpZXdJbXBsRGVsZWdhdGU+CiBAZW5kCiAKKyNpZiBIQVZF
KFRPVUNIX0JBUikKK0BpbnRlcmZhY2UgV0tWaWV3ICgpIDxOU1RvdWNoQmFyUHJvdmlkZXI+CitA
ZW5kCisjZW5kaWYKKwogQGltcGxlbWVudGF0aW9uIFdLVmlldwogCiAjaWYgV0tfQVBJX0VOQUJM
RUQKQEAgLTk3Nyw2ICs5ODIsMzIgQEAgLSAodm9pZClfZGlkVXBkYXRlQ2FuZGlkYXRlTGlzdFZp
c2liaWxpdAogewogfQogCisjaWYgSEFWRShUT1VDSF9CQVIpCisKK0BkeW5hbWljIHRvdWNoQmFy
OworCistIChOU1RvdWNoQmFyICopbWFrZVRvdWNoQmFyCit7CisgICAgcmV0dXJuIF9kYXRhLT5f
aW1wbC0+bWFrZVRvdWNoQmFyKCk7Cit9CisKKy0gKE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRl
bSAqKWNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0KK3sKKyAgICByZXR1cm4gX2RhdGEtPl9pbXBs
LT5jYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtKCk7Cit9CisKKy0gKHZvaWQpX3dlYl9kaWRBZGRN
ZWRpYUNvbnRyb2xzTWFuYWdlcjooaWQpY29udHJvbHNNYW5hZ2VyCit7CisgICAgW3NlbGYgX2Fk
ZE1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6Y29udHJvbHNNYW5hZ2VyXTsKK30KKworLSAodm9p
ZClfd2ViX2RpZFJlbW92ZU1lZGlhQ29udHJvbHNNYW5hZ2VyCit7CisgICAgW3NlbGYgX3JlbW92
ZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXddOworfQorCisjZW5kaWYgLy8gSEFWRShUT1VDSF9C
QVIpCisKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdLVmlldyAoUHJpdmF0ZSkKQEAgLTE0Njcs
MTAgKzE0OTgsNDEgQEAgLSAodm9pZClzZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOgog
ICAgIF9kYXRhLT5faW1wbC0+c2V0VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbih1c2VySW50
ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKTsKIH0KIAotQGVuZAorLSAoQk9PTClfd2FudHNNZWRpYVBs
YXliYWNrQ29udHJvbHNWaWV3Cit7CisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgcmV0dXJuIF9k
YXRhLT5faW1wbC0+Y2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCk7CisjZWxz
ZQorICAgIHJldHVybiBOTzsKKyNlbmRpZgorfQogCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBfX01B
Q19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMCAmJiBVU0UoQVBQTEVfSU5URVJO
QUxfU0RLKQotI2ltcG9ydCA8V2ViS2l0QWRkaXRpb25zL1dLVmlld0FkZGl0aW9ucy5tbT4KKy0g
KHZvaWQpX3NldFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzooQk9PTCl3YW50c01lZGlh
UGxheWJhY2tDb250cm9sc1ZpZXcKK3sKKyNpZiBIQVZFKFRPVUNIX0JBUikKKyAgICBfZGF0YS0+
X2ltcGwtPnNldENsaWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyh3YW50c01lZGlh
UGxheWJhY2tDb250cm9sc1ZpZXcpOworI2VuZGlmCit9CisKKy0gKEFWRnVuY3Rpb25CYXJTY3J1
YmJlciAqKV9tZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Cit7CisjaWYgSEFWRShUT1VDSF9CQVIp
CisgICAgcmV0dXJuIF9kYXRhLT5faW1wbC0+Y2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJv
bHNWaWV3KCkgPyBfZGF0YS0+X2ltcGwtPm1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSA6IG5p
bDsKKyNlbHNlCisgICAgcmV0dXJuIG5pbDsKICNlbmRpZgorfQorCisvLyBUaGlzIG1ldGhvZCBp
cyBmb3Igc3ViY2xhc3NlcyB0byBvdmVycmlkZS4KKy0gKHZvaWQpX2FkZE1lZGlhUGxheWJhY2tD
b250cm9sc1ZpZXc6KEFWRnVuY3Rpb25CYXJTY3J1YmJlciAqKW1lZGlhUGxheWJhY2tDb250cm9s
c1ZpZXcKK3sKK30KKworLy8gVGhpcyBtZXRob2QgaXMgZm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJp
ZGUuCistICh2b2lkKV9yZW1vdmVNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Cit7Cit9CisKK0Bl
bmQKIAogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5oCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAt
NTIsOSArNTIsMTcgQEAgT0JKQ19DTEFTUyBXS1dlYlZpZXc7CiBPQkpDX0NMQVNTIFdLV2luZG93
VmlzaWJpbGl0eU9ic2VydmVyOwogT0JKQ19DTEFTUyBfV0tUaHVtYm5haWxWaWV3OwogCi0jaWYg
VVNFKEFQUExFX0lOVEVSTkFMX1NESykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJF
RCA+PSAxMDEyMDAKLSNpbXBvcnQgPFdlYktpdEFkZGl0aW9ucy9XZWJWaWV3SW1wbEFkZGl0aW9u
c0RlY2xhcmF0aW9ucy5oPgotI2VuZGlmCisjaWYgSEFWRShUT1VDSF9CQVIpCitPQkpDX0NMQVNT
IEFWRnVuY3Rpb25CYXJQbGF5YmFja0NvbnRyb2xzUHJvdmlkZXI7CitPQkpDX0NMQVNTIEFWRnVu
Y3Rpb25CYXJTY3J1YmJlcjsKK09CSkNfQ0xBU1MgTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVt
OworT0JKQ19DTEFTUyBOU0N1c3RvbVRvdWNoQmFySXRlbTsKK09CSkNfQ0xBU1MgTlNUb3VjaEJh
cjsKK09CSkNfQ0xBU1MgTlNUb3VjaEJhckl0ZW07CitPQkpDX0NMQVNTIE5TUG9wb3ZlclRvdWNo
QmFySXRlbTsKK09CSkNfQ0xBU1MgV0tUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlcjsKK09CSkNf
Q0xBU1MgV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXI7CisjZW5kaWYgLy8gSEFWRShUT1VDSF9C
QVIpCiAKIEBwcm90b2NvbCBXZWJWaWV3SW1wbERlbGVnYXRlCiAKQEAgLTQ4MCwxMSArNDg4LDkg
QEAgcHVibGljOgogICAgIHZvaWQgcmlnaHRNb3VzZURyYWdnZWQoTlNFdmVudCAqKTsKICAgICB2
b2lkIHJpZ2h0TW91c2VVcChOU0V2ZW50ICopOwogCi0gICAgdm9pZCB1cGRhdGVXZWJWaWV3SW1w
bEFkZGl0aW9ucygpOwogICAgIHZvaWQgZm9yY2VSZXF1ZXN0Q2FuZGlkYXRlc0ZvclRlc3Rpbmco
KTsKICAgICBib29sIHNob3VsZFJlcXVlc3RDYW5kaWRhdGVzKCkgY29uc3Q7CiAgICAgdm9pZCBz
aG93Q2FuZGlkYXRlcyhOU0FycmF5ICpjYW5kaWRhdGVzLCBOU1N0cmluZyAqLCBOU1JlY3QgcmVj
dE9mVHlwZWRTdHJpbmcsIE5TUmFuZ2Ugc2VsZWN0ZWRSYW5nZSwgTlNWaWV3ICosIHZvaWQgKF5j
b21wbGV0aW9uSGFuZGxlcikoTlNUZXh0Q2hlY2tpbmdSZXN1bHQgKmFjY2VwdGVkQ2FuZGlkYXRl
KSk7Ci0gICAgdm9pZCB3ZWJWaWV3SW1wbEFkZGl0aW9uc1dpbGxEZXN0cm95VmlldygpOwogCiAg
ICAgYm9vbCB3aW5kb3dJc0Zyb250V2luZG93VW5kZXJNb3VzZShOU0V2ZW50ICopOwogCkBAIC00
OTYsMTIgKzUwMiw1NSBAQCBwdWJsaWM6CiAKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID49IDEwMTIwMCAKICAgICB2b2lkIGhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKE5TVGV4
dENoZWNraW5nUmVzdWx0ICphY2NlcHRlZENhbmRpZGF0ZSk7Ci0jaWYgVVNFKEFQUExFX0lOVEVS
TkFMX1NESykKLSNpbXBvcnQgPFdlYktpdEFkZGl0aW9ucy9XZWJWaWV3SW1wbEFkZGl0aW9ucy5o
PgotI2VuZGlmCiAjZW5kaWYKIAorI2lmIEhBVkUoVE9VQ0hfQkFSKQorICAgIE5TVG91Y2hCYXIg
Km1ha2VUb3VjaEJhcigpOworICAgIHZvaWQgdXBkYXRlVG91Y2hCYXIoKTsKKyAgICBOU1RvdWNo
QmFyICpjdXJyZW50VG91Y2hCYXIoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRUb3VjaEJhci5n
ZXQoKTsgfQorICAgIE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSAqY2FuZGlkYXRlTGlzdFRv
dWNoQmFySXRlbSgpIGNvbnN0OworICAgIEFWRnVuY3Rpb25CYXJTY3J1YmJlciAqbWVkaWFQbGF5
YmFja0NvbnRyb2xzVmlldygpIGNvbnN0OworICAgIE5TVG91Y2hCYXIgKnRleHRUb3VjaEJhcigp
IGNvbnN0OworICAgIHZvaWQgZGlzbWlzc1RleHRUb3VjaEJhclBvcG92ZXJJdGVtV2l0aElkZW50
aWZpZXIoTlNTdHJpbmcgKik7CisKKyAgICBib29sIGNsaWVudFdhbnRzTWVkaWFQbGF5YmFja0Nv
bnRyb2xzVmlldygpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29u
dHJvbHNWaWV3OyB9CisgICAgdm9pZCBzZXRDbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9s
c1ZpZXcoYm9vbCBjbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcpIHsgbV9jbGll
bnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcgPSBjbGllbnRXYW50c01lZGlhUGxheWJh
Y2tDb250cm9sc1ZpZXc7IH0KKworICAgIHZvaWQgdXBkYXRlVG91Y2hCYXJBbmRSZWZyZXNoVGV4
dEJhcklkZW50aWZpZXJzKCk7CisgICAgdm9pZCBzZXRJc0N1c3RvbWl6aW5nVG91Y2hCYXIoYm9v
bCBpc0N1c3RvbWl6aW5nVG91Y2hCYXIpIHsgbV9pc0N1c3RvbWl6aW5nVG91Y2hCYXIgPSBpc0N1
c3RvbWl6aW5nVG91Y2hCYXI7IH07CisjZW5kaWYgLy8gSEFWRShUT1VDSF9CQVIpCisKIHByaXZh
dGU6CisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgdm9pZCBzZXRVcFRleHRUb3VjaEJhcihOU1Rv
dWNoQmFyICopOworICAgIHZvaWQgdXBkYXRlVGV4dFRvdWNoQmFyKCk7CisgICAgdm9pZCB1cGRh
dGVNZWRpYVRvdWNoQmFyKCk7CisKKyAgICBib29sIHVzZU1lZGlhUGxheWJhY2tDb250cm9sc1Zp
ZXcoKSBjb25zdDsKKyAgICBib29sIGlzUmljaGx5RWRpdGFibGUoKSBjb25zdDsKKworICAgIGJv
b2wgbV9jbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcgeyBmYWxzZSB9OworICAg
IGJvb2wgbV9jYW5DcmVhdGVUb3VjaEJhcnMgeyBmYWxzZSB9OworICAgIGJvb2wgbV9zdGFydGVk
TGlzdGVuaW5nVG9DdXN0b21pemF0aW9uRXZlbnRzIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNV
cGRhdGluZ1RleHRUb3VjaEJhciB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzQ3VzdG9taXppbmdU
b3VjaEJhciB7IGZhbHNlIH07CisKKyAgICBSZXRhaW5QdHI8TlNUb3VjaEJhcj4gbV9jdXJyZW50
VG91Y2hCYXI7CisgICAgUmV0YWluUHRyPE5TVG91Y2hCYXI+IG1fcmljaFRleHRUb3VjaEJhcjsK
KyAgICBSZXRhaW5QdHI8TlNUb3VjaEJhcj4gbV9wbGFpblRleHRUb3VjaEJhcjsKKyAgICBSZXRh
aW5QdHI8V0tUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlcj4gbV90ZXh0VG91Y2hCYXJJdGVtQ29u
dHJvbGxlcjsKKyAgICBSZXRhaW5QdHI8TlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtPiBtX3Jp
Y2hUZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTsKKyAgICBSZXRhaW5QdHI8TlNDYW5kaWRh
dGVMaXN0VG91Y2hCYXJJdGVtPiBtX3BsYWluVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW07
CisgICAgUmV0YWluUHRyPE5TQXJyYXk+IG1fZW1wdHlDYW5kaWRhdGVzQXJyYXk7CisgICAgUmV0
YWluUHRyPFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyPiBtX3BsYXliYWNrQ29udHJvbHNNYW5h
Z2VyOworICAgIFJldGFpblB0cjxOU0N1c3RvbVRvdWNoQmFySXRlbT4gbV9leGl0RnVsbFNjcmVl
bkJ1dHRvbjsKKworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAg
ICBSZXRhaW5QdHI8QVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNQcm92aWRlcj4gbV9tZWRp
YVRvdWNoQmFyUHJvdmlkZXI7CisgICAgUmV0YWluUHRyPEFWRnVuY3Rpb25CYXJTY3J1YmJlcj4g
bV9tZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OworI2VuZGlmIC8vIEVOQUJMRShXRUJfUExBWUJB
Q0tfQ09OVFJPTFNfTUFOQUdFUikKKyNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikKKwogICAgIFdl
YWtQdHI8V2ViVmlld0ltcGw+IGNyZWF0ZVdlYWtQdHIoKSB7IHJldHVybiBtX3dlYWtQdHJGYWN0
b3J5LmNyZWF0ZVdlYWtQdHIoKTsgfQogCiAgICAgYm9vbCBzdXBwb3J0c0FyYml0cmFyeUxheW91
dE1vZGVzKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2Vi
Vmlld0ltcGwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29h
L1dlYlZpZXdJbXBsLm1tCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0JKHdvcmtpbmcgY29weSkKQEAgLTYwLDExICs2MCwx
MyBAQAogI2ltcG9ydCAiV2ViRXZlbnRGYWN0b3J5LmgiCiAjaW1wb3J0ICJXZWJJbnNwZWN0b3JQ
cm94eS5oIgogI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1wb3J0ICJXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyUHJveHkuaCIKICNpbXBvcnQgIldlYlByb2Nlc3NQb29sLmgiCiAjaW1wb3J0
ICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQgIl9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5SW50
ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1RodW1ibmFpbFZpZXdJbnRlcm5hbC5oIgogI2ltcG9ydCA8
SElUb29sYm94L0NhcmJvbkV2ZW50c0NvcmUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQVZLaXRTUEku
aD4KICNpbXBvcnQgPFdlYkNvcmUvQVhPYmplY3RDYWNoZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9B
Y3Rpdml0eVN0YXRlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NvbG9yTWFjLmg+CkBAIC04MCw2ICs4
Miw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6
ZXJTUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvTlNTcGVsbENoZWNrZXJTUEkuaD4KICNpbXBvcnQg
PFdlYkNvcmUvTlNUZXh0RmluZGVyU1BJLmg+CisjaW1wb3J0IDxXZWJDb3JlL05TVG91Y2hCYXJT
UEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvTlNXaW5kb3dTUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUv
UGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaD4KICNpbXBvcnQgPFdlYkNvcmUvU29mdExpbmtpbmcu
aD4KQEAgLTkwLDEzICs5MywxOSBAQAogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlRnVsbFNjcmVl
blBsYWNlaG9sZGVyVmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlRnVsbFNjcmVlbldp
bmRvdy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlTlNTdHJpbmdFeHRyYXMuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIuaD4KICNpbXBvcnQgPFdlYktp
dFN5c3RlbUludGVyZmFjZS5oPgogI2ltcG9ydCA8c3lzL3N0YXQuaD4KICNpbXBvcnQgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgorI2ltcG9ydCA8d3RmL1RlbXBvcmFyeUNoYW5nZS5oPgogCi0jaWYg
VVNFKEFQUExFX0lOVEVSTkFMX1NESykKLSNpbXBvcnQgPFdlYktpdEFkZGl0aW9ucy9XZWJWaWV3
SW1wbEluY2x1ZGVzLmg+Ci0jZW5kaWYKKyNpZiBIQVZFKFRPVUNIX0JBUikgJiYgRU5BQkxFKFdF
Ql9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorU09GVF9MSU5LX0ZSQU1FV09SSyhBVktpdCkK
K1NPRlRfTElOS19DTEFTUyhBVktpdCwgQVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNQcm92
aWRlcikKK1NPRlRfTElOS19DTEFTUyhBVktpdCwgQVZGdW5jdGlvbkJhclNjcnViYmVyKQorCitz
dGF0aWMgTlNTdHJpbmcgKiBjb25zdCBXS01lZGlhRXhpdEZ1bGxTY3JlZW5JdGVtID0gQCJXS01l
ZGlhRXhpdEZ1bGxTY3JlZW5JdGVtIjsKKyNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikgJiYgRU5B
QkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQogCiBTT0ZUX0xJTktfQ09OU1RBTlRf
TUFZX0ZBSUwoTG9va3VwLCBMVU5vdGlmaWNhdGlvblBvcG92ZXJXaWxsQ2xvc2UsIE5TU3RyaW5n
ICopCiAKQEAgLTQzMywyOSArNDQyLDcwNCBAQCAtIChCT09MKXRyeVRvUGVyZm9ybTooU0VMKWFj
dGlvbiB3aXRoOihpCiAKIEBlbmQKIAotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPj0gMTAxMjAwICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0jaW1wb3J0IDxXZWJLaXRB
ZGRpdGlvbnMvV2ViVmlld0ltcGxBZGRpdGlvbnMubW0+Ci0jZWxzZQordXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKKworI2lmIEhBVkUoVE9VQ0hfQkFSKQorCitAaW50ZXJmYWNlIFdLVGV4dExpc3RU
b3VjaEJhclZpZXdDb250cm9sbGVyIDogTlNWaWV3Q29udHJvbGxlciB7CitAcHJpdmF0ZQorICAg
IFdlYlZpZXdJbXBsKiBfd2ViVmlld0ltcGw7Cit9CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBM
aXN0VHlwZSBjdXJyZW50TGlzdFR5cGU7CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZp
ZXdJbXBsOihXZWJWaWV3SW1wbCopd2ViVmlld0ltcGw7CisKK0BlbmQKKworQGltcGxlbWVudGF0
aW9uIFdLVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyCisKK0BzeW50aGVzaXplIGN1cnJl
bnRMaXN0VHlwZT1fY3VycmVudExpc3RUeXBlOworCitzdGF0aWMgY29uc3QgQ0dGbG9hdCBsaXN0
Q29udHJvbFNlZ21lbnRXaWR0aCA9IDY3Oworc3RhdGljIGNvbnN0IENHRmxvYXQgZXhpdEZ1bGxT
Y3JlZW5CdXR0b25XaWR0aCA9IDY0OworCitzdGF0aWMgY29uc3QgTlNVSW50ZWdlciBub0xpc3RT
ZWdtZW50ID0gMDsKK3N0YXRpYyBjb25zdCBOU1VJbnRlZ2VyIHVub3JkZXJlZExpc3RTZWdtZW50
ID0gMTsKK3N0YXRpYyBjb25zdCBOU1VJbnRlZ2VyIG9yZGVyZWRMaXN0U2VnbWVudCA9IDI7CisK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZpZXdJbXBsOihXZWJWaWV3SW1wbCopd2ViVmll
d0ltcGwKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKworICAgIF93ZWJWaWV3SW1wbCA9IHdlYlZpZXdJbXBsOworCisgICAgTlNTZWdtZW50
ZWRDb250cm9sICppbnNlcnRMaXN0Q29udHJvbCA9IFtOU1NlZ21lbnRlZENvbnRyb2wgc2VnbWVu
dGVkQ29udHJvbFdpdGhMYWJlbHM6QFsgV2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVOb25lKCksIFdl
YkNvcmU6Omluc2VydExpc3RUeXBlQnVsbGV0ZWQoKSwgV2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVO
dW1iZXJlZCgpIF0gdHJhY2tpbmdNb2RlOk5TU2VnbWVudFN3aXRjaFRyYWNraW5nU2VsZWN0T25l
IHRhcmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3IoX3NlbGVjdExpc3Q6KV07CisgICAgW2luc2Vy
dExpc3RDb250cm9sIHNldFdpZHRoOmxpc3RDb250cm9sU2VnbWVudFdpZHRoIGZvclNlZ21lbnQ6
bm9MaXN0U2VnbWVudF07CisgICAgW2luc2VydExpc3RDb250cm9sIHNldFdpZHRoOmxpc3RDb250
cm9sU2VnbWVudFdpZHRoIGZvclNlZ21lbnQ6dW5vcmRlcmVkTGlzdFNlZ21lbnRdOworICAgIFtp
bnNlcnRMaXN0Q29udHJvbCBzZXRXaWR0aDpsaXN0Q29udHJvbFNlZ21lbnRXaWR0aCBmb3JTZWdt
ZW50Om9yZGVyZWRMaXN0U2VnbWVudF07CisgICAgaW5zZXJ0TGlzdENvbnRyb2wuZm9udCA9IFtO
U0ZvbnQgc3lzdGVtRm9udE9mU2l6ZToxNV07CisKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBw
dXNoCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xh
cmF0aW9ucyIKKyAgICBpZCBzZWdtZW50RWxlbWVudCA9IE5TQWNjZXNzaWJpbGl0eVVuaWdub3Jl
ZERlc2NlbmRhbnQoaW5zZXJ0TGlzdENvbnRyb2wpOworICAgIE5TQXJyYXkgKnNlZ21lbnRzID0g
W3NlZ21lbnRFbGVtZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxp
dHlDaGlsZHJlbkF0dHJpYnV0ZV07CisgICAgQVNTRVJUKHNlZ21lbnRzLmNvdW50ID09IDMpOwor
ICAgIFtzZWdtZW50c1tub0xpc3RTZWdtZW50XSBhY2Nlc3NpYmlsaXR5U2V0T3ZlcnJpZGVWYWx1
ZTpXZWJDb3JlOjppbnNlcnRMaXN0VHlwZU5vbmUoKSBmb3JBdHRyaWJ1dGU6TlNBY2Nlc3NpYmls
aXR5RGVzY3JpcHRpb25BdHRyaWJ1dGVdOworICAgIFtzZWdtZW50c1t1bm9yZGVyZWRMaXN0U2Vn
bWVudF0gYWNjZXNzaWJpbGl0eVNldE92ZXJyaWRlVmFsdWU6V2ViQ29yZTo6aW5zZXJ0TGlzdFR5
cGVCdWxsZXRlZEFjY2Vzc2liaWxpdHlUaXRsZSgpIGZvckF0dHJpYnV0ZTpOU0FjY2Vzc2liaWxp
dHlEZXNjcmlwdGlvbkF0dHJpYnV0ZV07CisgICAgW3NlZ21lbnRzW29yZGVyZWRMaXN0U2VnbWVu
dF0gYWNjZXNzaWJpbGl0eVNldE92ZXJyaWRlVmFsdWU6V2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVO
dW1iZXJlZEFjY2Vzc2liaWxpdHlUaXRsZSgpIGZvckF0dHJpYnV0ZTpOU0FjY2Vzc2liaWxpdHlE
ZXNjcmlwdGlvbkF0dHJpYnV0ZV07CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisKKyAg
ICBzZWxmLnZpZXcgPSBpbnNlcnRMaXN0Q29udHJvbDsKKworICAgIHJldHVybiBzZWxmOworfQor
CistICh2b2lkKWRpZERlc3Ryb3lWaWV3Cit7CisgICAgX3dlYlZpZXdJbXBsID0gbnVsbHB0cjsK
K30KKworLSAodm9pZClfc2VsZWN0TGlzdDooaWQpc2VuZGVyCit7CisgICAgaWYgKCFfd2ViVmll
d0ltcGwpCisgICAgICAgIHJldHVybjsKKworICAgIE5TU2VnbWVudGVkQ29udHJvbCAqaW5zZXJ0
TGlzdENvbnRyb2wgPSAoTlNTZWdtZW50ZWRDb250cm9sICopc2VsZi52aWV3OworICAgIHN3aXRj
aChpbnNlcnRMaXN0Q29udHJvbC5zZWxlY3RlZFNlZ21lbnQpIHsKKyAgICBjYXNlIG5vTGlzdFNl
Z21lbnQ6CisgICAgICAgIC8vIFRoZXJlIGlzIG5vICJyZW1vdmUgbGlzdCIgZWRpdCBjb21tYW5k
LCBidXQgSW5zZXJ0T3JkZXJlZExpc3QgYW5kIEluc2VydFVub3JkZXJlZExpc3QgYm90aAorICAg
ICAgICAvLyBiZWhhdmUgYXMgdG9nZ2xlcywgc28gd2UgY2FuIGludm9rZSB0aGUgYXBwcm9wcmlh
dGUgZWRpdCBjb21tYW5kIGRlcGVuZGluZyBvbiBvdXIgX2N1cnJlbnRMaXN0VHlwZQorICAgICAg
ICAvLyB0byByZW1vdmUgYW4gZXhpc3RpbmcgbGlzdC4gV2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0
aGluZyBpZiBfY3VycmVudExpc3RUeXBlIGlzIE5vTGlzdC4KKyAgICAgICAgaWYgKF9jdXJyZW50
TGlzdFR5cGUgPT0gT3JkZXJlZExpc3QpCisgICAgICAgICAgICBfd2ViVmlld0ltcGwtPnBhZ2Uo
KS5leGVjdXRlRWRpdENvbW1hbmQoQCJJbnNlcnRPcmRlcmVkTGlzdCIsIEAiIik7CisgICAgICAg
IGVsc2UgaWYgKF9jdXJyZW50TGlzdFR5cGUgPT0gVW5vcmRlcmVkTGlzdCkKKyAgICAgICAgICAg
IF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZChAIkluc2VydFVub3JkZXJl
ZExpc3QiLCBAIiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHVub3JkZXJlZExpc3RTZWdt
ZW50OgorICAgICAgICBfd2ViVmlld0ltcGwtPnBhZ2UoKS5leGVjdXRlRWRpdENvbW1hbmQoQCJJ
bnNlcnRVbm9yZGVyZWRMaXN0IiwgQCIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcmRl
cmVkTGlzdFNlZ21lbnQ6CisgICAgICAgIF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0
Q29tbWFuZChAIkluc2VydE9yZGVyZWRMaXN0IiwgQCIiKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgX3dlYlZpZXdJbXBsLT5kaXNtaXNzVGV4dFRvdWNoQmFyUG9wb3Zlckl0ZW1XaXRo
SWRlbnRpZmllcihOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0TGlzdCk7Cit9CisKKy0gKHZv
aWQpc2V0Q3VycmVudExpc3RUeXBlOihMaXN0VHlwZSlsaXN0VHlwZQoreworICAgIE5TU2VnbWVu
dGVkQ29udHJvbCAqaW5zZXJ0TGlzdENvbnRyb2wgPSAoTlNTZWdtZW50ZWRDb250cm9sICopc2Vs
Zi52aWV3OworICAgIHN3aXRjaCAobGlzdFR5cGUpIHsKKyAgICBjYXNlIE5vTGlzdDoKKyAgICAg
ICAgW2luc2VydExpc3RDb250cm9sIHNldFNlbGVjdGVkOllFUyBmb3JTZWdtZW50Om5vTGlzdFNl
Z21lbnRdOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE9yZGVyZWRMaXN0OgorICAgICAgICBb
aW5zZXJ0TGlzdENvbnRyb2wgc2V0U2VsZWN0ZWQ6WUVTIGZvclNlZ21lbnQ6b3JkZXJlZExpc3RT
ZWdtZW50XTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBVbm9yZGVyZWRMaXN0OgorICAgICAg
ICBbaW5zZXJ0TGlzdENvbnRyb2wgc2V0U2VsZWN0ZWQ6WUVTIGZvclNlZ21lbnQ6dW5vcmRlcmVk
TGlzdFNlZ21lbnRdOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBfY3VycmVudExpc3RU
eXBlID0gbGlzdFR5cGU7Cit9CisKK0BlbmQKKworQGludGVyZmFjZSBXS1RleHRUb3VjaEJhckl0
ZW1Db250cm9sbGVyIDogTlNUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciA8TlNDYW5kaWRhdGVM
aXN0VG91Y2hCYXJJdGVtRGVsZWdhdGUsIE5TVG91Y2hCYXJEZWxlZ2F0ZT4geworQHByaXZhdGUK
KyAgICBCT09MIF90ZXh0SXNCb2xkOworICAgIEJPT0wgX3RleHRJc0l0YWxpYzsKKyAgICBCT09M
IF90ZXh0SXNVbmRlcmxpbmVkOworICAgIE5TVGV4dEFsaWdubWVudCBfY3VycmVudFRleHRBbGln
bm1lbnQ7CisgICAgUmV0YWluUHRyPE5TQ29sb3I+IF90ZXh0Q29sb3I7CisgICAgUmV0YWluUHRy
PFdLVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyPiBfdGV4dExpc3RUb3VjaEJhclZpZXdD
b250cm9sbGVyOworCitAcHJpdmF0ZQorICAgIFdlYlZpZXdJbXBsKiBfd2ViVmlld0ltcGw7Cit9
CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIHRleHRJc0JvbGQ7CitAcHJvcGVydHkgKG5v
bmF0b21pYykgQk9PTCB0ZXh0SXNJdGFsaWM7CitAcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCB0
ZXh0SXNVbmRlcmxpbmVkOworQHByb3BlcnR5IChub25hdG9taWMpIE5TVGV4dEFsaWdubWVudCBj
dXJyZW50VGV4dEFsaWdubWVudDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHJlYWR3
cml0ZSkgTlNDb2xvciAqdGV4dENvbG9yOworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJW
aWV3SW1wbDooV2ViVmlld0ltcGwqKXdlYlZpZXdJbXBsOworQGVuZAorCitAaW1wbGVtZW50YXRp
b24gV0tUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlcgorCitAc3ludGhlc2l6ZSB0ZXh0SXNCb2xk
PV90ZXh0SXNCb2xkOworQHN5bnRoZXNpemUgdGV4dElzSXRhbGljPV90ZXh0SXNJdGFsaWM7CitA
c3ludGhlc2l6ZSB0ZXh0SXNVbmRlcmxpbmVkPV90ZXh0SXNVbmRlcmxpbmVkOworQHN5bnRoZXNp
emUgY3VycmVudFRleHRBbGlnbm1lbnQ9X2N1cnJlbnRUZXh0QWxpZ25tZW50OworCistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWV3SW1wbDooV2ViVmlld0ltcGwqKXdlYlZpZXdJbXBsCit7
CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisK
KyAgICBfd2ViVmlld0ltcGwgPSB3ZWJWaWV3SW1wbDsKKworICAgIHJldHVybiBzZWxmOworfQor
CistICh2b2lkKWRpZERlc3Ryb3lWaWV3Cit7CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBk
ZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmXTsKKyAgICBfd2ViVmlld0ltcGwgPSBu
dWxscHRyOworICAgIFtfdGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyIGRpZERlc3Ryb3lW
aWV3XTsKK30KKworI3ByYWdtYSBtYXJrIE5TVG91Y2hCYXJEZWxlZ2F0ZQorCistIChOU1RvdWNo
QmFySXRlbSAqKXRvdWNoQmFyOihOU1RvdWNoQmFyICopdG91Y2hCYXIgbWFrZUl0ZW1Gb3JJZGVu
dGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIKK3sKKyAgICByZXR1cm4gW3NlbGYgaXRlbUZv
cklkZW50aWZpZXI6aWRlbnRpZmllcl07Cit9CisKKy0gKG51bGxhYmxlIE5TVG91Y2hCYXJJdGVt
ICopaXRlbUZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcgoreworICAgIE5TVG91
Y2hCYXJJdGVtICppdGVtID0gW3N1cGVyIGl0ZW1Gb3JJZGVudGlmaWVyOmlkZW50aWZpZXJdOwor
ICAgIEJPT0wgaXNUZXh0Rm9ybWF0SXRlbSA9IFtpZGVudGlmaWVyIGlzRXF1YWxUb1N0cmluZzpO
U1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Rm9ybWF0XTsKKworICAgIGlmIChpc1RleHRGb3Jt
YXRJdGVtIHx8IFtpZGVudGlmaWVyIGlzRXF1YWxUb1N0cmluZzpOU1RvdWNoQmFySXRlbUlkZW50
aWZpZXJUZXh0U3R5bGVdKQorICAgICAgICBzZWxmLnRleHRTdHlsZS5hY3Rpb24gPSBAc2VsZWN0
b3IoX3drQ2hhbmdlVGV4dFN0eWxlOik7CisKKyAgICBpZiAoaXNUZXh0Rm9ybWF0SXRlbSB8fCBb
aWRlbnRpZmllciBpc0VxdWFsVG9TdHJpbmc6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEFs
aWdubWVudF0pCisgICAgICAgIHNlbGYudGV4dEFsaWdubWVudHMuYWN0aW9uID0gQHNlbGVjdG9y
KF93a0NoYW5nZVRleHRBbGlnbm1lbnQ6KTsKKworICAgIE5TQ29sb3JQaWNrZXJUb3VjaEJhckl0
ZW0gKmNvbG9yUGlja2VySXRlbSA9IG5pbDsKKyAgICBpZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRv
U3RyaW5nOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRDb2xvclBpY2tlcl0gJiYgW2l0ZW0g
aXNLaW5kT2ZDbGFzczpbTlNDb2xvclBpY2tlclRvdWNoQmFySXRlbSBjbGFzc11dKQorICAgICAg
ICBjb2xvclBpY2tlckl0ZW0gPSAoTlNDb2xvclBpY2tlclRvdWNoQmFySXRlbSAqKWl0ZW07Cisg
ICAgaWYgKGlzVGV4dEZvcm1hdEl0ZW0pCisgICAgICAgIGNvbG9yUGlja2VySXRlbSA9IHNlbGYu
Y29sb3JQaWNrZXJJdGVtOworICAgIGlmIChjb2xvclBpY2tlckl0ZW0pIHsKKyAgICAgICAgY29s
b3JQaWNrZXJJdGVtLnRhcmdldCA9IHNlbGY7CisgICAgICAgIGNvbG9yUGlja2VySXRlbS5hY3Rp
b24gPSBAc2VsZWN0b3IoX3drQ2hhbmdlQ29sb3I6KTsKKyAgICAgICAgY29sb3JQaWNrZXJJdGVt
LnNob3dzQWxwaGEgPSBOTzsKKyAgICB9CisKKyAgICByZXR1cm4gaXRlbTsKK30KKworI3ByYWdt
YSBtYXJrIE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbURlbGVnYXRlCisKKy0gKHZvaWQpY2Fu
ZGlkYXRlTGlzdFRvdWNoQmFySXRlbTooTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtICopYW5J
dGVtIGVuZFNlbGVjdGluZ0NhbmRpZGF0ZUF0SW5kZXg6KE5TSW50ZWdlcilpbmRleAoreworICAg
IGlmIChpbmRleCA9PSBOU05vdEZvdW5kKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIV93
ZWJWaWV3SW1wbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNBcnJheSAqY2FuZGlkYXRlcyA9
IGFuSXRlbS5jYW5kaWRhdGVzOworICAgIGlmICgoTlNVSW50ZWdlcilpbmRleCA+PSBjYW5kaWRh
dGVzLmNvdW50KQorICAgICAgICByZXR1cm47CisKKyAgICBOU1RleHRDaGVja2luZ1Jlc3VsdCAq
Y2FuZGlkYXRlID0gY2FuZGlkYXRlc1tpbmRleF07CisgICAgQVNTRVJUKFtjYW5kaWRhdGUgaXNL
aW5kT2ZDbGFzczpbTlNUZXh0Q2hlY2tpbmdSZXN1bHQgY2xhc3NdXSk7CisKKyAgICBfd2ViVmll
d0ltcGwtPmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7Cit9CisKKy0gKHZvaWQp
Y2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTooTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtICop
YW5JdGVtIGNoYW5nZWRDYW5kaWRhdGVMaXN0VmlzaWJpbGl0eTooQk9PTClpc1Zpc2libGUKK3sK
KyAgICBpZiAoIV93ZWJWaWV3SW1wbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGlzVmlz
aWJsZSkKKyAgICAgICAgX3dlYlZpZXdJbXBsLT5yZXF1ZXN0Q2FuZGlkYXRlc0ZvclNlbGVjdGlv
bklmTmVlZGVkKCk7CisKKyAgICBfd2ViVmlld0ltcGwtPnVwZGF0ZVRvdWNoQmFyKCk7Cit9CisK
KyNwcmFnbWEgbWFyayBOU05vdGlmaWNhdGlvbkNlbnRlciBvYnNlcnZlcnMKKworLSAodm9pZCl0
b3VjaEJhckRpZEV4aXRDdXN0b21pemF0aW9uOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlv
bgoreworICAgIGlmICghX3dlYlZpZXdJbXBsKQorICAgICAgICByZXR1cm47CisKKyAgICBfd2Vi
Vmlld0ltcGwtPnNldElzQ3VzdG9taXppbmdUb3VjaEJhcihmYWxzZSk7CisgICAgX3dlYlZpZXdJ
bXBsLT51cGRhdGVUb3VjaEJhcigpOworfQorCistICh2b2lkKXRvdWNoQmFyV2lsbEVudGVyQ3Vz
dG9taXphdGlvbjooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBpZiAoIV93
ZWJWaWV3SW1wbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgX3dlYlZpZXdJbXBsLT5zZXRJc0N1
c3RvbWl6aW5nVG91Y2hCYXIodHJ1ZSk7Cit9CisKKy0gKHZvaWQpZGlkQ2hhbmdlQXV0b21hdGlj
VGV4dENvbXBsZXRpb246KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgaWYg
KCFfd2ViVmlld0ltcGwpCisgICAgICAgIHJldHVybjsKKworICAgIF93ZWJWaWV3SW1wbC0+dXBk
YXRlVG91Y2hCYXJBbmRSZWZyZXNoVGV4dEJhcklkZW50aWZpZXJzKCk7Cit9CisKKworI3ByYWdt
YSBtYXJrIE5TVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIKKworLSAoV0tUZXh0TGlzdFRvdWNo
QmFyVmlld0NvbnRyb2xsZXIgKil0ZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIKK3sKKyAg
ICByZXR1cm4gKFdLVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyICopc2VsZi50ZXh0TGlz
dFZpZXdDb250cm9sbGVyOworfQorCistICh2b2lkKXNldFRleHRJc0JvbGQ6KEJPT0wpYm9sZAor
eworICAgIF90ZXh0SXNCb2xkID0gYm9sZDsKKyAgICBpZiAoW3NlbGYudGV4dFN0eWxlIGlzU2Vs
ZWN0ZWRGb3JTZWdtZW50OjBdICE9IF90ZXh0SXNCb2xkKQorICAgICAgICBbc2VsZi50ZXh0U3R5
bGUgc2V0U2VsZWN0ZWQ6X3RleHRJc0JvbGQgZm9yU2VnbWVudDowXTsKK30KKworLSAodm9pZClz
ZXRUZXh0SXNJdGFsaWM6KEJPT0wpaXRhbGljCit7CisgICAgX3RleHRJc0l0YWxpYyA9IGl0YWxp
YzsKKyAgICBpZiAoW3NlbGYudGV4dFN0eWxlIGlzU2VsZWN0ZWRGb3JTZWdtZW50OjFdICE9IF90
ZXh0SXNJdGFsaWMpCisgICAgICAgIFtzZWxmLnRleHRTdHlsZSBzZXRTZWxlY3RlZDpfdGV4dElz
SXRhbGljIGZvclNlZ21lbnQ6MV07Cit9CisKKy0gKHZvaWQpc2V0VGV4dElzVW5kZXJsaW5lZDoo
Qk9PTCl1bmRlcmxpbmVkCit7CisgICAgX3RleHRJc1VuZGVybGluZWQgPSB1bmRlcmxpbmVkOwor
ICAgIGlmIChbc2VsZi50ZXh0U3R5bGUgaXNTZWxlY3RlZEZvclNlZ21lbnQ6Ml0gIT0gX3RleHRJ
c1VuZGVybGluZWQpCisgICAgICAgIFtzZWxmLnRleHRTdHlsZSBzZXRTZWxlY3RlZDpfdGV4dElz
VW5kZXJsaW5lZCBmb3JTZWdtZW50OjJdOworfQorCistICh2b2lkKV93a0NoYW5nZVRleHRTdHls
ZTooaWQpc2VuZGVyCit7CisgICAgaWYgKCFfd2ViVmlld0ltcGwpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChbc2VsZi50ZXh0U3R5bGUgaXNTZWxlY3RlZEZvclNlZ21lbnQ6MF0gIT0gX3Rl
eHRJc0JvbGQpIHsKKyAgICAgICAgX3RleHRJc0JvbGQgPSAhX3RleHRJc0JvbGQ7CisgICAgICAg
IF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZChAIlRvZ2dsZUJvbGQiLCBA
IiIpOworICAgIH0KKworICAgIGlmIChbc2VsZi50ZXh0U3R5bGUgaXNTZWxlY3RlZEZvclNlZ21l
bnQ6MV0gIT0gX3RleHRJc0l0YWxpYykgeworICAgICAgICBfdGV4dElzSXRhbGljID0gIV90ZXh0
SXNJdGFsaWM7CisgICAgICAgIF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFu
ZCgiVG9nZ2xlSXRhbGljIiwgQCIiKTsKKyAgICB9CisKKyAgICBpZiAoW3NlbGYudGV4dFN0eWxl
IGlzU2VsZWN0ZWRGb3JTZWdtZW50OjJdICE9IF90ZXh0SXNVbmRlcmxpbmVkKSB7CisgICAgICAg
IF90ZXh0SXNVbmRlcmxpbmVkID0gIV90ZXh0SXNVbmRlcmxpbmVkOworICAgICAgICBfd2ViVmll
d0ltcGwtPnBhZ2UoKS5leGVjdXRlRWRpdENvbW1hbmQoIlRvZ2dsZVVuZGVybGluZSIsIEAiIik7
CisgICAgfQorfQorCistICh2b2lkKXNldEN1cnJlbnRUZXh0QWxpZ25tZW50OihOU1RleHRBbGln
bm1lbnQpYWxpZ25tZW50Cit7CisgICAgX2N1cnJlbnRUZXh0QWxpZ25tZW50ID0gYWxpZ25tZW50
OworICAgIFtzZWxmLnRleHRBbGlnbm1lbnRzIHNlbGVjdFNlZ21lbnRXaXRoVGFnOl9jdXJyZW50
VGV4dEFsaWdubWVudF07Cit9CisKKy0gKHZvaWQpX3drQ2hhbmdlVGV4dEFsaWdubWVudDooaWQp
c2VuZGVyCit7CisgICAgaWYgKCFfd2ViVmlld0ltcGwpCisgICAgICAgIHJldHVybjsKKworICAg
IE5TVGV4dEFsaWdubWVudCBhbGlnbm1lbnQgPSAoTlNUZXh0QWxpZ25tZW50KVtzZWxmLnRleHRB
bGlnbm1lbnRzLmNlbGwgdGFnRm9yU2VnbWVudDpzZWxmLnRleHRBbGlnbm1lbnRzLnNlbGVjdGVk
U2VnbWVudF07CisgICAgc3dpdGNoIChhbGlnbm1lbnQpIHsKKyAgICBjYXNlIE5TVGV4dEFsaWdu
bWVudExlZnQ6IHsKKyAgICAgICAgX2N1cnJlbnRUZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25t
ZW50TGVmdDsKKyAgICAgICAgX3dlYlZpZXdJbXBsLT5wYWdlKCkuZXhlY3V0ZUVkaXRDb21tYW5k
KCJBbGlnbkxlZnQiLCBAIiIpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBOU1Rl
eHRBbGlnbm1lbnRSaWdodDogeworICAgICAgICBfY3VycmVudFRleHRBbGlnbm1lbnQgPSBOU1Rl
eHRBbGlnbm1lbnRSaWdodDsKKyAgICAgICAgX3dlYlZpZXdJbXBsLT5wYWdlKCkuZXhlY3V0ZUVk
aXRDb21tYW5kKCJBbGlnblJpZ2h0IiwgQCIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGNhc2UgTlNUZXh0QWxpZ25tZW50Q2VudGVyOiB7CisgICAgICAgIF9jdXJyZW50VGV4dEFsaWdu
bWVudCA9IE5TVGV4dEFsaWdubWVudENlbnRlcjsKKyAgICAgICAgX3dlYlZpZXdJbXBsLT5wYWdl
KCkuZXhlY3V0ZUVkaXRDb21tYW5kKCJBbGlnbkNlbnRlciIsIEAiIik7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBjYXNlIE5TVGV4dEFsaWdubWVudEp1c3RpZmllZDogeworICAgICAgICBf
Y3VycmVudFRleHRBbGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRKdXN0aWZpZWQ7CisgICAgICAg
IF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZCgiQWxpZ25KdXN0aWZpZWQi
LCBAIiIpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgX3dlYlZpZXdJbXBsLT5kaXNtaXNzVGV4dFRvdWNoQmFyUG9wb3Zl
ckl0ZW1XaXRoSWRlbnRpZmllcihOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0QWxpZ25tZW50
KTsKK30KKworLSAoTlNDb2xvciAqKXRleHRDb2xvcgoreworICAgIHJldHVybiBfdGV4dENvbG9y
LmdldCgpOworfQorCistICh2b2lkKXNldFRleHRDb2xvcjooTlNDb2xvciAqKWNvbG9yCit7Cisg
ICAgX3RleHRDb2xvciA9IGNvbG9yOworICAgIHNlbGYuY29sb3JQaWNrZXJJdGVtLmNvbG9yID0g
X3RleHRDb2xvci5nZXQoKTsKK30KKworLSAodm9pZClfd2tDaGFuZ2VDb2xvcjooaWQpc2VuZGVy
Cit7CisgICAgaWYgKCFfd2ViVmlld0ltcGwpCisgICAgICAgIHJldHVybjsKKworICAgIF90ZXh0
Q29sb3IgPSBzZWxmLmNvbG9yUGlja2VySXRlbS5jb2xvcjsKKyAgICBfd2ViVmlld0ltcGwtPnBh
Z2UoKS5leGVjdXRlRWRpdENvbW1hbmQoIkZvcmVDb2xvciIsIFdlYkNvcmU6OmNvbG9yRnJvbU5T
Q29sb3IoX3RleHRDb2xvci5nZXQoKSkuc2VyaWFsaXplZCgpKTsKK30KKworLSAoTlNWaWV3Q29u
dHJvbGxlciAqKXRleHRMaXN0Vmlld0NvbnRyb2xsZXIKK3sKKyAgICBpZiAoIV90ZXh0TGlzdFRv
dWNoQmFyVmlld0NvbnRyb2xsZXIpCisgICAgICAgIF90ZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRy
b2xsZXIgPSBhZG9wdE5TKFtbV0tUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgYWxsb2Nd
IGluaXRXaXRoV2ViVmlld0ltcGw6X3dlYlZpZXdJbXBsXSk7CisgICAgcmV0dXJuIF90ZXh0TGlz
dFRvdWNoQmFyVmlld0NvbnRyb2xsZXIuZ2V0KCk7Cit9CisKK0BlbmQKKwogbmFtZXNwYWNlIFdl
YktpdCB7CiAKLXZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZVdlYlZpZXdJbXBsQWRkaXRpb25zKCkK
K05TVG91Y2hCYXIgKldlYlZpZXdJbXBsOjptYWtlVG91Y2hCYXIoKQoreworICAgIGlmICghbV9j
YW5DcmVhdGVUb3VjaEJhcnMpIHsKKyAgICAgICAgbV9jYW5DcmVhdGVUb3VjaEJhcnMgPSB0cnVl
OworICAgICAgICB1cGRhdGVUb3VjaEJhcigpOworICAgIH0KKyAgICByZXR1cm4gbV9jdXJyZW50
VG91Y2hCYXIuZ2V0KCk7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZVRvdWNoQmFyKCkK
K3sKKyAgICBpZiAoIW1fY2FuQ3JlYXRlVG91Y2hCYXJzKQorICAgICAgICByZXR1cm47CisKKyAg
ICBOU1RvdWNoQmFyICp0b3VjaEJhciA9IG5pbDsKKyAgICBib29sIHVzZXJBY3Rpb25SZXF1aXJl
bWVudHNIYXZlQmVlbk1ldCA9IG1fcmVxdWlyZXNVc2VyQWN0aW9uRm9yRWRpdGluZ0NvbnRyb2xz
TWFuYWdlciA/IG1fcGFnZS0+aGFzSGFkU2VsZWN0aW9uQ2hhbmdlc0Zyb21Vc2VySW50ZXJhY3Rp
b24oKSA6IHRydWU7CisgICAgaWYgKG1fcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0NvbnRlbnRFZGl0
YWJsZSAmJiAhbV9wYWdlLT5uZWVkc0hpZGRlbkNvbnRlbnRFZGl0YWJsZVF1aXJrKCkpIHsKKyAg
ICAgICAgdXBkYXRlVGV4dFRvdWNoQmFyKCk7CisgICAgICAgIGlmICh1c2VyQWN0aW9uUmVxdWly
ZW1lbnRzSGF2ZUJlZW5NZXQpCisgICAgICAgICAgICB0b3VjaEJhciA9IHRleHRUb3VjaEJhcigp
OworICAgIH0KKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAg
ZWxzZSBpZiAobV9wYWdlLT5oYXNBY3RpdmVWaWRlb0ZvckNvbnRyb2xzTWFuYWdlcigpKSB7Cisg
ICAgICAgIHVwZGF0ZU1lZGlhVG91Y2hCYXIoKTsKKyAgICAgICAgLy8gSWYgdXNlTWVkaWFQbGF5
YmFja0NvbnRyb2xzVmlldygpIGlzIHRydWUsIHRoZW4gd2UgYXJlIHJlbHlpbmcgb24gdGhlIEFQ
SSBjbGllbnQgdG8gZGlzcGxheSBhIHBvcG92ZXIgdmVyc2lvbgorICAgICAgICAvLyBvZiB0aGUg
bWVkaWEgdGltZWxpbmUgaW4gdGhlaXIgb3duIGZ1bmN0aW9uIGJhci4gSWYgaXQgaXMgZmFsc2Us
IHRoZW4gd2Ugd2lsbCBkaXNwbGF5IHRoZSBtZWRpYSB0aW1lbGluZSBpbiBvdXIKKyAgICAgICAg
Ly8gZnVuY3Rpb24gYmFyLgorICAgICAgICBpZiAoIXVzZU1lZGlhUGxheWJhY2tDb250cm9sc1Zp
ZXcoKSkKKyAgICAgICAgICAgIHRvdWNoQmFyID0gW21fbWVkaWFUb3VjaEJhclByb3ZpZGVyIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IodG91Y2hCYXIpXSA/IFsoaWQpbV9tZWRpYVRvdWNo
QmFyUHJvdmlkZXIuZ2V0KCkgdG91Y2hCYXJdIDogWyhpZCltX21lZGlhVG91Y2hCYXJQcm92aWRl
ci5nZXQoKSB0b3VjaEJhcl07CisgICAgfSBlbHNlIGlmIChbbV9tZWRpYVRvdWNoQmFyUHJvdmlk
ZXIgcGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXJdKSB7CisgICAgICAgIGlmIChtX2NsaWVudFdh
bnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldykgeworICAgICAgICAgICAgaWYgKFttX3ZpZXcg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViX2RpZFJlbW92ZU1lZGlhQ29udHJvbHNN
YW5hZ2VyKV0gJiYgbV92aWV3ID09IG1fdmlldy53aW5kb3cuZmlyc3RSZXNwb25kZXIpCisgICAg
ICAgICAgICAgICAgW21fdmlldyBfd2ViX2RpZFJlbW92ZU1lZGlhQ29udHJvbHNNYW5hZ2VyXTsK
KyAgICAgICAgfQorICAgICAgICBbbV9tZWRpYVRvdWNoQmFyUHJvdmlkZXIgc2V0UGxheWJhY2tD
b250cm9sc0NvbnRyb2xsZXI6bmlsXTsKKyAgICAgICAgW21fbWVkaWFQbGF5YmFja0NvbnRyb2xz
VmlldyBzZXRQbGF5YmFja0NvbnRyb2xzQ29udHJvbGxlcjpuaWxdOworICAgIH0KKyNlbmRpZgor
CisgICAgaWYgKHRvdWNoQmFyID09IG1fY3VycmVudFRvdWNoQmFyKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBJZiBtX2VkaXRhYmxlRWxlbWVudElzRm9jdXNlZCBpcyB0cnVlLCB0aGVuIHdl
IG1heSBoYXZlIGEgbm9uLWVkaXRhYmxlIHNlbGVjdGlvbiByaWdodCBub3cganVzdCBiZWNhdXNl
CisgICAgLy8gdGhlIHVzZXIgaXMgY2xpY2tpbmcgb3IgdGFiYmluZyBiZXR3ZWVuIGVkaXRhYmxl
IGZpZWxkcy4KKyAgICBpZiAobV9lZGl0YWJsZUVsZW1lbnRJc0ZvY3VzZWQgJiYgdG91Y2hCYXIg
IT0gdGV4dFRvdWNoQmFyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY3VycmVudFRvdWNo
QmFyID0gdG91Y2hCYXI7CisgICAgW21fdmlldyB3aWxsQ2hhbmdlVmFsdWVGb3JLZXk6QCJ0b3Vj
aEJhciJdOworICAgIFttX3ZpZXcgc2V0VG91Y2hCYXI6bV9jdXJyZW50VG91Y2hCYXIuZ2V0KCld
OworICAgIFttX3ZpZXcgZGlkQ2hhbmdlVmFsdWVGb3JLZXk6QCJ0b3VjaEJhciJdOworfQorCitO
U0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gKldlYlZpZXdJbXBsOjpjYW5kaWRhdGVMaXN0VG91
Y2hCYXJJdGVtKCkgY29uc3QKIHsKKyAgICByZXR1cm4gaXNSaWNobHlFZGl0YWJsZSgpID8gbV9y
aWNoVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0uZ2V0KCkgOiBtX3BsYWluVGV4dENhbmRp
ZGF0ZUxpc3RUb3VjaEJhckl0ZW0uZ2V0KCk7Cit9CisKK0FWRnVuY3Rpb25CYXJTY3J1YmJlciAq
V2ViVmlld0ltcGw6Om1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSBjb25zdAoreworI2lmIEVO
QUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBpZiAobV9wYWdlLT5oYXNB
Y3RpdmVWaWRlb0ZvckNvbnRyb2xzTWFuYWdlcigpKQorICAgICAgICByZXR1cm4gbV9tZWRpYVBs
YXliYWNrQ29udHJvbHNWaWV3LmdldCgpOworI2VuZGlmCisgICAgcmV0dXJuIG5pbDsKK30KKwor
Ym9vbCBXZWJWaWV3SW1wbDo6dXNlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpIGNvbnN0Cit7
CisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIGlmIChoYXNGdWxsU2NyZWVuV2luZG93
Q29udHJvbGxlcigpKQorICAgICAgICByZXR1cm4gIVttX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVyIGlzRnVsbFNjcmVlbl07CisjZW5kaWYKKyAgICByZXR1cm4gbV9jbGllbnRXYW50c01lZGlh
UGxheWJhY2tDb250cm9sc1ZpZXc7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OmRpc21pc3NUZXh0
VG91Y2hCYXJQb3BvdmVySXRlbVdpdGhJZGVudGlmaWVyKE5TU3RyaW5nICppZGVudGlmaWVyKQor
eworICAgIE5TVG91Y2hCYXJJdGVtICpmb3VuZEl0ZW0gPSBuaWw7CisgICAgZm9yIChOU1RvdWNo
QmFySXRlbSAqaXRlbSBpbiB0ZXh0VG91Y2hCYXIoKS5pdGVtcykgeworICAgICAgICBpZiAoW2l0
ZW0uaWRlbnRpZmllciBpc0VxdWFsVG9TdHJpbmc6aWRlbnRpZmllcl0pIHsKKyAgICAgICAgICAg
IGZvdW5kSXRlbSA9IGl0ZW07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChbaXRlbS5pZGVudGlmaWVyIGlzRXF1YWxUb1N0cmluZzpOU1RvdWNoQmFySXRlbUlk
ZW50aWZpZXJUZXh0Rm9ybWF0XSkgeworICAgICAgICAgICAgZm9yIChOU1RvdWNoQmFySXRlbSAq
Y2hpbGRJdGVtIGluICgoTlNHcm91cFRvdWNoQmFySXRlbSAqKWl0ZW0pLmdyb3VwVG91Y2hCYXIu
aXRlbXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoW2NoaWxkSXRlbS5pZGVudGlmaWVyIGlzRXF1
YWxUb1N0cmluZzppZGVudGlmaWVyXSkgeworICAgICAgICAgICAgICAgICAgICBmb3VuZEl0ZW0g
PSBjaGlsZEl0ZW07CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKFtmb3VuZEl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNQb3BvdmVyVG91Y2hCYXJJdGVt
IGNsYXNzXV0pCisgICAgICAgIFsoTlNQb3BvdmVyVG91Y2hCYXJJdGVtICopZm91bmRJdGVtIGRp
c21pc3NQb3BvdmVyOm5pbF07Cit9CisKK3N0YXRpYyBOU0FycmF5PE5TU3RyaW5nICo+ICp0ZXh0
VG91Y2hCYXJDdXN0b21pemF0aW9uQWxsb3dlZElkZW50aWZpZXJzKCkKK3sKKyAgICByZXR1cm4g
QFsgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyQ2hhcmFjdGVyUGlja2VyLCBOU1RvdWNoQmFySXRl
bUlkZW50aWZpZXJUZXh0Q29sb3JQaWNrZXIsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRT
dHlsZSwgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEFsaWdubWVudCwgTlNUb3VjaEJhckl0
ZW1JZGVudGlmaWVyVGV4dExpc3QsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckZsZXhpYmxlU3Bh
Y2UgXTsKK30KKworc3RhdGljIE5TQXJyYXk8TlNTdHJpbmcgKj4gKnBsYWluVGV4dFRvdWNoQmFy
Q3VzdG9taXphdGlvbkRlZmF1bHRJdGVtSWRlbnRpZmllcnMoKQoreworICAgIHJldHVybiBAWyBO
U1RvdWNoQmFySXRlbUlkZW50aWZpZXJDaGFyYWN0ZXJQaWNrZXIsIE5TVG91Y2hCYXJJdGVtSWRl
bnRpZmllckNhbmRpZGF0ZUxpc3QgXTsKK30KKworc3RhdGljIE5TQXJyYXk8TlNTdHJpbmcgKj4g
KnJpY2hUZXh0VG91Y2hCYXJDdXN0b21pemF0aW9uRGVmYXVsdEl0ZW1JZGVudGlmaWVycygpCit7
CisgICAgcmV0dXJuIEBbIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckNoYXJhY3RlclBpY2tlciwg
TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEZvcm1hdCwgTlNUb3VjaEJhckl0ZW1JZGVudGlm
aWVyQ2FuZGlkYXRlTGlzdCBdOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVUb3VjaEJh
ckFuZFJlZnJlc2hUZXh0QmFySWRlbnRpZmllcnMoKQoreworICAgIGlmIChtX3JpY2hUZXh0VG91
Y2hCYXIpCisgICAgICAgIHNldFVwVGV4dFRvdWNoQmFyKG1fcmljaFRleHRUb3VjaEJhci5nZXQo
KSk7CisKKyAgICBpZiAobV9wbGFpblRleHRUb3VjaEJhcikKKyAgICAgICAgc2V0VXBUZXh0VG91
Y2hCYXIobV9wbGFpblRleHRUb3VjaEJhci5nZXQoKSk7CisKKyAgICB1cGRhdGVUb3VjaEJhcigp
OworfQorCit2b2lkIFdlYlZpZXdJbXBsOjpzZXRVcFRleHRUb3VjaEJhcihOU1RvdWNoQmFyICp0
b3VjaEJhcikKK3sKKyAgICBib29sIGlzUmljaFRleHRUb3VjaEJhciA9IHRvdWNoQmFyID09IG1f
cmljaFRleHRUb3VjaEJhci5nZXQoKTsKKyAgICBbdG91Y2hCYXIgc2V0RGVsZWdhdGU6bV90ZXh0
VG91Y2hCYXJJdGVtQ29udHJvbGxlci5nZXQoKV07CisgICAgW3RvdWNoQmFyIHNldERlZmF1bHRJ
dGVtczpbTlNNdXRhYmxlU2V0IHNldFdpdGhPYmplY3Q6aXNSaWNoVGV4dFRvdWNoQmFyID8gbV9y
aWNoVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0uZ2V0KCkgOiBtX3BsYWluVGV4dENhbmRp
ZGF0ZUxpc3RUb3VjaEJhckl0ZW0uZ2V0KCldXTsKKyAgICBbdG91Y2hCYXIgc2V0Q3VzdG9taXph
dGlvbkFsbG93ZWRJdGVtSWRlbnRpZmllcnM6dGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkFsbG93
ZWRJZGVudGlmaWVycygpXTsKKyAgICBbdG91Y2hCYXIgc2V0Q3VzdG9taXphdGlvbkRlZmF1bHRJ
dGVtSWRlbnRpZmllcnM6aXNSaWNoVGV4dFRvdWNoQmFyID8gcmljaFRleHRUb3VjaEJhckN1c3Rv
bWl6YXRpb25EZWZhdWx0SXRlbUlkZW50aWZpZXJzKCkgOiBwbGFpblRleHRUb3VjaEJhckN1c3Rv
bWl6YXRpb25EZWZhdWx0SXRlbUlkZW50aWZpZXJzKCldOworCisgICAgaWYgKE5TR3JvdXBUb3Vj
aEJhckl0ZW0gKnRleHRGb3JtYXRJdGVtID0gKE5TR3JvdXBUb3VjaEJhckl0ZW0gKilbdG91Y2hC
YXIgaXRlbUZvcklkZW50aWZpZXI6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEZvcm1hdF0p
CisgICAgICAgIHRleHRGb3JtYXRJdGVtLmdyb3VwVG91Y2hCYXIuY3VzdG9taXphdGlvbklkZW50
aWZpZXIgPSBAIldLVGV4dEZvcm1hdFRvdWNoQmFyIjsKK30KKworYm9vbCBXZWJWaWV3SW1wbDo6
aXNSaWNobHlFZGl0YWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFnZS0+ZWRpdG9yU3Rh
dGUoKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSAmJiAhbV9wYWdlLT5uZWVkc1BsYWluVGV4dFF1
aXJrKCk7Cit9CisKK05TVG91Y2hCYXIgKldlYlZpZXdJbXBsOjp0ZXh0VG91Y2hCYXIoKSBjb25z
dAoreworICAgIHJldHVybiBpc1JpY2hseUVkaXRhYmxlKCkgPyBtX3JpY2hUZXh0VG91Y2hCYXIu
Z2V0KCkgOiBtX3BsYWluVGV4dFRvdWNoQmFyLmdldCgpOworfQorCit2b2lkIFdlYlZpZXdJbXBs
Ojp1cGRhdGVUZXh0VG91Y2hCYXIoKQoreworICAgIGlmICghbV9wYWdlLT5lZGl0b3JTdGF0ZSgp
LmlzQ29udGVudEVkaXRhYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9pc1VwZGF0
aW5nVGV4dFRvdWNoQmFyKQorICAgICAgICByZXR1cm47CisKKyAgICBUZW1wb3JhcnlDaGFuZ2U8
Ym9vbD4gaXNVcGRhdGluZ1RleHRGdW5jdGlvbkJhcihtX2lzVXBkYXRpbmdUZXh0VG91Y2hCYXIs
IHRydWUpOworCisgICAgaWYgKCFtX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyKQorICAgICAg
ICBtX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyID0gYWRvcHROUyhbW1dLVGV4dFRvdWNoQmFy
SXRlbUNvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoV2ViVmlld0ltcGw6dGhpc10pOworCisgICAg
aWYgKCFtX3N0YXJ0ZWRMaXN0ZW5pbmdUb0N1c3RvbWl6YXRpb25FdmVudHMpIHsKKyAgICAgICAg
W1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjptX3RleHRU
b3VjaEJhckl0ZW1Db250cm9sbGVyLmdldCgpIHNlbGVjdG9yOkBzZWxlY3Rvcih0b3VjaEJhckRp
ZEV4aXRDdXN0b21pemF0aW9uOikgbmFtZTpOU1RvdWNoQmFyRGlkRXhpdEN1c3RvbWl6YXRpb24g
b2JqZWN0Om5pbF07CisgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRl
cl0gYWRkT2JzZXJ2ZXI6bV90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlci5nZXQoKSBzZWxlY3Rv
cjpAc2VsZWN0b3IodG91Y2hCYXJXaWxsRW50ZXJDdXN0b21pemF0aW9uOikgbmFtZTpOU1RvdWNo
QmFyV2lsbEVudGVyQ3VzdG9taXphdGlvbiBvYmplY3Q6bmlsXTsKKyAgICAgICAgW1tOU05vdGlm
aWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjptX3RleHRUb3VjaEJhckl0
ZW1Db250cm9sbGVyLmdldCgpIHNlbGVjdG9yOkBzZWxlY3RvcihkaWRDaGFuZ2VBdXRvbWF0aWNU
ZXh0Q29tcGxldGlvbjopIG5hbWU6TlNTcGVsbENoZWNrZXJEaWRDaGFuZ2VBdXRvbWF0aWNUZXh0
Q29tcGxldGlvbk5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKKworICAgICAgICBtX3N0YXJ0ZWRM
aXN0ZW5pbmdUb0N1c3RvbWl6YXRpb25FdmVudHMgPSB0cnVlOworICAgIH0KKworICAgIGlmICgh
bV9yaWNoVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gfHwgIW1fcGxhaW5UZXh0Q2FuZGlk
YXRlTGlzdFRvdWNoQmFySXRlbSkgeworICAgICAgICBtX3JpY2hUZXh0Q2FuZGlkYXRlTGlzdFRv
dWNoQmFySXRlbSA9IGFkb3B0TlMoW1tOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gYWxsb2Nd
IGluaXRXaXRoSWRlbnRpZmllcjpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJDYW5kaWRhdGVMaXN0
XSk7CisgICAgICAgIFttX3JpY2hUZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSBzZXREZWxl
Z2F0ZTptX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyLmdldCgpXTsKKyAgICAgICAgbV9wbGFp
blRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtID0gYWRvcHROUyhbW05TQ2FuZGlkYXRlTGlz
dFRvdWNoQmFySXRlbSBhbGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOk5TVG91Y2hCYXJJdGVtSWRl
bnRpZmllckNhbmRpZGF0ZUxpc3RdKTsKKyAgICAgICAgW21fcGxhaW5UZXh0Q2FuZGlkYXRlTGlz
dFRvdWNoQmFySXRlbSBzZXREZWxlZ2F0ZTptX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyLmdl
dCgpXTsKKyAgICAgICAgcmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb25JZk5lZWRlZCgpOwor
ICAgIH0KKworICAgIGlmICghbV9yaWNoVGV4dFRvdWNoQmFyKSB7CisgICAgICAgIG1fcmljaFRl
eHRUb3VjaEJhciA9IGFkb3B0TlMoW1tOU1RvdWNoQmFyIGFsbG9jXSBpbml0XSk7CisgICAgICAg
IHNldFVwVGV4dFRvdWNoQmFyKG1fcmljaFRleHRUb3VjaEJhci5nZXQoKSk7CisgICAgICAgIFtt
X3JpY2hUZXh0VG91Y2hCYXIgc2V0Q3VzdG9taXphdGlvbklkZW50aWZpZXI6QCJXS1JpY2hUZXh0
VG91Y2hCYXIiXTsKKyAgICB9CisKKyAgICBpZiAoIW1fcGxhaW5UZXh0VG91Y2hCYXIpIHsKKyAg
ICAgICAgbV9wbGFpblRleHRUb3VjaEJhciA9IGFkb3B0TlMoW1tOU1RvdWNoQmFyIGFsbG9jXSBp
bml0XSk7CisgICAgICAgIHNldFVwVGV4dFRvdWNoQmFyKG1fcGxhaW5UZXh0VG91Y2hCYXIuZ2V0
KCkpOworICAgICAgICBbbV9wbGFpblRleHRUb3VjaEJhciBzZXRDdXN0b21pemF0aW9uSWRlbnRp
ZmllcjpAIldLUGxhaW5UZXh0VG91Y2hCYXIiXTsKKyAgICB9CisKKyAgICBpZiAoW05TU3BlbGxD
aGVja2VyIGlzQXV0b21hdGljVGV4dENvbXBsZXRpb25FbmFibGVkXSAmJiAhbV9pc0N1c3RvbWl6
aW5nVG91Y2hCYXIpIHsKKyAgICAgICAgQk9PTCBzaG93Q2FuZGlkYXRlc0xpc3QgPSAhbV9wYWdl
LT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzUmFuZ2UgfHwgbV9pc0hhbmRsaW5nQWNjZXB0ZWRD
YW5kaWRhdGU7CisgICAgICAgIFtjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtKCkgdXBkYXRlV2l0
aEluc2VydGlvblBvaW50VmlzaWJpbGl0eTpzaG93Q2FuZGlkYXRlc0xpc3RdOworICAgICAgICBb
bV92aWV3IF9kaWRVcGRhdGVDYW5kaWRhdGVMaXN0VmlzaWJpbGl0eTpzaG93Q2FuZGlkYXRlc0xp
c3RdOworICAgIH0KKworICAgIGlmIChtX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNJblBhc3N3b3Jk
RmllbGQpIHsKKyAgICAgICAgLy8gV2UgZG9uJ3QgcmVxdWVzdCBjYW5kaWRhdGVzIGZvciBwYXNz
d29yZCBmaWVsZHMuIElmIHRoZSB1c2VyIHdhcyBwcmV2aW91c2x5IGluIGEgbm9uLXBhc3N3b3Jk
IGZpZWxkLCB0aGVuIHRoZQorICAgICAgICAvLyBvbGQgY2FuZGlkYXRlcyB3aWxsIHN0aWxsIHNo
b3cgYnkgZGVmYXVsdCwgc28gd2UgY2xlYXIgdGhlbSBoZXJlIGJ5IHNldHRpbmcgYW4gZW1wdHkg
YXJyYXkgb2YgY2FuZGlkYXRlcy4KKyAgICAgICAgaWYgKCFtX2VtcHR5Q2FuZGlkYXRlc0FycmF5
KQorICAgICAgICAgICAgbV9lbXB0eUNhbmRpZGF0ZXNBcnJheSA9IGFkb3B0TlMoW1tOU0FycmF5
IGFsbG9jXSBpbml0XSk7CisgICAgICAgIFtjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtKCkgc2V0
Q2FuZGlkYXRlczptX2VtcHR5Q2FuZGlkYXRlc0FycmF5LmdldCgpIGZvclNlbGVjdGVkUmFuZ2U6
TlNNYWtlUmFuZ2UoMCwgMCkgaW5TdHJpbmc6bmlsXTsKKyAgICB9CisKKyAgICBOU1RvdWNoQmFy
ICp0ZXh0VG91Y2hCYXIgPSB0aGlzLT50ZXh0VG91Y2hCYXIoKTsKKyAgICBCT09MIGlzU2hvd2lu
Z0NvbWJpbmVkVGV4dEZvcm1hdEl0ZW0gPSBbdGV4dFRvdWNoQmFyLml0ZW1JZGVudGlmaWVycyBj
b250YWluc09iamVjdDpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Rm9ybWF0XTsKKyAgICBb
dGV4dFRvdWNoQmFyIHNldFByaW5jaXBhbEl0ZW1JZGVudGlmaWVyOmlzU2hvd2luZ0NvbWJpbmVk
VGV4dEZvcm1hdEl0ZW0gPyBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Rm9ybWF0IDogbmls
XTsKKworICAgIC8vIFNldCBjdXJyZW50IHR5cGluZyBhdHRyaWJ1dGVzIGZvciByaWNoIHRleHQu
IFRoaXMgd2lsbCBlbnN1cmUgdGhhdCB0aGUgYnV0dG9ucyByZWZsZWN0IHRoZSBzdGF0ZSBvZgor
ICAgIC8vIHRoZSB0ZXh0IHdoZW4gY2hhbmdpbmcgc2VsZWN0aW9uIHRocm91Z2hvdXQgdGhlIGRv
Y3VtZW50LgorICAgIGlmIChpc1JpY2hseUVkaXRhYmxlKCkpIHsKKyAgICAgICAgY29uc3QgRWRp
dG9yU3RhdGUmIGVkaXRvclN0YXRlID0gbV9wYWdlLT5lZGl0b3JTdGF0ZSgpOworICAgICAgICBp
ZiAoIWVkaXRvclN0YXRlLmlzTWlzc2luZ1Bvc3RMYXlvdXREYXRhKSB7CisgICAgICAgICAgICBb
bV90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRUZXh0SXNCb2xkOihib29sKShtX3BhZ2Ut
PmVkaXRvclN0YXRlKCkucG9zdExheW91dERhdGEoKS50eXBpbmdBdHRyaWJ1dGVzICYgQXR0cmli
dXRlQm9sZCldOworICAgICAgICAgICAgW21fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0
VGV4dElzSXRhbGljOihib29sKShtX3BhZ2UtPmVkaXRvclN0YXRlKCkucG9zdExheW91dERhdGEo
KS50eXBpbmdBdHRyaWJ1dGVzICYgQXR0cmlidXRlSXRhbGljcyldOworICAgICAgICAgICAgW21f
dGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzVW5kZXJsaW5lZDooYm9vbCkobV9w
YWdlLT5lZGl0b3JTdGF0ZSgpLnBvc3RMYXlvdXREYXRhKCkudHlwaW5nQXR0cmlidXRlcyAmIEF0
dHJpYnV0ZVVuZGVybGluZSldOworICAgICAgICAgICAgW21fdGV4dFRvdWNoQmFySXRlbUNvbnRy
b2xsZXIgc2V0VGV4dENvbG9yOm5zQ29sb3IoZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEoKS50
ZXh0Q29sb3IpXTsKKyAgICAgICAgICAgIFtbbV90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciB0
ZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXJdIHNldEN1cnJlbnRMaXN0VHlwZTooTGlzdFR5
cGUpbV9wYWdlLT5lZGl0b3JTdGF0ZSgpLnBvc3RMYXlvdXREYXRhKCkuZW5jbG9zaW5nTGlzdFR5
cGVdOworCisgICAgICAgICAgICBOU1RleHRBbGlnbm1lbnQgdGV4dEFsaWdubWVudDsKKyAgICAg
ICAgICAgIHN3aXRjaCAoZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEoKS50ZXh0QWxpZ25tZW50
KSB7CisgICAgICAgICAgICBjYXNlIE5vQWxpZ25tZW50OgorICAgICAgICAgICAgICAgIHRleHRB
bGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnROYXR1cmFsOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBMZWZ0QWxpZ25tZW50OgorICAgICAgICAgICAgICAgIHRleHRB
bGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRMZWZ0OworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBSaWdodEFsaWdubWVudDoKKyAgICAgICAgICAgICAgICB0ZXh0QWxp
Z25tZW50ID0gTlNUZXh0QWxpZ25tZW50UmlnaHQ7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIENlbnRlckFsaWdubWVudDoKKyAgICAgICAgICAgICAgICB0ZXh0QWxp
Z25tZW50ID0gTlNUZXh0QWxpZ25tZW50Q2VudGVyOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBKdXN0aWZpZWRBbGlnbm1lbnQ6CisgICAgICAgICAgICAgICAgdGV4
dEFsaWdubWVudCA9IE5TVGV4dEFsaWdubWVudEp1c3RpZmllZDsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFttX3RleHRUb3VjaEJhckl0ZW1Db250
cm9sbGVyIHNldEN1cnJlbnRUZXh0QWxpZ25tZW50OnRleHRBbGlnbm1lbnRdOworICAgICAgICB9
CisgICAgICAgIEJPT0wgaXNTaG93aW5nQ2FuZGlkYXRlTGlzdEl0ZW0gPSBbdGV4dFRvdWNoQmFy
Lml0ZW1JZGVudGlmaWVycyBjb250YWluc09iamVjdDpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJD
YW5kaWRhdGVMaXN0XSAmJiBbTlNTcGVsbENoZWNrZXIgaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1l
bnRFbmFibGVkXTsKKyAgICAgICAgW21fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VXNl
c05hcnJvd1RleHRTdHlsZUl0ZW06aXNTaG93aW5nQ29tYmluZWRUZXh0Rm9ybWF0SXRlbSAmJiBp
c1Nob3dpbmdDYW5kaWRhdGVMaXN0SXRlbV07CisgICAgfQorfQorCit2b2lkIFdlYlZpZXdJbXBs
Ojp1cGRhdGVNZWRpYVRvdWNoQmFyKCkKK3sKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRS
T0xTX01BTkFHRVIpCisgICAgaWYgKCFtX21lZGlhVG91Y2hCYXJQcm92aWRlcikKKyAgICAgICAg
bV9tZWRpYVRvdWNoQmFyUHJvdmlkZXIgPSBhZG9wdE5TKFthbGxvY0FWRnVuY3Rpb25CYXJQbGF5
YmFja0NvbnRyb2xzUHJvdmlkZXJJbnN0YW5jZSgpIGluaXRdKTsKKworICAgIGlmICghbV9tZWRp
YVBsYXliYWNrQ29udHJvbHNWaWV3KQorICAgICAgICBtX21lZGlhUGxheWJhY2tDb250cm9sc1Zp
ZXcgPSBhZG9wdE5TKFthbGxvY0FWRnVuY3Rpb25CYXJTY3J1YmJlckluc3RhbmNlKCkgaW5pdF0p
OworCisgICAgaWYgKCFtX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyKQorICAgICAgICBtX3BsYXli
YWNrQ29udHJvbHNNYW5hZ2VyID0gYWRvcHROUyhbW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2Vy
IGFsbG9jXSBpbml0XSk7CisKKyAgICBpZiAoUGxhdGZvcm1XZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2UqIGludGVyZmFjZSA9IG1fcGFnZS0+cGxheWJhY2tTZXNzaW9uTWFuYWdlcigpLT5jb250
cm9sc01hbmFnZXJJbnRlcmZhY2UoKSkKKyAgICAgICAgW21fcGxheWJhY2tDb250cm9sc01hbmFn
ZXIgc2V0V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOmludGVyZmFjZV07CisKKyAgICBb
bV9tZWRpYVRvdWNoQmFyUHJvdmlkZXIgc2V0UGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXI6bV9w
bGF5YmFja0NvbnRyb2xzTWFuYWdlci5nZXQoKV07CisgICAgW21fbWVkaWFQbGF5YmFja0NvbnRy
b2xzVmlldyBzZXRQbGF5YmFja0NvbnRyb2xzQ29udHJvbGxlcjptX3BsYXliYWNrQ29udHJvbHNN
YW5hZ2VyLmdldCgpXTsKKworICAgIGlmICghdXNlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygp
KSB7CisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgICAgICAvLyBJZiB3ZSBjYW4ndCBo
YXZlIGEgbWVkaWEgcG9wb3ZlciBmdW5jdGlvbiBiYXIgaXRlbSwgaXQgbWlnaHQgYmUgYmVjYXVz
ZSB3ZSBhcmUgaW4gZnVsbCBzY3JlZW4uCisgICAgICAgIC8vIElmIHNvLCBjdXN0b21pemUgdGhl
IGVzY2FwZSBrZXkuCisgICAgICAgIE5TVG91Y2hCYXIgKnRvdWNoQmFyID0gW21fbWVkaWFUb3Vj
aEJhclByb3ZpZGVyIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IodG91Y2hCYXIpXSA/IFso
aWQpbV9tZWRpYVRvdWNoQmFyUHJvdmlkZXIuZ2V0KCkgdG91Y2hCYXJdIDogWyhpZCltX21lZGlh
VG91Y2hCYXJQcm92aWRlci5nZXQoKSB0b3VjaEJhcl07CisgICAgICAgIGlmIChoYXNGdWxsU2Ny
ZWVuV2luZG93Q29udHJvbGxlcigpICYmIFttX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGlz
RnVsbFNjcmVlbl0pIHsKKyAgICAgICAgICAgIGlmICghbV9leGl0RnVsbFNjcmVlbkJ1dHRvbikg
eworICAgICAgICAgICAgICAgIG1fZXhpdEZ1bGxTY3JlZW5CdXR0b24gPSBhZG9wdE5TKFtbTlND
dXN0b21Ub3VjaEJhckl0ZW0gYWxsb2NdIGluaXRXaXRoSWRlbnRpZmllcjpXS01lZGlhRXhpdEZ1
bGxTY3JlZW5JdGVtXSk7CisKKyAgICAgICAgICAgICAgICBOU0ltYWdlICppbWFnZSA9IFtOU0lt
YWdlIGltYWdlTmFtZWQ6TlNJbWFnZU5hbWVUb3VjaEJhckV4aXRGdWxsU2NyZWVuVGVtcGxhdGVd
OworICAgICAgICAgICAgICAgIFtpbWFnZSBzZXRUZW1wbGF0ZTpZRVNdOworCisgICAgICAgICAg
ICAgICAgTlNCdXR0b24gKmV4aXRGdWxsU2NyZWVuQnV0dG9uID0gW05TQnV0dG9uIGJ1dHRvbldp
dGhUaXRsZTppbWFnZSA/IEAiIiA6IEAiRXhpdCIgaW1hZ2U6aW1hZ2UgdGFyZ2V0Om1fZnVsbFNj
cmVlbldpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgYWN0aW9uOkBzZWxlY3RvcihyZXF1ZXN0RXhpdEZ1
bGxTY3JlZW4pXTsKKyAgICAgICAgICAgICAgICBbZXhpdEZ1bGxTY3JlZW5CdXR0b24gc2V0QWNj
ZXNzaWJpbGl0eVRpdGxlOldlYkNvcmU6OmV4aXRGdWxsU2NyZWVuQnV0dG9uQWNjZXNzaWJpbGl0
eVRpdGxlKCldOworCisgICAgICAgICAgICAgICAgW1tleGl0RnVsbFNjcmVlbkJ1dHRvbi53aWR0
aEFuY2hvciBjb25zdHJhaW50TGVzc1RoYW5PckVxdWFsVG9Db25zdGFudDpleGl0RnVsbFNjcmVl
bkJ1dHRvbldpZHRoXSBzZXRBY3RpdmU6WUVTXTsKKyAgICAgICAgICAgICAgICBbbV9leGl0RnVs
bFNjcmVlbkJ1dHRvbiBzZXRWaWV3OmV4aXRGdWxsU2NyZWVuQnV0dG9uXTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHRvdWNoQmFyLmVzY2FwZUtleVJlcGxhY2VtZW50SXRlbSA9IG1fZXhp
dEZ1bGxTY3JlZW5CdXR0b24uZ2V0KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdG91
Y2hCYXIuZXNjYXBlS2V5UmVwbGFjZW1lbnRJdGVtID0gbmlsOworI2VuZGlmCisgICAgICAgIC8v
IFRoZSByZXN0IG9mIHRoZSB3b3JrIHRvIHVwZGF0ZSB0aGUgbWVkaWEgZnVuY3Rpb24gYmFyIG9u
bHkgYXBwbGllcyB0byB0aGUgcG9wb3ZlciB2ZXJzaW9uLCBzbyByZXR1cm4gZWFybHkuCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlciAm
JiBtX3ZpZXcgPT0gbV92aWV3LndpbmRvdy5maXJzdFJlc3BvbmRlciAmJiBbbV92aWV3IHJlc3Bv
bmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYl9kaWRBZGRNZWRpYUNvbnRyb2xzTWFuYWdlcjop
XSkKKyAgICAgICAgW21fdmlldyBfd2ViX2RpZEFkZE1lZGlhQ29udHJvbHNNYW5hZ2VyOm1fbWVk
aWFQbGF5YmFja0NvbnRyb2xzVmlldy5nZXQoKV07CisjZW5kaWYKIH0KIAogdm9pZCBXZWJWaWV3
SW1wbDo6Zm9yY2VSZXF1ZXN0Q2FuZGlkYXRlc0ZvclRlc3RpbmcoKQogeworICAgIG1fY2FuQ3Jl
YXRlVG91Y2hCYXJzID0gdHJ1ZTsKKyNpZiBIQVZFKFRPVUNIX0JBUikKKyAgICB1cGRhdGVUb3Vj
aEJhcigpOworI2VuZGlmCiB9CiAKIGJvb2wgV2ViVmlld0ltcGw6OnNob3VsZFJlcXVlc3RDYW5k
aWRhdGVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuICFtX3BhZ2Ut
PmVkaXRvclN0YXRlKCkuaXNJblBhc3N3b3JkRmllbGQgJiYgY2FuZGlkYXRlTGlzdFRvdWNoQmFy
SXRlbSgpLmNhbmRpZGF0ZUxpc3RWaXNpYmxlOwogfQogCiB2b2lkIFdlYlZpZXdJbXBsOjpzaG93
Q2FuZGlkYXRlcyhOU0FycmF5ICpjYW5kaWRhdGVzLCBOU1N0cmluZyAqc3RyaW5nLCBOU1JlY3Qg
cmVjdE9mVHlwZWRTdHJpbmcsIE5TUmFuZ2Ugc2VsZWN0ZWRSYW5nZSwgTlNWaWV3ICp2aWV3LCB2
b2lkICheY29tcGxldGlvbkhhbmRsZXIpKE5TVGV4dENoZWNraW5nUmVzdWx0ICphY2NlcHRlZENh
bmRpZGF0ZSkpCiB7CisgICAgW2NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0oKSBzZXRDYW5kaWRh
dGVzOmNhbmRpZGF0ZXMgZm9yU2VsZWN0ZWRSYW5nZTpzZWxlY3RlZFJhbmdlIGluU3RyaW5nOnN0
cmluZ107Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnNldEVkaXRhYmxlRWxlbWVudElzRm9jdXNl
ZChib29sIGVkaXRhYmxlRWxlbWVudElzRm9jdXNlZCkKK3sKKyAgICBtX2VkaXRhYmxlRWxlbWVu
dElzRm9jdXNlZCA9IGVkaXRhYmxlRWxlbWVudElzRm9jdXNlZDsKKworI2lmIEhBVkUoVE9VQ0hf
QkFSKQorICAgIC8vIElmIHRoZSBlZGl0YWJsZSBlbGVtZW50cyBoYXZlIGJsdXJyZWQsIHRoZW4g
d2UgbWlnaHQgbmVlZCB0byBnZXQgcmlkIG9mIHRoZSBlZGl0aW5nIGZ1bmN0aW9uIGJhci4KKyAg
ICBpZiAoIW1fZWRpdGFibGVFbGVtZW50SXNGb2N1c2VkKQorICAgICAgICB1cGRhdGVUb3VjaEJh
cigpOworI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorI2Vsc2UKK25hbWVzcGFj
ZSBXZWJLaXQgeworCit2b2lkIFdlYlZpZXdJbXBsOjpmb3JjZVJlcXVlc3RDYW5kaWRhdGVzRm9y
VGVzdGluZygpCit7Cit9CisKK2Jvb2wgV2ViVmlld0ltcGw6OnNob3VsZFJlcXVlc3RDYW5kaWRh
dGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgV2ViVmlld0ltcGw6
OndlYlZpZXdJbXBsQWRkaXRpb25zV2lsbERlc3Ryb3lWaWV3KCkKK3ZvaWQgV2ViVmlld0ltcGw6
OnNob3dDYW5kaWRhdGVzKE5TQXJyYXkgKmNhbmRpZGF0ZXMsIE5TU3RyaW5nICpzdHJpbmcsIE5T
UmVjdCByZWN0T2ZUeXBlZFN0cmluZywgTlNSYW5nZSBzZWxlY3RlZFJhbmdlLCBOU1ZpZXcgKnZp
ZXcsIHZvaWQgKF5jb21wbGV0aW9uSGFuZGxlcikoTlNUZXh0Q2hlY2tpbmdSZXN1bHQgKmFjY2Vw
dGVkQ2FuZGlkYXRlKSkKIHsKIH0KIApAQCAtNDY1LDcgKzExNDksNyBAQCB2b2lkIFdlYlZpZXdJ
bXBsOjpzZXRFZGl0YWJsZUVsZW1lbnRJc0ZvCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAot
I2VuZGlmIC8vIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwICYmIFVT
RShBUFBMRV9JTlRFUk5BTF9TREspCisjZW5kaWYgLy8gSEFWRShUT1VDSF9CQVIpCiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCkBAIC01NDAsNyArMTIyNCwxNCBAQCBXZWJWaWV3SW1wbDo6fldlYlZp
ZXdJbXBsKCkKICAgICBbbV9sYXlvdXRTdHJhdGVneSBpbnZhbGlkYXRlXTsKIAogICAgIFttX2lt
bWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIgd2lsbERlc3Ryb3lWaWV3Om1fdmlld107Ci0gICAgd2Vi
Vmlld0ltcGxBZGRpdGlvbnNXaWxsRGVzdHJveVZpZXcoKTsKKworI2lmIEhBVkUoREZSKQorICAg
IFttX3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIGRpZERlc3Ryb3lWaWV3XTsKKyNpZiBFTkFC
TEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgW21fbWVkaWFUb3VjaEJhclBy
b3ZpZGVyIHNldFBsYXliYWNrQ29udHJvbHNDb250cm9sbGVyOm5pbF07CisgICAgW21fbWVkaWFQ
bGF5YmFja0NvbnRyb2xzVmlldyBzZXRQbGF5YmFja0NvbnRyb2xzQ29udHJvbGxlcjpuaWxdOwor
I2VuZGlmCisjZW5kaWYKIAogICAgIG1fcGFnZS0+Y2xvc2UoKTsKIApAQCAtNjE1LDcgKzEzMDYs
OSBAQCBib29sIFdlYlZpZXdJbXBsOjpiZWNvbWVGaXJzdFJlc3BvbmRlcigpCiAKICAgICBtX2lu
QmVjb21lRmlyc3RSZXNwb25kZXIgPSBmYWxzZTsKIAotICAgIHVwZGF0ZVdlYlZpZXdJbXBsQWRk
aXRpb25zKCk7CisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgdXBkYXRlVG91Y2hCYXIoKTsKKyNl
bmRpZgogCiAgICAgaWYgKGRpcmVjdGlvbiAhPSBOU0RpcmVjdFNlbGVjdGlvbikgewogICAgICAg
ICBOU0V2ZW50ICpldmVudCA9IFtOU0FwcCBjdXJyZW50RXZlbnRdOwpAQCAtMTgwNyw4ICsyNTAw
LDggQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2VsZWN0aW9uRGlkQ2hhbmdlKCkKICAgICB1cGRhdGVG
b250UGFuZWxJZk5lZWRlZCgpOwogICAgIGlmICghbV9pc0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRh
dGUpCiAgICAgICAgIG1fc29mdFNwYWNlUmFuZ2UgPSBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAw
KTsKLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMAotICAgIHVw
ZGF0ZVdlYlZpZXdJbXBsQWRkaXRpb25zKCk7CisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgdXBk
YXRlVG91Y2hCYXIoKTsKICAgICBpZiAoIW1fcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc01pc3NpbmdQ
b3N0TGF5b3V0RGF0YSkKICAgICAgICAgcmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb25JZk5l
ZWRlZCgpOwogI2VuZGlmCkBAIC0yNDQ3LDggKzMxNDAsOCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpk
aWRIYW5kbGVBY2NlcHRlZENhbmRpCiAKIHZvaWQgV2ViVmlld0ltcGw6OnZpZGVvQ29udHJvbHNN
YW5hZ2VyRGlkQ2hhbmdlKCkKIHsKLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDEwMTIwMAotICAgIHVwZGF0ZVdlYlZpZXdJbXBsQWRkaXRpb25zKCk7CisjaWYgSEFWRShU
T1VDSF9CQVIpCisgICAgdXBkYXRlVG91Y2hCYXIoKTsKICNlbmRpZgogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2NyBAQAorMjAxNi0xMS0wNCAgQmV0aCBEYWtp
biAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3VwcG9ydCBUb3VjaEJhciBpbiBXZWJL
aXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDQz
NworICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzI4
ODc2NTI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW06CisgICAgICAgIChXZWJFZGl0b3JD
bGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViRWRpdG9yQ2xp
ZW50Ojp1cGRhdGVFZGl0b3JTdGF0ZUFmdGVyTGF5b3V0SWZFZGl0YWJpbGl0eUNoYW5nZWQpOgor
ICAgICAgICAqIFdlYlZpZXcvV2ViSFRNTFZpZXcubW06CisgICAgICAgICgtW1dlYkhUTUxWaWV3
IGNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW1dKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcu
bW06CisgICAgICAgICgtW19XZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgaW5pdFdp
dGhXZWJWaWV3Ol0pOgorICAgICAgICAoLVtfV2ViVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9s
bGVyIF9zZWxlY3RMaXN0Ol0pOgorICAgICAgICAoLVtfV2ViVGV4dExpc3RUb3VjaEJhclZpZXdD
b250cm9sbGVyIHNldEN1cnJlbnRMaXN0VHlwZTpdKToKKyAgICAgICAgKC1bV2ViVGV4dFRvdWNo
QmFySXRlbUNvbnRyb2xsZXIgaW5pdFdpdGhXZWJWaWV3Ol0pOgorICAgICAgICAoLVtXZWJUZXh0
VG91Y2hCYXJJdGVtQ29udHJvbGxlciBpdGVtRm9ySWRlbnRpZmllcjpdKToKKyAgICAgICAgKC1b
V2ViVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgd2ViVGV4dExpc3RUb3VjaEJhclZpZXdDb250
cm9sbGVyXSk6CisgICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFRl
eHRJc0JvbGQ6XSk6CisgICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNl
dFRleHRJc0l0YWxpYzpdKToKKyAgICAgICAgKC1bV2ViVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xs
ZXIgc2V0VGV4dElzVW5kZXJsaW5lZDpdKToKKyAgICAgICAgKC1bV2ViVGV4dFRvdWNoQmFySXRl
bUNvbnRyb2xsZXIgX3dlYkNoYW5nZVRleHRTdHlsZTpdKToKKyAgICAgICAgKC1bV2ViVGV4dFRv
dWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0Q3VycmVudFRleHRBbGlnbm1lbnQ6XSk6CisgICAgICAg
ICgtW1dlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIF93ZWJDaGFuZ2VUZXh0QWxpZ25tZW50
Ol0pOgorICAgICAgICAoLVtXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciB0ZXh0Q29sb3Jd
KToKKyAgICAgICAgKC1bV2ViVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dENvbG9y
Ol0pOgorICAgICAgICAoLVtXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBfd2ViQ2hhbmdl
Q29sb3I6XSk6CisgICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHRleHRM
aXN0Vmlld0NvbnRyb2xsZXJdKToKKyAgICAgICAgKC1bV2ViVmlldyBfY29tbW9uSW5pdGlhbGl6
YXRpb25XaXRoRnJhbWVOYW1lOmdyb3VwTmFtZTpdKToKKyAgICAgICAgKC1bV2ViVmlldyBzaG93
Q2FuZGlkYXRlczpmb3JTdHJpbmc6aW5SZWN0OmZvclNlbGVjdGVkUmFuZ2U6dmlldzpjb21wbGV0
aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV2ViVmlldyBzaG91bGRSZXF1ZXN0Q2FuZGlkYXRl
c10pOgorICAgICAgICAoLVtXZWJWaWV3IGZvcmNlUmVxdWVzdENhbmRpZGF0ZXNGb3JUZXN0aW5n
XSk6CisgICAgICAgICgtW1dlYlZpZXcgbWFrZVRvdWNoQmFyXSk6CisgICAgICAgICgtW1dlYlZp
ZXcgdG91Y2hCYXI6bWFrZUl0ZW1Gb3JJZGVudGlmaWVyOl0pOgorICAgICAgICAodGV4dENoZWNr
aW5nUmVzdWx0RnJvbU5TVGV4dENoZWNraW5nUmVzdWx0KToKKyAgICAgICAgKC1bV2ViVmlldyBj
YW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtOmVuZFNlbGVjdGluZ0NhbmRpZGF0ZUF0SW5kZXg6XSk6
CisgICAgICAgICgtW1dlYlZpZXcgY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTpjaGFuZ2VkQ2Fu
ZGlkYXRlTGlzdFZpc2liaWxpdHk6XSk6CisgICAgICAgICgtW1dlYlZpZXcgX3NldFVwUGxheWJh
Y2tDb250cm9sc01hbmFnZXJGb3JNZWRpYUVsZW1lbnQ6XSk6CisgICAgICAgICgtW1dlYlZpZXcg
X2NsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXJdKToKKyAgICAgICAgKC1bV2ViVmlldyBfZGlz
bWlzc1RleHRUb3VjaEJhclBvcG92ZXJJdGVtV2l0aElkZW50aWZpZXI6XSk6CisgICAgICAgICgt
W1dlYlZpZXcgX3RleHRUb3VjaEJhckN1c3RvbWl6YXRpb25BbGxvd2VkSWRlbnRpZmllcnNdKToK
KyAgICAgICAgKC1bV2ViVmlldyBfcGxhaW5UZXh0VG91Y2hCYXJDdXN0b21pemF0aW9uRGVmYXVs
dEl0ZW1JZGVudGlmaWVyc10pOgorICAgICAgICAoLVtXZWJWaWV3IF9yaWNoVGV4dFRvdWNoQmFy
Q3VzdG9taXphdGlvbkRlZmF1bHRJdGVtSWRlbnRpZmllcnNdKToKKyAgICAgICAgKC1bV2ViVmll
dyB0b3VjaEJhckRpZEV4aXRDdXN0b21pemF0aW9uOl0pOgorICAgICAgICAoLVtXZWJWaWV3IHRv
dWNoQmFyV2lsbEVudGVyQ3VzdG9taXphdGlvbjpdKToKKyAgICAgICAgKC1bV2ViVmlldyBkaWRD
aGFuZ2VBdXRvbWF0aWNUZXh0Q29tcGxldGlvbjpdKToKKyAgICAgICAgKC1bV2ViVmlldyBzZXRV
cFRleHRUb3VjaEJhcjpdKToKKyAgICAgICAgKC1bV2ViVmlldyBfaXNSaWNobHlFZGl0YWJsZV0p
OgorICAgICAgICAoLVtXZWJWaWV3IHRleHRUb3VjaEJhcl0pOgorICAgICAgICAoLVtXZWJWaWV3
IHVwZGF0ZVRleHRUb3VjaEJhcl0pOgorICAgICAgICAoLVtXZWJWaWV3IHVwZGF0ZU1lZGlhVG91
Y2hCYXJdKToKKyAgICAgICAgKC1bV2ViVmlldyB1cGRhdGVUb3VjaEJhcl0pOgorICAgICAgICAo
LVtXZWJWaWV3IHByZXBhcmVGb3JNb3VzZURvd25dKToKKyAgICAgICAgKC1bV2ViVmlldyBwcmVw
YXJlRm9yTW91c2VVcF0pOgorICAgICAgICAoLVtXZWJWaWV3IHdlYlZpZXdBZGRpdGlvbnNXaWxs
RGVzdHJveVZpZXddKToKKyAgICAgICAgKC1bV2ViVmlldyBjYW5kaWRhdGVMaXN0XSk6CisgICAg
ICAgICgtW1dlYlZpZXcgdXBkYXRlV2ViVmlld0FkZGl0aW9uc10pOiBEZWxldGVkLgorICAgICAg
ICAqIFdlYlZpZXcvV2ViVmlld0RhdGEuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXdJbnRl
cm5hbC5oOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlld1ByaXZhdGUuaDoKKwogMjAxNi0xMS0w
NCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgogCiAgICAgICAg
IEFkZCBhIHNldHRpbmcgYW5kIHByZWZlcmVuY2VzIHRvIGVuYWJsZS9kaXNhYmxlIGFzeW5jIGlt
YWdlIGRlY29kaW5nCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJF
ZGl0b3JDbGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0JKHdvcmtpbmcgY29weSkK
QEAgLTM0Nyw3ICszNDcsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVzcG9uZFRvQ2hhbmdl
ZFNlCiAgICAgTlNWaWV3PFdlYkRvY3VtZW50Vmlldz4gKmRvY3VtZW50VmlldyA9IFtba2l0KGZy
YW1lKSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CiAgICAgaWYgKFtkb2N1bWVudFZpZXcgaXNL
aW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkgewogICAgICAgICBbKFdlYkhUTUxWaWV3
ICopZG9jdW1lbnRWaWV3IF9zZWxlY3Rpb25DaGFuZ2VkXTsKLSAgICAgICAgW21fd2ViVmlldyB1
cGRhdGVXZWJWaWV3QWRkaXRpb25zXTsKKyAgICAgICAgW21fd2ViVmlldyB1cGRhdGVUb3VjaEJh
cl07CiAgICAgICAgIG1fbGFzdEVkaXRvclN0YXRlV2FzQ29udGVudEVkaXRhYmxlID0gWyhXZWJI
VE1MVmlldyAqKWRvY3VtZW50VmlldyBfaXNFZGl0YWJsZV0gPyBFZGl0b3JTdGF0ZUlzQ29udGVu
dEVkaXRhYmxlOjpZZXMgOiBFZGl0b3JTdGF0ZUlzQ29udGVudEVkaXRhYmxlOjpObzsKICAgICB9
CiAKQEAgLTY2Nyw3ICs2NjcsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6dXBkYXRlRWRpdG9y
U3RhdGVBCiAKICAgICBFZGl0b3JTdGF0ZUlzQ29udGVudEVkaXRhYmxlIGVkaXRvclN0YXRlSXND
b250ZW50RWRpdGFibGUgPSBbKFdlYkhUTUxWaWV3ICopZG9jdW1lbnRWaWV3IF9pc0VkaXRhYmxl
XSA/IEVkaXRvclN0YXRlSXNDb250ZW50RWRpdGFibGU6OlllcyA6IEVkaXRvclN0YXRlSXNDb250
ZW50RWRpdGFibGU6Ok5vOwogICAgIGlmIChtX2xhc3RFZGl0b3JTdGF0ZVdhc0NvbnRlbnRFZGl0
YWJsZSAhPSBlZGl0b3JTdGF0ZUlzQ29udGVudEVkaXRhYmxlKQotICAgICAgICBbbV93ZWJWaWV3
IHVwZGF0ZVdlYlZpZXdBZGRpdGlvbnNdOworICAgICAgICBbbV93ZWJWaWV3IHVwZGF0ZVRvdWNo
QmFyXTsKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlZ2lzdGVyVW5kb1N0ZXAoUGFzc1Jl
ZlB0cjxVbmRvU3RlcD4gY21kKQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJI
VE1MVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhU
TUxWaWV3Lm1tCShyZXZpc2lvbiAyMDg0MDUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYkhUTUxWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC03MjMwLDggKzcyMzAsMTEgQEAgLSAo
dm9pZClfdXBkYXRlU2VsZWN0aW9uRm9ySW5wdXRNYW5hZ2VyCiAjZW5kaWYgLy8gUExBVEZPUk0o
SU9TKQogfQogCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID49IDEwMTIwMCAmJiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2ltcG9ydCA8V2Vi
S2l0QWRkaXRpb25zL1dlYkhUTUxWaWV3V2ViTlNUZXh0SW5wdXRTdXBwb3J0QWRkaXRpb25zLm1t
PgorI2lmIEhBVkUoVE9VQ0hfQkFSKQorLSAoTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtICop
Y2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbQoreworICAgIHJldHVybiBbW3NlbGYgX3dlYlZpZXdd
IGNhbmRpZGF0ZUxpc3RdOworfQogI2VuZGlmCiAKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCw3IEBACiAj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9FeGNlcHRpb24uaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWVSZWYuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvQVZLaXRTUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvQWx0ZXJuYXRpdmVU
ZXh0VUlDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0FuaW1hdGlvbkNvbnRyb2xsZXIu
aD4KICNpbXBvcnQgPFdlYkNvcmUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaD4KQEAgLTE0NCw2
ICsxNDUsOCBAQAogI2ltcG9ydCA8V2ViQ29yZS9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuaD4KICNp
bXBvcnQgPFdlYkNvcmUvR2VvbG9jYXRpb25FcnJvci5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1M
TmFtZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTE9MaXN0RWxlbWVudC5oPgorI2ltcG9ydCA8
V2ViQ29yZS9IVE1MVUxpc3RFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxWaWRlb0Vs
ZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvSGlzdG9yeUNvbnRyb2xsZXIuaD4KICNpbXBvcnQg
PFdlYkNvcmUvSGlzdG9yeUl0ZW0uaD4KQEAgLTE1MywxMSArMTU2LDE0IEBACiAjaW1wb3J0IDxX
ZWJDb3JlL0pTRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9KU05vZGVMaXN0Lmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0pTTm90aWZpY2F0aW9uLmg+CisjaW1wb3J0IDxXZWJDb3JlL0xvY2FsaXpl
ZFN0cmluZ3MuaD4KICNpbXBvcnQgPFdlYkNvcmUvTG9nSW5pdGlhbGl6YXRpb24uaD4KICNpbXBv
cnQgPFdlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5oPgogI2ltcG9ydCA8V2ViQ29yZS9NYWluRnJh
bWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvTWVtb3J5Q2FjaGUuaD4KICNpbXBvcnQgPFdlYkNvcmUv
TWVtb3J5UHJlc3N1cmVIYW5kbGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL05TU3BlbGxDaGVja2Vy
U1BJLmg+CisjaW1wb3J0IDxXZWJDb3JlL05TVG91Y2hCYXJTUEkuaD4KICNpbXBvcnQgPFdlYkNv
cmUvTlNVUkxGaWxlVHlwZU1hcHBpbmdzU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05ldHdvcmtT
dG9yYWdlU2Vzc2lvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9Ob2RlTGlzdC5oPgpAQCAtMTkyLDYg
KzE5OCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVPYmpDRXh0cmFzLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1dlYkNvcmVWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dpZGdldC5oPgorI2lt
cG9ydCA8V2ViQ29yZS9odG1sZWRpdGluZy5oPgogI2ltcG9ydCA8V2ViS2l0TGVnYWN5L0RPTS5o
PgogI2ltcG9ydCA8V2ViS2l0TGVnYWN5L0RPTUV4dGVuc2lvbnMuaD4KICNpbXBvcnQgPFdlYktp
dExlZ2FjeS9ET01Qcml2YXRlLmg+CkBAIC0yMTMsNiArMjIwLDcgQEAKICNpbXBvcnQgPHd0Zi9S
ZWZQdHIuaD4KICNpbXBvcnQgPHd0Zi9SdW5Mb29wLmg+CiAjaW1wb3J0IDx3dGYvU3RkTGliRXh0
cmFzLmg+CisjaW1wb3J0IDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CiAjaW1wb3J0IDx3dGYvc3Bp
L2Rhcndpbi9keWxkU1BJLmg+CiAKICNpZiAhUExBVEZPUk0oSU9TKQpAQCAtMzA3LDYgKzMxNSwx
MiBAQAogI2ltcG9ydCA8V2ViQ29yZS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dC5oPgogI2VuZGlmCiAKKyNpZiBIQVZFKFRPVUNIX0JBUikgJiYgRU5BQkxFKFdFQl9QTEFZQkFD
S19DT05UUk9MU19NQU5BR0VSKQorU09GVF9MSU5LX0ZSQU1FV09SSyhBVktpdCkKK1NPRlRfTElO
S19DTEFTUyhBVktpdCwgQVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNQcm92aWRlcikKK1NP
RlRfTElOS19DTEFTUyhBVktpdCwgQVZGdW5jdGlvbkJhclNjcnViYmVyKQorI2VuZGlmIC8vIEhB
VkUoVE9VQ0hfQkFSKSAmJiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisK
ICNpZiBQTEFURk9STShNQUMpCiBTT0ZUX0xJTktfQ09OU1RBTlRfTUFZX0ZBSUwoTG9va3VwLCBM
VU5vdGlmaWNhdGlvblBvcG92ZXJXaWxsQ2xvc2UsIE5TU3RyaW5nICopCiAjZW5kaWYKQEAgLTY2
Miw2ICs2NzYsMjgzIEBAIHN0YXRpYyBCT09MIGF1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWIK
IHN0YXRpYyBCT09MIGF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQ7CiAjZW5kaWYK
IAorI2lmIEhBVkUoVE9VQ0hfQkFSKQorCitlbnVtIGNsYXNzIFdlYkxpc3RUeXBlIHsKKyAgICBO
b25lID0gMCwKKyAgICBPcmRlcmVkLAorICAgIFVub3JkZXJlZAorfTsKKworQGludGVyZmFjZSBX
ZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgOiBOU1ZpZXdDb250cm9sbGVyIHsKK0Bw
cml2YXRlCisgICAgV2ViVmlldyAqX3dlYlZpZXc7Cit9CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWlj
KSBXZWJMaXN0VHlwZSBjdXJyZW50TGlzdFR5cGU7CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3OworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBX
ZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIKKworQHN5bnRoZXNpemUgY3VycmVudExp
c3RUeXBlPV9jdXJyZW50TGlzdFR5cGU7CisKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGxpc3RDb250
cm9sU2VnbWVudFdpZHRoID0gNjcuMDsKKworc3RhdGljIGNvbnN0IE5TVUludGVnZXIgbm9MaXN0
U2VnbWVudCA9IDA7CitzdGF0aWMgY29uc3QgTlNVSW50ZWdlciB1bm9yZGVyZWRMaXN0U2VnbWVu
dCA9IDE7CitzdGF0aWMgY29uc3QgTlNVSW50ZWdlciBvcmRlcmVkTGlzdFNlZ21lbnQgPSAyOwor
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldworewor
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisg
ICAgX3dlYlZpZXcgPSB3ZWJWaWV3OworCisgICAgTlNTZWdtZW50ZWRDb250cm9sICppbnNlcnRM
aXN0Q29udHJvbCA9IFtOU1NlZ21lbnRlZENvbnRyb2wgc2VnbWVudGVkQ29udHJvbFdpdGhMYWJl
bHM6QFsgV2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVOb25lKCksIFdlYkNvcmU6Omluc2VydExpc3RU
eXBlQnVsbGV0ZWQoKSwgV2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVOdW1iZXJlZCgpIF0gdHJhY2tp
bmdNb2RlOk5TU2VnbWVudFN3aXRjaFRyYWNraW5nU2VsZWN0T25lIHRhcmdldDpzZWxmIGFjdGlv
bjpAc2VsZWN0b3IoX3NlbGVjdExpc3Q6KV07CisgICAgW2luc2VydExpc3RDb250cm9sIHNldFdp
ZHRoOmxpc3RDb250cm9sU2VnbWVudFdpZHRoIGZvclNlZ21lbnQ6bm9MaXN0U2VnbWVudF07Cisg
ICAgW2luc2VydExpc3RDb250cm9sIHNldFdpZHRoOmxpc3RDb250cm9sU2VnbWVudFdpZHRoIGZv
clNlZ21lbnQ6dW5vcmRlcmVkTGlzdFNlZ21lbnRdOworICAgIFtpbnNlcnRMaXN0Q29udHJvbCBz
ZXRXaWR0aDpsaXN0Q29udHJvbFNlZ21lbnRXaWR0aCBmb3JTZWdtZW50Om9yZGVyZWRMaXN0U2Vn
bWVudF07CisgICAgaW5zZXJ0TGlzdENvbnRyb2wuZm9udCA9IFtOU0ZvbnQgc3lzdGVtRm9udE9m
U2l6ZToxNV07CisKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5n
IGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyAgICBpZCBz
ZWdtZW50RWxlbWVudCA9IE5TQWNjZXNzaWJpbGl0eVVuaWdub3JlZERlc2NlbmRhbnQoaW5zZXJ0
TGlzdENvbnRyb2wpOworICAgIE5TQXJyYXkgKnNlZ21lbnRzID0gW3NlZ21lbnRFbGVtZW50IGFj
Y2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlDaGlsZHJlbkF0dHJpYnV0
ZV07CisgICAgQVNTRVJUKHNlZ21lbnRzLmNvdW50ID09IDMpOworICAgIFtzZWdtZW50c1tub0xp
c3RTZWdtZW50XSBhY2Nlc3NpYmlsaXR5U2V0T3ZlcnJpZGVWYWx1ZTpXZWJDb3JlOjppbnNlcnRM
aXN0VHlwZU5vbmUoKSBmb3JBdHRyaWJ1dGU6TlNBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25BdHRy
aWJ1dGVdOworICAgIFtzZWdtZW50c1t1bm9yZGVyZWRMaXN0U2VnbWVudF0gYWNjZXNzaWJpbGl0
eVNldE92ZXJyaWRlVmFsdWU6V2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVCdWxsZXRlZEFjY2Vzc2li
aWxpdHlUaXRsZSgpIGZvckF0dHJpYnV0ZTpOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkF0dHJp
YnV0ZV07CisgICAgW3NlZ21lbnRzW29yZGVyZWRMaXN0U2VnbWVudF0gYWNjZXNzaWJpbGl0eVNl
dE92ZXJyaWRlVmFsdWU6V2ViQ29yZTo6aW5zZXJ0TGlzdFR5cGVOdW1iZXJlZEFjY2Vzc2liaWxp
dHlUaXRsZSgpIGZvckF0dHJpYnV0ZTpOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkF0dHJpYnV0
ZV07CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisKKyAgICBzZWxmLnZpZXcgPSBpbnNl
cnRMaXN0Q29udHJvbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKV9zZWxlY3RM
aXN0OihpZClzZW5kZXIKK3sKKyAgICBOU1ZpZXcgKmRvY3VtZW50VmlldyA9IFtbW193ZWJWaWV3
IF9zZWxlY3RlZE9yTWFpbkZyYW1lXSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CisgICAgaWYg
KCFbZG9jdW1lbnRWaWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pCisgICAg
ICAgIHJldHVybjsKKworICAgIFdlYkhUTUxWaWV3ICp3ZWJIVE1MVmlldyA9IChXZWJIVE1MVmll
dyAqKWRvY3VtZW50VmlldzsKKyAgICBOU1NlZ21lbnRlZENvbnRyb2wgKmluc2VydExpc3RDb250
cm9sID0gKE5TU2VnbWVudGVkQ29udHJvbCAqKXNlbGYudmlldzsKKyAgICBzd2l0Y2ggKGluc2Vy
dExpc3RDb250cm9sLnNlbGVjdGVkU2VnbWVudCkgeworICAgIGNhc2Ugbm9MaXN0U2VnbWVudDoK
KyAgICAgICAgLy8gVGhlcmUgaXMgbm8gInJlbW92ZSBsaXN0IiBlZGl0IGNvbW1hbmQsIGJ1dCBf
aW5zZXJ0T3JkZXJlZExpc3QgYW5kIF9pbnNlcnRVbm9yZGVyZWRMaXN0IGJvdGgKKyAgICAgICAg
Ly8gYmVoYXZlIGFzIHRvZ2dsZXMsIHNvIHdlIGNhbiBpbnZva2UgdGhlIGFwcHJvcHJpYXRlIG1l
dGhvZCBkZXBlbmRpbmcgb24gb3VyIF9jdXJyZW50TGlzdFR5cGUKKyAgICAgICAgLy8gdG8gcmVt
b3ZlIGFuIGV4aXN0aW5nIGxpc3QuIFdlIGRvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcgaWYgX2N1
cnJlbnRMaXN0VHlwZSBpcyBXZWJMaXN0VHlwZTo6Tm9uZS4KKyAgICAgICAgaWYgKF9jdXJyZW50
TGlzdFR5cGUgPT0gV2ViTGlzdFR5cGU6Ok9yZGVyZWQpCisgICAgICAgICAgICBbd2ViSFRNTFZp
ZXcgX2luc2VydE9yZGVyZWRMaXN0XTsKKyAgICAgICAgZWxzZSBpZiAoX2N1cnJlbnRMaXN0VHlw
ZSA9PSBXZWJMaXN0VHlwZTo6VW5vcmRlcmVkKQorICAgICAgICAgICAgW3dlYkhUTUxWaWV3IF9p
bnNlcnRVbm9yZGVyZWRMaXN0XTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSB1bm9yZGVyZWRM
aXN0U2VnbWVudDoKKyAgICAgICAgW3dlYkhUTUxWaWV3IF9pbnNlcnRVbm9yZGVyZWRMaXN0XTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcmRlcmVkTGlzdFNlZ21lbnQ6CisgICAgICAgIFt3
ZWJIVE1MVmlldyBfaW5zZXJ0T3JkZXJlZExpc3RdOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBbX3dlYlZpZXcgX2Rpc21pc3NUZXh0VG91Y2hCYXJQb3BvdmVySXRlbVdpdGhJZGVudGlm
aWVyOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRMaXN0XTsKK30KKworLSAodm9pZClzZXRD
dXJyZW50TGlzdFR5cGU6KFdlYkxpc3RUeXBlKWxpc3RUeXBlCit7CisgICAgTlNTZWdtZW50ZWRD
b250cm9sICppbnNlcnRMaXN0Q29udHJvbCA9IChOU1NlZ21lbnRlZENvbnRyb2wgKilzZWxmLnZp
ZXc7CisgICAgc3dpdGNoIChsaXN0VHlwZSkgeworICAgIGNhc2UgV2ViTGlzdFR5cGU6Ok5vbmU6
CisgICAgICAgIFtpbnNlcnRMaXN0Q29udHJvbCBzZXRTZWxlY3RlZDpZRVMgZm9yU2VnbWVudDpu
b0xpc3RTZWdtZW50XTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJMaXN0VHlwZTo6T3Jk
ZXJlZDoKKyAgICAgICAgW2luc2VydExpc3RDb250cm9sIHNldFNlbGVjdGVkOllFUyBmb3JTZWdt
ZW50Om9yZGVyZWRMaXN0U2VnbWVudF07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViTGlz
dFR5cGU6OlVub3JkZXJlZDoKKyAgICAgICAgW2luc2VydExpc3RDb250cm9sIHNldFNlbGVjdGVk
OllFUyBmb3JTZWdtZW50OnVub3JkZXJlZExpc3RTZWdtZW50XTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgX2N1cnJlbnRMaXN0VHlwZSA9IGxpc3RUeXBlOworfQorCitAZW5kCisKK0Bp
bnRlcmZhY2UgV2ViVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgOiBOU1RleHRUb3VjaEJhckl0
ZW1Db250cm9sbGVyIHsKK0Bwcml2YXRlCisgICAgQk9PTCBfdGV4dElzQm9sZDsKKyAgICBCT09M
IF90ZXh0SXNJdGFsaWM7CisgICAgQk9PTCBfdGV4dElzVW5kZXJsaW5lZDsKKyAgICBOU1RleHRB
bGlnbm1lbnQgX2N1cnJlbnRUZXh0QWxpZ25tZW50OworICAgIFJldGFpblB0cjxOU0NvbG9yPiBf
dGV4dENvbG9yOworICAgIFJldGFpblB0cjxXZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xs
ZXI+IF90ZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXI7CisgICAgV2ViVmlldyAqX3dlYlZp
ZXc7Cit9CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIHRleHRJc0JvbGQ7CitAcHJvcGVy
dHkgKG5vbmF0b21pYykgQk9PTCB0ZXh0SXNJdGFsaWM7CitAcHJvcGVydHkgKG5vbmF0b21pYykg
Qk9PTCB0ZXh0SXNVbmRlcmxpbmVkOworQHByb3BlcnR5IChub25hdG9taWMpIE5TVGV4dEFsaWdu
bWVudCBjdXJyZW50VGV4dEFsaWdubWVudDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4s
IHJlYWR3cml0ZSkgTlNDb2xvciAqdGV4dENvbG9yOworCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhXZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldzsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdl
YlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyCisKK0BzeW50aGVzaXplIHRleHRJc0JvbGQ9X3Rl
eHRJc0JvbGQ7CitAc3ludGhlc2l6ZSB0ZXh0SXNJdGFsaWM9X3RleHRJc0l0YWxpYzsKK0BzeW50
aGVzaXplIHRleHRJc1VuZGVybGluZWQ9X3RleHRJc1VuZGVybGluZWQ7CitAc3ludGhlc2l6ZSBj
dXJyZW50VGV4dEFsaWdubWVudD1fY3VycmVudFRleHRBbGlnbm1lbnQ7CisKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3Cit7CisgICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfd2ViVmlldyA9
IHdlYlZpZXc7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoTlNUb3VjaEJhckl0ZW0gKilp
dGVtRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyCit7CisgICAgTlNUb3VjaEJh
ckl0ZW0gKml0ZW0gPSBbc3VwZXIgaXRlbUZvcklkZW50aWZpZXI6aWRlbnRpZmllcl07CisgICAg
Qk9PTCBpc1RleHRGb3JtYXRJdGVtID0gW2lkZW50aWZpZXIgaXNFcXVhbFRvU3RyaW5nOk5TVG91
Y2hCYXJJdGVtSWRlbnRpZmllclRleHRGb3JtYXRdOworCisgICAgaWYgKGlzVGV4dEZvcm1hdEl0
ZW0gfHwgW2lkZW50aWZpZXIgaXNFcXVhbFRvU3RyaW5nOk5TVG91Y2hCYXJJdGVtSWRlbnRpZmll
clRleHRTdHlsZV0pCisgICAgICAgIHNlbGYudGV4dFN0eWxlLmFjdGlvbiA9IEBzZWxlY3Rvcihf
d2ViQ2hhbmdlVGV4dFN0eWxlOik7CisKKyAgICBpZiAoaXNUZXh0Rm9ybWF0SXRlbSB8fCBbaWRl
bnRpZmllciBpc0VxdWFsVG9TdHJpbmc6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEFsaWdu
bWVudF0pCisgICAgICAgIHNlbGYudGV4dEFsaWdubWVudHMuYWN0aW9uID0gQHNlbGVjdG9yKF93
ZWJDaGFuZ2VUZXh0QWxpZ25tZW50Oik7CisKKyAgICBOU0NvbG9yUGlja2VyVG91Y2hCYXJJdGVt
ICpjb2xvclBpY2tlckl0ZW0gPSBuaWw7CisgICAgaWYgKFtpZGVudGlmaWVyIGlzRXF1YWxUb1N0
cmluZzpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Q29sb3JQaWNrZXJdICYmIFtpdGVtIGlz
S2luZE9mQ2xhc3M6W05TQ29sb3JQaWNrZXJUb3VjaEJhckl0ZW0gY2xhc3NdXSkKKyAgICAgICAg
Y29sb3JQaWNrZXJJdGVtID0gKE5TQ29sb3JQaWNrZXJUb3VjaEJhckl0ZW0gKilpdGVtOworICAg
IGlmIChpc1RleHRGb3JtYXRJdGVtKQorICAgICAgICBjb2xvclBpY2tlckl0ZW0gPSBzZWxmLmNv
bG9yUGlja2VySXRlbTsKKyAgICBpZiAoY29sb3JQaWNrZXJJdGVtKSB7CisgICAgICAgIGNvbG9y
UGlja2VySXRlbS50YXJnZXQgPSBzZWxmOworICAgICAgICBjb2xvclBpY2tlckl0ZW0uYWN0aW9u
ID0gQHNlbGVjdG9yKF93ZWJDaGFuZ2VDb2xvcjopOworICAgICAgICBjb2xvclBpY2tlckl0ZW0u
c2hvd3NBbHBoYSA9IE5POworICAgIH0KKworICAgIHJldHVybiBpdGVtOworfQorCistIChXZWJU
ZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXIgKil3ZWJUZXh0TGlzdFRvdWNoQmFyVmlld0Nv
bnRyb2xsZXIKK3sKKyAgICByZXR1cm4gKFdlYlRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxl
ciAqKXNlbGYudGV4dExpc3RWaWV3Q29udHJvbGxlcjsKK30KKworLSAodm9pZClzZXRUZXh0SXNC
b2xkOihCT09MKWJvbGQKK3sKKyAgICBfdGV4dElzQm9sZCA9IGJvbGQ7CisgICAgaWYgKFtzZWxm
LnRleHRTdHlsZSBpc1NlbGVjdGVkRm9yU2VnbWVudDowXSAhPSBfdGV4dElzQm9sZCkKKyAgICAg
ICAgW3NlbGYudGV4dFN0eWxlIHNldFNlbGVjdGVkOl90ZXh0SXNCb2xkIGZvclNlZ21lbnQ6MF07
Cit9CisKKy0gKHZvaWQpc2V0VGV4dElzSXRhbGljOihCT09MKWl0YWxpYworeworICAgIF90ZXh0
SXNJdGFsaWMgPSBpdGFsaWM7CisgICAgaWYgKFtzZWxmLnRleHRTdHlsZSBpc1NlbGVjdGVkRm9y
U2VnbWVudDoxXSAhPSBfdGV4dElzSXRhbGljKQorICAgICAgICBbc2VsZi50ZXh0U3R5bGUgc2V0
U2VsZWN0ZWQ6X3RleHRJc0l0YWxpYyBmb3JTZWdtZW50OjFdOworfQorCistICh2b2lkKXNldFRl
eHRJc1VuZGVybGluZWQ6KEJPT0wpdW5kZXJsaW5lZAoreworICAgIF90ZXh0SXNVbmRlcmxpbmVk
ID0gdW5kZXJsaW5lZDsKKyAgICBpZiAoW3NlbGYudGV4dFN0eWxlIGlzU2VsZWN0ZWRGb3JTZWdt
ZW50OjJdICE9IF90ZXh0SXNVbmRlcmxpbmVkKQorICAgICAgICBbc2VsZi50ZXh0U3R5bGUgc2V0
U2VsZWN0ZWQ6X3RleHRJc1VuZGVybGluZWQgZm9yU2VnbWVudDoyXTsKK30KKworLSAodm9pZClf
d2ViQ2hhbmdlVGV4dFN0eWxlOihpZClzZW5kZXIKK3sKKyAgICBpZiAoW3NlbGYudGV4dFN0eWxl
IGlzU2VsZWN0ZWRGb3JTZWdtZW50OjBdICE9IF90ZXh0SXNCb2xkKSB7CisgICAgICAgIF90ZXh0
SXNCb2xkID0gIV90ZXh0SXNCb2xkOworICAgICAgICBbX3dlYlZpZXcgX2V4ZWN1dGVDb3JlQ29t
bWFuZEJ5TmFtZTpAIlRvZ2dsZUJvbGQiIHZhbHVlOkAiIl07CisgICAgfQorCisgICAgaWYgKFtz
ZWxmLnRleHRTdHlsZSBpc1NlbGVjdGVkRm9yU2VnbWVudDoxXSAhPSBfdGV4dElzSXRhbGljKSB7
CisgICAgICAgIF90ZXh0SXNJdGFsaWMgPSAhX3RleHRJc0l0YWxpYzsKKyAgICAgICAgW193ZWJW
aWV3IF9leGVjdXRlQ29yZUNvbW1hbmRCeU5hbWU6QCJUb2dnbGVJdGFsaWMiIHZhbHVlOkAiIl07
CisgICAgfQorCisgICAgaWYgKFtzZWxmLnRleHRTdHlsZSBpc1NlbGVjdGVkRm9yU2VnbWVudDoy
XSAhPSBfdGV4dElzVW5kZXJsaW5lZCkgeworICAgICAgICBfdGV4dElzVW5kZXJsaW5lZCA9ICFf
dGV4dElzVW5kZXJsaW5lZDsKKyAgICAgICAgW193ZWJWaWV3IF9leGVjdXRlQ29yZUNvbW1hbmRC
eU5hbWU6QCJUb2dnbGVVbmRlcmxpbmUiIHZhbHVlOkAiIl07CisgICAgfQorfQorCistICh2b2lk
KXNldEN1cnJlbnRUZXh0QWxpZ25tZW50OihOU1RleHRBbGlnbm1lbnQpYWxpZ25tZW50Cit7Cisg
ICAgX2N1cnJlbnRUZXh0QWxpZ25tZW50ID0gYWxpZ25tZW50OworICAgIFtzZWxmLnRleHRBbGln
bm1lbnRzIHNlbGVjdFNlZ21lbnRXaXRoVGFnOl9jdXJyZW50VGV4dEFsaWdubWVudF07Cit9CisK
Ky0gKHZvaWQpX3dlYkNoYW5nZVRleHRBbGlnbm1lbnQ6KGlkKXNlbmRlcgoreworICAgIE5TVGV4
dEFsaWdubWVudCBhbGlnbm1lbnQgPSAoTlNUZXh0QWxpZ25tZW50KVtzZWxmLnRleHRBbGlnbm1l
bnRzLmNlbGwgdGFnRm9yU2VnbWVudDpzZWxmLnRleHRBbGlnbm1lbnRzLnNlbGVjdGVkU2VnbWVu
dF07CisgICAgc3dpdGNoIChhbGlnbm1lbnQpIHsKKyAgICBjYXNlIE5TVGV4dEFsaWdubWVudExl
ZnQ6IHsKKyAgICAgICAgX2N1cnJlbnRUZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxpZ25tZW50TGVm
dDsKKyAgICAgICAgW193ZWJWaWV3IGFsaWduTGVmdDpzZW5kZXJdOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBOU1RleHRBbGlnbm1lbnRSaWdodDogeworICAgICAgICBfY3VycmVu
dFRleHRBbGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRSaWdodDsKKyAgICAgICAgW193ZWJWaWV3
IGFsaWduUmlnaHQ6c2VuZGVyXTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgTlNU
ZXh0QWxpZ25tZW50Q2VudGVyOiB7CisgICAgICAgIF9jdXJyZW50VGV4dEFsaWdubWVudCA9IE5T
VGV4dEFsaWdubWVudENlbnRlcjsKKyAgICAgICAgW193ZWJWaWV3IGFsaWduQ2VudGVyOnNlbmRl
cl07CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIE5TVGV4dEFsaWdubWVudEp1c3Rp
ZmllZDogeworICAgICAgICBfY3VycmVudFRleHRBbGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRK
dXN0aWZpZWQ7CisgICAgICAgIFtfd2ViVmlldyBhbGlnbkp1c3RpZmllZDpzZW5kZXJdOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgW193ZWJWaWV3IF9kaXNtaXNzVGV4dFRvdWNoQmFyUG9wb3Zlckl0ZW1XaXRoSWRlbnRp
ZmllcjpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0QWxpZ25tZW50XTsKK30KKworLSAoTlND
b2xvciAqKXRleHRDb2xvcgoreworICAgIHJldHVybiBfdGV4dENvbG9yLmdldCgpOworfQorCist
ICh2b2lkKXNldFRleHRDb2xvcjooTlNDb2xvciAqKWNvbG9yCit7CisgICAgX3RleHRDb2xvciA9
IGNvbG9yOworICAgIHNlbGYuY29sb3JQaWNrZXJJdGVtLmNvbG9yID0gX3RleHRDb2xvci5nZXQo
KTsKK30KKworLSAodm9pZClfd2ViQ2hhbmdlQ29sb3I6KGlkKXNlbmRlcgoreworICAgIF90ZXh0
Q29sb3IgPSBzZWxmLmNvbG9yUGlja2VySXRlbS5jb2xvcjsKKyAgICBbX3dlYlZpZXcgX2V4ZWN1
dGVDb3JlQ29tbWFuZEJ5TmFtZTpAIkZvcmVDb2xvciIgdmFsdWU6IFdlYkNvcmU6OmNvbG9yRnJv
bU5TQ29sb3IoX3RleHRDb2xvci5nZXQoKSkuc2VyaWFsaXplZCgpXTsKK30KKworLSAoTlNWaWV3
Q29udHJvbGxlciAqKXRleHRMaXN0Vmlld0NvbnRyb2xsZXIKK3sKKyAgICBpZiAoIV90ZXh0TGlz
dFRvdWNoQmFyVmlld0NvbnRyb2xsZXIpCisgICAgICAgIF90ZXh0TGlzdFRvdWNoQmFyVmlld0Nv
bnRyb2xsZXIgPSBhZG9wdE5TKFtbV2ViVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyIGFs
bG9jXSBpbml0V2l0aFdlYlZpZXc6X3dlYlZpZXddKTsKKyAgICByZXR1cm4gX3RleHRMaXN0VG91
Y2hCYXJWaWV3Q29udHJvbGxlci5nZXQoKTsKK30KKworQGVuZAorCisjZW5kaWYgLy8gSEFWRShU
T1VDSF9CQVIpCisKIEBpbXBsZW1lbnRhdGlvbiBXZWJWaWV3IChBbGxXZWJWaWV3cykKIAogc3Rh
dGljIENGU2V0Q2FsbEJhY2tzIE5vblJldGFpbmluZ1NldENhbGxiYWNrcyA9IHsKQEAgLTk3MCw3
ICsxMjYxLDcgQEAgLSAodm9pZClfY29tbW9uSW5pdGlhbGl6YXRpb25XaXRoRnJhbWVOYQogICAg
IH0KICNlbmRpZgogCi0gICAgW3NlbGYgdXBkYXRlV2ViVmlld0FkZGl0aW9uc107CisgICAgW3Nl
bGYgdXBkYXRlVG91Y2hCYXJdOwogCiAjaWYgIVBMQVRGT1JNKElPUykKICAgICBzdGF0aWMgYm9v
bCBkaWRPbmVUaW1lSW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKQEAgLTQ2OTIsNiArNDk4Myw0NSBA
QCAtICh2b2lkKV9zZXRGb250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwCiAgICAgICAgIF9wcml2
YXRlLT5wYWdlLT5zZXR0aW5ncygpLnNldEZvbnRGYWxsYmFja1ByZWZlcnNQaWN0b2dyYXBocyhm
bGFnKTsKIH0KIAorI2lmIEhBVkUoVE9VQ0hfQkFSKQorCistICh2b2lkKXNob3dDYW5kaWRhdGVz
OihOU0FycmF5PE5TVGV4dENoZWNraW5nUmVzdWx0ICo+ICopY2FuZGlkYXRlcyBmb3JTdHJpbmc6
KE5TU3RyaW5nICopc3RyaW5nIGluUmVjdDooTlNSZWN0KXJlY3RPZlR5cGVkU3RyaW5nIGZvclNl
bGVjdGVkUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UgdmlldzooTlNWaWV3ICopdmlldyBjb21wbGV0aW9u
SGFuZGxlcjoodm9pZCAoXikoTlNUZXh0Q2hlY2tpbmdSZXN1bHQgKmFjY2VwdGVkQ2FuZGlkYXRl
KSljb21wbGV0aW9uQmxvY2sKK3sKKyAgICBbc2VsZi5jYW5kaWRhdGVMaXN0IHNldENhbmRpZGF0
ZXM6Y2FuZGlkYXRlcyBmb3JTZWxlY3RlZFJhbmdlOnJhbmdlIGluU3RyaW5nOnN0cmluZ107Cit9
CisKKy0gKEJPT0wpc2hvdWxkUmVxdWVzdENhbmRpZGF0ZXMKK3sKKyAgICBGcmFtZSogY29yZUZy
YW1lID0gY29yZShbc2VsZiBfc2VsZWN0ZWRPck1haW5GcmFtZV0pOworICAgIGlmICghY29yZUZy
YW1lKQorICAgICAgICByZXR1cm4gTk87CisKKyAgICByZXR1cm4gIWNvcmVGcmFtZS0+c2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSAmJiBzZWxmLmNhbmRpZGF0ZUxp
c3QuY2FuZGlkYXRlTGlzdFZpc2libGU7Cit9CisKKy0gKHZvaWQpZm9yY2VSZXF1ZXN0Q2FuZGlk
YXRlc0ZvclRlc3RpbmcKK3sKKyAgICBfcHJpdmF0ZS0+X2NhbkNyZWF0ZVRvdWNoQmFycyA9IFlF
UzsKKyAgICBbc2VsZiB1cGRhdGVUb3VjaEJhcl07Cit9CisKKyNlbHNlCisKKy0gKHZvaWQpc2hv
d0NhbmRpZGF0ZXM6KE5TQXJyYXkgKiljYW5kaWRhdGVzIGZvclN0cmluZzooTlNTdHJpbmcgKilz
dHJpbmcgaW5SZWN0OihOU1JlY3QpcmVjdE9mVHlwZWRTdHJpbmcgZm9yU2VsZWN0ZWRSYW5nZToo
TlNSYW5nZSlyYW5nZSB2aWV3OihOU1ZpZXcgKil2aWV3IGNvbXBsZXRpb25IYW5kbGVyOih2b2lk
ICheKShOU1RleHRDaGVja2luZ1Jlc3VsdCAqYWNjZXB0ZWRDYW5kaWRhdGUpKWNvbXBsZXRpb25C
bG9jaworeworfQorCistICh2b2lkKWZvcmNlUmVxdWVzdENhbmRpZGF0ZXNGb3JUZXN0aW5nCit7
Cit9CisKKy0gKEJPT0wpc2hvdWxkUmVxdWVzdENhbmRpZGF0ZXMKK3sKKyAgICByZXR1cm4gTk87
Cit9CisKKyNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikKKwogQGVuZAogCiBAaW1wbGVtZW50YXRp
b24gX1dlYlNhZmVGb3J3YXJkZXIKQEAgLTQ4MDQsNiArNTEzNCwxMSBAQCAtIChOU01ldGhvZFNp
Z25hdHVyZSAqKW1ldGhvZFNpZ25hdHVyZUZvCiBAZW5kCiAjZW5kaWYKIAorI2lmIEhBVkUoVE9V
Q0hfQkFSKQorQGludGVyZmFjZSBXZWJWaWV3ICgpIDxOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0
ZW1EZWxlZ2F0ZSwgTlNUb3VjaEJhckRlbGVnYXRlLCBOU1RvdWNoQmFyUHJvdmlkZXI+CitAZW5k
CisjZW5kaWYKKwogQGltcGxlbWVudGF0aW9uIFdlYlZpZXcKIAogKyAodm9pZClpbml0aWFsaXpl
CkBAIC01MjU3LDcgKzU1OTIsNyBAQCAtICh2b2lkKWRlYWxsb2MKICAgICAgICAgICAgIFtfcHJp
dmF0ZS0+X2dlb2xvY2F0aW9uUHJvdmlkZXIgc3RvcFRyYWNraW5nV2ViVmlldzpzZWxmXTsKICNl
bmRpZgogCi0gICAgICAgIFtzZWxmIHdlYlZpZXdBZGRpdGlvbnNXaWxsRGVzdHJveVZpZXddOwor
ICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2Vy
dmVyOnNlbGZdOwogCiAgICAgICAgIC8vIGNhbGwgY2xvc2UgdG8gZW5zdXJlIHdlIHRlYXItZG93
biBjb21wbGV0ZWx5CiAgICAgICAgIC8vIHRoaXMgbWFpbnRhaW5zIG91ciBvbGQgYmVoYXZpb3Ig
Zm9yIGV4aXN0aW5nIGFwcGxpY2F0aW9ucwpAQCAtNjQ4OCw2ICs2ODIzLDg3IEBAIC0gKE5TVmll
dyAqKXByZXZpb3VzVmFsaWRLZXlWaWV3CiAgICAgcmV0dXJuIFtwcmV2aW91c1ZpZXcgcHJldmlv
dXNWYWxpZEtleVZpZXddOwogfQogCisjaWYgSEFWRShUT1VDSF9CQVIpCisKK0BkeW5hbWljIHRv
dWNoQmFyOworCistIChOU1RvdWNoQmFyICopbWFrZVRvdWNoQmFyCit7CisgICAgaWYgKCFfcHJp
dmF0ZS0+X2NhbkNyZWF0ZVRvdWNoQmFycykgeworICAgICAgICBfcHJpdmF0ZS0+X2NhbkNyZWF0
ZVRvdWNoQmFycyA9IFlFUzsKKyAgICAgICAgW3NlbGYgdXBkYXRlVG91Y2hCYXJdOworICAgIH0K
KyAgICByZXR1cm4gX3ByaXZhdGUtPl9jdXJyZW50VG91Y2hCYXIuZ2V0KCk7Cit9CisKKy0gKE5T
VG91Y2hCYXJJdGVtICopdG91Y2hCYXI6KE5TVG91Y2hCYXIgKil0b3VjaEJhciBtYWtlSXRlbUZv
cklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcgoreworICAgIGlmICh0b3VjaEJhciA9
PSBfcHJpdmF0ZS0+X3JpY2hUZXh0VG91Y2hCYXIgfHwgdG91Y2hCYXIgPT0gX3ByaXZhdGUtPl9w
bGFpblRleHRUb3VjaEJhcikKKyAgICAgICAgcmV0dXJuIFtfcHJpdmF0ZS0+X3RleHRUb3VjaEJh
ckl0ZW1Db250cm9sbGVyIGl0ZW1Gb3JJZGVudGlmaWVyOmlkZW50aWZpZXJdOworCisgICAgcmV0
dXJuIG5pbDsKK30KKworc3RhdGljIFRleHRDaGVja2luZ1Jlc3VsdCB0ZXh0Q2hlY2tpbmdSZXN1
bHRGcm9tTlNUZXh0Q2hlY2tpbmdSZXN1bHQoTlNUZXh0Q2hlY2tpbmdSZXN1bHQgKm5zUmVzdWx0
KQoreworICAgIFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CisKKyAgICBzd2l0
Y2ggKFtuc1Jlc3VsdCByZXN1bHRUeXBlXSkgeworICAgIGNhc2UgTlNUZXh0Q2hlY2tpbmdUeXBl
U3BlbGxpbmc6CisgICAgICAgIHJlc3VsdC50eXBlID0gV2ViQ29yZTo6VGV4dENoZWNraW5nVHlw
ZVNwZWxsaW5nOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5TVGV4dENoZWNraW5nVHlwZVJl
cGxhY2VtZW50OgorICAgICAgICByZXN1bHQudHlwZSA9IFdlYkNvcmU6OlRleHRDaGVja2luZ1R5
cGVSZXBsYWNlbWVudDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOU1RleHRDaGVja2luZ1R5
cGVDb3JyZWN0aW9uOgorICAgICAgICByZXN1bHQudHlwZSA9IFdlYkNvcmU6OlRleHRDaGVja2lu
Z1R5cGVDb3JyZWN0aW9uOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBy
ZXN1bHQudHlwZSA9IFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGVOb25lOworICAgIH0KKworICAg
IE5TUmFuZ2UgcmVzdWx0UmFuZ2UgPSBuc1Jlc3VsdC5yYW5nZTsKKyAgICByZXN1bHQubG9jYXRp
b24gPSByZXN1bHRSYW5nZS5sb2NhdGlvbjsKKyAgICByZXN1bHQubGVuZ3RoID0gcmVzdWx0UmFu
Z2UubGVuZ3RoOworICAgIHJlc3VsdC5yZXBsYWNlbWVudCA9IG5zUmVzdWx0LnJlcGxhY2VtZW50
U3RyaW5nOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAodm9pZCljYW5kaWRhdGVMaXN0
VG91Y2hCYXJJdGVtOihOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gKilhbkl0ZW0gZW5kU2Vs
ZWN0aW5nQ2FuZGlkYXRlQXRJbmRleDooTlNJbnRlZ2VyKWluZGV4Cit7CisgICAgaWYgKGluZGV4
ID09IE5TTm90Rm91bmQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChhbkl0ZW0gIT0gc2Vs
Zi5jYW5kaWRhdGVMaXN0KQorICAgICAgICByZXR1cm47CisKKyAgICBOU0FycmF5ICpjYW5kaWRh
dGVzID0gYW5JdGVtLmNhbmRpZGF0ZXM7CisgICAgaWYgKChOU1VJbnRlZ2VyKWluZGV4ID49IGNh
bmRpZGF0ZXMuY291bnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlkIGNhbmRpZGF0ZSA9IGNh
bmRpZGF0ZXNbaW5kZXhdOworICAgIEFTU0VSVChbY2FuZGlkYXRlIGlzS2luZE9mQ2xhc3M6W05T
VGV4dENoZWNraW5nUmVzdWx0IGNsYXNzXV0pOworCisgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUg
PSBjb3JlKHNlbGYuX3NlbGVjdGVkT3JNYWluRnJhbWUpKQorICAgICAgICBjb3JlRnJhbWUtPmVk
aXRvcigpLmNsaWVudCgpLT5oYW5kbGVBY2NlcHRlZENhbmRpZGF0ZVdpdGhTb2Z0U3BhY2VzKHRl
eHRDaGVja2luZ1Jlc3VsdEZyb21OU1RleHRDaGVja2luZ1Jlc3VsdCgoTlNUZXh0Q2hlY2tpbmdS
ZXN1bHQgKiljYW5kaWRhdGUpKTsKK30KKworLSAodm9pZCljYW5kaWRhdGVMaXN0VG91Y2hCYXJJ
dGVtOihOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gKilhbkl0ZW0gY2hhbmdlZENhbmRpZGF0
ZUxpc3RWaXNpYmlsaXR5OihCT09MKWlzVmlzaWJsZQoreworICAgIGlmIChhbkl0ZW0gIT0gc2Vs
Zi5jYW5kaWRhdGVMaXN0KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaXNWaXNpYmxlKSB7
CisgICAgICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfc2VsZWN0ZWRPck1h
aW5GcmFtZV0pKQorICAgICAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+cmVx
dWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb24oY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSk7CisgICAgfQorCisgICAgW3NlbGYgdXBkYXRlVG91Y2hCYXJdOworfQorCisjZW5kaWYg
Ly8gSEFWRShUT1VDSF9CQVIpCisKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdlYlZpZXcgKFdl
YklCQWN0aW9ucykKQEAgLTY3NDYsNDggKzcxNjIsNiBAQCAtIChCT09MKXZhbGlkYXRlVXNlcklu
dGVyZmFjZUl0ZW06KGlkIDxOCiAKIEBlbmQKIAotI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNf
T1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAgJiYgVVNFKEFQUExFX0lOVEVSTkFM
X1NESykKLSNpbXBvcnQgPFdlYktpdEFkZGl0aW9ucy9XZWJWaWV3QWRkaXRpb25zLm1tPgotI2Vs
c2UKLUBpbXBsZW1lbnRhdGlvbiBXZWJWaWV3IChXZWJVcGRhdGVXZWJWaWV3QWRkaXRpb25zKQot
Ci0tICh2b2lkKXVwZGF0ZVdlYlZpZXdBZGRpdGlvbnMKLXsKLX0KLQotLSAodm9pZClwcmVwYXJl
Rm9yTW91c2VEb3duCi17Ci19Ci0KLS0gKHZvaWQpcHJlcGFyZUZvck1vdXNlVXAKLXsKLX0KLQot
LSAodm9pZClzaG93Q2FuZGlkYXRlczooTlNBcnJheSAqKWNhbmRpZGF0ZXMgZm9yU3RyaW5nOihO
U1N0cmluZyAqKXN0cmluZyBpblJlY3Q6KE5TUmVjdClyZWN0T2ZUeXBlZFN0cmluZyBmb3JTZWxl
Y3RlZFJhbmdlOihOU1JhbmdlKXJhbmdlIHZpZXc6KE5TVmlldyAqKXZpZXcgY29tcGxldGlvbkhh
bmRsZXI6KHZvaWQgKF4pKE5TVGV4dENoZWNraW5nUmVzdWx0ICphY2NlcHRlZENhbmRpZGF0ZSkp
Y29tcGxldGlvbkJsb2NrCi17Ci19Ci0KLS0gKHZvaWQpZm9yY2VSZXF1ZXN0Q2FuZGlkYXRlc0Zv
clRlc3RpbmcKLXsKLX0KLQotLSAoQk9PTClzaG91bGRSZXF1ZXN0Q2FuZGlkYXRlcwotewotICAg
IHJldHVybiBOTzsKLX0KLQotLSAodm9pZCl3ZWJWaWV3QWRkaXRpb25zV2lsbERlc3Ryb3lWaWV3
Ci17Ci19Ci0KLS0gKGlkKWNhbmRpZGF0ZUxpc3QKLXsKLSAgICByZXR1cm4gbmlsOwotfQotCi1A
ZW5kCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID49IDEwMTIwMCAmJiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotCiBAaW1wbGVtZW50
YXRpb24gV2ViVmlldyAoV2ViUGVuZGluZ1B1YmxpYykKIAogLSAodm9pZClzY2hlZHVsZUluUnVu
TG9vcDooTlNSdW5Mb29wICopcnVuTG9vcCBmb3JNb2RlOihOU1N0cmluZyAqKW1vZGUKQEAgLTg2
NTYsNyArOTAzMCw3IEBAIC0gKHZvaWQpX3NldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXJGb3IK
ICAgICBpZiAoIV9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCiAgICAgICAgIF9w
cml2YXRlLT5wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UgPSBXZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWM6OmNyZWF0ZSgqX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKTsKIAotICAg
IFtzZWxmIHVwZGF0ZVdlYlZpZXdBZGRpdGlvbnNdOworICAgIFtzZWxmIHVwZGF0ZVRvdWNoQmFy
XTsKIH0KIAogLSAodm9pZClfY2xlYXJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcgpAQCAtODY2OSw3
ICs5MDQzLDcgQEAgLSAodm9pZClfY2xlYXJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcgogCiAgICAg
X3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbk1vZGVsID0gbnVsbHB0cjsKICAgICBfcHJpdmF0ZS0+
cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlID0gbnVsbHB0cjsKLSAgICBbc2VsZiB1cGRhdGVXZWJW
aWV3QWRkaXRpb25zXTsKKyAgICBbc2VsZiB1cGRhdGVUb3VjaEJhcl07CiB9CiAjZW5kaWYgLy8g
UExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpCiAjZW5kaWYg
Ly8gRU5BQkxFKFZJREVPKQpAQCAtODg5OCw2ICs5MjcyLDMzMyBAQCAtICh2b2lkKV9zZXRNb2Nr
TWVkaWFQbGF5YmFja1RhcmdldFBpY2tlCiB9CiAjZW5kaWYKIAorI2lmIEhBVkUoVE9VQ0hfQkFS
KQorLSAodm9pZClfZGlzbWlzc1RleHRUb3VjaEJhclBvcG92ZXJJdGVtV2l0aElkZW50aWZpZXI6
KE5TU3RyaW5nICopaWRlbnRpZmllcgoreworICAgIE5TVG91Y2hCYXJJdGVtICpmb3VuZEl0ZW0g
PSBuaWw7CisgICAgZm9yIChOU1RvdWNoQmFySXRlbSAqaXRlbSBpbiBzZWxmLnRleHRUb3VjaEJh
ci5pdGVtcykgeworICAgICAgICBpZiAoW2l0ZW0uaWRlbnRpZmllciBpc0VxdWFsVG9TdHJpbmc6
aWRlbnRpZmllcl0pIHsKKyAgICAgICAgICAgIGZvdW5kSXRlbSA9IGl0ZW07CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChbaXRlbS5pZGVudGlmaWVyIGlzRXF1
YWxUb1N0cmluZzpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0Rm9ybWF0XSkgeworICAgICAg
ICAgICAgZm9yIChOU1RvdWNoQmFySXRlbSAqY2hpbGRJdGVtIGluICgoTlNHcm91cFRvdWNoQmFy
SXRlbSAqKWl0ZW0pLmdyb3VwVG91Y2hCYXIuaXRlbXMpIHsKKyAgICAgICAgICAgICAgICBpZiAo
W2NoaWxkSXRlbS5pZGVudGlmaWVyIGlzRXF1YWxUb1N0cmluZzppZGVudGlmaWVyXSkgeworICAg
ICAgICAgICAgICAgICAgICBmb3VuZEl0ZW0gPSBjaGlsZEl0ZW07CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKFtmb3VuZEl0ZW0gaXNLaW5kT2ZD
bGFzczpbTlNQb3BvdmVyVG91Y2hCYXJJdGVtIGNsYXNzXV0pCisgICAgICAgIFsoTlNQb3BvdmVy
VG91Y2hCYXJJdGVtICopZm91bmRJdGVtIGRpc21pc3NQb3BvdmVyOm5pbF07Cit9CisKKy0gKE5T
QXJyYXk8TlNTdHJpbmcgKj4gKilfdGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkFsbG93ZWRJZGVu
dGlmaWVycworeworICAgIHJldHVybiBAWyBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJDaGFyYWN0
ZXJQaWNrZXIsIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllclRleHRDb2xvclBpY2tlciwgTlNUb3Vj
aEJhckl0ZW1JZGVudGlmaWVyVGV4dFN0eWxlLCBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0
QWxpZ25tZW50LCBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJUZXh0TGlzdCwgTlNUb3VjaEJhckl0
ZW1JZGVudGlmaWVyRmxleGlibGVTcGFjZSBdOworfQorCistIChOU0FycmF5PE5TU3RyaW5nICo+
ICopX3BsYWluVGV4dFRvdWNoQmFyQ3VzdG9taXphdGlvbkRlZmF1bHRJdGVtSWRlbnRpZmllcnMK
K3sKKyAgICByZXR1cm4gQFsgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyQ2hhcmFjdGVyUGlja2Vy
LCBOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJDYW5kaWRhdGVMaXN0IF07Cit9CisKKy0gKE5TQXJy
YXk8TlNTdHJpbmcgKj4gKilfcmljaFRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25EZWZhdWx0SXRl
bUlkZW50aWZpZXJzCit7CisgICAgcmV0dXJuIEBbIE5TVG91Y2hCYXJJdGVtSWRlbnRpZmllckNo
YXJhY3RlclBpY2tlciwgTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEZvcm1hdCwgTlNUb3Vj
aEJhckl0ZW1JZGVudGlmaWVyQ2FuZGlkYXRlTGlzdCBdOworfQorCistICh2b2lkKXRvdWNoQmFy
RGlkRXhpdEN1c3RvbWl6YXRpb246KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7Cisg
ICAgX3ByaXZhdGUtPl9pc0N1c3RvbWl6aW5nVG91Y2hCYXIgPSBOTzsKKyAgICBbc2VsZiB1cGRh
dGVUb3VjaEJhcl07Cit9CisKKy0gKHZvaWQpdG91Y2hCYXJXaWxsRW50ZXJDdXN0b21pemF0aW9u
OihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIF9wcml2YXRlLT5faXNDdXN0
b21pemluZ1RvdWNoQmFyID0gWUVTOworfQorCistICh2b2lkKWRpZENoYW5nZUF1dG9tYXRpY1Rl
eHRDb21wbGV0aW9uOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIGlmIChf
cHJpdmF0ZS0+X3JpY2hUZXh0VG91Y2hCYXIpCisgICAgICAgIFtzZWxmIHNldFVwVGV4dFRvdWNo
QmFyOl9wcml2YXRlLT5fcmljaFRleHRUb3VjaEJhci5nZXQoKV07CisKKyAgICBpZiAoX3ByaXZh
dGUtPl9wbGFpblRleHRUb3VjaEJhcikKKyAgICAgICAgW3NlbGYgc2V0VXBUZXh0VG91Y2hCYXI6
X3ByaXZhdGUtPl9wbGFpblRleHRUb3VjaEJhci5nZXQoKV07CisKKyAgICBbc2VsZiB1cGRhdGVU
b3VjaEJhcl07Cit9CisKKy0gKHZvaWQpc2V0VXBUZXh0VG91Y2hCYXI6KE5TVG91Y2hCYXIgKil0
ZXh0VG91Y2hCYXIKK3sKKyAgICBCT09MIGlzUmljaFRleHRUb3VjaEJhciA9IHRleHRUb3VjaEJh
ciA9PSBfcHJpdmF0ZS0+X3JpY2hUZXh0VG91Y2hCYXI7CisgICAgW3RleHRUb3VjaEJhciBzZXRE
ZWxlZ2F0ZTpzZWxmXTsKKyAgICBbdGV4dFRvdWNoQmFyIHNldERlZmF1bHRJdGVtczpbTlNNdXRh
YmxlU2V0IHNldFdpdGhPYmplY3Q6aXNSaWNoVGV4dFRvdWNoQmFyID8gX3ByaXZhdGUtPl9yaWNo
VGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0uZ2V0KCkgOiBfcHJpdmF0ZS0+X3BsYWluVGV4
dENhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0uZ2V0KCldXTsKKyAgICBbdGV4dFRvdWNoQmFyIHNl
dEN1c3RvbWl6YXRpb25BbGxvd2VkSXRlbUlkZW50aWZpZXJzOltzZWxmIF90ZXh0VG91Y2hCYXJD
dXN0b21pemF0aW9uQWxsb3dlZElkZW50aWZpZXJzXV07CisKKyAgICBOU0FycmF5PE5TU3RyaW5n
ICo+ICpkZWZhdWx0SWRlbnRpZmllcnMgPSBpc1JpY2hUZXh0VG91Y2hCYXIgPyBbc2VsZiBfcmlj
aFRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25EZWZhdWx0SXRlbUlkZW50aWZpZXJzXSA6IFtzZWxm
IF9wbGFpblRleHRUb3VjaEJhckN1c3RvbWl6YXRpb25EZWZhdWx0SXRlbUlkZW50aWZpZXJzXTsK
KyAgICBbdGV4dFRvdWNoQmFyIHNldEN1c3RvbWl6YXRpb25EZWZhdWx0SXRlbUlkZW50aWZpZXJz
OmRlZmF1bHRJZGVudGlmaWVyc107CisKKyAgICBpZiAoTlNHcm91cFRvdWNoQmFySXRlbSAqdGV4
dEZvcm1hdEl0ZW0gPSAoTlNHcm91cFRvdWNoQmFySXRlbSAqKVt0ZXh0VG91Y2hCYXIgaXRlbUZv
cklkZW50aWZpZXI6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEZvcm1hdF0pCisgICAgICAg
IHRleHRGb3JtYXRJdGVtLmdyb3VwVG91Y2hCYXIuY3VzdG9taXphdGlvbklkZW50aWZpZXIgPSBA
IldlYlRleHRGb3JtYXRUb3VjaEJhciI7Cit9CisKKy0gKEJPT0wpX2lzUmljaGx5RWRpdGFibGUK
K3sKKyAgICBOU1ZpZXcgKmRvY3VtZW50VmlldyA9IHNlbGYuX3NlbGVjdGVkT3JNYWluRnJhbWUu
ZnJhbWVWaWV3LmRvY3VtZW50VmlldzsKKyAgICBpZiAoIVtkb2N1bWVudFZpZXcgaXNLaW5kT2ZD
bGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuIE5POworCisgICAgV2Vi
SFRNTFZpZXcgKndlYkhUTUxWaWV3ID0gKFdlYkhUTUxWaWV3ICopZG9jdW1lbnRWaWV3OworICAg
IHJldHVybiB3ZWJIVE1MVmlldy5faXNFZGl0YWJsZSAmJiB3ZWJIVE1MVmlldy5fY2FuRWRpdFJp
Y2hseTsKK30KKworLSAoTlNUb3VjaEJhciAqKXRleHRUb3VjaEJhcgoreworICAgIGlmIChzZWxm
Ll9pc1JpY2hseUVkaXRhYmxlKQorICAgICAgICByZXR1cm4gX3ByaXZhdGUtPl9yaWNoVGV4dFRv
dWNoQmFyLmdldCgpOworCisgICAgcmV0dXJuIF9wcml2YXRlLT5fcGxhaW5UZXh0VG91Y2hCYXIu
Z2V0KCk7Cit9CisKKy0gKHZvaWQpdXBkYXRlVGV4dFRvdWNoQmFyCit7CisgICAgaWYgKF9wcml2
YXRlLT5faXNEZWZlcnJpbmdUZXh0VG91Y2hCYXJVcGRhdGVzKSB7CisgICAgICAgIF9wcml2YXRl
LT5fbmVlZHNEZWZlcnJlZFRleHRUb3VjaEJhclVwZGF0ZSA9IFlFUzsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIE5TVmlldyAqZG9jdW1lbnRWaWV3ID0gW1tbc2VsZiBfc2VsZWN0ZWRP
ck1haW5GcmFtZV0gZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOworICAgIGlmICghW2RvY3VtZW50
VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgV2ViSFRNTFZpZXcgKndlYkhUTUxWaWV3ID0gKFdlYkhUTUxWaWV3ICopZG9j
dW1lbnRWaWV3OworICAgIGlmICghW3dlYkhUTUxWaWV3IF9pc0VkaXRhYmxlXSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX3NlbGVjdGVkT3JN
YWluRnJhbWVdKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKF9wcml2YXRlLT5faXNVcGRhdGluZ1RleHRUb3VjaEJhcikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgVGVtcG9yYXJ5Q2hhbmdlPEJPT0w+IGlzVXBkYXRpbmdUZXh0VG91Y2hCYXIoX3ByaXZh
dGUtPl9pc1VwZGF0aW5nVGV4dFRvdWNoQmFyLCBZRVMpOworCisgICAgaWYgKCFfcHJpdmF0ZS0+
X3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyKQorICAgICAgICBfcHJpdmF0ZS0+X3RleHRUb3Vj
aEJhckl0ZW1Db250cm9sbGVyID0gYWRvcHROUyhbW1dlYlRleHRUb3VjaEJhckl0ZW1Db250cm9s
bGVyIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6c2VsZl0pOworCisgICAgaWYgKCFfcHJpdmF0ZS0+
X3N0YXJ0ZWRMaXN0ZW5pbmdUb0N1c3RvbWl6YXRpb25FdmVudHMpIHsKKyAgICAgICAgW1tOU05v
dGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9y
OkBzZWxlY3Rvcih0b3VjaEJhckRpZEV4aXRDdXN0b21pemF0aW9uOikgbmFtZTpOU1RvdWNoQmFy
RGlkRXhpdEN1c3RvbWl6YXRpb24gb2JqZWN0Om5pbF07CisgICAgICAgIFtbTlNOb3RpZmljYXRp
b25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0
b3IodG91Y2hCYXJXaWxsRW50ZXJDdXN0b21pemF0aW9uOikgbmFtZTpOU1RvdWNoQmFyV2lsbEVu
dGVyQ3VzdG9taXphdGlvbiBvYmplY3Q6bmlsXTsKKyAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNl
bnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcihk
aWRDaGFuZ2VBdXRvbWF0aWNUZXh0Q29tcGxldGlvbjopIG5hbWU6TlNTcGVsbENoZWNrZXJEaWRD
aGFuZ2VBdXRvbWF0aWNUZXh0Q29tcGxldGlvbk5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKKyAg
ICAgICAgX3ByaXZhdGUtPl9zdGFydGVkTGlzdGVuaW5nVG9DdXN0b21pemF0aW9uRXZlbnRzID0g
WUVTOworICAgIH0KKworICAgIGlmICghX3ByaXZhdGUtPl9wbGFpblRleHRDYW5kaWRhdGVMaXN0
VG91Y2hCYXJJdGVtIHx8ICFfcHJpdmF0ZS0+X3JpY2hUZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFy
SXRlbSkgeworICAgICAgICBfcHJpdmF0ZS0+X3BsYWluVGV4dENhbmRpZGF0ZUxpc3RUb3VjaEJh
ckl0ZW0gPSBhZG9wdE5TKFtbTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtIGFsbG9jXSBpbml0
V2l0aElkZW50aWZpZXI6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyQ2FuZGlkYXRlTGlzdF0pOwor
ICAgICAgICBbX3ByaXZhdGUtPl9wbGFpblRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtIHNl
dERlbGVnYXRlOnNlbGZdOworICAgICAgICBfcHJpdmF0ZS0+X3JpY2hUZXh0Q2FuZGlkYXRlTGlz
dFRvdWNoQmFySXRlbSA9IGFkb3B0TlMoW1tOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gYWxs
b2NdIGluaXRXaXRoSWRlbnRpZmllcjpOU1RvdWNoQmFySXRlbUlkZW50aWZpZXJDYW5kaWRhdGVM
aXN0XSk7CisgICAgICAgIFtfcHJpdmF0ZS0+X3JpY2hUZXh0Q2FuZGlkYXRlTGlzdFRvdWNoQmFy
SXRlbSBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS5jbGll
bnQoKS0+cmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb24oY29yZUZyYW1lLT5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSk7CisgICAgfQorCisgICAgaWYgKCFfcHJpdmF0ZS0+X3JpY2hUZXh0VG91
Y2hCYXIpIHsKKyAgICAgICAgX3ByaXZhdGUtPl9yaWNoVGV4dFRvdWNoQmFyID0gYWRvcHROUyhb
W05TVG91Y2hCYXIgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgW3NlbGYgc2V0VXBUZXh0VG91Y2hC
YXI6X3ByaXZhdGUtPl9yaWNoVGV4dFRvdWNoQmFyLmdldCgpXTsKKyAgICAgICAgW19wcml2YXRl
LT5fcmljaFRleHRUb3VjaEJhciBzZXRDdXN0b21pemF0aW9uSWRlbnRpZmllcjpAIldlYlJpY2hU
ZXh0VG91Y2hCYXIiXTsKKyAgICB9CisKKyAgICBpZiAoIV9wcml2YXRlLT5fcGxhaW5UZXh0VG91
Y2hCYXIpIHsKKyAgICAgICAgX3ByaXZhdGUtPl9wbGFpblRleHRUb3VjaEJhciA9IGFkb3B0TlMo
W1tOU1RvdWNoQmFyIGFsbG9jXSBpbml0XSk7CisgICAgICAgIFtzZWxmIHNldFVwVGV4dFRvdWNo
QmFyOl9wcml2YXRlLT5fcGxhaW5UZXh0VG91Y2hCYXIuZ2V0KCldOworICAgICAgICBbX3ByaXZh
dGUtPl9wbGFpblRleHRUb3VjaEJhciBzZXRDdXN0b21pemF0aW9uSWRlbnRpZmllcjpAIldlYlBs
YWluVGV4dFRvdWNoQmFyIl07CisgICAgfQorCisgICAgaWYgKFtOU1NwZWxsQ2hlY2tlciBpc0F1
dG9tYXRpY1RleHRDb21wbGV0aW9uRW5hYmxlZF0gJiYgIV9wcml2YXRlLT5faXNDdXN0b21pemlu
Z1RvdWNoQmFyKSB7CisgICAgICAgIEJPT0wgc2hvdWxkU2hvd0NhbmRpZGF0ZUxpc3QgPSAhY29y
ZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkgfHwgY29yZUZyYW1lLT5l
ZGl0b3IoKS5pZ25vcmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZSgpOworICAgICAgICBbc2Vs
Zi5jYW5kaWRhdGVMaXN0IHVwZGF0ZVdpdGhJbnNlcnRpb25Qb2ludFZpc2liaWxpdHk6c2hvdWxk
U2hvd0NhbmRpZGF0ZUxpc3RdOworICAgIH0KKworICAgIGlmIChjb3JlRnJhbWUtPnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpIHsKKyAgICAgICAgLy8gV2UgZG9u
J3QgcmVxdWVzdCBjYW5kaWRhdGVzIGZvciBwYXNzd29yZCBmaWVsZHMuIElmIHRoZSB1c2VyIHdh
cyBwcmV2aW91c2x5IGluIGEgbm9uLXBhc3N3b3JkIGZpZWxkLCB0aGVuIHRoZQorICAgICAgICAv
LyBvbGQgY2FuZGlkYXRlcyB3aWxsIHN0aWxsIHNob3cgYnkgZGVmYXVsdCwgc28gd2UgY2xlYXIg
dGhlbSBoZXJlIGJ5IHNldHRpbmcgYW4gZW1wdHkgYXJyYXkgb2YgY2FuZGlkYXRlcy4KKyAgICAg
ICAgaWYgKCFfcHJpdmF0ZS0+X2VtcHR5Q2FuZGlkYXRlc0FycmF5KQorICAgICAgICAgICAgX3By
aXZhdGUtPl9lbXB0eUNhbmRpZGF0ZXNBcnJheSA9IGFkb3B0TlMoW1tOU0FycmF5IGFsbG9jXSBp
bml0XSk7CisgICAgICAgIFtzZWxmLmNhbmRpZGF0ZUxpc3Qgc2V0Q2FuZGlkYXRlczpfcHJpdmF0
ZS0+X2VtcHR5Q2FuZGlkYXRlc0FycmF5LmdldCgpIGZvclNlbGVjdGVkUmFuZ2U6TlNNYWtlUmFu
Z2UoMCwgMCkgaW5TdHJpbmc6bmlsXTsKKyAgICB9CisKKyAgICBOU1RvdWNoQmFyICp0ZXh0VG91
Y2hCYXIgPSBzZWxmLnRleHRUb3VjaEJhcjsKKyAgICBOU0FycmF5PE5TU3RyaW5nICo+ICppdGVt
SWRlbnRpZmllcnMgPSB0ZXh0VG91Y2hCYXIuaXRlbUlkZW50aWZpZXJzOworICAgIEJPT0wgaXNT
aG93aW5nQ29tYmluZWRUZXh0Rm9ybWF0SXRlbSA9IFtpdGVtSWRlbnRpZmllcnMgY29udGFpbnNP
YmplY3Q6TlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEZvcm1hdF07CisgICAgW3RleHRUb3Vj
aEJhciBzZXRQcmluY2lwYWxJdGVtSWRlbnRpZmllcjppc1Nob3dpbmdDb21iaW5lZFRleHRGb3Jt
YXRJdGVtID8gTlNUb3VjaEJhckl0ZW1JZGVudGlmaWVyVGV4dEZvcm1hdCA6IG5pbF07CisKKyAg
ICAvLyBTZXQgY3VycmVudCB0eXBpbmcgYXR0cmlidXRlcyBmb3IgcmljaCB0ZXh0LiBUaGlzIHdp
bGwgZW5zdXJlIHRoYXQgdGhlIGJ1dHRvbnMgcmVmbGVjdCB0aGUgc3RhdGUgb2YKKyAgICAvLyB0
aGUgdGV4dCB3aGVuIGNoYW5naW5nIHNlbGVjdGlvbiB0aHJvdWdob3V0IHRoZSBkb2N1bWVudC4K
KyAgICBpZiAod2ViSFRNTFZpZXcuX2NhbkVkaXRSaWNobHkpIHsKKyAgICAgICAgY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKTsKKyAgICAgICAgaWYgKCFzZWxlY3Rpb24uaXNOb25lKCkpIHsKKyAgICAgICAgICAgIE5v
ZGUqIG5vZGVUb1JlbW92ZTsKKyAgICAgICAgICAgIGlmIChhdXRvKiBzdHlsZSA9IEVkaXRvcjo6
c3R5bGVGb3JTZWxlY3Rpb25TdGFydChjb3JlRnJhbWUsIG5vZGVUb1JlbW92ZSkpIHsKKyAgICAg
ICAgICAgICAgICBbX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRUZXh0
SXNCb2xkOihzdHlsZS0+Zm9udENhc2NhZGUoKS53ZWlnaHQoKSA+PSBGb250V2VpZ2h0Qm9sZCld
OworICAgICAgICAgICAgICAgIFtfcHJpdmF0ZS0+X3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVy
IHNldFRleHRJc0l0YWxpYzooc3R5bGUtPmZvbnRDYXNjYWRlKCkuaXRhbGljKCkgPT0gRm9udEl0
YWxpY09uKV07CisKKyAgICAgICAgICAgICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdT
dHlsZSA9IGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKTsKKyAgICAgICAgICAg
ICAgICBpZiAodHlwaW5nU3R5bGUgJiYgdHlwaW5nU3R5bGUtPnN0eWxlKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gdHlwaW5nU3R5bGUtPnN0eWxlKCktPmdldFByb3Bl
cnR5VmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCk7CisgICAg
ICAgICAgICAgICAgICAgIFtfcHJpdmF0ZS0+X3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNl
dFRleHRJc1VuZGVybGluZWQ6dmFsdWUuY29udGFpbnMoInVuZGVybGluZSIpXTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgW19wcml2YXRlLT5fdGV4dFRvdWNo
QmFySXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzVW5kZXJsaW5lZDooc3R5bGUtPnRleHREZWNvcmF0
aW9uc0luRWZmZWN0KCkgJiBUZXh0RGVjb3JhdGlvblVuZGVybGluZSldOworCisgICAgICAgICAg
ICAgICAgaWYgKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciku
aXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICBbX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJ
dGVtQ29udHJvbGxlciBzZXRUZXh0Q29sb3I6bnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVu
dENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKV07CisKKyAgICAgICAgICAgICAgICBOU1RleHRBbGln
bm1lbnQgdGV4dEFsaWdubWVudDsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0eWxlLT50ZXh0
QWxpZ24oKSkgeworICAgICAgICAgICAgICAgIGNhc2UgUklHSFQ6CisgICAgICAgICAgICAgICAg
Y2FzZSBXRUJLSVRfUklHSFQ6CisgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbm1lbnQgPSBO
U1RleHRBbGlnbm1lbnRSaWdodDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSBMRUZUOgorICAgICAgICAgICAgICAgIGNhc2UgV0VCS0lUX0xFRlQ6Cisg
ICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRMZWZ0Owor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENFTlRFUjoK
KyAgICAgICAgICAgICAgICBjYXNlIFdFQktJVF9DRU5URVI6CisgICAgICAgICAgICAgICAgICAg
IHRleHRBbGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRDZW50ZXI7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSlVTVElGWToKKyAgICAgICAgICAgICAg
ICAgICAgdGV4dEFsaWdubWVudCA9IE5TVGV4dEFsaWdubWVudEp1c3RpZmllZDsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBUQVNUQVJUOgorICAgICAg
ICAgICAgICAgICAgICB0ZXh0QWxpZ25tZW50ID0gc3R5bGUtPmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSA/IE5TVGV4dEFsaWdubWVudExlZnQgOiBOU1RleHRBbGlnbm1lbnRSaWdodDsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBUQUVORDoKKyAgICAg
ICAgICAgICAgICAgICAgdGV4dEFsaWdubWVudCA9IHN0eWxlLT5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkgPyBOU1RleHRBbGlnbm1lbnRSaWdodCA6IE5TVGV4dEFsaWdubWVudExlZnQ7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBbX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRDdXJyZW50VGV4dEFs
aWdubWVudDp0ZXh0QWxpZ25tZW50XTsKKworICAgICAgICAgICAgICAgIEhUTUxFbGVtZW50KiBl
bmNsb3NpbmdMaXN0RWxlbWVudCA9IGVuY2xvc2luZ0xpc3Qoc2VsZWN0aW9uLnN0YXJ0KCkuZGVw
cmVjYXRlZE5vZGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKGVuY2xvc2luZ0xpc3RFbGVtZW50
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpczxIVE1MVUxpc3RFbGVtZW50PigqZW5jbG9z
aW5nTGlzdEVsZW1lbnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgW1tfcHJpdmF0ZS0+X3Rl
eHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHdlYlRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxl
cl0gc2V0Q3VycmVudExpc3RUeXBlOldlYkxpc3RUeXBlOjpVbm9yZGVyZWRdOworICAgICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChpczxIVE1MT0xpc3RFbGVtZW50PigqZW5jbG9zaW5nTGlzdEVs
ZW1lbnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgW1tfcHJpdmF0ZS0+X3RleHRUb3VjaEJh
ckl0ZW1Db250cm9sbGVyIHdlYlRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlcl0gc2V0Q3Vy
cmVudExpc3RUeXBlOldlYkxpc3RUeXBlOjpPcmRlcmVkXTsKKyAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIFtbX3ByaXZhdGUtPl90ZXh0
VG91Y2hCYXJJdGVtQ29udHJvbGxlciB3ZWJUZXh0TGlzdFRvdWNoQmFyVmlld0NvbnRyb2xsZXJd
IHNldEN1cnJlbnRMaXN0VHlwZTpXZWJMaXN0VHlwZTo6Tm9uZV07CisKKyAgICAgICAgICAgICAg
ICBpZiAobm9kZVRvUmVtb3ZlKQorICAgICAgICAgICAgICAgICAgICBub2RlVG9SZW1vdmUtPnJl
bW92ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEJPT0wgaXNTaG93aW5n
Q2FuZGlkYXRlTGlzdEl0ZW0gPSBbaXRlbUlkZW50aWZpZXJzIGNvbnRhaW5zT2JqZWN0Ok5TVG91
Y2hCYXJJdGVtSWRlbnRpZmllckNhbmRpZGF0ZUxpc3RdICYmIFtOU1NwZWxsQ2hlY2tlciBpc0F1
dG9tYXRpY1RleHRDb21wbGV0aW9uRW5hYmxlZF07CisgICAgICAgIFtfcHJpdmF0ZS0+X3RleHRU
b3VjaEJhckl0ZW1Db250cm9sbGVyIHNldFVzZXNOYXJyb3dUZXh0U3R5bGVJdGVtOmlzU2hvd2lu
Z0NvbWJpbmVkVGV4dEZvcm1hdEl0ZW0gJiYgaXNTaG93aW5nQ2FuZGlkYXRlTGlzdEl0ZW1dOwor
ICAgIH0KK30KKworLSAodm9pZCl1cGRhdGVNZWRpYVRvdWNoQmFyCit7CisjaWYgRU5BQkxFKFdF
Ql9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIGlmICghX3ByaXZhdGUtPm1lZGlhVG91
Y2hCYXJQcm92aWRlcikKKyAgICAgICAgX3ByaXZhdGUtPm1lZGlhVG91Y2hCYXJQcm92aWRlciA9
IGFkb3B0TlMoW2FsbG9jQVZGdW5jdGlvbkJhclBsYXliYWNrQ29udHJvbHNQcm92aWRlckluc3Rh
bmNlKCkgaW5pdF0pOworCisgICAgaWYgKCFbX3ByaXZhdGUtPm1lZGlhVG91Y2hCYXJQcm92aWRl
ciBwbGF5YmFja0NvbnRyb2xzQ29udHJvbGxlcl0pIHsKKyAgICAgICAgQVNTRVJUKF9wcml2YXRl
LT5wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpOworICAgICAgICBXZWJQbGF5YmFja0NvbnRyb2xz
TWFuYWdlciAqbWFuYWdlciA9IF9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBs
YXlCYWNrQ29udHJvbHNNYW5hZ2VyKCk7CisgICAgICAgIFtfcHJpdmF0ZS0+bWVkaWFUb3VjaEJh
clByb3ZpZGVyIHNldFBsYXliYWNrQ29udHJvbHNDb250cm9sbGVyOihpZCA8QVZGdW5jdGlvbkJh
clBsYXliYWNrQ29udHJvbHNDb250cm9sbGluZz4pbWFuYWdlcl07CisgICAgICAgIFtfcHJpdmF0
ZS0+bWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyBzZXRQbGF5YmFja0NvbnRyb2xzQ29udHJvbGxl
cjooaWQgPEFWRnVuY3Rpb25CYXJQbGF5YmFja0NvbnRyb2xzQ29udHJvbGxpbmc+KW1hbmFnZXJd
OworICAgIH0KKyNlbmRpZgorfQorCistICh2b2lkKXVwZGF0ZVRvdWNoQmFyCit7CisgICAgaWYg
KCFfcHJpdmF0ZS0+X2NhbkNyZWF0ZVRvdWNoQmFycykKKyAgICAgICAgcmV0dXJuOworCisgICAg
RnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVdKTsKKyAg
ICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNUb3VjaEJhciAqdG91
Y2hCYXIgPSBuaWw7CisgICAgTlNWaWV3ICpkb2N1bWVudFZpZXcgPSBbW1tzZWxmIF9zZWxlY3Rl
ZE9yTWFpbkZyYW1lXSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CisgICAgaWYgKFtkb2N1bWVu
dFZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkgeworICAgICAgICBXZWJI
VE1MVmlldyAqd2ViSFRNTFZpZXcgPSAoV2ViSFRNTFZpZXcgKilkb2N1bWVudFZpZXc7CisgICAg
ICAgIGlmIChbd2ViSFRNTFZpZXcgX2lzRWRpdGFibGVdKSB7CisgICAgICAgICAgICBbc2VsZiB1
cGRhdGVUZXh0VG91Y2hCYXJdOworICAgICAgICAgICAgdG91Y2hCYXIgPSBbc2VsZiB0ZXh0VG91
Y2hCYXJdOworICAgICAgICB9CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5B
R0VSKQorICAgICAgICBlbHNlIGlmIChbc2VsZiBfaGFzQWN0aXZlVmlkZW9Gb3JDb250cm9sc0lu
dGVyZmFjZV0pIHsKKyAgICAgICAgICAgIFtzZWxmIHVwZGF0ZU1lZGlhVG91Y2hCYXJdOworICAg
ICAgICAgICAgdG91Y2hCYXIgPSBbX3ByaXZhdGUtPm1lZGlhVG91Y2hCYXJQcm92aWRlciByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHRvdWNoQmFyKV0gPyBbKGlkKV9wcml2YXRlLT5tZWRp
YVRvdWNoQmFyUHJvdmlkZXIgdG91Y2hCYXJdIDogWyhpZClfcHJpdmF0ZS0+bWVkaWFUb3VjaEJh
clByb3ZpZGVyIHRvdWNoQmFyXTsKKyAgICAgICAgfSBlbHNlIGlmIChbX3ByaXZhdGUtPm1lZGlh
VG91Y2hCYXJQcm92aWRlciBwbGF5YmFja0NvbnRyb2xzQ29udHJvbGxlcl0pIHsKKyAgICAgICAg
ICAgIFtfcHJpdmF0ZS0+bWVkaWFUb3VjaEJhclByb3ZpZGVyIHNldFBsYXliYWNrQ29udHJvbHND
b250cm9sbGVyOm5pbF07CisgICAgICAgICAgICBbX3ByaXZhdGUtPm1lZGlhUGxheWJhY2tDb250
cm9sc1ZpZXcgc2V0UGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXI6bmlsXTsKKyAgICAgICAgfQor
I2VuZGlmCisgICAgfQorCisgICAgaWYgKHRvdWNoQmFyID09IF9wcml2YXRlLT5fY3VycmVudFRv
dWNoQmFyKQorICAgICAgICByZXR1cm47CisKKyAgICBfcHJpdmF0ZS0+X2N1cnJlbnRUb3VjaEJh
ciA9IHRvdWNoQmFyOworICAgIFtzZWxmIHdpbGxDaGFuZ2VWYWx1ZUZvcktleTpAInRvdWNoQmFy
Il07CisgICAgW3NlbGYgc2V0VG91Y2hCYXI6X3ByaXZhdGUtPl9jdXJyZW50VG91Y2hCYXIuZ2V0
KCldOworICAgIFtzZWxmIGRpZENoYW5nZVZhbHVlRm9yS2V5OkAidG91Y2hCYXIiXTsKK30KKwor
LSAodm9pZClwcmVwYXJlRm9yTW91c2VEb3duCit7CisgICAgX3ByaXZhdGUtPl9uZWVkc0RlZmVy
cmVkVGV4dFRvdWNoQmFyVXBkYXRlID0gTk87CisgICAgX3ByaXZhdGUtPl9pc0RlZmVycmluZ1Rl
eHRUb3VjaEJhclVwZGF0ZXMgPSBZRVM7Cit9CisKKy0gKHZvaWQpcHJlcGFyZUZvck1vdXNlVXAK
K3sKKyAgICBpZiAoIV9wcml2YXRlLT5faXNEZWZlcnJpbmdUZXh0VG91Y2hCYXJVcGRhdGVzKQor
ICAgICAgICByZXR1cm47CisKKyAgICBfcHJpdmF0ZS0+X2lzRGVmZXJyaW5nVGV4dFRvdWNoQmFy
VXBkYXRlcyA9IE5POworICAgIGlmIChfcHJpdmF0ZS0+X25lZWRzRGVmZXJyZWRUZXh0VG91Y2hC
YXJVcGRhdGUpIHsKKyAgICAgICAgLy8gT25seSB0cmlnZ2VyIGFub3RoZXIgdXBkYXRlIGlmIHdl
IGF0dGVtcHRlZCBhbmQgYmFpbGVkIGZyb20gYW4gdXBkYXRlIGR1cmluZyB0aGUgZGVmZXJyYWwu
CisgICAgICAgIFtzZWxmIHVwZGF0ZVRvdWNoQmFyXTsKKyAgICB9Cit9CisKKy0gKE5TQ2FuZGlk
YXRlTGlzdFRvdWNoQmFySXRlbSAqKWNhbmRpZGF0ZUxpc3QKK3sKKyAgICByZXR1cm4gc2VsZi5f
aXNSaWNobHlFZGl0YWJsZSA/IF9wcml2YXRlLT5fcmljaFRleHRDYW5kaWRhdGVMaXN0VG91Y2hC
YXJJdGVtLmdldCgpIDogX3ByaXZhdGUtPl9wbGFpblRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJ
dGVtLmdldCgpOworfQorI2Vsc2UKKworLSAodm9pZCl1cGRhdGVUb3VjaEJhcgoreworfQorCist
ICh2b2lkKXByZXBhcmVGb3JNb3VzZURvd24KK3sKK30KKworLSAodm9pZClwcmVwYXJlRm9yTW91
c2VVcAoreworfQorCistIChpZCljYW5kaWRhdGVMaXN0Cit7CisgICAgcmV0dXJuIG5pbDsKK30K
KworI2VuZGlmCisKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdlYlZpZXcgKFdlYlZpZXdEZXZp
Y2VPcmllbnRhdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0Rh
dGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRh
LmgJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmll
d0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDggKzEwMSwxMCBAQCBjbGFzcyBXZWJWaWV3
R3JvdXA7CiBjbGFzcyBXZWJTZWxlY3Rpb25TZXJ2aWNlQ29udHJvbGxlcjsKICNlbmRpZgogCi0j
aWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEw
MTIwMCAmJiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2ltcG9ydCA8V2ViS2l0QWRkaXRpb25z
L1dlYlZpZXdEYXRhQWRkaXRpb25zRGVjbGFyYXRpb25zLmg+CisjaWYgSEFWRShUT1VDSF9CQVIp
CitAY2xhc3MgV2ViVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXI7CitAY2xhc3MgQVZGdW5jdGlv
bkJhclBsYXliYWNrQ29udHJvbHNQcm92aWRlcjsKK0BjbGFzcyBBVkZ1bmN0aW9uQmFyU2NydWJi
ZXI7CiAjZW5kaWYKIAogY2xhc3MgV2ViVmlld0xheWVyRmx1c2hTY2hlZHVsZXIgOiBwdWJsaWMg
V2ViQ29yZTo6TGF5ZXJGbHVzaFNjaGVkdWxlciB7CkBAIC0xNzgsOSArMTgwLDI0IEBAIEBpbnRl
cmZhY2UgV2ViVmlld1ByaXZhdGUgOiBOU09iamVjdCB7CiAjaWYgUExBVEZPUk0oTUFDKQogICAg
IFdlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIgKmltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXI7
CiAKLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMCAmJiBVU0Uo
QVBQTEVfSU5URVJOQUxfU0RLKQotI2ltcG9ydCA8V2ViS2l0QWRkaXRpb25zL1dlYlZpZXdEYXRh
QWRkaXRpb25zLmg+Ci0jZW5kaWYKKyNpZiBIQVZFKFRPVUNIX0JBUikKKyAgICBSZXRhaW5QdHI8
TlNUb3VjaEJhcj4gX2N1cnJlbnRUb3VjaEJhcjsKKyAgICBSZXRhaW5QdHI8TlNUb3VjaEJhcj4g
X3BsYWluVGV4dFRvdWNoQmFyOworICAgIFJldGFpblB0cjxOU1RvdWNoQmFyPiBfcmljaFRleHRU
b3VjaEJhcjsKKyAgICBSZXRhaW5QdHI8V2ViVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXI+IF90
ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlcjsKKyAgICBSZXRhaW5QdHI8TlNDYW5kaWRhdGVMaXN0
VG91Y2hCYXJJdGVtPiBfcmljaFRleHRDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtOworICAgIFJl
dGFpblB0cjxOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0+IF9wbGFpblRleHRDYW5kaWRhdGVM
aXN0VG91Y2hCYXJJdGVtOworICAgIFJldGFpblB0cjxOU0FycmF5PiBfZW1wdHlDYW5kaWRhdGVz
QXJyYXk7CisgICAgUmV0YWluUHRyPEFWRnVuY3Rpb25CYXJQbGF5YmFja0NvbnRyb2xzUHJvdmlk
ZXI+IG1lZGlhVG91Y2hCYXJQcm92aWRlcjsKKyAgICBSZXRhaW5QdHI8QVZGdW5jdGlvbkJhclNj
cnViYmVyPiBtZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OworCisgICAgQk9PTCBfY2FuQ3JlYXRl
VG91Y2hCYXJzOworICAgIEJPT0wgX2lzVXBkYXRpbmdUZXh0VG91Y2hCYXI7CisgICAgQk9PTCBf
c3RhcnRlZExpc3RlbmluZ1RvQ3VzdG9taXphdGlvbkV2ZW50czsKKyAgICBCT09MIF9pc0N1c3Rv
bWl6aW5nVG91Y2hCYXI7CisgICAgQk9PTCBfaXNEZWZlcnJpbmdUZXh0VG91Y2hCYXJVcGRhdGVz
OworICAgIEJPT0wgX25lZWRzRGVmZXJyZWRUZXh0VG91Y2hCYXJVcGRhdGU7CisjZW5kaWYgLy8g
SEFWRShUT1VDSF9CQVIpCiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6VGV4dEluZGlj
YXRvcldpbmRvdz4gdGV4dEluZGljYXRvcldpbmRvdzsKICAgICBCT09MIGhhc0luaXRpYWxpemVk
TG9va3VwT2JzZXJ2ZXI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdJ
bnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmll
d0ludGVybmFsLmgJKHJldmlzaW9uIDIwODQwNSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViVmlld0ludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDcgQEAgY2xh
c3MgV2ViU2VsZWN0aW9uU2VydmljZUNvbnRyb2xsZXI7CiAKICNlbmRpZgogCitAY2xhc3MgTlND
YW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtOwogQGNsYXNzIFdlYkJhc2VQbHVnaW5QYWNrYWdlOwog
QGNsYXNzIFdlYkRvd25sb2FkOwogQGNsYXNzIFdlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXI7
CkBAIC0yOTMsMTIgKzI5NCwxMCBAQCBAaW50ZXJmYWNlIFdlYlZpZXcgKFdlYlZpZXdPdGhlcklu
dGVybmFsCiAtICh2b2lkKV9zZXRNb2NrTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlck5hbWU6KE5T
U3RyaW5nICopbmFtZSBzdGF0ZTooV2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldENvbnRleHQ6
OlN0YXRlKXN0YXRlOwogI2VuZGlmCiAKLUBlbmQKLQotQGludGVyZmFjZSBXZWJWaWV3IChXZWJV
cGRhdGVXZWJWaWV3QWRkaXRpb25zKQogLSAodm9pZClwcmVwYXJlRm9yTW91c2VVcDsKIC0gKHZv
aWQpcHJlcGFyZUZvck1vdXNlRG93bjsKLS0gKHZvaWQpdXBkYXRlV2ViVmlld0FkZGl0aW9uczsK
LS0gKHZvaWQpd2ViVmlld0FkZGl0aW9uc1dpbGxEZXN0cm95VmlldzsKLS0gKGlkKWNhbmRpZGF0
ZUxpc3Q7CistICh2b2lkKXVwZGF0ZVRvdWNoQmFyOworLSAodm9pZClfZGlzbWlzc1RleHRUb3Vj
aEJhclBvcG92ZXJJdGVtV2l0aElkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcjsKKy0g
KE5TQ2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSAqKWNhbmRpZGF0ZUxpc3Q7CisKIEBlbmQKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld1ByaXZhdGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdQcml2YXRlLmgJKHJldmlzaW9u
IDIwODQwNSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld1ByaXZhdGUuaAko
d29ya2luZyBjb3B5KQpAQCAtODg5LDYgKzg4OSwxMCBAQCBDb3VsZCBiZSB3b3J0aCBhZGRpbmcg
dG8gdGhlIEFQSS4KIAogLSAodm9pZClfc2V0Rm9udEZhbGxiYWNrUHJlZmVyc1BpY3RvZ3JhcGhz
OihCT09MKWZsYWc7CiAKKy0gKHZvaWQpc2hvd0NhbmRpZGF0ZXM6KE5TQXJyYXkgKiljYW5kaWRh
dGVzIGZvclN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgaW5SZWN0OihOU1JlY3QpcmVjdE9mVHlw
ZWRTdHJpbmcgZm9yU2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlyYW5nZSB2aWV3OihOU1ZpZXcgKil2
aWV3IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU1RleHRDaGVja2luZ1Jlc3VsdCAqYWNj
ZXB0ZWRDYW5kaWRhdGUpKWNvbXBsZXRpb25CbG9jazsKKy0gKHZvaWQpZm9yY2VSZXF1ZXN0Q2Fu
ZGlkYXRlc0ZvclRlc3Rpbmc7CistIChCT09MKXNob3VsZFJlcXVlc3RDYW5kaWRhdGVzOworCiBA
ZW5kCiAKICNpZiAhVEFSR0VUX09TX0lQSE9ORQpAQCAtMTA2MSwxMiArMTA2NSw2IEBAIEBpbnRl
cmZhY2UgTlNPYmplY3QgKFdlYlZpZXdSZXNvdXJjZUxvYWQKIC0gKE5TQ2FjaGVkVVJMUmVzcG9u
c2UgKil3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIHJlc291cmNlOihpZClpZGVudGlmaWVyIHdp
bGxDYWNoZVJlc3BvbnNlOihOU0NhY2hlZFVSTFJlc3BvbnNlICopcmVzcG9uc2UgZnJvbURhdGFT
b3VyY2U6KFdlYkRhdGFTb3VyY2UgKilkYXRhU291cmNlOwogQGVuZAogCi1AaW50ZXJmYWNlIFdl
YlZpZXcgKFdlYlNob3dDYW5kaWRhdGVzKQotLSAodm9pZClzaG93Q2FuZGlkYXRlczooTlNBcnJh
eSAqKWNhbmRpZGF0ZXMgZm9yU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBpblJlY3Q6KE5TUmVj
dClyZWN0T2ZUeXBlZFN0cmluZyBmb3JTZWxlY3RlZFJhbmdlOihOU1JhbmdlKXJhbmdlIHZpZXc6
KE5TVmlldyAqKXZpZXcgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TVGV4dENoZWNraW5n
UmVzdWx0ICphY2NlcHRlZENhbmRpZGF0ZSkpY29tcGxldGlvbkJsb2NrOwotLSAodm9pZClmb3Jj
ZVJlcXVlc3RDYW5kaWRhdGVzRm9yVGVzdGluZzsKLS0gKEJPT0wpc2hvdWxkUmVxdWVzdENhbmRp
ZGF0ZXM7Ci1AZW5kCi0KICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYK
SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIwODQwNSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE3IEBACisyMDE2LTExLTA0ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKwor
ICAgICAgICBTdXBwb3J0IFRvdWNoQmFyIGluIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NDM3CisgICAgICAgIC1hbmQgY29ycmVzcG9u
ZGluZy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjg4NzY1MjQKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIG1ha2VzIE1pbmlCcm93c2VyIHN1
cHBvcnQgVG91Y2hCYXIgY3VzdG9taXphdGlvbi4gCisKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9t
YWMvQXBwRGVsZWdhdGUubToKKyAgICAgICAgKC1bQnJvd3NlckFwcERlbGVnYXRlIGF3YWtlRnJv
bU5pYl0pOgorCiAyMDE2LTExLTA0ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIwODI5My4KSW5k
ZXg6IFRvb2xzL01pbmlCcm93c2VyL21hYy9BcHBEZWxlZ2F0ZS5tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL01pbmlCcm93c2VyL21hYy9BcHBEZWxlZ2F0ZS5tCShyZXZpc2lvbiAyMDg0MDUpCisrKyBU
b29scy9NaW5pQnJvd3Nlci9tYWMvQXBwRGVsZWdhdGUubQkod29ya2luZyBjb3B5KQpAQCAtNDcs
NiArNDcsMTAgQEAgZW51bSB7CiAgICAgV2ViS2l0Mk5ld1dpbmRvd1RhZyA9IDIKIH07CiAKK0Bp
bnRlcmZhY2UgTlNBcHBsaWNhdGlvbiAoVG91Y2hCYXIpCitAcHJvcGVydHkgKGdldHRlcj1pc0F1
dG9tYXRpY0N1c3RvbWl6ZVRvdWNoQmFyTWVudUl0ZW1FbmFibGVkKSBCT09MIGF1dG9tYXRpY0N1
c3RvbWl6ZVRvdWNoQmFyTWVudUl0ZW1FbmFibGVkOworQGVuZAorCiBAaW1wbGVtZW50YXRpb24g
QnJvd3NlckFwcERlbGVnYXRlCiAKIC0gKGlkKWluaXQKQEAgLTczLDYgKzc3LDkgQEAgLSAodm9p
ZClhd2FrZUZyb21OaWIKICNlbmRpZgogCiAgICAgW1tOU0FwcCBtYWluTWVudV0gaW5zZXJ0SXRl
bTpbaXRlbSBhdXRvcmVsZWFzZV0gYXRJbmRleDpbW05TQXBwIG1haW5NZW51XSBpbmRleE9mSXRl
bVdpdGhUaXRsZTpAIkRlYnVnIl1dOworCisgICAgaWYgKFtOU0FwcCByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKHNldEF1dG9tYXRpY0N1c3RvbWl6ZVRvdWNoQmFyTWVudUl0ZW1FbmFibGVk
OildKQorICAgICAgICBbTlNBcHAgc2V0QXV0b21hdGljQ3VzdG9taXplVG91Y2hCYXJNZW51SXRl
bUVuYWJsZWQ6WUVTXTsKIH0KIAogI2lmIFdLX0FQSV9FTkFCTEVECg==
</data>
<flag name="review"
          id="316874"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>