<?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>215780</bug_id>
          
          <creation_ts>2020-08-24 13:09:42 -0700</creation_ts>
          <short_desc>Move PDF heads-up display to UI process on macOS</short_desc>
          <delta_ts>2020-09-04 21:07:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>clopez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>peng.liu6</cc>
    
    <cc>pnormand</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1682437</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-24 13:09:42 -0700</bug_when>
    <thetext>Move PDF heads-up display to UI process on macOS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682438</commentid>
    <comment_count>1</comment_count>
      <attachid>407125</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-24 13:16:20 -0700</bug_when>
    <thetext>Created attachment 407125
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682442</commentid>
    <comment_count>2</comment_count>
      <attachid>407127</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-24 13:27:41 -0700</bug_when>
    <thetext>Created attachment 407127
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682448</commentid>
    <comment_count>3</comment_count>
      <attachid>407127</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2020-08-24 13:45:12 -0700</bug_when>
    <thetext>Comment on attachment 407127
Patch

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

&gt; Source/WTF/wtf/PlatformHave.h:678
&gt; +#define HAVE_UI_PROCESS_PDF_HUD 1

Don&apos;t think this is a HAVE, it&apos;s an ENABLE (WebKit feature, not existence of a platform feature).

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebViewInternal.h:136
&gt; +    HashMap&lt;WebKit::PDFPluginIdentifier, RetainPtr&lt;WKPDFHUDView&gt;&gt; _pdfHUDViews;

This should probably be in WebViewImpl

&gt; Source/WebKit/UIProcess/API/mac/WKView.mm:998
&gt; +    // Unsupported in WKView.

Is this OK? I&apos;m not sure what the remaining WKView clients are.

&gt; Source/WebKit/UIProcess/API/mac/WKWebViewMac.mm:459
&gt; +        [hud mouseMoved:event];

If the HUD eats the event, we also send it to the page?? That seems wrong.

ALSO, all of this code should be in WebViewImpl, WKWebViewMac is quite intentionally a thin wrapper.

&gt; Source/WebKit/UIProcess/API/mac/WKWebViewPrivateForTestingMac.h:53
&gt; +- (NSSet&lt;NSView *&gt; *)pdfHUDs;

Underscore!

&gt; Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm:1725
&gt; +    [m_view _createPDFHUD:identifier rect:rect];

This is humorously backwards :) The code should be here.

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:612
&gt; +        [m_pdfLayerController setDisplaysPDFHUDController:NO];

Indented wrong :)

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:2440
&gt; +    if ([m_pdfLayerController respondsToSelector:@selector(zoomIn:)])

What are these respondsToSelector checks about? Won&apos;t things be super broken if the feature flag is on + we don&apos;t respond? Do we want to runtime-switch based on availability of these, or something?

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:2453
&gt; +    completionHandler(m_suggestedFilename, m_frame.url(), IPC:: DataReference { static_cast&lt;const uint8_t*&gt;(data.bytes), data.length });

What&apos;s going on with spacing in `IPC:: DataReference`

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPluginIdentifier.h:2
&gt; + * Copyright (C) 2019 Apple Inc. All rights reserved.

2020!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682464</commentid>
    <comment_count>4</comment_count>
      <attachid>407136</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-24 14:43:55 -0700</bug_when>
    <thetext>Created attachment 407136
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682467</commentid>
    <comment_count>5</comment_count>
      <attachid>407137</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-24 15:09:34 -0700</bug_when>
    <thetext>Created attachment 407137
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682471</commentid>
    <comment_count>6</comment_count>
      <attachid>407138</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-24 15:19:31 -0700</bug_when>
    <thetext>Created attachment 407138
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682478</commentid>
    <comment_count>7</comment_count>
      <attachid>407142</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-24 15:28:22 -0700</bug_when>
    <thetext>Created attachment 407142
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682479</commentid>
    <comment_count>8</comment_count>
      <attachid>407143</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-24 15:34:31 -0700</bug_when>
    <thetext>Created attachment 407143
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682483</commentid>
    <comment_count>9</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-24 15:40:54 -0700</bug_when>
    <thetext>I can&apos;t figure out why the linux bots can&apos;t find the new header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682491</commentid>
    <comment_count>10</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2020-08-24 16:19:58 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #9)
&gt; I can&apos;t figure out why the linux bots can&apos;t find the new header.

I pointed out to Alex elsewhere that this is probably due to the capitalization mismatch in the filename.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682510</commentid>
    <comment_count>11</comment_count>
      <attachid>407150</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-24 17:41:41 -0700</bug_when>
    <thetext>Created attachment 407150
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682527</commentid>
    <comment_count>12</comment_count>
      <attachid>407154</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-24 18:08:48 -0700</bug_when>
    <thetext>Created attachment 407154
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682532</commentid>
    <comment_count>13</comment_count>
      <attachid>407157</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-24 18:40:52 -0700</bug_when>
    <thetext>Created attachment 407157
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682545</commentid>
    <comment_count>14</comment_count>
      <attachid>407162</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-24 19:40:31 -0700</bug_when>
    <thetext>Created attachment 407162
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682633</commentid>
    <comment_count>15</comment_count>
      <attachid>407188</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-25 07:43:13 -0700</bug_when>
    <thetext>Created attachment 407188
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682798</commentid>
    <comment_count>16</comment_count>
      <attachid>407188</attachid>
    <who name="Peng Liu">peng.liu6</who>
    <bug_when>2020-08-25 14:34:05 -0700</bug_when>
    <thetext>Comment on attachment 407188
Patch

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

&gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.h:31
&gt; +class WebPageProxy;

Maybe add PDFPluginIdentifier here as well?

&gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.h:36
&gt; +- (instancetype)initWithFrame:(NSRect)frame pluginIdentifier:(WebKit::PDFPluginIdentifier)pluginIdentifier page:(WebKit::WebPageProxy&amp;)page;

Nit. &quot;WebKit::&quot; can be removed here.

&gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.mm:81
&gt; +static NSColor* PDFCGColorCreateGenericRGB(CGFloat red, CGFloat green, CGFloat blue, CGFloat alpha)

Nit. &quot;NSColor *&quot;.

&gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.mm:98
&gt; +    RetainPtr&lt;NSMutableDictionary&lt;NSString*, NSImage*&gt;&gt; _cachedIcons;

Nit. &quot;NSString *&quot;, &quot;NSImage *&quot;.

&gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.mm:100
&gt; +    bool _mouseMovedToHUD;

Can we use only BOOL or bool here?

&gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.mm:183
&gt; +        [_activeLayer setOpacity: kControlLayerDownAlpha];

Nit. The space here can be removed?

&gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.mm:239
&gt; +    auto* page = _page.get();

Nit. &quot;auto *&quot;.

&gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.mm:255
&gt; +        [self _getImageForControlName: controlName];

Nit. Remove the space before controlName?

&gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.mm:269
&gt; +    for (NSImage* image in [_cachedIcons allValues])

Nit. &quot;NSImage *&quot;.

&gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.mm:286
&gt; +            NSImage* controlImage = [self _getImageForControlName:controlName];

Ditto.

&gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.mm:288
&gt; +            [controlLayer setOpacity: kControlLayerNormalAlpha];

The extra space can be removed?

&gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.mm:306
&gt; +    [parentLayer addSublayer: _layer.get()];

Ditto.

&gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.mm:318
&gt; +- (NSImage*)_getImageForControlName:(NSString *)control

Nit. &quot;NSImage *&quot;.

&gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.mm:320
&gt; +    NSImage* iconImage = _cachedIcons.get()[control];

Ditto.

&gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.mm:324
&gt; +    iconImage = [NSImage _imageWithSystemSymbolName: control];

Nit. The space before &quot;control&quot; can be removed.

&gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.mm:334
&gt; +    NSImageRep* iconImageRep = [iconImage bestRepresentationForRect:iconImageRect context:nil hints:nil];

Nit. &quot;NSImageRep *&quot;.

&gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.mm:335
&gt; +    iconImage = [NSImage imageWithImageRep: iconImageRep];

Nit. The space before iconImageRep can be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682864</commentid>
    <comment_count>17</comment_count>
      <attachid>407188</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-25 18:31:36 -0700</bug_when>
    <thetext>Comment on attachment 407188
Patch

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

&gt;&gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.h:31
&gt;&gt; +class WebPageProxy;
&gt; 
&gt; Maybe add PDFPluginIdentifier here as well?

Our strongly typed identifiers can&apos;t really be forward declared without duplicating the entire contents of the header.

&gt;&gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.h:36
&gt;&gt; +- (instancetype)initWithFrame:(NSRect)frame pluginIdentifier:(WebKit::PDFPluginIdentifier)pluginIdentifier page:(WebKit::WebPageProxy&amp;)page;
&gt; 
&gt; Nit. &quot;WebKit::&quot; can be removed here.

It can&apos;t.  This is not in a namespace.

&gt;&gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.mm:239
&gt;&gt; +    auto* page = _page.get();
&gt; 
&gt; Nit. &quot;auto *&quot;.

auto* is correct WebKit style here because we aren&apos;t pointing to an ObjC type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682868</commentid>
    <comment_count>18</comment_count>
      <attachid>407255</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-25 18:37:14 -0700</bug_when>
    <thetext>Created attachment 407255
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682887</commentid>
    <comment_count>19</comment_count>
      <attachid>407263</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-25 19:38:32 -0700</bug_when>
    <thetext>Created attachment 407263
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683522</commentid>
    <comment_count>20</comment_count>
      <attachid>407263</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2020-08-27 16:44:27 -0700</bug_when>
    <thetext>Comment on attachment 407263
Patch

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

&gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.mm:48
&gt; +static const CGFloat kLayerVerticalOffset = 40;

I feel like we don&apos;t usually k- our constants.

&gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.mm:81
&gt; +static NSColor *PDFCGColorCreateGenericRGB(CGFloat red, CGFloat green, CGFloat blue, CGFloat alpha)

Get rid of this, like I say below

&gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.mm:113
&gt; +    _deviceScaleFactor = page.deviceScaleFactor();

I&apos;m not sure of the lifetime of WKPDFHUDView; if it is long-lived, you&apos;ll need to respect deviceScaleFactor changes (dragging window between 1x and 2x monitor).

&gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.mm:140
&gt; +    [CATransaction begin];
&gt; +    [CATransaction setDisableActions:YES];
&gt; +    CGRect layerBounds = [_layer bounds];
&gt; +    [_layer setFrame:CGRectMake(rect.size.width / 2.0 - layerBounds.size.width / 2.0, kLayerVerticalOffset, layerBounds.size.width, layerBounds.size.height)];
&gt; +    [CATransaction commit];

Everywhere you do an explicit actions-disabled commit could be removed if you assign WebActionDisablingCALayerDelegate as your layer&apos;s delegate.

&gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.mm:213
&gt; +    for (NSUInteger index = 0; index &lt; [_layer sublayers].count; index++) {
&gt; +        CALayer *subLayer = [_layer sublayers][index];

There&apos;s always enumerateObjectsUsingBlock, but it&apos;s probably not a win

&gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.mm:263
&gt; +    auto color = adoptNS(PDFCGColorCreateGenericRGB(kLayerGrayComponent, kLayerGrayComponent, kLayerGrayComponent, 1.0));

This PDFCGColorCreateGenericRGB function should go away and this line can be replaced by `cachedCGColor({ kLayerGrayComponent, kLayerGrayComponent, kLayerGrayComponent });` or some such (and then remove the -CGColor on the next line).

&gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.mm:279
&gt; +        if ([controlName isEqualToString: PDFHUDSeperatorControl]) {

more colons with spaces after them (there are a bunch)

&gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.mm:309
&gt; +- (void)_redrawLayer

This seems to never be called??

&gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.mm:330
&gt; +        NSImageAlternateCriterionFont : [NSFont preferredFontForTextStyle:NSFontTextStyleTitle2 options:@{ }],
&gt; +        NSImageAlternateCriterionSymbolScale : @(NSImageSymbolScaleLarge)

What in the world is this. V. surprising, deserves a comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683713</commentid>
    <comment_count>21</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-28 11:26:12 -0700</bug_when>
    <thetext>(In reply to Tim Horton from comment #20)
&gt; &gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.mm:309
&gt; &gt; +- (void)_redrawLayer
&gt; 
&gt; This seems to never be called??
This was called in the device scale factor update code, which I&apos;m restoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683717</commentid>
    <comment_count>22</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-28 11:30:56 -0700</bug_when>
    <thetext>(In reply to Tim Horton from comment #20)
&gt; &gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.mm:140
&gt; &gt; +    [CATransaction begin];
&gt; &gt; +    [CATransaction setDisableActions:YES];
&gt; &gt; +    CGRect layerBounds = [_layer bounds];
&gt; &gt; +    [_layer setFrame:CGRectMake(rect.size.width / 2.0 - layerBounds.size.width / 2.0, kLayerVerticalOffset, layerBounds.size.width, layerBounds.size.height)];
&gt; &gt; +    [CATransaction commit];
&gt; 
&gt; Everywhere you do an explicit actions-disabled commit could be removed if
&gt; you assign WebActionDisablingCALayerDelegate as your layer&apos;s delegate.
There are lots of places we use setDisableActions in WebKit.  I&apos;d prefer to leave it as unchanged as possible so we don&apos;t have any surprises.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.mm:213
&gt; &gt; +    for (NSUInteger index = 0; index &lt; [_layer sublayers].count; index++) {
&gt; &gt; +        CALayer *subLayer = [_layer sublayers][index];
&gt; 
&gt; There&apos;s always enumerateObjectsUsingBlock, but it&apos;s probably not a win
This would require returning something from the block indicating to return something, which is too complicated.  This is much simpler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683719</commentid>
    <comment_count>23</comment_count>
      <attachid>407489</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-28 11:32:29 -0700</bug_when>
    <thetext>Created attachment 407489
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683721</commentid>
    <comment_count>24</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2020-08-28 11:33:32 -0700</bug_when>
    <thetext>This patch modifies the imported WPT tests. Please ensure that any changes on the tests (not coming from a WPT import) are exported to WPT. Please see https://trac.webkit.org/wiki/WPTExportProcess</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683722</commentid>
    <comment_count>25</comment_count>
      <attachid>407490</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-28 11:33:54 -0700</bug_when>
    <thetext>Created attachment 407490
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684182</commentid>
    <comment_count>26</comment_count>
      <attachid>407490</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2020-08-31 11:03:50 -0700</bug_when>
    <thetext>Comment on attachment 407490
Patch

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

&gt; Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm:1727
&gt; +    auto hud = adoptNS([[WKPDFHUDView alloc] initWithFrame:rect pluginIdentifier:identifier page:m_page.get()]);

My (maybe) last and most annoying piece of feedback: Maybe we should call it something other than HUD :)

&gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.mm:165
&gt; +    if (CGRectContainsPoint([self convertRect:CGRectInset([_layer frame], -16.0, -16.0) toView:nil], NSPointToCGPoint(event.locationInWindow))) {

Where do the 16s come from? Can they be a constant?

&gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.mm:170
&gt; +}

Technically you&apos;re missing the classic macOS &quot;button de-highlights if you move out of it while the mouse is down&quot; behavior, but I think the old implementation was too?

&gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.mm:329
&gt; +    // This was introduced in rdar://problem/59118412

The comment /still/ doesn&apos;t explain why this isn&apos;t using the normal symbol API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684205</commentid>
    <comment_count>27</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-31 12:31:38 -0700</bug_when>
    <thetext>(In reply to Tim Horton from comment #26)
&gt; Comment on attachment 407490 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=407490&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm:1727
&gt; &gt; +    auto hud = adoptNS([[WKPDFHUDView alloc] initWithFrame:rect pluginIdentifier:identifier page:m_page.get()]);
&gt; 
&gt; My (maybe) last and most annoying piece of feedback: Maybe we should call it
&gt; something other than HUD :)
Any suggestions?  WKPDFButtons?

&gt; &gt; Source/WebKit/UIProcess/PDF/WKPDFHUDView.mm:329
&gt; &gt; +    // This was introduced in rdar://problem/59118412
&gt; 
&gt; The comment /still/ doesn&apos;t explain why this isn&apos;t using the normal symbol
&gt; API.
I don&apos;t know why it isn&apos;t using the normal symbol API.  Maybe we could change it to, but I would like to land this first as it is then consider changing it in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684225</commentid>
    <comment_count>28</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-08-31 13:10:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/68094474&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685996</commentid>
    <comment_count>29</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-04 21:07:52 -0700</bug_when>
    <thetext>Committed r266654: &lt;https://trac.webkit.org/changeset/266654&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 407490.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407125</attachid>
            <date>2020-08-24 13:16:20 -0700</date>
            <delta_ts>2020-08-24 13:27:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215780-20200824131619.patch</filename>
            <type>text/plain</type>
            <size>64667</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjYwODMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA4LTI0ICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBQREYgaGVhZHMtdXAgZGlz
cGxheSB0byBVSSBwcm9jZXNzIG9uIG1hY09TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU3ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU4NzE1
ODQ3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
d3RmL1BsYXRmb3JtSGF2ZS5oOgorCiAyMDIwLTA4LTIyICBZdXN1a2UgU3V6dWtpICA8eXN1enVr
aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gQWRkIEludGwuU2VnbWVudGVyCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUhhdmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybUhhdmUuaAkocmV2aXNpb24gMjY2MDgzKQorKysgU291cmNlL1dURi93dGYvUGxh
dGZvcm1IYXZlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3NCw2ICs2NzQsMTAgQEAKICNkZWZpbmUg
SEFWRV9DRl9QUkVGU19TRVRfUkVBRF9PTkxZIDEKICNlbmRpZgogCisjaWYgUExBVEZPUk0oTUFD
KSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTYwMAorI2RlZmluZSBI
QVZFX1VJX1BST0NFU1NfUERGX0hVRCAxCisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKICNkZWZpbmUgSEFWRV9GUk9OVEJPQVJEX1NZ
U1RFTV9BUFBfU0VSVklDRVMgMQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjY2MDgz
KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw5
NiBAQAorMjAyMC0wOC0yNCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQu
b3JnPgorCisgICAgICAgIE1vdmUgUERGIGhlYWRzLXVwIGRpc3BsYXkgdG8gVUkgcHJvY2VzcyBv
biBtYWNPUworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjE1NzgwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81ODcxNTg0Nz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGhhcyBtYW55IGJlbmVmaXRz
IGluY2x1ZGluZyB0aGUgb25lIGluIHRoZSByYWRhciwgdGVzdGFiaWxpdHksIGFuZCBtb3Zpbmcg
V2ViS2l0LXNwZWNpZmljIGNvZGUgZnJvbSBQREZLaXQgdG8gV2ViS2l0LgorCisgICAgICAgIE5v
dyB0aGF0IHRoZSBIVUQgaXMgZGlzcGxheWVkIGluIHRoZSBVSSBwcm9jZXNzIGluc3RlYWQgb2Yg
aW4gdGhlIHdlYiBjb250ZW50LCB6b29taW5nIGluIGtlZXBzIHRoZSBIVUQgdGhlIHNhbWUgc2l6
ZS4KKyAgICAgICAgQSAzZC10cmFuc2Zvcm1lZCBpZnJhbWUgd2l0aCBhIFBERiBpbiBpdCBub3cg
c2hvd3MgdGhlIEhVRCBpbiB0aGUgcGxhY2UgeW91IGNhbiBjbGljayBvbiBpdCwgaW5zdGVhZCBv
ZiBpbiB0aGUgdHJhbnNmb3JtZWQgUERGLgorICAgICAgICBBbHNvLCBtb3ZpbmcgdGhlIG1vdXNl
IHRvIHRoZSBIVUQgd2l0aGluIHRoZSBmaXJzdCAzIHNlY29uZHMgcHJldmVudHMgaXQgZnJvbSBo
aWRpbmcsIHdoaWNoIGl0IGRvZXMgd2hlbiB0aGUgbW91c2UgbGVhdmVzIHRoZSBIVUQuCisgICAg
ICAgIFRoZSByZXN0IG9mIHRoZSBiZWhhdmlvciBJIHRoaW5rIHNob3VsZCBiZSB0aGUgc2FtZS4g
IE1vc3QgdXNlcnMgc2hvdWxkIG5vdCBub3RpY2UgYW55IGRpZmZlcmVuY2UuCisKKyAgICAgICAg
RnVuY3Rpb25hbGl0eSBjb3ZlcmVkIGJ5IEFQSSB0ZXN0cywgdGhlIGZpcnN0IHRlc3RzIGZvciBQ
REYgY29udGVudCBpbnRlcmFjdGlvbiEKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3Nh
Z2VzLnB5OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAgICgtW1dL
VmlldyBfY3JlYXRlUERGSFVEOnJlY3Q6XSk6CisgICAgICAgICgtW1dLVmlldyBfcGRmSFVEOmNo
YW5nZWRMb2NhdGlvbjpdKToKKyAgICAgICAgKC1bV0tWaWV3IF9yZW1vdmVQREZIVUQ6XSk6Cisg
ICAgICAgICgtW1dLVmlldyBfcmVtb3ZlQWxsUERGSFVEc10pOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvbWFjL1dLV2ViVmlld01hYy5tbToKKyAgICAgICAgKC1bV0tXZWJWaWV3IG1vdXNlTW92
ZWQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBtb3VzZURvd246XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBtb3VzZVVwOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NyZWF0ZVBERkhVRDpy
ZWN0Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3BkZkhVRDpjaGFuZ2VkTG9jYXRpb246XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfcmVtb3ZlUERGSFVEOl0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX3JlbW92ZUFsbFBERkhVRHNdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9X
S1dlYlZpZXdQcml2YXRlRm9yVGVzdGluZ01hYy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
bWFjL1dLV2ViVmlld1Rlc3RpbmdNYWMubW06CisgICAgICAgICgtW1dLV2ViVmlldyBwZGZIVURz
XSk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLmg6CisgICAgICAgICog
VUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6Y3JlYXRlUERGSFVEKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0
ZVBERkhVRExvY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnJlbW92ZVBE
RkhVRCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZW1vdmVBbGxQREZIVURzKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvUGFnZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZENvbW1p
dExvYWRGb3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cHJvY2Vzc0Rp
ZFRlcm1pbmF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9j
ZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6b3BlblBERkZyb21UZW1w
b3JhcnlGb2xkZXJXaXRoTmF0aXZlQXBwbGljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFj
L1BhZ2VDbGllbnRJbXBsTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6
Y3JlYXRlUERGSFVEKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnVwZGF0ZVBE
RkhVRExvY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnJlbW92ZVBE
RkhVRCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpyZW1vdmVBbGxQREZIVURz
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0
aE5hdGl2ZUFwcGxpY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjcmVh
dGVQREZIVUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlbW92ZVBERkhVRCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6dXBkYXRlUERGSFVETG9jYXRpb24pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBkZlpvb21Jbik6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6cGRmWm9vbU91dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6cGRmU2F2ZVRvUERGKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZGZP
cGVuV2l0aFByZXZpZXcpOgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGTGF5ZXJDb250cm9sbGVy
U1BJLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaDoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbToKKyAgICAgICAgKC1b
V0tQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZSBvcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uXSk6
CisgICAgICAgICgtW1dLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgc2F2ZVRvUERGXSk6Cisg
ICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6UERGUGx1Z2luKToKKyAgICAgICAgKFdlYktpdDo6
UERGUGx1Z2luOjp+UERGUGx1Z2luKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpmcmFt
ZUZvckhVRCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6Y2FsY3VsYXRlU2l6
ZXMpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmNvbnZlcnRGcm9tUERGVmlld1RvUm9v
dFZpZXcgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnZpc2liaWxpdHlEaWRD
aGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46Onpvb21Jbik6CisgICAgICAgIChX
ZWJLaXQ6OlBERlBsdWdpbjo6em9vbU91dCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6
c2F2ZSk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6b3BlbldpdGhQcmV2aWV3KToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBh
Z2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6Onpvb21QREZJbik6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6Onpvb21QREZPdXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpzYXZlUERGKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6b3BlblBERldpdGhQcmV2aWV3
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y3JlYXRlUERGSFVEKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6dXBkYXRlUERGSFVETG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjpyZW1vdmVQREZIVUQpOgorCiAyMDIwLTA4LTI0ICBBZGl0eWEgS2VlcnRoaSAgPGFr
ZWVydGhpQGFwcGxlLmNvbT4KIAogICAgICAgICBbbWFjT1NdIFNob3cgcGlja2VyIGZvciBkYXRl
IGFuZCBkYXRldGltZS1sb2NhbCBpbnB1dCB0eXBlcwpJbmRleDogU291cmNlL1dlYktpdC9TY3Jp
cHRzL3dlYmtpdC9tZXNzYWdlcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1Njcmlw
dHMvd2Via2l0L21lc3NhZ2VzLnB5CShyZXZpc2lvbiAyNjYwODMpCisrKyBTb3VyY2UvV2ViS2l0
L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNDMsNiArMjQz
LDcgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZQogICAgICAgICAn
V2ViS2l0OjpNRE5TUmVnaXN0ZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6TWVkaWFQ
bGF5ZXJQcml2YXRlUmVtb3RlSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6Ok1lZGlhUmVj
b3JkZXJJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllcics
CiAgICAgICAgICdXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbkNvbnRleHRJZGVudGlmaWVyJywKICAg
ICAgICAgJ1dlYktpdDo6UGx1Z2luUHJvY2Vzc1R5cGUnLAogICAgICAgICAnV2ViS2l0OjpSZW1v
dGVBdWRpb0Rlc3RpbmF0aW9uSWRlbnRpZmllcicsCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9QYWdlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
UGFnZUNsaWVudC5oCShyZXZpc2lvbiAyNjYwODMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9QYWdlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgorI2luY2x1ZGUgIlBERlBsdWdp
bklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZS5oIgog
I2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIldlYkNvbG9yUGlja2VyLmgi
CkBAIC0yNDIsNiArMjQzLDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbFBy
b3Zpc2lvbmFsTG9hZEZvck1haW5GcmFtZSgpIHsgfTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29t
bWl0TG9hZEZvck1haW5GcmFtZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIHVzZUN1c3Rv
bUNvbnRlbnRQcm92aWRlcikgPSAwOwogCisjaWYgSEFWRShVSV9QUk9DRVNTX1BERl9IVUQpCisg
ICAgdmlydHVhbCB2b2lkIGNyZWF0ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVQREZIVURMb2Nh
dGlvbihQREZQbHVnaW5JZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllcikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbGxQREZIVURzKCkgPSAwOworI2VuZGlmCisgICAgCiAg
ICAgdmlydHVhbCB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5JikgPSAw
OwogCiAgICAgdmlydHVhbCBib29sIGhhbmRsZVJ1bk9wZW5QYW5lbChXZWJQYWdlUHJveHkqLCBX
ZWJGcmFtZVByb3h5KiwgY29uc3QgRnJhbWVJbmZvRGF0YSYsIEFQSTo6T3BlblBhbmVsUGFyYW1l
dGVycyosIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkqKSB7IHJldHVybiBmYWxzZTsg
fQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lv
biAyNjYwODMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NzcyLDE1ICs0NzcyLDE0IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpk
aWRDb21taXRMb2FkRm9yRnJhbWUKICAgICAgICAgICAgIG1fcGx1Z2luU2NhbGVGYWN0b3IgPSAx
OwogICAgICAgICAgICAgbV9tYWluRnJhbWVQbHVnaW5IYW5kbGVzUGFnZVNjYWxlR2VzdHVyZSA9
IGZhbHNlOwogICAgICAgICB9Ci0gICAgfQotCiAjaWYgRU5BQkxFKFBPSU5URVJfTE9DSykKLSAg
ICBpZiAoZnJhbWUtPmlzTWFpbkZyYW1lKCkpCiAgICAgICAgIHJlcXVlc3RQb2ludGVyVW5sb2Nr
KCk7CiAjZW5kaWYKLQotICAgIGlmIChmcmFtZS0+aXNNYWluRnJhbWUoKSkKICAgICAgICAgcGFn
ZUNsaWVudCgpLnNldE1vdXNlRXZlbnRQb2xpY3kobW91c2VFdmVudFBvbGljeSk7CisjaWYgSEFW
RShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgICAgIHBhZ2VDbGllbnQoKS5yZW1vdmVBbGxQREZI
VURzKCk7CisjZW5kaWYKKyAgICB9CiAKICAgICBtX3BhZ2VMb2FkU3RhdGUuY29tbWl0Q2hhbmdl
cygpOwogICAgIGlmIChtX2xvYWRlckNsaWVudCkKQEAgLTc0NTEsNiArNzQ1MCw5IEBAIHZvaWQg
V2ViUGFnZVByb3h5Ojpwcm9jZXNzRGlkVGVybWluYXRlKFAKIAogICAgIHJlc2V0U3RhdGVBZnRl
clByb2Nlc3NFeGl0ZWQocmVhc29uKTsKICAgICBzdG9wQWxsVVJMU2NoZW1lVGFza3MobV9wcm9j
ZXNzLnB0cigpKTsKKyNpZiBIQVZFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBwYWdlQ2xpZW50
KCkucmVtb3ZlQWxsUERGSFVEcygpOworI2VuZGlmCiAKICAgICAvLyBGb3IgYnJpbmd1cCBvZiBw
cm9jZXNzIHN3YXBwaW5nLCBOYXZpZ2F0aW9uU3dhcCB0ZXJtaW5hdGlvbiB3aWxsIG5vdCBnbyBv
dXQgdG8gY2xpZW50cy4KICAgICAvLyBJZiBpdCBkb2VzICpkdXJpbmcqIHByb2Nlc3Mgc3dhcHBp
bmcsIGFuZCB0aGUgY2xpZW50IHRyaWdnZXJzIGEgcmVsb2FkLCB0aGF0IGNhdXNlcyBiaXphcnJl
IFdlYktpdCByZS1lbnRyeS4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oCShyZXZpc2lvbiAyNjYwODMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkxheWVy
VHJlZUNvbnRleHQuaCIKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCiAjaW5jbHVkZSAiTm90
aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuaCIKKyNpbmNsdWRlICJQREZQ
bHVnSW5JZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiUGFnZUxvYWRTdGF0ZS5oIgogI2luY2x1ZGUg
IlBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiUG9saWN5RGVjaXNpb24uaCIK
QEAgLTEzMTEsMTAgKzEzMTIsMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCBzYXZlRGF0YVRvRmls
ZUluRG93bmxvYWRzRm9sZGVyKFN0cmluZyYmIHN1Z2dlc3RlZEZpbGVuYW1lLCBTdHJpbmcmJiBt
aW1lVHlwZSwgVVJMJiYgb3JpZ2luYXRpbmdVUkwsIEFQSTo6RGF0YSYpOwogICAgIHZvaWQgc2F2
ZVBERlRvRmlsZUluRG93bmxvYWRzRm9sZGVyKFN0cmluZyYmIHN1Z2dlc3RlZEZpbGVuYW1lLCBV
UkwmJiBvcmlnaW5hdGluZ1VSTCwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik7Ci0jaWYgUExB
VEZPUk0oQ09DT0EpCisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCiAgICAgdm9pZCBzYXZlUERG
VG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKGNvbnN0IFN0cmlu
ZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgSVBDOjpEYXRhUmVm
ZXJlbmNlJiwgY29uc3QgU3RyaW5nJiBwZGZVVUlEKTsKKyNpZiAhSEFWRShVSV9QUk9DRVNTX1BE
Rl9IVUQpCiAgICAgdm9pZCBvcGVuUERGRnJvbVRlbXBvcmFyeUZvbGRlcldpdGhOYXRpdmVBcHBs
aWNhdGlvbihGcmFtZUluZm9EYXRhJiYsIGNvbnN0IFN0cmluZyYgcGRmVVVJRCk7CiAjZW5kaWYK
KyNlbmRpZgogCiAjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCiAgICAgdm9pZCBzaG93UERGQ29u
dGV4dE1lbnUoY29uc3QgV2ViS2l0OjpQREZDb250ZXh0TWVudSYsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoT3B0aW9uYWw8aW50MzJfdD4mJik+JiYpOwpAQCAtMTgwNiw2ICsxODA5LDE2IEBAIHB1
YmxpYzoKICAgICBib29sIGNhblVzZUNyZWRlbnRpYWxTdG9yYWdlKCkgeyByZXR1cm4gbV9jYW5V
c2VDcmVkZW50aWFsU3RvcmFnZTsgfQogICAgIHZvaWQgc2V0Q2FuVXNlQ3JlZGVudGlhbFN0b3Jh
Z2UoYm9vbCk7CiAKKyNpZiBIQVZFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICB2b2lkIGNyZWF0
ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Cisg
ICAgdm9pZCB1cGRhdGVQREZIVURMb2NhdGlvbihQREZQbHVnaW5JZGVudGlmaWVyLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCByZW1vdmVQREZIVUQoUERGUGx1Z2luSWRlbnRp
Zmllcik7CisgICAgdm9pZCBwZGZab29tSW4oUERGUGx1Z2luSWRlbnRpZmllcik7CisgICAgdm9p
ZCBwZGZab29tT3V0KFBERlBsdWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgcGRmU2F2ZVRvUERG
KFBERlBsdWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgcGRmT3BlbldpdGhQcmV2aWV3KFBERlBs
dWdpbklkZW50aWZpZXIpOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgV2ViUGFnZVByb3h5KFBh
Z2VDbGllbnQmLCBXZWJQcm9jZXNzUHJveHkmLCBSZWY8QVBJOjpQYWdlQ29uZmlndXJhdGlvbj4m
Jik7CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDI2NjA4
MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgko
d29ya2luZyBjb3B5KQpAQCAtNDMzLDkgKzQzMyw4IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94
eSB7CiAgICAgU2F2ZVJlY2VudFNlYXJjaGVzKFN0cmluZyBuYW1lLCBWZWN0b3I8V2ViQ29yZTo6
UmVjZW50U2VhcmNoPiBzZWFyY2hJdGVtcykKICAgICBMb2FkUmVjZW50U2VhcmNoZXMoU3RyaW5n
IG5hbWUpIC0+IChWZWN0b3I8V2ViQ29yZTo6UmVjZW50U2VhcmNoPiByZXN1bHQpIFN5bmNocm9u
b3VzCiAKKyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikgJiYgIUhBVkUoVUlfUFJPQ0VTU19QREZf
SFVEKQogICAgIFNhdmVQREZUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcihTdHJpbmcgc3VnZ2VzdGVk
RmlsZW5hbWUsIFVSTCBvcmlnaW5hdGluZ1VSTCwgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEpCi0K
LSNpZiBQTEFURk9STShDT0NPQSkKICAgICBTYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVu
V2l0aE5hdGl2ZUFwcGxpY2F0aW9uKFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSwgc3RydWN0IFdl
YktpdDo6RnJhbWVJbmZvRGF0YSBzb3VyY2VGcmFtZUluZm8sIElQQzo6RGF0YVJlZmVyZW5jZSBk
YXRhLCBTdHJpbmcgcGRmVVVJRCkKICAgICBPcGVuUERGRnJvbVRlbXBvcmFyeUZvbGRlcldpdGhO
YXRpdmVBcHBsaWNhdGlvbihzdHJ1Y3QgV2ViS2l0OjpGcmFtZUluZm9EYXRhIHNvdXJjZUZyYW1l
SW5mbywgU3RyaW5nIHBkZlVVSUQpCiAjZW5kaWYKQEAgLTU2Niw2ICs1NjUsMTIgQEAgbWVzc2Fn
ZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBTcGVlY2hTeW50aGVzaXNSZXN1bWUoKSAtPiAoKSBB
c3luYwogI2VuZGlmCiAKKyNpZiBIQVZFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBDcmVhdGVQ
REZIVUQoV2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYkNvcmU6Oklu
dFJlY3QgYm91bmRpbmdCb3gpCisgICAgVXBkYXRlUERGSFVETG9jYXRpb24oV2ViS2l0OjpQREZQ
bHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYkNvcmU6OkludFJlY3QgYm91bmRpbmdCb3gp
CisgICAgUmVtb3ZlUERGSFVEKFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVy
KQorI2VuZGlmCisKICAgICBDb25maWd1cmVMb2dnaW5nQ2hhbm5lbChTdHJpbmcgY2hhbm5lbE5h
bWUsIGVudW06dWludDhfdCBXVEZMb2dDaGFubmVsU3RhdGUgc3RhdGUsIGVudW06dWludDhfdCBX
VEZMb2dMZXZlbCBsZXZlbCkKIAogI2lmIFBMQVRGT1JNKEdUSykKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCShy
ZXZpc2lvbiAyNjYwODMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJWaWV3SW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW1w
b3J0ICJXS1dlYlZpZXdQcml2YXRlLmgiCiAKKyNpbXBvcnQgIlBERlBsdWdpbklkZW50aWZpZXIu
aCIKICNpbXBvcnQgIlNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlLmgiCiAjaW1wb3J0ICJXS1No
YXJlU2hlZXQuaCIKICNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb24uaCIKQEAgLTEwMCw2
ICsxMDEsMTAgQEAgY2xhc3MgVmlld0dlc3R1cmVDb250cm9sbGVyOwogQGNsYXNzIFdLVGV4dEZp
bmRlckNsaWVudDsKICNlbmRpZgogCisjaWYgSEFWRShVSV9QUk9DRVNTX1BERl9IVUQpCitAY2xh
c3MgV0tQREZIVURWaWV3OworI2VuZGlmCisKIEBwcm90b2NvbCBfV0tUZXh0TWFuaXB1bGF0aW9u
RGVsZWdhdGU7CiBAcHJvdG9jb2wgX1dLSW5wdXREZWxlZ2F0ZTsKIApAQCAtMTI3LDEzICsxMzIs
MTYgQEAgY2xhc3MgVmlld0dlc3R1cmVDb250cm9sbGVyOwogICAgIEJPT0wgX3VzZVBsYXRmb3Jt
RmluZFVJOwogCiAjaWYgUExBVEZPUk0oTUFDKQorI2lmIEhBVkUoVUlfUFJPQ0VTU19QREZfSFVE
KQorICAgIEhhc2hNYXA8V2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVyLCBSZXRhaW5QdHI8V0tQ
REZIVURWaWV3Pj4gX3BkZkhVRFZpZXdzOworI2VuZGlmIC8vIEhBVkUoVUlfUFJPQ0VTU19QREZf
SFVEKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6OldlYlZpZXdJbXBsPiBfaW1wbDsKICAg
ICBSZXRhaW5QdHI8V0tUZXh0RmluZGVyQ2xpZW50PiBfdGV4dEZpbmRlckNsaWVudDsKIAogICAg
IC8vIE9ubHkgdXNlZCB3aXRoIFVJLXNpZGUgY29tcG9zaXRpbmcuCiAgICAgUmV0YWluUHRyPFdL
U2Nyb2xsVmlldz4gX3Njcm9sbFZpZXc7CiAgICAgUmV0YWluUHRyPFdLQ29udGVudFZpZXc+IF9j
b250ZW50VmlldzsKLSNlbmRpZgorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCiAgICAgUmV0YWluUHRyPFdLU2Nyb2xsVmlldz4gX3Njcm9sbFZpZXc7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkocmV2aXNp
b24gMjY2MDgzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0J
KHdvcmtpbmcgY29weSkKQEAgLTk5MSw2ICs5OTEsMzAgQEAgLSAodm9pZClfd2ViX3N1cGVyUXVp
Y2tMb29rV2l0aEV2ZW50OihOUwogICAgIFtzdXBlciBxdWlja0xvb2tXaXRoRXZlbnQ6ZXZlbnRd
OwogfQogCisjaWYgSEFWRShVSV9QUk9DRVNTX1BERl9IVUQpCisKKy0gKHZvaWQpX2NyZWF0ZVBE
RkhVRDooV2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVyKWlkZW50aWZpZXIgcmVjdDooY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYpcmVjdAoreworICAgIC8vIFVuc3VwcG9ydGVkIGluIFdLVmlldy4K
K30KKworLSAodm9pZClfcGRmSFVEOihXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIpaWRlbnRp
ZmllciBjaGFuZ2VkTG9jYXRpb246KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKXJlY3QKK3sKKyAg
ICAvLyBVbnN1cHBvcnRlZCBpbiBXS1ZpZXcuCit9CisKKy0gKHZvaWQpX3JlbW92ZVBERkhVRDoo
V2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVyKWlkZW50aWZpZXIKK3sKKyAgICAvLyBVbnN1cHBv
cnRlZCBpbiBXS1ZpZXcuCit9CisKKy0gKHZvaWQpX3JlbW92ZUFsbFBERkhVRHMKK3sKKyAgICAv
LyBVbnN1cHBvcnRlZCBpbiBXS1ZpZXcuCit9CisKKyNlbmRpZiAvLyBIQVZFKFVJX1BST0NFU1Nf
UERGX0hVRCkKKwogLSAodm9pZClfd2ViX3N1cGVyU3dpcGVXaXRoRXZlbnQ6KE5TRXZlbnQgKill
dmVudAogewogICAgIFtzdXBlciBzd2lwZVdpdGhFdmVudDpldmVudF07CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld01hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld01hYy5tbQkocmV2aXNpb24g
MjY2MDgzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgIkFwcEtpdFNQSS5o
IgogI2ltcG9ydCAiVmVyc2lvbkNoZWNrcy5oIgogI2ltcG9ydCAiV0tDb250ZW50Vmlld01hYy5o
IgorI2ltcG9ydCAiV0tQREZIVURWaWV3LmgiCiAjaW1wb3J0ICJXS1NhZmVCcm93c2luZ1dhcm5p
bmcuaCIKICNpbXBvcnQgIldLU2Nyb2xsVmlld01hYy5oIgogI2ltcG9ydCAiV0tUZXh0RmluZGVy
Q2xpZW50LmgiCkBAIC00NTMsMTYgKzQ1NCwyOCBAQCAtICh2b2lkKXN3aXBlV2l0aEV2ZW50OihO
U0V2ZW50ICopZXZlbnQKIAogLSAodm9pZCltb3VzZU1vdmVkOihOU0V2ZW50ICopZXZlbnQKIHsK
KyNpZiBIQVZFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBmb3IgKGF1dG8mIGh1ZCA6IF9wZGZI
VURWaWV3cy52YWx1ZXMoKSkKKyAgICAgICAgW2h1ZCBtb3VzZU1vdmVkOmV2ZW50XTsKKyNlbmRp
ZgogICAgIF9pbXBsLT5tb3VzZU1vdmVkKGV2ZW50KTsKIH0KIAogLSAodm9pZCltb3VzZURvd246
KE5TRXZlbnQgKilldmVudAogeworI2lmIEhBVkUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIGZv
ciAoYXV0byYgaHVkIDogX3BkZkhVRFZpZXdzLnZhbHVlcygpKQorICAgICAgICBbaHVkIG1vdXNl
RG93bjpldmVudF07CisjZW5kaWYKICAgICBfaW1wbC0+bW91c2VEb3duKGV2ZW50KTsKIH0KIAog
LSAodm9pZCltb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKIHsKKyNpZiBIQVZFKFVJX1BST0NFU1Nf
UERGX0hVRCkKKyAgICBmb3IgKGF1dG8mIGh1ZCA6IF9wZGZIVURWaWV3cy52YWx1ZXMoKSkKKyAg
ICAgICAgW2h1ZCBtb3VzZVVwOmV2ZW50XTsKKyNlbmRpZgogICAgIF9pbXBsLT5tb3VzZVVwKGV2
ZW50KTsKIH0KIApAQCAtMTA1NCw2ICsxMDY3LDM3IEBAIC0gKElCQWN0aW9uKXN0b3BMb2FkaW5n
OihpZClzZW5kZXIKIAogQGltcGxlbWVudGF0aW9uIFdLV2ViVmlldyAoV0tJbnRlcm5hbE1hYykK
IAorI2lmIEhBVkUoVUlfUFJPQ0VTU19QREZfSFVEKQorCistICh2b2lkKV9jcmVhdGVQREZIVUQ6
KFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllcilpZGVudGlmaWVyIHJlY3Q6KGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKXJlY3QKK3sKKyAgICBbc2VsZiBfcmVtb3ZlUERGSFVEOmlkZW50aWZpZXJd
OworICAgIGF1dG8gaHVkID0gYWRvcHROUyhbW1dLUERGSFVEVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpyZWN0IHBsdWdpbklkZW50aWZpZXI6aWRlbnRpZmllciBwYWdlOipfcGFnZV0pOworICAg
IFtzZWxmIGFkZFN1YnZpZXc6aHVkLmdldCgpXTsKKyAgICBfcGRmSFVEVmlld3MuYWRkKGlkZW50
aWZpZXIsIFdURk1vdmUoaHVkKSk7Cit9CisKKy0gKHZvaWQpX3BkZkhVRDooV2ViS2l0OjpQREZQ
bHVnaW5JZGVudGlmaWVyKWlkZW50aWZpZXIgY2hhbmdlZExvY2F0aW9uOihjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JilyZWN0Cit7CisgICAgaWYgKGF1dG8gaHVkID0gX3BkZkhVRFZpZXdzLmdldChp
ZGVudGlmaWVyKSkKKyAgICAgICAgW2h1ZCBzZXRGcmFtZTpyZWN0XTsKK30KKworLSAodm9pZClf
cmVtb3ZlUERGSFVEOihXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIpaWRlbnRpZmllcgorewor
ICAgIGlmIChhdXRvIGh1ZCA9IF9wZGZIVURWaWV3cy50YWtlKGlkZW50aWZpZXIpKQorICAgICAg
ICBbaHVkIHJlbW92ZUZyb21TdXBlcnZpZXddOworfQorCistICh2b2lkKV9yZW1vdmVBbGxQREZI
VURzCit7CisgICAgZm9yIChhdXRvJiBodWQgOiBfcGRmSFVEVmlld3MudmFsdWVzKCkpCisgICAg
ICAgIFtodWQgcmVtb3ZlRnJvbVN1cGVydmlld107CisgICAgX3BkZkhVRFZpZXdzLmNsZWFyKCk7
Cit9CisKKyNlbmRpZiAvLyBIQVZFKFVJX1BST0NFU1NfUERGX0hVRCkKKwogLSAoTlNUZXh0SW5w
dXRDb250ZXh0ICopX3dlYl9zdXBlcklucHV0Q29udGV4dAogewogICAgIHJldHVybiBbc3VwZXIg
aW5wdXRDb250ZXh0XTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tX
ZWJWaWV3UHJpdmF0ZUZvclRlc3RpbmdNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nTWFjLmgJKHJldmlz
aW9uIDI2NjA4MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3
UHJpdmF0ZUZvclRlc3RpbmdNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBA
aW50ZXJmYWNlIFdLV2ViVmlldyAoV0tUZXN0aW5nTWFjKQogCiAtICh2b2lkKV9zZXRIZWFkZXJC
YW5uZXJIZWlnaHQ6KGludCloZWlnaHQ7CiAtICh2b2lkKV9zZXRGb290ZXJCYW5uZXJIZWlnaHQ6
KGludCloZWlnaHQ7CistIChOU1NldDxOU1ZpZXcgKj4gKilwZGZIVURzOwogCiBAZW5kCiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmll
d1Rlc3RpbmdNYWMubW0JKHJldmlzaW9uIDI2NjA4MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTAz
LDYgKzEwMywxNiBAQCAtICh2b2lkKV9zZXRGb290ZXJCYW5uZXJIZWlnaHQ6KGludCloZWlnCiAg
ICAgX3BhZ2UtPnNldEZvb3RlckJhbm5lckhlaWdodEZvclRlc3RpbmcoaGVpZ2h0KTsKIH0KIAor
LSAoTlNTZXQ8TlNWaWV3ICo+ICopcGRmSFVEcworeworI2lmIEhBVkUoVUlfUFJPQ0VTU19QREZf
SFVEKQorICAgIE5TTXV0YWJsZVNldDxOU1ZpZXcgKj4gKnNldCA9IFtOU011dGFibGVTZXQgc2V0
V2l0aENhcGFjaXR5Ol9wZGZIVURWaWV3cy5zaXplKCldOworICAgIGZvciAoYXV0byYgaHVkIDog
X3BkZkhVRFZpZXdzLnZhbHVlcygpKQorICAgICAgICBbc2V0IGFkZE9iamVjdDpodWQuZ2V0KCld
OworICAgIHJldHVybiBzZXQ7CisjZW5kaWYKK30KKwogLSAoTlNNZW51ICopX2FjdGl2ZU1lbnUK
IHsKICAgICAvLyBGSVhNRTogT25seSB0aGUgRE9NIHBhc3RlIGFjY2VzcyBtZW51IGlzIHN1cHBv
cnRlZCBmb3Igbm93LiBJbiB0aGUgZnV0dXJlLCBpdCBjb3VsZCBiZQpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5oCShyZXZpc2lvbiAyNjYwODMpCisr
KyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBQTEFURk9STShNQUMpCiAKKyNpbmNsdWRlICJQ
REZQbHVnaW5JZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiUGx1Z2luQ29tcGxleFRleHRJbnB1dFN0
YXRlLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSAiV0tMYXlvdXRN
b2RlLmgiCkBAIC0xMjAsNiArMTIxLDEzIEBAIHN0cnVjdCBTaGFyZURhdGFXaXRoUGFyc2VkVVJM
OwogCiAtICh2b2lkKV93ZWJfZ3JhbnRET01QYXN0ZUFjY2VzczsKIAorI2lmIEhBVkUoVUlfUFJP
Q0VTU19QREZfSFVEKQorLSAodm9pZClfY3JlYXRlUERGSFVEOihXZWJLaXQ6OlBERlBsdWdpbklk
ZW50aWZpZXIpaWRlbnRpZmllciByZWN0Oihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JilyZWN0Owor
LSAodm9pZClfcGRmSFVEOihXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIpaWRlbnRpZmllciBj
aGFuZ2VkTG9jYXRpb246KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKXJlY3Q7CistICh2b2lkKV9y
ZW1vdmVQREZIVUQ6KFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllcilpZGVudGlmaWVyOworLSAo
dm9pZClfcmVtb3ZlQWxsUERGSFVEczsKKyNlbmRpZgorCiBAb3B0aW9uYWwKIC0gKHZvaWQpX3dl
Yl9kaWRBZGRNZWRpYUNvbnRyb2xzTWFuYWdlcjooaWQpY29udHJvbHNNYW5hZ2VyOwogLSAodm9p
ZClfd2ViX2RpZFJlbW92ZU1lZGlhQ29udHJvbHNNYW5hZ2VyOwpAQCAtMTkwLDYgKzE5OCwxMyBA
QCBwdWJsaWM6CiAgICAgdm9pZCB2aWV3V2lsbFN0YXJ0TGl2ZVJlc2l6ZSgpOwogICAgIHZvaWQg
dmlld0RpZEVuZExpdmVSZXNpemUoKTsKIAorI2lmIEhBVkUoVUlfUFJPQ0VTU19QREZfSFVEKQor
ICAgIHZvaWQgY3JlYXRlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmKTsKKyAgICB2b2lkIHVwZGF0ZVBERkhVRExvY2F0aW9uKFBERlBsdWdpbklkZW50
aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIHJlbW92ZVBERkhVRChQ
REZQbHVnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHJlbW92ZUFsbFBERkhVRHMoKTsKKyNlbmRp
ZgorCiAgICAgdm9pZCByZW5ld0dTdGF0ZSgpOwogICAgIHZvaWQgc2V0RnJhbWVTaXplKENHU2l6
ZSk7CiAgICAgdm9pZCBkaXNhYmxlRnJhbWVTaXplVXBkYXRlcygpOwpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0JKHJldmlzaW9uIDI2NjA4MykK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzE4LDYgKzE3MTgsMzAgQEAgdm9pZCBXZWJWaWV3SW1wbDo6dmlld0RpZEVu
ZExpdmVSZXNpemUoKQogICAgIFttX2xheW91dFN0cmF0ZWd5IGRpZEVuZExpdmVSZXNpemVdOwog
fQogCisjaWYgSEFWRShVSV9QUk9DRVNTX1BERl9IVUQpCisKK3ZvaWQgV2ViVmlld0ltcGw6OmNy
ZWF0ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIHJlY3QpCit7CisgICAgW21fdmlldyBfY3JlYXRlUERGSFVEOmlkZW50aWZpZXIg
cmVjdDpyZWN0XTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlUERGSFVETG9jYXRpb24o
UERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBy
ZWN0KQoreworICAgIFttX3ZpZXcgX3BkZkhVRDppZGVudGlmaWVyIGNoYW5nZWRMb2NhdGlvbjpy
ZWN0XTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6cmVtb3ZlUERGSFVEKFBERlBsdWdpbklkZW50
aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBbbV92aWV3IF9yZW1vdmVQREZIVUQ6aWRlbnRpZmll
cl07Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnJlbW92ZUFsbFBERkhVRHMoKQoreworICAgIFtt
X3ZpZXcgX3JlbW92ZUFsbFBERkhVRHNdOworfQorCisjZW5kaWYgLy8gSEFWRShVSV9QUk9DRVNT
X1BERl9IVUQpCisKIHZvaWQgV2ViVmlld0ltcGw6OnJlbmV3R1N0YXRlKCkKIHsKICAgICBpZiAo
bV90ZXh0SW5kaWNhdG9yV2luZG93KQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9z
L1dlYlBhZ2VQcm94eUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCShyZXZpc2lvbiAyNjYwODMpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDg4LDE2ICsxMDg4LDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZFBlcmZvcm1EaWN0aW9uYXJ5
TAogICAgIHBhZ2VDbGllbnQoKS5kaWRQZXJmb3JtRGljdGlvbmFyeUxvb2t1cChkaWN0aW9uYXJ5
UG9wdXBJbmZvKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnNhdmVQREZUb1RlbXBvcmFyeUZv
bGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oY29uc3QgU3RyaW5nJiwgRnJhbWVJbmZv
RGF0YSYmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViUGFnZVByb3h5OjpvcGVuUERGRnJvbVRl
bXBvcmFyeUZvbGRlcldpdGhOYXRpdmVBcHBsaWNhdGlvbihGcmFtZUluZm9EYXRhJiYsIGNvbnN0
IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogdm9pZCBXZWJQYWdlUHJv
eHk6OnNldFJlbW90ZUxheWVyVHJlZVJvb3ROb2RlKFJlbW90ZUxheWVyVHJlZU5vZGUqIHJvb3RO
b2RlKQogewogICAgIHBhZ2VDbGllbnQoKS5zZXRSZW1vdGVMYXllclRyZWVSb290Tm9kZShyb290
Tm9kZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxN
YWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVu
dEltcGxNYWMuaAkocmV2aXNpb24gMjY2MDgzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
bWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5MCw2ICsxOTAsMTMg
QEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcmVnaXN0ZXJJbnNlcnRpb25VbmRvR3JvdXBpbmcoKSBv
dmVycmlkZTsKIAorI2lmIEhBVkUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIHZvaWQgY3JlYXRl
UERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHVwZGF0ZVBERkhVRExvY2F0aW9uKFBERlBsdWdpbklkZW50aWZpZXIs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbW92ZVBERkhV
RChQREZQbHVnaW5JZGVudGlmaWVyKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbW92ZUFsbFBERkhV
RHMoKSBvdmVycmlkZTsKKyNlbmRpZgorCiAgICAgLy8gQXV4aWxpYXJ5IENsaWVudCBDcmVhdGlv
bgogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICBXZWJGdWxsU2NyZWVuTWFuYWdlclBy
b3h5Q2xpZW50JiBmdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50KCkgb3ZlcnJpZGU7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1t
CShyZXZpc2lvbiAyNjYwODMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNs
aWVudEltcGxNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM0OSw2ICszNDksMzAgQEAgdm9pZCBQ
YWdlQ2xpZW50SW1wbDo6cmVnaXN0ZXJJbnNlcnRpb25VbgogICAgIHJlZ2lzdGVySW5zZXJ0aW9u
VW5kb0dyb3VwaW5nV2l0aFVuZG9NYW5hZ2VyKFttX3ZpZXcgdW5kb01hbmFnZXJdKTsKIH0KIAor
I2lmIEhBVkUoVUlfUFJPQ0VTU19QREZfSFVEKQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpjcmVh
dGVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiByZWN0KQoreworICAgIG1faW1wbC0+Y3JlYXRlUERGSFVEKGlkZW50aWZpZXIsIHJl
Y3QpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjp1cGRhdGVQREZIVURMb2NhdGlvbihQREZQ
bHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3Qp
Cit7CisgICAgbV9pbXBsLT51cGRhdGVQREZIVURMb2NhdGlvbihpZGVudGlmaWVyLCByZWN0KTsK
K30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVtb3ZlUERGSFVEKFBERlBsdWdpbklkZW50aWZp
ZXIgaWRlbnRpZmllcikKK3sKKyAgICBtX2ltcGwtPnJlbW92ZVBERkhVRChpZGVudGlmaWVyKTsK
K30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVtb3ZlQWxsUERGSFVEcygpCit7CisgICAgbV9p
bXBsLT5yZW1vdmVBbGxQREZIVURzKCk7Cit9CisKKyNlbmRpZiAvLyBIQVZFKFVJX1BST0NFU1Nf
UERGX0hVRCkKKwogdm9pZCBQYWdlQ2xpZW50SW1wbDo6Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKQog
ewogICAgIG1faW1wbC0+Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQkocmV2aXNpb24gMjY2MDgz
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtNDc1LDggKzQ3NSw2IEBAIHN0YXRpYyBOU1N0cmluZyAqcGF0aFRvUERG
T25EaXNrKGNvbnN0IFMKIAogdm9pZCBXZWJQYWdlUHJveHk6OnNhdmVQREZUb1RlbXBvcmFyeUZv
bGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRG
aWxlbmFtZSwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywgY29uc3QgSVBDOjpEYXRhUmVmZXJl
bmNlJiBkYXRhLCBjb25zdCBTdHJpbmcmIHBkZlVVSUQpCiB7Ci0gICAgTUVTU0FHRV9DSEVDSyhU
ZW1wb3JhcnlQREZGaWxlTWFwOjppc1ZhbGlkS2V5KHBkZlVVSUQpKTsKLQogICAgIGlmIChkYXRh
LmlzRW1wdHkoKSkgewogICAgICAgICBXVEZMb2dBbHdheXMoIkNhbm5vdCBzYXZlIGVtcHR5IFBE
RiBmaWxlIHRvIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5LiIpOwogICAgICAgICByZXR1cm47CkBA
IC01MDQsNyArNTAyLDggQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNhdmVQREZUb1RlbXBvcmFyeUZv
bAogICAgIGF1dG8gb3JpZ2luYXRpbmdVUkxTdHJpbmcgPSBmcmFtZUluZm8ucmVxdWVzdC51cmwo
KS5zdHJpbmcoKTsKICAgICBGaWxlU3lzdGVtOjpzZXRNZXRhZGF0YVVSTChuc1BhdGguZ2V0KCks
IG9yaWdpbmF0aW5nVVJMU3RyaW5nKTsKIAotICAgIG1fdGVtcG9yYXJ5UERGRmlsZXMuYWRkKHBk
ZlVVSUQsIG5zUGF0aC5nZXQoKSk7CisgICAgaWYgKFRlbXBvcmFyeVBERkZpbGVNYXA6OmlzVmFs
aWRLZXkocGRmVVVJRCkpCisgICAgICAgIG1fdGVtcG9yYXJ5UERGRmlsZXMuYWRkKHBkZlVVSUQs
IG5zUGF0aC5nZXQoKSk7CiAKICAgICBhdXRvIHBkZkZpbGVVUkwgPSBVUkw6OmZpbGVVUkxXaXRo
RmlsZVN5c3RlbVBhdGgoU3RyaW5nKG5zUGF0aC5nZXQoKSkpOwogICAgIG1fdWlDbGllbnQtPmNv
bmZpcm1QREZPcGVuaW5nKCp0aGlzLCBwZGZGaWxlVVJMLCBXVEZNb3ZlKGZyYW1lSW5mbyksIFtw
ZGZGaWxlVVJMXSAoYm9vbCBhbGxvd2VkKSB7CkBAIC01MTQsNiArNTEzLDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OnNhdmVQREZUb1RlbXBvcmFyeUZvbAogICAgIH0pOwogfQogCisjaWYgRU5BQkxF
KFBERktJVF9QTFVHSU4pICYmICFIQVZFKFVJX1BST0NFU1NfUERGX0hVRCkKIHZvaWQgV2ViUGFn
ZVByb3h5OjpvcGVuUERGRnJvbVRlbXBvcmFyeUZvbGRlcldpdGhOYXRpdmVBcHBsaWNhdGlvbihG
cmFtZUluZm9EYXRhJiYgZnJhbWVJbmZvLCBjb25zdCBTdHJpbmcmIHBkZlVVSUQpCiB7CiAgICAg
TUVTU0FHRV9DSEVDSyhUZW1wb3JhcnlQREZGaWxlTWFwOjppc1ZhbGlkS2V5KHBkZlVVSUQpKTsK
QEAgLTUzMCw2ICs1MzAsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6b3BlblBERkZyb21UZW1wb3Jh
cnlGCiAgICAgICAgIFtbTlNXb3Jrc3BhY2Ugc2hhcmVkV29ya3NwYWNlXSBvcGVuVVJMOnBkZkZp
bGVVUkxdOwogICAgIH0pOwogfQorI2VuZGlmCiAKICNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikK
IHZvaWQgV2ViUGFnZVByb3h5OjpzaG93UERGQ29udGV4dE1lbnUoY29uc3QgV2ViS2l0OjpQREZD
b250ZXh0TWVudSYgY29udGV4dE1lbnUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8
aW50MzJfdD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC02NzMsNiArNjc0LDQ5IEBAIFBs
YXRmb3JtVmlldyogV2ViUGFnZVByb3h5OjpwbGF0Zm9ybVZpZXcKICAgICByZXR1cm4gW3BhZ2VD
bGllbnQoKS5wbGF0Zm9ybVdpbmRvdygpIGNvbnRlbnRWaWV3XTsKIH0KIAorI2lmIEhBVkUoVUlf
UFJPQ0VTU19QREZfSFVEKQorCit2b2lkIFdlYlBhZ2VQcm94eTo6Y3JlYXRlUERGSFVEKFBERlBs
dWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkK
K3sKKyAgICBwYWdlQ2xpZW50KCkuY3JlYXRlUERGSFVEKGlkZW50aWZpZXIsIHJlY3QpOworfQor
Cit2b2lkIFdlYlBhZ2VQcm94eTo6cmVtb3ZlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIgaWRl
bnRpZmllcikKK3sKKyAgICBwYWdlQ2xpZW50KCkucmVtb3ZlUERGSFVEKGlkZW50aWZpZXIpOwor
fQorCit2b2lkIFdlYlBhZ2VQcm94eTo6dXBkYXRlUERGSFVETG9jYXRpb24oUERGUGx1Z2luSWRl
bnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAg
IHBhZ2VDbGllbnQoKS51cGRhdGVQREZIVURMb2NhdGlvbihpZGVudGlmaWVyLCByZWN0KTsKK30K
Kwordm9pZCBXZWJQYWdlUHJveHk6OnBkZlpvb21JbihQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50
aWZpZXIpCit7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Wm9vbVBERkluKGlkZW50aWZp
ZXIpKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnBkZlpvb21PdXQoUERGUGx1Z2luSWRlbnRp
ZmllciBpZGVudGlmaWVyKQoreworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Olpvb21QREZP
dXQoaWRlbnRpZmllcikpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6cGRmU2F2ZVRvUERGKFBE
RlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBzZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6OldlYlBhZ2U6OlNhdmVQREYoaWRlbnRpZmllciksIFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyldIChTdHJpbmcmJiBzdWdnZXN0ZWRGaWxlbmFtZSwgVVJMJiYg
b3JpZ2luYXRpbmdVUkwsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YVJlZmVyZW5jZSkg
eworICAgICAgICBzYXZlUERGVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIoV1RGTW92ZShzdWdnZXN0
ZWRGaWxlbmFtZSksIFdURk1vdmUob3JpZ2luYXRpbmdVUkwpLCBkYXRhUmVmZXJlbmNlKTsKKyAg
ICB9KTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnBkZk9wZW5XaXRoUHJldmlldyhQREZQbHVn
aW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3Nh
Z2VzOjpXZWJQYWdlOjpPcGVuUERGV2l0aFByZXZpZXcoaWRlbnRpZmllciksIFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIChTdHJpbmcmJiBzdWdnZXN0ZWRGaWxlbmFtZSwg
RnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRh
LCBjb25zdCBTdHJpbmcmIHBkZlVVSUQpIHsKKyAgICAgICAgc2F2ZVBERlRvVGVtcG9yYXJ5Rm9s
ZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbihXVEZNb3ZlKHN1Z2dlc3RlZEZpbGVuYW1l
KSwgV1RGTW92ZShmcmFtZUluZm8pLCBkYXRhLCBwZGZVVUlEKTsKKyAgICB9KTsKK30KKworI2Vu
ZGlmIC8vIEhBVkUoVUlfUFJPQ0VTU19QREZfSFVEKQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
IAogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJL
aXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjY2MDgzKQorKysgU291cmNl
L1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMTc5MCw2ICsxNzkwLDcgQEAKIAkJRDNCOTQ4NDkxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlNl
YXJjaFBvcHVwTWVudS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRDNCOTQ4NDUxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlNlYXJjaFBvcHVwTWVudS5oICov
OyB9OwogCQlERjQ2MkUwRjIzRjIyRjU1MDBFRkYzNUYgLyogV0tIVFRQQ29va2llU3RvcmVQcml2
YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERjQ2
MkUwRTIzRjIyRjUzMDBFRkYzNUYgLyogV0tIVFRQQ29va2llU3RvcmVQcml2YXRlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREY0NjJFMTIyM0Yz
MzhCRTAwRUZGMzVGIC8qIFdLQ29udGVudFdvcmxkUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREY0NjJFMTEyM0YzMzhBRDAwRUZGMzVGIC8q
IFdLQ29udGVudFdvcmxkUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCURGODRDRUU0MjQ5QUEyNEQwMDkwOTZGNiAvKiBXS1BERkhVRFZp
ZXcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERjg0
Q0VFMjI0OUFBMjFGMDA5MDk2RjYgLyogV0tQREZIVURWaWV3Lm1tICovOyB9OwogCQlFMTA1RkU1
NDE4RDdCOURFMDA4RjU3QTggLyogRWRpdGluZ1JhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTA1RkU1MzE4RDdCOURFMDA4RjU3QTggLyogRWRp
dGluZ1JhbmdlLmggKi87IH07CiAJCUUxMUQzNUFFMTZCNjNEMUIwMDZEMjNENyAvKiBjb20uYXBw
bGUuV2ViUHJvY2Vzcy5zYiBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTE5NjdFMzcxNTBBQjVFMjAwQzczMTY5IC8qIGNvbS5hcHBsZS5XZWJQcm9jZXNz
LnNiICovOyB9OwogCQlFMTRBOTU0QTE2RTAxNkE0MDA2OERFODIgLyogTmV0d29ya1Byb2Nlc3NQ
bGF0Zm9ybVN0cmF0ZWdpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxNEE5NTQ4MTZFMDE2QTQwMDY4REU4MiAvKiBOZXR3b3JrUHJvY2Vzc1BsYXRm
b3JtU3RyYXRlZ2llcy5oICovOyB9OwpAQCAtNTI3NSwxMCArNTI3NiwxMyBAQAogCQlEM0I5NDg0
MzExRkY0QjY1MDAwMzJCMzkgLyogV2ViUG9wdXBNZW51LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYlBvcHVwTWVudS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlEM0I5NDg0NDExRkY0QjY1MDAwMzJCMzkgLyogV2ViU2VhcmNoUG9wdXBNZW51LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlNlYXJjaFBvcHVwTWVudS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQzQjk0ODQ1MTFGRjRCNjUwMDAzMkIzOSAv
KiBXZWJTZWFyY2hQb3B1cE1lbnUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2ViU2VhcmNoUG9wdXBNZW51Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURGMkIx
M0IxMjQ5RDhGNTQwMDVCQ0M1MiAvKiBQREZQbHVnaW5JZGVudGlmaWVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBERlBsdWdpbklkZW50aWZpZXIuaDsgcGF0aCA9IFBERi9Q
REZQbHVnaW5JZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURGNDYy
RTBFMjNGMjJGNTMwMEVGRjM1RiAvKiBXS0hUVFBDb29raWVTdG9yZVByaXZhdGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tIVFRQQ29va2llU3RvcmVQcml2YXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURGNDYyRTExMjNGMzM4QUQwMEVGRjM1RiAvKiBX
S0NvbnRlbnRXb3JsZFByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0tDb250ZW50V29ybGRQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURG
NThDNjMxMTM3MUFDNTgwMEY5QTM3QyAvKiBOYXRpdmVXZWJXaGVlbEV2ZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hdGl2ZVdlYldoZWVsRXZlbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREY1OEM2MzUxMzcxQUNBMDAwRjlBMzdDIC8qIE5hdGl2ZVdl
YldoZWVsRXZlbnRNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBOYXRpdmVXZWJXaGVlbEV2ZW50TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlERjg0Q0VFMjI0OUFBMjFGMDA5MDk2RjYgLyogV0tQREZIVURWaWV3Lm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tQREZIVURWaWV3Lm1tOyBwYXRoID0gUERG
L1dLUERGSFVEVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREY4NENFRTMy
NDlBQTIxRjAwOTA5NkY2IC8qIFdLUERGSFVEVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBXS1BERkhVRFZpZXcuaDsgcGF0aCA9IFBERi9XS1BERkhVRFZpZXcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEwNUZFNTMxOEQ3QjlERTAwOEY1N0E4IC8qIEVk
aXRpbmdSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFZGl0aW5nUmFu
Z2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTExNUM3MTUxOTBGOEEyNTAwRUND
NTE2IC8qIGNvbS5hcHBsZS5XZWJLaXQuU3RvcmFnZS5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUg
PSBjb20uYXBwbGUuV2ViS2l0LlN0b3JhZ2Uuc2I7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJL
aXQyL2NvbS5hcHBsZS5XZWJLaXQuU3RvcmFnZS5zYjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RV
Q1RTX0RJUjsgfTsKIAkJRTEzM0ZEODkxNDIzREQ3RjAwRkM3QkZCIC8qIFdlYktpdC5pY25zICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gaW1hZ2UuaWNu
czsgbmFtZSA9IFdlYktpdC5pY25zOyBwYXRoID0gUmVzb3VyY2VzL1dlYktpdC5pY25zOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODk2Myw2ICs4OTY3LDcgQEAKIAkJCQlDRDQ1NzBE
ODI0NDRDQTE3MDBBM0RDRUIgLyogTWVkaWEgKi8sCiAJCQkJNTEwQ0M3RTcxNjEzOEU3MjAwRDAz
RUQzIC8qIE5ldHdvcmsgKi8sCiAJCQkJMzFBMkVDNDAxNDg5OTczNzAwODEwRDcxIC8qIE5vdGlm
aWNhdGlvbnMgKi8sCisJCQkJREY4NENFRTEyNDlBQTIwMDAwOTA5NkY2IC8qIFBERiAqLywKIAkJ
CQkxQUVGQ0MwNTExRDAxRjM0MDA4MjE5RDMgLyogUGx1Z2lucyAqLywKIAkJCQkyRDE1NTFBOTFG
NUE5QjQyMDAwNkUzRkUgLyogUmVtb3RlTGF5ZXJUcmVlICovLAogCQkJCTFBQUYwODlFMTkyNjgx
QUMwMEI2MzkwQyAvKiBVc2VyQ29udGVudCAqLywKQEAgLTEwNDUxLDYgKzEwNDU2LDE1IEBACiAJ
CQlwYXRoID0gaW9zOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJREY4NENF
RTEyNDlBQTIwMDAwOTA5NkY2IC8qIFBERiAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJ
Y2hpbGRyZW4gPSAoCisJCQkJREY4NENFRTMyNDlBQTIxRjAwOTA5NkY2IC8qIFdLUERGSFVEVmll
dy5oICovLAorCQkJCURGODRDRUUyMjQ5QUEyMUYwMDkwOTZGNiAvKiBXS1BERkhVRFZpZXcubW0g
Ki8sCisJCQkpOworCQkJbmFtZSA9IFBERjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJ
CX07CiAJCUUxNzA4NzZEMTZENkNBNzIwMEY5OTIyNiAvKiBGaWxlQVBJICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTEwNDc5LDYgKzEwNDkzLDcgQEAKIAkJ
CQkyRDJBREYwMzE2MzYyNDM1MDAxOTdFNDcgLyogUERGUGx1Z2luQW5ub3RhdGlvbi5tbSAqLywK
IAkJCQkyRDJBREYwRDE2MzY0RDgyMDAxOTdFNDcgLyogUERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlv
bi5oICovLAogCQkJCTJEMkFERjBFMTYzNjREODIwMDE5N0U0NyAvKiBQREZQbHVnaW5DaG9pY2VB
bm5vdGF0aW9uLm1tICovLAorCQkJCURGMkIxM0IxMjQ5RDhGNTQwMDVCQ0M1MiAvKiBQREZQbHVn
aW5JZGVudGlmaWVyLmggKi8sCiAJCQkJMkQ0MjlCRkExNzIxRTJCQTAwRUM2ODFGIC8qIFBERlBs
dWdpblBhc3N3b3JkRmllbGQuaCAqLywKIAkJCQkyRDQyOUJGQjE3MjFFMkJBMDBFQzY4MUYgLyog
UERGUGx1Z2luUGFzc3dvcmRGaWVsZC5tbSAqLywKIAkJCQkyRDJBREYwNTE2MzYyREM3MDAxOTdF
NDcgLyogUERGUGx1Z2luVGV4dEFubm90YXRpb24uaCAqLywKQEAgLTEzMTQyLDYgKzEzMTU3LDcg
QEAKIAkJCQk2MzcyODFBMzIxQURDNzQ0MDA5RTBERTYgLyogV0tEb3dubG9hZFByb2dyZXNzLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJNUNFOTEyMEQyMjkzQzIxOTAwNUJFQzc4IC8qIFdLTWFpbi5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTQ2NTdEODhBMjI2NjRBMkYwMDVERTgyMyAvKiBXS09yaWVu
dGF0aW9uQWNjZXNzQWxlcnQubW0gaW4gU291cmNlcyAqLywKKwkJCQlERjg0Q0VFNDI0OUFBMjRE
MDA5MDk2RjYgLyogV0tQREZIVURWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNBMjZEODMy
MTdBRDFCODAwRjk3QTM1IC8qIFdLU2FmZUJyb3dzaW5nV2FybmluZy5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTFEQjAxOTQ0MjExQ0YwMDUwMDlGQjNFOCAvKiBXS1NoYXJlU2hlZXQubW0gaW4gU291
cmNlcyAqLywKIAkJCQk3QTc4RkYzMzIyNDE5MTlCMDA5NjQ4M0UgLyogV0tTdG9yYWdlQWNjZXNz
QWxlcnQubW0gaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BERi9QREZMYXllckNvbnRyb2xsZXJTUEkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGTGF5ZXJDb250cm9sbGVyU1BJLmgJKHJl
dmlzaW9uIDI2NjA4MykKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9Q
REZMYXllckNvbnRyb2xsZXJTUEkuaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsMTIgQEAg
dHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgUERGTGF5ZXJDb250cgogCiAtICh2b2lkKXNuYXBz
aG90SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY29udGV4dDsKIAorI2lmIEhBVkUoVUlfUFJPQ0VT
U19QREZfSFVEKQorLSAodm9pZClzZXREaXNwbGF5c1BERkhVRENvbnRyb2xsZXI6KEJPT0wpZGlz
cGxheXNDb250cm9sbGVyOworLSAodm9pZCl6b29tSW46KGlkKWF0UG9pbnQ7CistICh2b2lkKXpv
b21PdXQ6KGlkKWF0UG9pbnQ7CisjZW5kaWYKKwogLSAodm9pZCltYWduaWZ5V2l0aE1hZ25pZmlj
YXRpb246KENHRmxvYXQpbWFnbmlmaWNhdGlvbiBhdFBvaW50OihDR1BvaW50KXBvaW50IGltbWVk
aWF0ZWx5OihCT09MKWltbWVkaWF0ZWx5OwogCiAtIChDR1BvaW50KXNjcm9sbFBvc2l0aW9uOwpJ
bmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVn
aW4uaAkocmV2aXNpb24gMjY2MDgzKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdp
bnMvUERGL1BERlBsdWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYg
RU5BQkxFKFBERktJVF9QTFVHSU4pCiAKICNpbmNsdWRlICJQREZLaXRJbXBvcnRzLmgiCisjaW5j
bHVkZSAiUERGUGx1Z2luSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlBsdWdpbi5oIgogI2luY2x1
ZGUgIldlYkV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViSGl0VGVzdFJlc3VsdERhdGEuaCIKQEAgLTUw
LDYgKzUxLDcgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNWYQogT0JK
Q19DTEFTUyBOU0FycmF5OwogT0JKQ19DTEFTUyBOU0F0dHJpYnV0ZWRTdHJpbmc7CiBPQkpDX0NM
QVNTIE5TRGF0YTsKK09CSkNfQ0xBU1MgTlNFdmVudDsKIE9CSkNfQ0xBU1MgTlNTdHJpbmc7CiBP
QkpDX0NMQVNTIFBERkFubm90YXRpb247CiBPQkpDX0NMQVNTIFBERkxheWVyQ29udHJvbGxlcjsK
QEAgLTc3LDggKzc5LDkgQEAgY2xhc3MgUERGUGx1Z2luQW5ub3RhdGlvbjsKIGNsYXNzIFBERlBs
dWdpblBhc3N3b3JkRmllbGQ7CiBjbGFzcyBQbHVnaW5WaWV3OwogY2xhc3MgV2ViRnJhbWU7Citz
dHJ1Y3QgRnJhbWVJbmZvRGF0YTsKIAotY2xhc3MgUERGUGx1Z2luIGZpbmFsIDogcHVibGljIFBs
dWdpbiwgcHJpdmF0ZSBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYQorY2xhc3MgUERGUGx1Z2luIGZp
bmFsIDogcHVibGljIFBsdWdpbiwgcHVibGljIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhCiAjaWYg
SEFWRShJTkNSRU1FTlRBTF9QREZfQVBJUykKICAgICAsIHByaXZhdGUgV2ViQ29yZTo6TmV0c2Nh
cGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQKICNlbmRpZgpAQCAtMTAzLDkgKzEwNiwxOSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBub3RpZnlTZWxlY3Rpb25DaGFuZ2VkKFBERlNlbGVjdGlvbiAqKTsK
ICAgICB2b2lkIG5vdGlmeUN1cnNvckNoYW5nZWQodWludDY0X3QgLyogUERGTGF5ZXJDb250cm9s
bGVyQ3Vyc29yVHlwZSAqLyk7CiAKKyNpZiBIQVZFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICB2
b2lkIHpvb21JbigpOworICAgIHZvaWQgem9vbU91dCgpOworICAgIHZvaWQgc2F2ZShDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFVSTCYsIGNvbnN0IElQQzo6RGF0
YVJlZmVyZW5jZSYpPiYmKTsKKyAgICB2b2lkIG9wZW5XaXRoUHJldmlldyhDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYsIEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgSVBDOjpEYXRh
UmVmZXJlbmNlJiwgY29uc3QgU3RyaW5nJik+JiYpOworICAgIFBERlBsdWdpbklkZW50aWZpZXIg
aWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorI2VuZGlmCisKICAg
ICB2b2lkIGNsaWNrZWRMaW5rKE5TVVJMICopOworI2lmICFIQVZFKFVJX1BST0NFU1NfUERGX0hV
RCkKICAgICB2b2lkIHNhdmVUb1BERigpOwogICAgIHZvaWQgb3BlbldpdGhOYXRpdmVBcHBsaWNh
dGlvbigpOworI2VuZGlmCiAgICAgdm9pZCB3cml0ZUl0ZW1zVG9QYXN0ZWJvYXJkKE5TU3RyaW5n
ICpwYXN0ZWJvYXJkTmFtZSwgTlNBcnJheSAqaXRlbXMsIE5TQXJyYXkgKnR5cGVzKTsKICAgICB2
b2lkIHNob3dEZWZpbml0aW9uRm9yQXR0cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcg
KiwgQ0dQb2ludCk7CiAgICAgdm9pZCBwZXJmb3JtV2ViU2VhcmNoKE5TU3RyaW5nICopOwpAQCAt
MTE4LDcgKzEzMSwxMCBAQCBwdWJsaWM6CiAKICAgICBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVy
dEZyb21QREZWaWV3VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgY29uc3Q7CiAg
ICAgV2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZyb21Sb290Vmlld1RvUERGVmlldyhjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRG
cm9tUERGVmlld1RvUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKKyAg
ICBXZWJDb3JlOjpJbnRSZWN0IGNvbnZlcnRGcm9tUERGVmlld1RvUm9vdFZpZXcoY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYpIGNvbnN0OwogICAgIFdlYkNvcmU6OkludFJlY3QgYm91bmRzT25TY3Jl
ZW4oKSBjb25zdDsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IGZyYW1lRm9ySFVEKCkgY29uc3Q7CiAK
ICAgICBib29sIHNob3dDb250ZXh0TWVudUF0UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
KTsKIApAQCAtMTU5LDcgKzE3NSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCB3YW50c1doZWVsRXZl
bnRzKCkgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZvaWQgZ2VvbWV0cnlEaWRDaGFuZ2Uo
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcGx1Z2luU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgY2xpcFJlY3QsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYgcGx1Z2luVG9Sb290
Vmlld1RyYW5zZm9ybSkgZmluYWw7CiAgICAgdm9pZCBjb250ZW50c1NjYWxlRmFjdG9yQ2hhbmdl
ZChmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCB2aXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wpIGZpbmFs
IHsgfQorICAgIHZvaWQgdmlzaWJpbGl0eURpZENoYW5nZShib29sKSBmaW5hbDsKICAgICB2b2lk
IGZyYW1lRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCByZXF1ZXN0SUQpIGZpbmFsOwogICAgIHZv
aWQgZnJhbWVEaWRGYWlsKHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCB3YXNDYW5jZWxsZWQpIGZp
bmFsOwogICAgIHZvaWQgZGlkRXZhbHVhdGVKYXZhU2NyaXB0KHVpbnQ2NF90IHJlcXVlc3RJRCwg
Y29uc3QgU3RyaW5nJiByZXN1bHQpIGZpbmFsOwpAQCAtMjYzLDcgKzI3OSw2IEBAIHByaXZhdGU6
CiAgICAgTlNFdmVudCAqbnNFdmVudEZvcldlYk1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVu
dCYpOwogICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tUGx1Z2luVG9QREZWaWV3KGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgY29u
dmVydEZyb21Sb290Vmlld1RvUGx1Z2luKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7
Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZyb21QREZWaWV3VG9Sb290Vmlldyhjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OwogICAgIAogICAgIGJvb2wgc3VwcG9ydHNGb3Jt
cygpOwogICAgIGJvb2wgaXNGdWxsRnJhbWVQbHVnaW4oKSBjb25zdDsKQEAgLTQwMyw2ICs0MTgs
OSBAQCBwcml2YXRlOgogI2VuZGlmCiAKICNlbmRpZiAvLyBIQVZFKElOQ1JFTUVOVEFMX1BERl9B
UElTKQorI2lmIEhBVkUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIFBERlBsdWdpbklkZW50aWZp
ZXIgbV9pZGVudGlmaWVyOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdp
bi5tbQkocmV2aXNpb24gMjY2MDgzKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdp
bnMvUERGL1BERlBsdWdpbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNDMzLDEyICs0MzMsMTYgQEAg
LSAodm9pZClwZXJmb3JtU3BvdGxpZ2h0U2VhcmNoOihOU1N0cmluZwogCiAtICh2b2lkKW9wZW5X
aXRoTmF0aXZlQXBwbGljYXRpb24KIHsKKyNpZiAhSEFWRShVSV9QUk9DRVNTX1BERl9IVUQpCiAg
ICAgX3BkZlBsdWdpbi0+b3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbigpOworI2VuZGlmCiB9CiAK
IC0gKHZvaWQpc2F2ZVRvUERGCiB7CisjaWYgIUhBVkUoVUlfUFJPQ0VTU19QREZfSFVEKQogICAg
IF9wZGZQbHVnaW4tPnNhdmVUb1BERigpOworI2VuZGlmCiB9CiAKIC0gKHZvaWQpcGRmTGF5ZXJD
b250cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgY2xpY2tl
ZExpbmtXaXRoVVJMOihOU1VSTCAqKXVybApAQCAtNjAwLDcgKzYwNCwxMyBAQCBpbmxpbmUgUERG
UGx1Z2luOjpQREZQbHVnaW4oV2ViRnJhbWUmIGZyCiAjaWYgSEFWRShJTkNSRU1FTlRBTF9QREZf
QVBJUykKICAgICAsIG1faW5jcmVtZW50YWxQREZMb2FkaW5nRW5hYmxlZChXZWJDb3JlOjpSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmluY3JlbWVudGFsUERGTG9hZGlu
Z0VuYWJsZWQoKSkKICNlbmRpZgorI2lmIEhBVkUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgICwg
bV9pZGVudGlmaWVyKFBERlBsdWdpbklkZW50aWZpZXI6OmdlbmVyYXRlKCkpCisjZW5kaWYKIHsK
KyNpZiBIQVZFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICAgICAgW21fcGRmTGF5ZXJDb250cm9s
bGVyIHNldERpc3BsYXlzUERGSFVEQ29udHJvbGxlcjpOT107CisjZW5kaWYKICAgICBtX3BkZkxh
eWVyQ29udHJvbGxlci5nZXQoKS5kZWxlZ2F0ZSA9IG1fcGRmTGF5ZXJDb250cm9sbGVyRGVsZWdh
dGUuZ2V0KCk7CiAgICAgbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkucGFyZW50TGF5ZXIgPSBt
X2NvbnRlbnRMYXllci5nZXQoKTsKIApAQCAtNjQwLDYgKzY1MCwxMCBAQCBpbmxpbmUgUERGUGx1
Z2luOjpQREZQbHVnaW4oV2ViRnJhbWUmIGZyCiAKIFBERlBsdWdpbjo6flBERlBsdWdpbigpCiB7
CisjaWYgSEFWRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2Zy
YW1lLnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+cmVtb3ZlUERGSFVEKCp0aGlzKTsKKyNlbmRpZgog
fQogCiAjaWYgSEFWRShJTkNSRU1FTlRBTF9QREZfQVBJUykKQEAgLTE3NzIsNiArMTc4NiwxMSBA
QCB2b2lkIFBERlBsdWdpbjo6Y29udGVudHNTY2FsZUZhY3RvckNoYW5nCiAgICAgdXBkYXRlUGFn
ZUFuZERldmljZVNjYWxlRmFjdG9ycygpOwogfQogCitJbnRSZWN0IFBERlBsdWdpbjo6ZnJhbWVG
b3JIVUQoKSBjb25zdAoreworICAgIHJldHVybiBjb252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3
KEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSgpKSk7Cit9CisKIHZvaWQgUERGUGx1Z2luOjpjYWxj
dWxhdGVTaXplcygpCiB7CiAgICAgaWYgKFttX3BkZkRvY3VtZW50IGlzTG9ja2VkXSkgewpAQCAt
MTc4Miw2ICsxODAxLDEwIEBAIHZvaWQgUERGUGx1Z2luOjpjYWxjdWxhdGVTaXplcygpCiAKICAg
ICBtX2ZpcnN0UGFnZUhlaWdodCA9IFttX3BkZkRvY3VtZW50IHBhZ2VDb3VudF0gPyBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oQ0dDZWlsaW5nKFtbbV9wZGZEb2N1bWVudCBwYWdlQXRJbmRleDowXSBi
b3VuZHNGb3JCb3g6a1BERkRpc3BsYXlCb3hDcm9wQm94XS5zaXplLmhlaWdodCkpIDogMDsKICAg
ICBzZXRQREZEb2N1bWVudFNpemUoSW50U2l6ZShbbV9wZGZMYXllckNvbnRyb2xsZXIgY29udGVu
dFNpemVSZXNwZWN0aW5nWm9vbV0pKTsKKworI2lmIEhBVkUoVUlfUFJPQ0VTU19QREZfSFVEKQor
ICAgIG1fZnJhbWUucGFnZSgpLT51cGRhdGVQREZIVURMb2NhdGlvbigqdGhpcywgZnJhbWVGb3JI
VUQoKSk7CisjZW5kaWYKIH0KIAogYm9vbCBQREZQbHVnaW46OmluaXRpYWxpemUoY29uc3QgUGFy
YW1ldGVycyYgcGFyYW1ldGVycykKQEAgLTE5MTYsNyArMTkzOSwxMyBAQCBJbnRQb2ludCBQREZQ
bHVnaW46OmNvbnZlcnRGcm9tUERGVmlld1RvCiAgICAgSW50UG9pbnQgcG9pbnRJblBsdWdpbkNv
b3JkaW5hdGVzKHBvaW50LngoKSwgc2l6ZSgpLmhlaWdodCgpIC0gcG9pbnQueSgpKTsKICAgICBy
ZXR1cm4gbV9yb290Vmlld1RvUGx1Z2luVHJhbnNmb3JtLmludmVyc2UoKS52YWx1ZU9yKEFmZmlu
ZVRyYW5zZm9ybSgpKS5tYXBQb2ludChwb2ludEluUGx1Z2luQ29vcmRpbmF0ZXMpOwogfQotICAg
IAorCitJbnRSZWN0IFBERlBsdWdpbjo6Y29udmVydEZyb21QREZWaWV3VG9Sb290Vmlldyhjb25z
dCBJbnRSZWN0JiByZWN0KSBjb25zdAoreworICAgIEludFJlY3QgcmVjdEluUGx1Z2luQ29vcmRp
bmF0ZXMocmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwor
ICAgIHJldHVybiBtX3Jvb3RWaWV3VG9QbHVnaW5UcmFuc2Zvcm0uaW52ZXJzZSgpLnZhbHVlT3Io
QWZmaW5lVHJhbnNmb3JtKCkpLm1hcFJlY3QocmVjdEluUGx1Z2luQ29vcmRpbmF0ZXMpOworfQor
CiBJbnRQb2ludCBQREZQbHVnaW46OmNvbnZlcnRGcm9tUm9vdFZpZXdUb1BERlZpZXcoY29uc3Qg
SW50UG9pbnQmIHBvaW50KSBjb25zdAogewogICAgIEludFBvaW50IHBvaW50SW5QbHVnaW5Db29y
ZGluYXRlcyA9IG1fcm9vdFZpZXdUb1BsdWdpblRyYW5zZm9ybS5tYXBQb2ludChwb2ludCk7CkBA
IC0xOTQ3LDYgKzE5NzYsMTggQEAgSW50UmVjdCBQREZQbHVnaW46OmJvdW5kc09uU2NyZWVuKCkg
Y29ucwogICAgIHJldHVybiBmcmFtZVZpZXctPmNvbnRlbnRzVG9TY3JlZW4oZW5jbG9zaW5nSW50
UmVjdChyZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKSk7CiB9CiAKK3ZvaWQgUERGUGx1Z2luOjp2
aXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wgdmlzaWJsZSkKK3sKKyNpZiBIQVZFKFVJX1BST0NFU1Nf
UERGX0hVRCkKKyAgICBpZiAodmlzaWJsZSkKKyAgICAgICAgbV9mcmFtZS5wYWdlKCktPmNyZWF0
ZVBERkhVRCgqdGhpcywgZnJhbWVGb3JIVUQoKSk7CisgICAgZWxzZQorICAgICAgICBtX2ZyYW1l
LnBhZ2UoKS0+cmVtb3ZlUERGSFVEKCp0aGlzKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHZp
c2libGUpOworI2VuZGlmCit9CisKIHZvaWQgUERGUGx1Z2luOjpnZW9tZXRyeURpZENoYW5nZShj
b25zdCBJbnRTaXplJiBwbHVnaW5TaXplLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtKQogewogICAgIGlmIChzaXplKCkgPT0g
cGx1Z2luU2l6ZSAmJiBwbHVnaW5WaWV3KCktPnBhZ2VTY2FsZUZhY3RvcigpID09IFttX3BkZkxh
eWVyQ29udHJvbGxlciBjb250ZW50U2NhbGVGYWN0b3JdKQpAQCAtMjM5Miw2ICsyNDMzLDMzIEBA
IGJvb2wgUERGUGx1Z2luOjpwbHVnaW5IYW5kbGVzQ29udGVudE9mZnMKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAorI2lmIEhBVkUoVUlfUFJPQ0VTU19QREZfSFVEKQorCit2b2lkIFBERlBsdWdpbjo6
em9vbUluKCkKK3sKKyAgICBpZiAoW21fcGRmTGF5ZXJDb250cm9sbGVyIHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3Ioem9vbUluOildKQorICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIg
em9vbUluOm5pbF07Cit9CisKK3ZvaWQgUERGUGx1Z2luOjp6b29tT3V0KCkKK3sKKyAgICBpZiAo
W21fcGRmTGF5ZXJDb250cm9sbGVyIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Ioem9vbU91
dDopXSkKKyAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHpvb21PdXQ6bmlsXTsKK30KKwor
dm9pZCBQREZQbHVnaW46OnNhdmUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcm
LCBjb25zdCBVUkwmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKK3sKKyAgICBOU0RhdGEgKmRhdGEgPSBsaXZlRGF0YSgpOworICAgIGNvbXBsZXRpb25I
YW5kbGVyKG1fc3VnZ2VzdGVkRmlsZW5hbWUsIG1fZnJhbWUudXJsKCksIElQQzo6IERhdGFSZWZl
cmVuY2UgeyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5ieXRlcyksIGRhdGEubGVu
Z3RoIH0pOworfQorCit2b2lkIFBERlBsdWdpbjo6b3BlbldpdGhQcmV2aWV3KENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJiwgRnJhbWVJbmZvRGF0YSYmLCBjb25zdCBJUEM6OkRh
dGFSZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAg
ICBOU0RhdGEgKmRhdGEgPSBsaXZlRGF0YSgpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fc3Vn
Z2VzdGVkRmlsZW5hbWUsIG1fZnJhbWUuaW5mbygpLCBJUEM6OiBEYXRhUmVmZXJlbmNlIHsgc3Rh
dGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxlbmd0aCB9LCBjcmVh
dGVDYW5vbmljYWxVVUlEU3RyaW5nKCkpOworfQorCisjZWxzZSAvLyBIQVZFKFVJX1BST0NFU1Nf
UERGX0hVRCkKICAgICAKIHZvaWQgUERGUGx1Z2luOjpzYXZlVG9QREYoKQogewpAQCAtMjQyNCw2
ICsyNDkyLDggQEAgdm9pZCBQREZQbHVnaW46Om9wZW5XaXRoTmF0aXZlQXBwbGljYXRpbwogICAg
IG1fZnJhbWUucGFnZSgpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6Ok9wZW5QREZGcm9t
VGVtcG9yYXJ5Rm9sZGVyV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKG1fZnJhbWUuaW5mbygpLCBtX3Rl
bXBvcmFyeVBERlVVSUQpKTsKIH0KIAorI2VuZGlmIC8vIEhBVkUoVUlfUFJPQ0VTU19QREZfSFVE
KQorCiB2b2lkIFBERlBsdWdpbjo6d3JpdGVJdGVtc1RvUGFzdGVib2FyZChOU1N0cmluZyAqcGFz
dGVib2FyZE5hbWUsIE5TQXJyYXkgKml0ZW1zLCBOU0FycmF5ICp0eXBlcykKIHsKICAgICBhdXRv
IHBhc3RlYm9hcmRUeXBlcyA9IG1ha2VWZWN0b3I8U3RyaW5nPih0eXBlcyk7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMjY2
MDgzKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlICJOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uLmgiCiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmgi
CisjaW5jbHVkZSAiUERGUGx1Z0luLmgiCiAjaW5jbHVkZSAiUGFnZUJhbm5lci5oIgogI2luY2x1
ZGUgIlBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiUGx1Z2luUHJveHkuaCIK
QEAgLTUxMjMsMTIgKzUxMjQsMTIgQEAgdm9pZCBXZWJQYWdlOjpkaWRGaW5pc2hQcmludE9wZXJh
dGlvbihjbwogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikgJiYgIUhBVkUo
VUlfUFJPQ0VTU19QREZfSFVEKQogdm9pZCBXZWJQYWdlOjpzYXZlUERGVG9GaWxlSW5Eb3dubG9h
ZHNGb2xkZXIoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgY29uc3QgVVJMJiBvcmln
aW5hdGluZ1VSTCwgY29uc3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKQogewog
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2F2ZVBERlRvRmlsZUluRG93bmxvYWRz
Rm9sZGVyKHN1Z2dlc3RlZEZpbGVuYW1lLCBvcmlnaW5hdGluZ1VSTCwgSVBDOjpEYXRhUmVmZXJl
bmNlKGRhdGEsIHNpemUpKSk7CiB9CiAKLSNpZiBQTEFURk9STShDT0NPQSkKIHZvaWQgV2ViUGFn
ZTo6c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbihj
b25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBGcmFtZUluZm9EYXRhJiYgZnJhbWVJbmZv
LCBjb25zdCB1aW50OF90KiBkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUsIGNvbnN0IFN0cmluZyYg
cGRmVVVJRCkKIHsKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNhdmVQREZUb1Rl
bXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oc3VnZ2VzdGVkRmlsZW5h
bWUsIGZyYW1lSW5mbywgSVBDOjpEYXRhUmVmZXJlbmNlKGRhdGEsIHNpemUpLCBwZGZVVUlEKSk7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZp
c2lvbiAyNjYwODMpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJNZXNzYWdlUmVj
ZWl2ZXIuaCIKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCiAjaW5jbHVkZSAiT3B0aW9uYWxD
YWxsYmFja0lELmgiCisjaW5jbHVkZSAiUERGUGx1Z2luSWRlbnRpZmllci5oIgogI2luY2x1ZGUg
IlBsdWdpbi5oIgogI2luY2x1ZGUgIlBvbGljeURlY2lzaW9uLmgiCiAjaW5jbHVkZSAiU2FuZGJv
eEV4dGVuc2lvbi5oIgpAQCAtMzQ1LDYgKzM0NiwxNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNl
bnRlclNlbGVjdGlvbkluVmlzaWJsZUFyZWEoKTsKIAorI2lmIEhBVkUoVUlfUFJPQ0VTU19QREZf
SFVEKQorICAgIHZvaWQgY3JlYXRlUERGSFVEKFBERlBsdWdpbiYsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKTsKKyAgICB2b2lkIHVwZGF0ZVBERkhVRExvY2F0aW9uKFBERlBsdWdpbiYsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIHJlbW92ZVBERkhVRChQREZQbHVnaW4mKTsK
KyAgICB2b2lkIHpvb21QREZJbihQREZQbHVnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHpvb21Q
REZPdXQoUERGUGx1Z2luSWRlbnRpZmllcik7CisgICAgdm9pZCBzYXZlUERGKFBERlBsdWdpbklk
ZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJiwgY29uc3QgVVJM
JiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik+JiYpOworICAgIHZvaWQgb3BlblBERldpdGhQ
cmV2aWV3KFBERlBsdWdpbklkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3Qg
U3RyaW5nJiwgRnJhbWVJbmZvRGF0YSYmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25z
dCBTdHJpbmcmKT4mJik7CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQg
d2lsbENvbW1pdExheWVyVHJlZShSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbiYpOwogICAgIHZv
aWQgZGlkRmx1c2hMYXllclRyZWVBdFRpbWUoTW9ub3RvbmljVGltZSk7CkBAIC01NjQsNyArNTc1
LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRVbmRlcmxheUNvbG9yKGNvbnN0IFdlYkNvcmU6
OkNvbG9yJiBjb2xvcikgeyBtX3VuZGVybGF5Q29sb3IgPSBjb2xvcjsgfQogICAgIFdlYkNvcmU6
OkNvbG9yIHVuZGVybGF5Q29sb3IoKSBjb25zdCB7IHJldHVybiBtX3VuZGVybGF5Q29sb3I7IH0K
LQorICAgIAogICAgIHZvaWQgc3RvcExvYWRpbmcoKTsKICAgICB2b2lkIHN0b3BMb2FkaW5nRnJh
bWUoV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyKTsKICAgICBib29sIGRlZmVyc0xvYWRpbmcoKSBj
b25zdDsKQEAgLTEwNzQsOSArMTA4NSw4IEBAIHB1YmxpYzoKICAgICBOU0RpY3Rpb25hcnkgKmRh
dGFEZXRlY3Rpb25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhRGV0ZWN0aW9uQ29udGV4
dC5nZXQoKTsgfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikgJiYgIUhBVkUo
VUlfUFJPQ0VTU19QREZfSFVEKQogICAgIHZvaWQgc2F2ZVBERlRvRmlsZUluRG93bmxvYWRzRm9s
ZGVyKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIGNvbnN0IFVSTCYgb3JpZ2luYXRp
bmdVUkwsIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci0KLSNpZiBQ
TEFURk9STShDT0NPQSkKICAgICB2b2lkIHNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5X
aXRoTmF0aXZlQXBwbGljYXRpb24oY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgRnJh
bWVJbmZvRGF0YSYmLCBjb25zdCB1aW50OF90KiBkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUsIGNv
bnN0IFN0cmluZyYgcGRmVVVJRCk7CiAjZW5kaWYKIApAQCAtMTc5MSw2ICsxODAxLDEwIEBAIHBy
aXZhdGU6CiAKICAgICBXZWJDb3JlOjpDb2xvciBtX3VuZGVybGF5Q29sb3I7CiAKKyNpZiBIQVZF
KFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBIYXNoTWFwPFBERlBsdWdpbklkZW50aWZpZXIsIFdl
YWtQdHI8UERGUGx1Z2luPj4gbV9wZGZQbHVnSW5zV2l0aEhVRDsKKyNlbmRpZgorCiAgICAgYm9v
bCBtX2lzSW5SZWRvIHsgZmFsc2UgfTsKICAgICBib29sIG1faXNDbG9zZWQgeyBmYWxzZSB9Owog
ICAgIGJvb2wgbV90YWJUb0xpbmtzIHsgZmFsc2UgfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2aXNpb24g
MjY2MDgzKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNz
YWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNTc2LDYgKzU3NiwxMyBAQCBHZW5lcmF0ZVN5bnRo
ZXRpY0VkaXRpbmdDb21tYW5kKGVudW06dWluCiAKICAgICBTZXREZWZlcnNMb2FkaW5nKGJvb2wg
ZGVmZXJzTG9hZGluZykKIAorI2lmIEhBVkUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIFpvb21Q
REZJbihXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikKKyAgICBab29tUERG
T3V0KFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQorICAgIFNhdmVQREYo
V2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpIC0+IChTdHJpbmcgZmlsZW5h
bWUsIFVSTCB1cmwsIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhKSBBc3luYworICAgIE9wZW5QREZX
aXRoUHJldmlldyhXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikgLT4gKFN0
cmluZyBmaWxlbmFtZSwgc3RydWN0IFdlYktpdDo6RnJhbWVJbmZvRGF0YSBmcmFtZUluZm8sIElQ
Qzo6RGF0YVJlZmVyZW5jZSBkYXRhLCBTdHJpbmcgdXVpZCkgQXN5bmMKKyNlbmRpZgorCiAgICAg
VXBkYXRlQ3VycmVudE1vZGlmaWVyU3RhdGUoT3B0aW9uU2V0PFdlYkNvcmU6OlBsYXRmb3JtRXZl
bnQ6Ok1vZGlmaWVyPiBtb2RpZmllcnMpCiAgICAgU2ltdWxhdGVEZXZpY2VPcmllbnRhdGlvbkNo
YW5nZShkb3VibGUgYWxwaGEsIGRvdWJsZSBiZXRhLCBkb3VibGUgZ2FtbWEpCiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1t
CShyZXZpc2lvbiAyNjYwODMpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvV2ViUGFnZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2ltcG9y
dCAiRWRpdGluZ1JhbmdlLmgiCiAjaW1wb3J0ICJFZGl0b3JTdGF0ZS5oIgogI2ltcG9ydCAiRm9u
dEluZm8uaCIKKyNpbXBvcnQgIkZyYW1lSW5mb0RhdGEuaCIKICNpbXBvcnQgIkluamVjdGVkQnVu
ZGxlSGl0VGVzdFJlc3VsdC5oIgogI2ltcG9ydCAiUERGS2l0SW1wb3J0cy5oIgogI2ltcG9ydCAi
UERGUGx1Z2luLmgiCkBAIC0xMDUxLDcgKzEwNTIsNjIgQEAgdm9pZCBXZWJQYWdlOjpzZXRBY2Nl
bnRDb2xvcihXZWJDb3JlOjpDbwogICAgIFtOU0FwcCBfc2V0QWNjZW50Q29sb3I6Y29sb3IuaXNW
YWxpZCgpID8gV2ViQ29yZTo6bnNDb2xvcihjb2xvcikgOiBuaWxdOwogfQogCi0jZW5kaWYKKyNl
bmRpZiAvLyBIQVZFKEFQUF9BQ0NFTlRfQ09MT1JTKQorCisjaWYgSEFWRShVSV9QUk9DRVNTX1BE
Rl9IVUQpCisKK3ZvaWQgV2ViUGFnZTo6em9vbVBERkluKFBERlBsdWdpbklkZW50aWZpZXIgaWRl
bnRpZmllcikKK3sKKyAgICBhdXRvIHBkZlBsdWdpbiA9IG1fcGRmUGx1Z0luc1dpdGhIVUQuZ2V0
KGlkZW50aWZpZXIpOworICAgIGlmICghcGRmUGx1Z2luKQorICAgICAgICByZXR1cm47CisgICAg
cGRmUGx1Z2luLT56b29tSW4oKTsKK30KKwordm9pZCBXZWJQYWdlOjp6b29tUERGT3V0KFBERlBs
dWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBhdXRvIHBkZlBsdWdpbiA9IG1fcGRm
UGx1Z0luc1dpdGhIVUQuZ2V0KGlkZW50aWZpZXIpOworICAgIGlmICghcGRmUGx1Z2luKQorICAg
ICAgICByZXR1cm47CisgICAgcGRmUGx1Z2luLT56b29tT3V0KCk7Cit9CisKK3ZvaWQgV2ViUGFn
ZTo6c2F2ZVBERihQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoY29uc3QgU3RyaW5nJiwgY29uc3QgVVJMJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJl
bmNlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgYXV0byBwZGZQbHVnaW4gPSBtX3Bk
ZlBsdWdJbnNXaXRoSFVELmdldChpZGVudGlmaWVyKTsKKyAgICBpZiAoIXBkZlBsdWdpbikKKyAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSwgeyB9LCB7IH0pOworICAgIHBkZlBs
dWdpbi0+c2F2ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgV2ViUGFn
ZTo6b3BlblBERldpdGhQcmV2aWV3KFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmLCBGcmFtZUluZm9EYXRhJiYsIGNvbnN0
IElQQzo6RGF0YVJlZmVyZW5jZSYsIGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQoreworICAgIGF1dG8gcGRmUGx1Z2luID0gbV9wZGZQbHVnSW5zV2l0aEhVRC5nZXQoaWRlbnRp
Zmllcik7CisgICAgaWYgKCFwZGZQbHVnaW4pCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFu
ZGxlcih7IH0sIHsgfSwgeyB9LCB7IH0pOworICAgIHBkZlBsdWdpbi0+b3BlbldpdGhQcmV2aWV3
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBXZWJQYWdlOjpjcmVhdGVQ
REZIVUQoUERGUGx1Z2luJiBwbHVnaW4sIGNvbnN0IEludFJlY3QmIGJvdW5kaW5nQm94KQorewor
ICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9wZGZQbHVnSW5zV2l0aEhVRC5hZGQocGx1Z2luLmlkZW50
aWZpZXIoKSwgbWFrZVdlYWtQdHIocGx1Z2luKSk7CisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0Vu
dHJ5KQorICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNyZWF0ZVBERkhVRChw
bHVnaW4uaWRlbnRpZmllcigpLCBib3VuZGluZ0JveCkpOworfQorCit2b2lkIFdlYlBhZ2U6OnVw
ZGF0ZVBERkhVRExvY2F0aW9uKFBERlBsdWdpbiYgcGx1Z2luLCBjb25zdCBJbnRSZWN0JiBib3Vu
ZGluZ0JveCkKK3sKKyAgICBpZiAobV9wZGZQbHVnSW5zV2l0aEhVRC5jb250YWlucyhwbHVnaW4u
aWRlbnRpZmllcigpKSkKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpVcGRh
dGVQREZIVURMb2NhdGlvbihwbHVnaW4uaWRlbnRpZmllcigpLCBib3VuZGluZ0JveCkpOworfQor
Cit2b2lkIFdlYlBhZ2U6OnJlbW92ZVBERkhVRChQREZQbHVnaW4mIHBsdWdpbikKK3sKKyAgICBp
ZiAobV9wZGZQbHVnSW5zV2l0aEhVRC5yZW1vdmUocGx1Z2luLmlkZW50aWZpZXIoKSkpCisgICAg
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UmVtb3ZlUERGSFVEKHBsdWdpbi5pZGVu
dGlmaWVyKCkpKTsKK30KKworI2VuZGlmIC8vIEhBVkUoVUlfUFJPQ0VTU19QREZfSFVEKQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKIApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjY2MDgzKQorKysgVG9vbHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjAtMDgtMjQgIEFsZXggQ2hyaXN0
ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBNb3ZlIFBERiBoZWFk
cy11cCBkaXNwbGF5IHRvIFVJIHByb2Nlc3Mgb24gbWFjT1MKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTc4MAorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vNTg3MTU4NDc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLUERGVmlldy5tbToKKyAg
ICAgICAgKHBkZkRhdGEpOgorICAgICAgICAoVEVTVCk6CisgICAgICAgIChjaGVja0ZyYW1lKToK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RVSURlbGVnYXRlLmg6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0VUlEZWxlZ2F0ZS5tbToKKyAgICAgICAgKC1bVGVz
dFVJRGVsZWdhdGUgX3dlYlZpZXc6c2F2ZURhdGFUb0ZpbGU6c3VnZ2VzdGVkRmlsZW5hbWU6bWlt
ZVR5cGU6b3JpZ2luYXRpbmdVUkw6XSk6CisKIDIwMjAtMDgtMjQgIEpvbmF0aGFuIEJlZGFyZCAg
PGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIFtyZXN1bHRzZGJweV0gRml4IHBpcCBwYWNr
YWdlCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLUERGVmll
dy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1dLUERGVmlldy5tbQkocmV2aXNpb24gMjY2MDgzKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9XS1BERlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICsz
MCwyNiBAQAogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKICNpbXBvcnQgIlRlc3QuaCIK
ICNpbXBvcnQgIlRlc3ROYXZpZ2F0aW9uRGVsZWdhdGUuaCIKKyNpbXBvcnQgIlRlc3RVSURlbGVn
YXRlLmgiCisjaW1wb3J0ICJUZXN0VVJMU2NoZW1lSGFuZGxlci5oIgorI2ltcG9ydCAiVGVzdFdL
V2ViVmlldy5oIgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlldy5oPgogI2ltcG9ydCA8V2ViS2l0
L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJW
aWV3UHJpdmF0ZUZvclRlc3RpbmcuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAotI2lm
IEhBVkUoUERGS0lUKSAmJiBQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorI2ltcG9y
dCA8Q2FyYm9uL0NhcmJvbi5oPgorI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpIHx8IEhBVkUo
VUlfUFJPQ0VTU19QREZfSFVEKQorc3RhdGljIE5TRGF0YSAqcGRmRGF0YSgpCit7CisgICAgcmV0
dXJuIFtOU0RhdGEgZGF0YVdpdGhDb250ZW50c09mVVJMOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0g
VVJMRm9yUmVzb3VyY2U6QCJ0ZXN0IiB3aXRoRXh0ZW5zaW9uOkAicGRmIiBzdWJkaXJlY3Rvcnk6
QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXTsKK30KKyNlbmRpZgorCisjaWYgUExBVEZPUk0o
SU9TKQogCiBAaW50ZXJmYWNlIFBERkhvc3RWaWV3Q29udHJvbGxlciA6IFVJVmlld0NvbnRyb2xs
ZXIKICsgKHZvaWQpY3JlYXRlSG9zdFZpZXc6KHZvaWQoXikoaWQgaG9zdFZpZXdDb250cm9sbGVy
KSljYWxsYmFjayBmb3JFeHRlbnNpb25JZGVudGlmaWVyOihOU1N0cmluZyAqKWV4dGVuc2lvbklk
ZW50aWZpZXI7CkBAIC0xMDEsNyArMTE2LDcgQEAgVEVTVChXZWJLaXQsIFdLUERGVmlld0xvc2Vz
QXBwbGljYXRpb25GbwogICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5T
KFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2
MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCiAgICAgLy8gTG9hZCBh
IFBERiwgc28gd2UgaW5zdGFsbCBhIFdLUERGVmlldy4KLSAgICBbd2ViVmlldyBsb2FkRGF0YTpb
TlNEYXRhIGRhdGFXaXRoQ29udGVudHNPZlVSTDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZv
clJlc291cmNlOkAidGVzdCIgd2l0aEV4dGVuc2lvbjpAInBkZiIgc3ViZGlyZWN0b3J5OkAiVGVz
dFdlYktpdEFQSS5yZXNvdXJjZXMiXV0gTUlNRVR5cGU6QCJhcHBsaWNhdGlvbi9wZGYiIGNoYXJh
Y3RlckVuY29kaW5nTmFtZTpAIiIgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHBz
Oi8vd3d3LmFwcGxlLmNvbS8wIl1dOworICAgIFt3ZWJWaWV3IGxvYWREYXRhOnBkZkRhdGEgTUlN
RVR5cGU6QCJhcHBsaWNhdGlvbi9wZGYiIGNoYXJhY3RlckVuY29kaW5nTmFtZTpAIiIgYmFzZVVS
TDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHBzOi8vd3d3LmFwcGxlLmNvbS8wIl1dOwogICAg
IFt3ZWJWaWV3IF90ZXN0X3dhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKIAogICAgIC8vIEdv
IGludG8gdGhlIGJhY2tncm91bmQgYW5kIHBhcmVudCB0aGUgV0tXZWJWaWV3LgpAQCAtMTMyLDMg
KzE0NywyMDggQEAgVEVTVChXZWJLaXQsIFdLUERGVmlld0xvc2VzQXBwbGljYXRpb25GbwogfQog
CiAjZW5kaWYKKworI2lmIEhBVkUoVUlfUFJPQ0VTU19QREZfSFVEKQorCitzdGF0aWMgdm9pZCBj
aGVja0ZyYW1lKE5TUmVjdCBmcmFtZSwgQ0dGbG9hdCB4LCBDR0Zsb2F0IHksIENHRmxvYXQgd2lk
dGgsIENHRmxvYXQgaGVpZ2h0KQoreworICAgIEVYUEVDVF9FUShmcmFtZS5vcmlnaW4ueCwgeCk7
CisgICAgRVhQRUNUX0VRKGZyYW1lLm9yaWdpbi55LCB5KTsKKyAgICBFWFBFQ1RfRVEoZnJhbWUu
c2l6ZS53aWR0aCwgd2lkdGgpOworICAgIEVYUEVDVF9FUShmcmFtZS5zaXplLmhlaWdodCwgaGVp
Z2h0KTsKK30KKworVEVTVChQREZIVUQsIE1haW5SZXNvdXJjZVBERikKK3sKKyAgICBUZXN0V0tX
ZWJWaWV3ICp3ZWJWaWV3ID0gW1tbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpO
U01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOltbV0tXZWJWaWV3Q29uZmln
dXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXV0gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3IGxv
YWREYXRhOnBkZkRhdGEoKSBNSU1FVHlwZTpAImFwcGxpY2F0aW9uL3BkZiIgY2hhcmFjdGVyRW5j
b2RpbmdOYW1lOkAiIiBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly93d3cu
YXBwbGUuY29tL3Rlc3RQYXRoIl1dOworICAgIEVYUEVDVF9FUSh3ZWJWaWV3LnBkZkhVRHMuY291
bnQsIDB1KTsKKyAgICBbd2ViVmlldyBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07
CisgICAgRVhQRUNUX0VRKHdlYlZpZXcucGRmSFVEcy5jb3VudCwgMXUpOworICAgIGNoZWNrRnJh
bWUod2ViVmlldy5wZGZIVURzLmFueU9iamVjdC5mcmFtZSwgMCwgMCwgODAwLCA2MDApOworICAg
IAorICAgIFRlc3RVSURlbGVnYXRlICpkZWxlZ2F0ZSA9IFtbVGVzdFVJRGVsZWdhdGUgbmV3XSBh
dXRvcmVsZWFzZV07CisgICAgd2ViVmlldy5VSURlbGVnYXRlID0gZGVsZWdhdGU7CisgICAgX19i
bG9jayBib29sIHNhdmVSZXF1ZXN0UmVjZWl2ZWQgPSBmYWxzZTsKKyAgICBkZWxlZ2F0ZS5zYXZl
RGF0YVRvRmlsZSA9IF4oV0tXZWJWaWV3ICp3ZWJWaWV3RnJvbURlbGVnYXRlLCBOU0RhdGEgKmRh
dGEsIE5TU3RyaW5nICpzdWdnZXN0ZWRGaWxlbmFtZSwgTlNTdHJpbmcgKm1pbWVUeXBlLCBOU1VS
TCAqb3JpZ2luYXRpbmdVUkwpIHsKKyAgICAgICAgRVhQRUNUX0VRKHdlYlZpZXcsIHdlYlZpZXdG
cm9tRGVsZWdhdGUpOworICAgICAgICBFWFBFQ1RfVFJVRShbZGF0YSBpc0VxdWFsVG9EYXRhOnBk
ZkRhdGEoKV0pOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoc3VnZ2VzdGVkRmlsZW5hbWUsICJ0
ZXN0UGF0aC5wZGYiKTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKG1pbWVUeXBlLCAiYXBwbGlj
YXRpb24vcGRmIik7CisgICAgICAgIHNhdmVSZXF1ZXN0UmVjZWl2ZWQgPSB0cnVlOworICAgIH07
CisgICAgW1t3ZWJWaWV3IHBkZkhVRHNdLmFueU9iamVjdCBwZXJmb3JtU2VsZWN0b3I6TlNTZWxl
Y3RvckZyb21TdHJpbmcoQCJfcGVyZm9ybUFjdGlvbkZvckNvbnRyb2w6Iikgd2l0aE9iamVjdDpA
ImFycm93LmRvd24uY2lyY2xlIl07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZzYXZl
UmVxdWVzdFJlY2VpdmVkKTsKKworICAgIEVYUEVDVF9FUSh3ZWJWaWV3LnBkZkhVRHMuY291bnQs
IDF1KTsKKyAgICBbd2ViVmlldyBfa2lsbFdlYkNvbnRlbnRQcm9jZXNzXTsKKyAgICB3aGlsZSAo
d2ViVmlldy5wZGZIVURzLmNvdW50KQorICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGlu
UnVuTG9vcCgpOworfQorCitURVNUKFBERkhVRCwgTW92ZUlGcmFtZSkKK3sKKyAgICBUZXN0VVJM
U2NoZW1lSGFuZGxlciAqaGFuZGxlciA9IFtbVGVzdFVSTFNjaGVtZUhhbmRsZXIgbmV3XSBhdXRv
cmVsZWFzZV07CisgICAgaGFuZGxlci5zdGFydFVSTFNjaGVtZVRhc2tIYW5kbGVyID0gXihXS1dl
YlZpZXcgKiwgaWQ8V0tVUkxTY2hlbWVUYXNrPiB0YXNrKSB7CisgICAgICAgIGlmIChbdGFzay5y
ZXF1ZXN0LlVSTC5wYXRoIGlzRXF1YWxUb1N0cmluZzpAIi9tYWluLmh0bWwiXSkgeworICAgICAg
ICAgICAgTlNVUkxSZXNwb25zZSAqcmVzcG9uc2UgPSBbW1tOU1VSTFJlc3BvbnNlIGFsbG9jXSBp
bml0V2l0aFVSTDp0YXNrLnJlcXVlc3QuVVJMIE1JTUVUeXBlOkAidGV4dC9odG1sIiBleHBlY3Rl
ZENvbnRlbnRMZW5ndGg6MCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0gYXV0b3JlbGVhc2VdOworICAg
ICAgICAgICAgY29uc3QgY2hhciogaHRtbCA9ICI8YnIvPjxpZnJhbWUgc3JjPSd0ZXN0LnBkZicg
aWQ9J3BkZmZyYW1lJz48L2lmcmFtZT4iOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJl
c3BvbnNlOnJlc3BvbnNlXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVEYXRhOltOU0Rh
dGEgZGF0YVdpdGhCeXRlczpodG1sIGxlbmd0aDpzdHJsZW4oaHRtbCldXTsKKyAgICAgICAgICAg
IFt0YXNrIGRpZEZpbmlzaF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBFWFBFQ1Rf
V0tfU1RSRVEodGFzay5yZXF1ZXN0LlVSTC5wYXRoLCAiL3Rlc3QucGRmIik7CisgICAgICAgICAg
ICBOU0RhdGEgKmRhdGEgPSBwZGZEYXRhKCk7CisgICAgICAgICAgICBOU1VSTFJlc3BvbnNlICpy
ZXNwb25zZSA9IFtbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVxdWVz
dC5VUkwgTUlNRVR5cGU6QCJhcHBsaWNhdGlvbi9wZGYiIGV4cGVjdGVkQ29udGVudExlbmd0aDpk
YXRhLmxlbmd0aCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0gYXV0b3JlbGVhc2VdOworICAgICAgICAg
ICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3BvbnNlOnJlc3BvbnNlXTsKKyAgICAgICAgICAgIFt0YXNr
IGRpZFJlY2VpdmVEYXRhOmRhdGFdOworICAgICAgICAgICAgW3Rhc2sgZGlkRmluaXNoXTsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICBXS1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0
aW9uID0gW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIG5ld10gYXV0b3JlbGVhc2VdOworICAgIFtj
b25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6aGFuZGxlciBmb3JVUkxTY2hlbWU6QCJ0
ZXN0Il07CisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldyA9IFtbW1Rlc3RXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlv
bjpjb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6
W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAInRlc3Q6
Ly8vbWFpbi5odG1sIl1dXTsKKyAgICBFWFBFQ1RfRVEod2ViVmlldy5wZGZIVURzLmNvdW50LCAw
dSk7CisgICAgW3dlYlZpZXcgX3Rlc3Rfd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOworICAg
IEVYUEVDVF9FUSh3ZWJWaWV3LnBkZkhVRHMuY291bnQsIDF1KTsKKyAgICBjaGVja0ZyYW1lKHdl
YlZpZXcucGRmSFVEcy5hbnlPYmplY3QuZnJhbWUsIDEwLCAyOCwgMzAwLCAxNTApOworCisgICAg
W3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAicGRmZnJhbWUud2lkdGg9NDAwIiBjb21wbGV0
aW9uSGFuZGxlcjpuaWxdOworICAgIHdoaWxlICh3ZWJWaWV3LnBkZkhVRHMuYW55T2JqZWN0LmZy
YW1lLnNpemUud2lkdGggIT0gNDAwKQorICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGlu
UnVuTG9vcCgpOworICAgIGNoZWNrRnJhbWUod2ViVmlldy5wZGZIVURzLmFueU9iamVjdC5mcmFt
ZSwgMTAsIDI4LCA0MDAsIDE1MCk7CisKKyAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6
QCJ2YXIgZnJhbWVSZWZlcmVuY2UgPSBwZGZmcmFtZTsgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGls
ZChwZGZmcmFtZSkiIGNvbXBsZXRpb25IYW5kbGVyOm5pbF07CisgICAgd2hpbGUgKHdlYlZpZXcu
cGRmSFVEcy5jb3VudCkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3Ao
KTsKKyAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5LmFwcGVu
ZENoaWxkKGZyYW1lUmVmZXJlbmNlKSIgY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKKyAgICB3aGls
ZSAoIXdlYlZpZXcucGRmSFVEcy5jb3VudCkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
c3BpblJ1bkxvb3AoKTsKKyAgICBFWFBFQ1RfRVEod2ViVmlldy5wZGZIVURzLmNvdW50LCAxdSk7
CisgICAgY2hlY2tGcmFtZSh3ZWJWaWV3LnBkZkhVRHMuYW55T2JqZWN0LmZyYW1lLCAwLCAwLCAw
LCAwKTsKKyAgICB3aGlsZSAod2ViVmlldy5wZGZIVURzLmFueU9iamVjdC5mcmFtZS5zaXplLndp
ZHRoICE9IDQwMCkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoKTsK
KyAgICBFWFBFQ1RfRVEod2ViVmlldy5wZGZIVURzLmNvdW50LCAxdSk7CisgICAgY2hlY2tGcmFt
ZSh3ZWJWaWV3LnBkZkhVRHMuYW55T2JqZWN0LmZyYW1lLCAxMCwgMjgsIDQwMCwgMTUwKTsKKwor
ICAgIHdlYlZpZXcucGFnZVpvb20gPSAxLjQ7CisgICAgd2hpbGUgKHdlYlZpZXcucGRmSFVEcy5h
bnlPYmplY3QuZnJhbWUuc2l6ZS53aWR0aCAhPSA1NjApCisgICAgICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisgICAgRVhQRUNUX0VRKHdlYlZpZXcucGRmSFVEcy5jb3Vu
dCwgMXUpOworICAgIGNoZWNrRnJhbWUod2ViVmlldy5wZGZIVURzLmFueU9iamVjdC5mcmFtZSwg
MTQsIDQwLCA1NjAsIDIxMCk7Cit9CisKK1RFU1QoUERGSFVELCBOZXN0ZWRJRnJhbWVzKQorewor
ICAgIFRlc3RVUkxTY2hlbWVIYW5kbGVyICpoYW5kbGVyID0gW1tUZXN0VVJMU2NoZW1lSGFuZGxl
ciBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBoYW5kbGVyLnN0YXJ0VVJMU2NoZW1lVGFza0hhbmRs
ZXIgPSBeKFdLV2ViVmlldyAqLCBpZDxXS1VSTFNjaGVtZVRhc2s+IHRhc2spIHsKKyAgICAgICAg
TlNVUkxSZXNwb25zZSAqaHRtbFJlc3BvbnNlID0gW1tbTlNVUkxSZXNwb25zZSBhbGxvY10gaW5p
dFdpdGhVUkw6dGFzay5yZXF1ZXN0LlVSTCBNSU1FVHlwZTpAInRleHQvaHRtbCIgZXhwZWN0ZWRD
b250ZW50TGVuZ3RoOjAgdGV4dEVuY29kaW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNlXTsKKyAgICAg
ICAgaWYgKFt0YXNrLnJlcXVlc3QuVVJMLnBhdGggaXNFcXVhbFRvU3RyaW5nOkAiL21haW4uaHRt
bCJdKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBodG1sID0gIjxpZnJhbWUgc3JjPSdmcmFt
ZS5odG1sJyBpZD0ncGFyZW50ZnJhbWUnPjwvaWZyYW1lPiI7CisgICAgICAgICAgICBbdGFzayBk
aWRSZWNlaXZlUmVzcG9uc2U6aHRtbFJlc3BvbnNlXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJl
Y2VpdmVEYXRhOltOU0RhdGEgZGF0YVdpdGhCeXRlczpodG1sIGxlbmd0aDpzdHJsZW4oaHRtbCld
XTsKKyAgICAgICAgICAgIFt0YXNrIGRpZEZpbmlzaF07CisgICAgICAgIH0gZWxzZSBpZiAoW3Rh
c2sucmVxdWVzdC5VUkwucGF0aCBpc0VxdWFsVG9TdHJpbmc6QCIvZnJhbWUuaHRtbCJdKSB7Cisg
ICAgICAgICAgICBjb25zdCBjaGFyKiBodG1sID0gIjxpZnJhbWUgc3JjPSd0ZXN0LnBkZic+PC9p
ZnJhbWU+IjsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVSZXNwb25zZTpodG1sUmVzcG9u
c2VdOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZURhdGE6W05TRGF0YSBkYXRhV2l0aEJ5
dGVzOmh0bWwgbGVuZ3RoOnN0cmxlbihodG1sKV1dOworICAgICAgICAgICAgW3Rhc2sgZGlkRmlu
aXNoXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEVYUEVDVF9XS19TVFJFUSh0YXNr
LnJlcXVlc3QuVVJMLnBhdGgsICIvdGVzdC5wZGYiKTsKKyAgICAgICAgICAgIE5TRGF0YSAqZGF0
YSA9IHBkZkRhdGEoKTsKKyAgICAgICAgICAgIE5TVVJMUmVzcG9uc2UgKnJlc3BvbnNlID0gW1tb
TlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGFzay5yZXF1ZXN0LlVSTCBNSU1FVHlw
ZTpAImFwcGxpY2F0aW9uL3BkZiIgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOmRhdGEubGVuZ3RoIHRl
eHRFbmNvZGluZ05hbWU6bmlsXSBhdXRvcmVsZWFzZV07CisgICAgICAgICAgICBbdGFzayBkaWRS
ZWNlaXZlUmVzcG9uc2U6cmVzcG9uc2VdOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZURh
dGE6ZGF0YV07CisgICAgICAgICAgICBbdGFzayBkaWRGaW5pc2hdOworICAgICAgICB9CisgICAg
fTsKKworICAgIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbW1dLV2Vi
Vmlld0NvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07CisgICAgW2NvbmZpZ3VyYXRpb24g
c2V0VVJMU2NoZW1lSGFuZGxlcjpoYW5kbGVyIGZvclVSTFNjaGVtZTpAInRlc3QiXTsKKyAgICBU
ZXN0V0tXZWJWaWV3ICp3ZWJWaWV3ID0gW1tbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRp
b25dIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0
IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAidGVzdDovLy9tYWluLmh0bWwi
XV1dOworICAgIEVYUEVDVF9FUSh3ZWJWaWV3LnBkZkhVRHMuY291bnQsIDB1KTsKKyAgICBbd2Vi
VmlldyBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07CisgICAgRVhQRUNUX0VRKHdl
YlZpZXcucGRmSFVEcy5jb3VudCwgMXUpOworICAgIGNoZWNrRnJhbWUod2ViVmlldy5wZGZIVURz
LmFueU9iamVjdC5mcmFtZSwgMjAsIDIwLCAzMDAsIDE1MCk7CisgICAgCisgICAgW3dlYlZpZXcg
ZXZhbHVhdGVKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChwYXJlbnRmcmFt
ZSkiIGNvbXBsZXRpb25IYW5kbGVyOm5pbF07CisgICAgd2hpbGUgKHdlYlZpZXcucGRmSFVEcy5j
b3VudCkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoKTsKK30KKwor
VEVTVChQREZIVUQsIElGcmFtZTNEVHJhbnNmb3JtKQoreworICAgIFRlc3RVUkxTY2hlbWVIYW5k
bGVyICpoYW5kbGVyID0gW1tUZXN0VVJMU2NoZW1lSGFuZGxlciBuZXddIGF1dG9yZWxlYXNlXTsK
KyAgICBoYW5kbGVyLnN0YXJ0VVJMU2NoZW1lVGFza0hhbmRsZXIgPSBeKFdLV2ViVmlldyAqLCBp
ZDxXS1VSTFNjaGVtZVRhc2s+IHRhc2spIHsKKyAgICAgICAgTlNVUkxSZXNwb25zZSAqaHRtbFJl
c3BvbnNlID0gW1tbTlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGFzay5yZXF1ZXN0
LlVSTCBNSU1FVHlwZTpAInRleHQvaHRtbCIgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOjAgdGV4dEVu
Y29kaW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgaWYgKFt0YXNrLnJlcXVlc3Qu
VVJMLnBhdGggaXNFcXVhbFRvU3RyaW5nOkAiL21haW4uaHRtbCJdKSB7CisgICAgICAgICAgICBj
b25zdCBjaGFyKiBodG1sID0gIjxpZnJhbWUgc3JjPSd0ZXN0LnBkZicgaGVpZ2h0PTUwMCB3aWR0
aD01MDAgc3R5bGU9J3RyYW5zZm9ybTpyb3RhdGVZKDIzNWRlZyk7Jz48L2lmcmFtZT4iOworICAg
ICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3BvbnNlOmh0bWxSZXNwb25zZV07CisgICAgICAg
ICAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6aHRtbCBsZW5n
dGg6c3RybGVuKGh0bWwpXV07CisgICAgICAgICAgICBbdGFzayBkaWRGaW5pc2hdOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgRVhQRUNUX1dLX1NUUkVRKHRhc2sucmVxdWVzdC5VUkwu
cGF0aCwgIi90ZXN0LnBkZiIpOworICAgICAgICAgICAgTlNEYXRhICpkYXRhID0gcGRmRGF0YSgp
OworICAgICAgICAgICAgTlNVUkxSZXNwb25zZSAqcmVzcG9uc2UgPSBbW1tOU1VSTFJlc3BvbnNl
IGFsbG9jXSBpbml0V2l0aFVSTDp0YXNrLnJlcXVlc3QuVVJMIE1JTUVUeXBlOkAiYXBwbGljYXRp
b24vcGRmIiBleHBlY3RlZENvbnRlbnRMZW5ndGg6ZGF0YS5sZW5ndGggdGV4dEVuY29kaW5nTmFt
ZTpuaWxdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVSZXNwb25z
ZTpyZXNwb25zZV07CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpkYXRhXTsKKyAg
ICAgICAgICAgIFt0YXNrIGRpZEZpbmlzaF07CisgICAgICAgIH0KKyAgICB9OworCisgICAgV0tX
ZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IFtbV0tXZWJWaWV3Q29uZmlndXJh
dGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRVUkxTY2hlbWVI
YW5kbGVyOmhhbmRsZXIgZm9yVVJMU2NoZW1lOkAidGVzdCJdOworICAgIFRlc3RXS1dlYlZpZXcg
KndlYlZpZXcgPSBbW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJl
Y3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbl0gYXV0b3JlbGVh
c2VdOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhV
Ukw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJ0ZXN0Oi8vL21haW4uaHRtbCJdXV07CisgICAgRVhQ
RUNUX0VRKHdlYlZpZXcucGRmSFVEcy5jb3VudCwgMHUpOworICAgIFt3ZWJWaWV3IF90ZXN0X3dh
aXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKKyAgICBFWFBFQ1RfRVEod2ViVmlldy5wZGZIVURz
LmNvdW50LCAxdSk7CisgICAgY2hlY2tGcmFtZSh3ZWJWaWV3LnBkZkhVRHMuYW55T2JqZWN0LmZy
YW1lLCA0MDMsIDEwLCA1MDAsIDUwMCk7Cit9CisKK1RFU1QoUERGSFVELCBNdWx0aXBsZUlGcmFt
ZXMpCit7CisgICAgVGVzdFVSTFNjaGVtZUhhbmRsZXIgKmhhbmRsZXIgPSBbW1Rlc3RVUkxTY2hl
bWVIYW5kbGVyIG5ld10gYXV0b3JlbGVhc2VdOworICAgIGhhbmRsZXIuc3RhcnRVUkxTY2hlbWVU
YXNrSGFuZGxlciA9IF4oV0tXZWJWaWV3ICosIGlkPFdLVVJMU2NoZW1lVGFzaz4gdGFzaykgewor
ICAgICAgICBOU1VSTFJlc3BvbnNlICpodG1sUmVzcG9uc2UgPSBbW1tOU1VSTFJlc3BvbnNlIGFs
bG9jXSBpbml0V2l0aFVSTDp0YXNrLnJlcXVlc3QuVVJMIE1JTUVUeXBlOkAidGV4dC9odG1sIiBl
eHBlY3RlZENvbnRlbnRMZW5ndGg6MCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0gYXV0b3JlbGVhc2Vd
OworICAgICAgICBpZiAoW3Rhc2sucmVxdWVzdC5VUkwucGF0aCBpc0VxdWFsVG9TdHJpbmc6QCIv
bWFpbi5odG1sIl0pIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGh0bWwgPSAiPGlmcmFtZSBz
cmM9J3Rlc3QucGRmJyBoZWlnaHQ9MTAwIHdpZHRoPTE1MD48L2lmcmFtZT48aWZyYW1lIHNyYz0n
dGVzdC5wZGYnIGhlaWdodD0xMjMgd2lkdGg9MTM0PjwvaWZyYW1lPiI7CisgICAgICAgICAgICBb
dGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6aHRtbFJlc3BvbnNlXTsKKyAgICAgICAgICAgIFt0YXNr
IGRpZFJlY2VpdmVEYXRhOltOU0RhdGEgZGF0YVdpdGhCeXRlczpodG1sIGxlbmd0aDpzdHJsZW4o
aHRtbCldXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZEZpbmlzaF07CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBFWFBFQ1RfV0tfU1RSRVEodGFzay5yZXF1ZXN0LlVSTC5wYXRoLCAiL3Rl
c3QucGRmIik7CisgICAgICAgICAgICBOU0RhdGEgKmRhdGEgPSBwZGZEYXRhKCk7CisgICAgICAg
ICAgICBOU1VSTFJlc3BvbnNlICpyZXNwb25zZSA9IFtbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGlu
aXRXaXRoVVJMOnRhc2sucmVxdWVzdC5VUkwgTUlNRVR5cGU6QCJhcHBsaWNhdGlvbi9wZGYiIGV4
cGVjdGVkQ29udGVudExlbmd0aDpkYXRhLmxlbmd0aCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0gYXV0
b3JlbGVhc2VdOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3BvbnNlOnJlc3BvbnNl
XTsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVEYXRhOmRhdGFdOworICAgICAgICAgICAg
W3Rhc2sgZGlkRmluaXNoXTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBXS1dlYlZpZXdDb25m
aWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0gW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIG5ld10g
YXV0b3JlbGVhc2VdOworICAgIFtjb25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6aGFu
ZGxlciBmb3JVUkxTY2hlbWU6QCJ0ZXN0Il07CisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldyA9
IFtbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4
MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07CisgICAg
W3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwg
VVJMV2l0aFN0cmluZzpAInRlc3Q6Ly8vbWFpbi5odG1sIl1dXTsKKyAgICBFWFBFQ1RfRVEod2Vi
Vmlldy5wZGZIVURzLmNvdW50LCAwdSk7CisgICAgW3dlYlZpZXcgX3Rlc3Rfd2FpdEZvckRpZEZp
bmlzaE5hdmlnYXRpb25dOworICAgIEVYUEVDVF9FUSh3ZWJWaWV3LnBkZkhVRHMuY291bnQsIDJ1
KTsKKyAgICBib29sIGhhZExlZnRGcmFtZSA9IGZhbHNlOworICAgIGJvb2wgaGFkUmlnaHRGcmFt
ZSA9IGZhbHNlOworICAgIGZvciAoTlNWaWV3ICpodWQgaW4gd2ViVmlldy5wZGZIVURzKSB7Cisg
ICAgICAgIGlmIChodWQuZnJhbWUub3JpZ2luLnggPT0gMTApIHsKKyAgICAgICAgICAgIGNoZWNr
RnJhbWUoaHVkLmZyYW1lLCAxMCwgMzMsIDE1MCwgMTAwKTsKKyAgICAgICAgICAgIGhhZExlZnRG
cmFtZSA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjaGVja0ZyYW1lKGh1
ZC5mcmFtZSwgMTY0LCAxMCwgMTM0LCAxMjMpOworICAgICAgICAgICAgaGFkUmlnaHRGcmFtZSA9
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgRVhQRUNUX1RSVUUoaGFkTGVmdEZyYW1lKTsK
KyAgICBFWFBFQ1RfVFJVRShoYWRSaWdodEZyYW1lKTsKK30KKworI2VuZGlmCkluZGV4OiBUb29s
cy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RVSURlbGVnYXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0VUlEZWxlZ2F0ZS5oCShyZXZpc2lvbiAyNjYwODMp
CisrKyBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RVSURlbGVnYXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpZiBQTEFURk9STShNQUMpCiBAcHJvcGVydHkgKG5v
bmF0b21pYywgY29weSkgdm9pZCAoXmdldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudSkoTlNN
ZW51ICosIF9XS0NvbnRleHRNZW51RWxlbWVudEluZm8gKiwgaWQgPE5TU2VjdXJlQ29kaW5nPiwg
dm9pZCAoXikoTlNNZW51ICopKTsKICNlbmRpZgorQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkp
IHZvaWQgKF5zYXZlRGF0YVRvRmlsZSkoV0tXZWJWaWV3ICosIE5TRGF0YSAqLCBOU1N0cmluZyAq
LCBOU1N0cmluZyAqLCBOU1VSTCAqKTsKIAogLSAoTlNTdHJpbmcgKil3YWl0Rm9yQWxlcnQ7CiAK
SW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFVJRGVsZWdhdGUubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0VUlEZWxlZ2F0ZS5tbQkocmV2
aXNpb24gMjY2MDgzKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0VUlEZWxlZ2F0
ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsMTIgQEAgLSAodm9pZClfd2ViVmlldzoo
V0tXZWJWaWV3ICopd2ViVmlldyBnZQogfQogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAorLSAo
dm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBzYXZlRGF0YVRvRmlsZTooTlNEYXRh
ICopZGF0YSBzdWdnZXN0ZWRGaWxlbmFtZTooTlNTdHJpbmcgKilzdWdnZXN0ZWRGaWxlbmFtZSBt
aW1lVHlwZTooTlNTdHJpbmcgKiltaW1lVHlwZSBvcmlnaW5hdGluZ1VSTDooTlNVUkwgKil1cmwK
K3sKKyAgICBpZiAoX3NhdmVEYXRhVG9GaWxlKQorICAgICAgICBfc2F2ZURhdGFUb0ZpbGUod2Vi
VmlldywgZGF0YSwgc3VnZ2VzdGVkRmlsZW5hbWUsIG1pbWVUeXBlLCB1cmwpOworfQorCiAtIChO
U1N0cmluZyAqKXdhaXRGb3JBbGVydAogewogICAgIEVYUEVDVF9GQUxTRShzZWxmLnJ1bkphdmFT
Y3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2UpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407127</attachid>
            <date>2020-08-24 13:27:41 -0700</date>
            <delta_ts>2020-08-24 14:43:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215780-20200824132740.patch</filename>
            <type>text/plain</type>
            <size>66579</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjYwODMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA4LTI0ICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBQREYgaGVhZHMtdXAgZGlz
cGxheSB0byBVSSBwcm9jZXNzIG9uIG1hY09TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU3ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU4NzE1
ODQ3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
d3RmL1BsYXRmb3JtSGF2ZS5oOgorCiAyMDIwLTA4LTIyICBZdXN1a2UgU3V6dWtpICA8eXN1enVr
aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gQWRkIEludGwuU2VnbWVudGVyCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUhhdmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybUhhdmUuaAkocmV2aXNpb24gMjY2MDgzKQorKysgU291cmNlL1dURi93dGYvUGxh
dGZvcm1IYXZlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3NCw2ICs2NzQsMTAgQEAKICNkZWZpbmUg
SEFWRV9DRl9QUkVGU19TRVRfUkVBRF9PTkxZIDEKICNlbmRpZgogCisjaWYgUExBVEZPUk0oTUFD
KSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTYwMAorI2RlZmluZSBI
QVZFX1VJX1BST0NFU1NfUERGX0hVRCAxCisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKICNkZWZpbmUgSEFWRV9GUk9OVEJPQVJEX1NZ
U1RFTV9BUFBfU0VSVklDRVMgMQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjY2MDgz
KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw5
NiBAQAorMjAyMC0wOC0yNCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQu
b3JnPgorCisgICAgICAgIE1vdmUgUERGIGhlYWRzLXVwIGRpc3BsYXkgdG8gVUkgcHJvY2VzcyBv
biBtYWNPUworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjE1NzgwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81ODcxNTg0Nz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGhhcyBtYW55IGJlbmVmaXRz
IGluY2x1ZGluZyB0aGUgb25lIGluIHRoZSByYWRhciwgdGVzdGFiaWxpdHksIGFuZCBtb3Zpbmcg
V2ViS2l0LXNwZWNpZmljIGNvZGUgZnJvbSBQREZLaXQgdG8gV2ViS2l0LgorCisgICAgICAgIE5v
dyB0aGF0IHRoZSBIVUQgaXMgZGlzcGxheWVkIGluIHRoZSBVSSBwcm9jZXNzIGluc3RlYWQgb2Yg
aW4gdGhlIHdlYiBjb250ZW50LCB6b29taW5nIGluIGtlZXBzIHRoZSBIVUQgdGhlIHNhbWUgc2l6
ZS4KKyAgICAgICAgQSAzZC10cmFuc2Zvcm1lZCBpZnJhbWUgd2l0aCBhIFBERiBpbiBpdCBub3cg
c2hvd3MgdGhlIEhVRCBpbiB0aGUgcGxhY2UgeW91IGNhbiBjbGljayBvbiBpdCwgaW5zdGVhZCBv
ZiBpbiB0aGUgdHJhbnNmb3JtZWQgUERGLgorICAgICAgICBBbHNvLCBtb3ZpbmcgdGhlIG1vdXNl
IHRvIHRoZSBIVUQgd2l0aGluIHRoZSBmaXJzdCAzIHNlY29uZHMgcHJldmVudHMgaXQgZnJvbSBo
aWRpbmcsIHdoaWNoIGl0IGRvZXMgd2hlbiB0aGUgbW91c2UgbGVhdmVzIHRoZSBIVUQuCisgICAg
ICAgIFRoZSByZXN0IG9mIHRoZSBiZWhhdmlvciBJIHRoaW5rIHNob3VsZCBiZSB0aGUgc2FtZS4g
IE1vc3QgdXNlcnMgc2hvdWxkIG5vdCBub3RpY2UgYW55IGRpZmZlcmVuY2UuCisKKyAgICAgICAg
RnVuY3Rpb25hbGl0eSBjb3ZlcmVkIGJ5IEFQSSB0ZXN0cywgdGhlIGZpcnN0IHRlc3RzIGZvciBQ
REYgY29udGVudCBpbnRlcmFjdGlvbiEKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3Nh
Z2VzLnB5OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAgICgtW1dL
VmlldyBfY3JlYXRlUERGSFVEOnJlY3Q6XSk6CisgICAgICAgICgtW1dLVmlldyBfcGRmSFVEOmNo
YW5nZWRMb2NhdGlvbjpdKToKKyAgICAgICAgKC1bV0tWaWV3IF9yZW1vdmVQREZIVUQ6XSk6Cisg
ICAgICAgICgtW1dLVmlldyBfcmVtb3ZlQWxsUERGSFVEc10pOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvbWFjL1dLV2ViVmlld01hYy5tbToKKyAgICAgICAgKC1bV0tXZWJWaWV3IG1vdXNlTW92
ZWQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBtb3VzZURvd246XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBtb3VzZVVwOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NyZWF0ZVBERkhVRDpy
ZWN0Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3BkZkhVRDpjaGFuZ2VkTG9jYXRpb246XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfcmVtb3ZlUERGSFVEOl0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX3JlbW92ZUFsbFBERkhVRHNdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9X
S1dlYlZpZXdQcml2YXRlRm9yVGVzdGluZ01hYy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
bWFjL1dLV2ViVmlld1Rlc3RpbmdNYWMubW06CisgICAgICAgICgtW1dLV2ViVmlldyBwZGZIVURz
XSk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLmg6CisgICAgICAgICog
VUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6Y3JlYXRlUERGSFVEKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0
ZVBERkhVRExvY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnJlbW92ZVBE
RkhVRCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZW1vdmVBbGxQREZIVURzKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvUGFnZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZENvbW1p
dExvYWRGb3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cHJvY2Vzc0Rp
ZFRlcm1pbmF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9j
ZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6b3BlblBERkZyb21UZW1w
b3JhcnlGb2xkZXJXaXRoTmF0aXZlQXBwbGljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFj
L1BhZ2VDbGllbnRJbXBsTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6
Y3JlYXRlUERGSFVEKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnVwZGF0ZVBE
RkhVRExvY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnJlbW92ZVBE
RkhVRCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpyZW1vdmVBbGxQREZIVURz
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0
aE5hdGl2ZUFwcGxpY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjcmVh
dGVQREZIVUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlbW92ZVBERkhVRCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6dXBkYXRlUERGSFVETG9jYXRpb24pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBkZlpvb21Jbik6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6cGRmWm9vbU91dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6cGRmU2F2ZVRvUERGKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZGZP
cGVuV2l0aFByZXZpZXcpOgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGTGF5ZXJDb250cm9sbGVy
U1BJLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaDoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbToKKyAgICAgICAgKC1b
V0tQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZSBvcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uXSk6
CisgICAgICAgICgtW1dLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgc2F2ZVRvUERGXSk6Cisg
ICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6UERGUGx1Z2luKToKKyAgICAgICAgKFdlYktpdDo6
UERGUGx1Z2luOjp+UERGUGx1Z2luKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpmcmFt
ZUZvckhVRCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6Y2FsY3VsYXRlU2l6
ZXMpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmNvbnZlcnRGcm9tUERGVmlld1RvUm9v
dFZpZXcgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnZpc2liaWxpdHlEaWRD
aGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46Onpvb21Jbik6CisgICAgICAgIChX
ZWJLaXQ6OlBERlBsdWdpbjo6em9vbU91dCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6
c2F2ZSk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6b3BlbldpdGhQcmV2aWV3KToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBh
Z2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6Onpvb21QREZJbik6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6Onpvb21QREZPdXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpzYXZlUERGKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6b3BlblBERldpdGhQcmV2aWV3
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y3JlYXRlUERGSFVEKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6dXBkYXRlUERGSFVETG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjpyZW1vdmVQREZIVUQpOgorCiAyMDIwLTA4LTI0ICBBZGl0eWEgS2VlcnRoaSAgPGFr
ZWVydGhpQGFwcGxlLmNvbT4KIAogICAgICAgICBbbWFjT1NdIFNob3cgcGlja2VyIGZvciBkYXRl
IGFuZCBkYXRldGltZS1sb2NhbCBpbnB1dCB0eXBlcwpJbmRleDogU291cmNlL1dlYktpdC9TY3Jp
cHRzL3dlYmtpdC9tZXNzYWdlcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1Njcmlw
dHMvd2Via2l0L21lc3NhZ2VzLnB5CShyZXZpc2lvbiAyNjYwODMpCisrKyBTb3VyY2UvV2ViS2l0
L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNDMsNiArMjQz
LDcgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZQogICAgICAgICAn
V2ViS2l0OjpNRE5TUmVnaXN0ZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6TWVkaWFQ
bGF5ZXJQcml2YXRlUmVtb3RlSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6Ok1lZGlhUmVj
b3JkZXJJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllcics
CiAgICAgICAgICdXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbkNvbnRleHRJZGVudGlmaWVyJywKICAg
ICAgICAgJ1dlYktpdDo6UGx1Z2luUHJvY2Vzc1R5cGUnLAogICAgICAgICAnV2ViS2l0OjpSZW1v
dGVBdWRpb0Rlc3RpbmF0aW9uSWRlbnRpZmllcicsCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9QYWdlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
UGFnZUNsaWVudC5oCShyZXZpc2lvbiAyNjYwODMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9QYWdlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgorI2luY2x1ZGUgIlBERlBsdWdp
bklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZS5oIgog
I2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIldlYkNvbG9yUGlja2VyLmgi
CkBAIC0yNDIsNiArMjQzLDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbFBy
b3Zpc2lvbmFsTG9hZEZvck1haW5GcmFtZSgpIHsgfTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29t
bWl0TG9hZEZvck1haW5GcmFtZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIHVzZUN1c3Rv
bUNvbnRlbnRQcm92aWRlcikgPSAwOwogCisjaWYgSEFWRShVSV9QUk9DRVNTX1BERl9IVUQpCisg
ICAgdmlydHVhbCB2b2lkIGNyZWF0ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVQREZIVURMb2Nh
dGlvbihQREZQbHVnaW5JZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllcikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbGxQREZIVURzKCkgPSAwOworI2VuZGlmCisgICAgCiAg
ICAgdmlydHVhbCB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5JikgPSAw
OwogCiAgICAgdmlydHVhbCBib29sIGhhbmRsZVJ1bk9wZW5QYW5lbChXZWJQYWdlUHJveHkqLCBX
ZWJGcmFtZVByb3h5KiwgY29uc3QgRnJhbWVJbmZvRGF0YSYsIEFQSTo6T3BlblBhbmVsUGFyYW1l
dGVycyosIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkqKSB7IHJldHVybiBmYWxzZTsg
fQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lv
biAyNjYwODMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NzcyLDE1ICs0NzcyLDE0IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpk
aWRDb21taXRMb2FkRm9yRnJhbWUKICAgICAgICAgICAgIG1fcGx1Z2luU2NhbGVGYWN0b3IgPSAx
OwogICAgICAgICAgICAgbV9tYWluRnJhbWVQbHVnaW5IYW5kbGVzUGFnZVNjYWxlR2VzdHVyZSA9
IGZhbHNlOwogICAgICAgICB9Ci0gICAgfQotCiAjaWYgRU5BQkxFKFBPSU5URVJfTE9DSykKLSAg
ICBpZiAoZnJhbWUtPmlzTWFpbkZyYW1lKCkpCiAgICAgICAgIHJlcXVlc3RQb2ludGVyVW5sb2Nr
KCk7CiAjZW5kaWYKLQotICAgIGlmIChmcmFtZS0+aXNNYWluRnJhbWUoKSkKICAgICAgICAgcGFn
ZUNsaWVudCgpLnNldE1vdXNlRXZlbnRQb2xpY3kobW91c2VFdmVudFBvbGljeSk7CisjaWYgSEFW
RShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgICAgIHBhZ2VDbGllbnQoKS5yZW1vdmVBbGxQREZI
VURzKCk7CisjZW5kaWYKKyAgICB9CiAKICAgICBtX3BhZ2VMb2FkU3RhdGUuY29tbWl0Q2hhbmdl
cygpOwogICAgIGlmIChtX2xvYWRlckNsaWVudCkKQEAgLTc0NTEsNiArNzQ1MCw5IEBAIHZvaWQg
V2ViUGFnZVByb3h5Ojpwcm9jZXNzRGlkVGVybWluYXRlKFAKIAogICAgIHJlc2V0U3RhdGVBZnRl
clByb2Nlc3NFeGl0ZWQocmVhc29uKTsKICAgICBzdG9wQWxsVVJMU2NoZW1lVGFza3MobV9wcm9j
ZXNzLnB0cigpKTsKKyNpZiBIQVZFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBwYWdlQ2xpZW50
KCkucmVtb3ZlQWxsUERGSFVEcygpOworI2VuZGlmCiAKICAgICAvLyBGb3IgYnJpbmd1cCBvZiBw
cm9jZXNzIHN3YXBwaW5nLCBOYXZpZ2F0aW9uU3dhcCB0ZXJtaW5hdGlvbiB3aWxsIG5vdCBnbyBv
dXQgdG8gY2xpZW50cy4KICAgICAvLyBJZiBpdCBkb2VzICpkdXJpbmcqIHByb2Nlc3Mgc3dhcHBp
bmcsIGFuZCB0aGUgY2xpZW50IHRyaWdnZXJzIGEgcmVsb2FkLCB0aGF0IGNhdXNlcyBiaXphcnJl
IFdlYktpdCByZS1lbnRyeS4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oCShyZXZpc2lvbiAyNjYwODMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkxheWVy
VHJlZUNvbnRleHQuaCIKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCiAjaW5jbHVkZSAiTm90
aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuaCIKKyNpbmNsdWRlICJQREZQ
bHVnSW5JZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiUGFnZUxvYWRTdGF0ZS5oIgogI2luY2x1ZGUg
IlBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiUG9saWN5RGVjaXNpb24uaCIK
QEAgLTEzMTEsMTAgKzEzMTIsMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCBzYXZlRGF0YVRvRmls
ZUluRG93bmxvYWRzRm9sZGVyKFN0cmluZyYmIHN1Z2dlc3RlZEZpbGVuYW1lLCBTdHJpbmcmJiBt
aW1lVHlwZSwgVVJMJiYgb3JpZ2luYXRpbmdVUkwsIEFQSTo6RGF0YSYpOwogICAgIHZvaWQgc2F2
ZVBERlRvRmlsZUluRG93bmxvYWRzRm9sZGVyKFN0cmluZyYmIHN1Z2dlc3RlZEZpbGVuYW1lLCBV
UkwmJiBvcmlnaW5hdGluZ1VSTCwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik7Ci0jaWYgUExB
VEZPUk0oQ09DT0EpCisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCiAgICAgdm9pZCBzYXZlUERG
VG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKGNvbnN0IFN0cmlu
ZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgSVBDOjpEYXRhUmVm
ZXJlbmNlJiwgY29uc3QgU3RyaW5nJiBwZGZVVUlEKTsKKyNpZiAhSEFWRShVSV9QUk9DRVNTX1BE
Rl9IVUQpCiAgICAgdm9pZCBvcGVuUERGRnJvbVRlbXBvcmFyeUZvbGRlcldpdGhOYXRpdmVBcHBs
aWNhdGlvbihGcmFtZUluZm9EYXRhJiYsIGNvbnN0IFN0cmluZyYgcGRmVVVJRCk7CiAjZW5kaWYK
KyNlbmRpZgogCiAjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCiAgICAgdm9pZCBzaG93UERGQ29u
dGV4dE1lbnUoY29uc3QgV2ViS2l0OjpQREZDb250ZXh0TWVudSYsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoT3B0aW9uYWw8aW50MzJfdD4mJik+JiYpOwpAQCAtMTgwNiw2ICsxODA5LDE2IEBAIHB1
YmxpYzoKICAgICBib29sIGNhblVzZUNyZWRlbnRpYWxTdG9yYWdlKCkgeyByZXR1cm4gbV9jYW5V
c2VDcmVkZW50aWFsU3RvcmFnZTsgfQogICAgIHZvaWQgc2V0Q2FuVXNlQ3JlZGVudGlhbFN0b3Jh
Z2UoYm9vbCk7CiAKKyNpZiBIQVZFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICB2b2lkIGNyZWF0
ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Cisg
ICAgdm9pZCB1cGRhdGVQREZIVURMb2NhdGlvbihQREZQbHVnaW5JZGVudGlmaWVyLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCByZW1vdmVQREZIVUQoUERGUGx1Z2luSWRlbnRp
Zmllcik7CisgICAgdm9pZCBwZGZab29tSW4oUERGUGx1Z2luSWRlbnRpZmllcik7CisgICAgdm9p
ZCBwZGZab29tT3V0KFBERlBsdWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgcGRmU2F2ZVRvUERG
KFBERlBsdWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgcGRmT3BlbldpdGhQcmV2aWV3KFBERlBs
dWdpbklkZW50aWZpZXIpOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgV2ViUGFnZVByb3h5KFBh
Z2VDbGllbnQmLCBXZWJQcm9jZXNzUHJveHkmLCBSZWY8QVBJOjpQYWdlQ29uZmlndXJhdGlvbj4m
Jik7CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDI2NjA4
MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgko
d29ya2luZyBjb3B5KQpAQCAtNDMzLDkgKzQzMyw4IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94
eSB7CiAgICAgU2F2ZVJlY2VudFNlYXJjaGVzKFN0cmluZyBuYW1lLCBWZWN0b3I8V2ViQ29yZTo6
UmVjZW50U2VhcmNoPiBzZWFyY2hJdGVtcykKICAgICBMb2FkUmVjZW50U2VhcmNoZXMoU3RyaW5n
IG5hbWUpIC0+IChWZWN0b3I8V2ViQ29yZTo6UmVjZW50U2VhcmNoPiByZXN1bHQpIFN5bmNocm9u
b3VzCiAKKyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikgJiYgIUhBVkUoVUlfUFJPQ0VTU19QREZf
SFVEKQogICAgIFNhdmVQREZUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcihTdHJpbmcgc3VnZ2VzdGVk
RmlsZW5hbWUsIFVSTCBvcmlnaW5hdGluZ1VSTCwgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEpCi0K
LSNpZiBQTEFURk9STShDT0NPQSkKICAgICBTYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVu
V2l0aE5hdGl2ZUFwcGxpY2F0aW9uKFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSwgc3RydWN0IFdl
YktpdDo6RnJhbWVJbmZvRGF0YSBzb3VyY2VGcmFtZUluZm8sIElQQzo6RGF0YVJlZmVyZW5jZSBk
YXRhLCBTdHJpbmcgcGRmVVVJRCkKICAgICBPcGVuUERGRnJvbVRlbXBvcmFyeUZvbGRlcldpdGhO
YXRpdmVBcHBsaWNhdGlvbihzdHJ1Y3QgV2ViS2l0OjpGcmFtZUluZm9EYXRhIHNvdXJjZUZyYW1l
SW5mbywgU3RyaW5nIHBkZlVVSUQpCiAjZW5kaWYKQEAgLTU2Niw2ICs1NjUsMTIgQEAgbWVzc2Fn
ZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBTcGVlY2hTeW50aGVzaXNSZXN1bWUoKSAtPiAoKSBB
c3luYwogI2VuZGlmCiAKKyNpZiBIQVZFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBDcmVhdGVQ
REZIVUQoV2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYkNvcmU6Oklu
dFJlY3QgYm91bmRpbmdCb3gpCisgICAgVXBkYXRlUERGSFVETG9jYXRpb24oV2ViS2l0OjpQREZQ
bHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYkNvcmU6OkludFJlY3QgYm91bmRpbmdCb3gp
CisgICAgUmVtb3ZlUERGSFVEKFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVy
KQorI2VuZGlmCisKICAgICBDb25maWd1cmVMb2dnaW5nQ2hhbm5lbChTdHJpbmcgY2hhbm5lbE5h
bWUsIGVudW06dWludDhfdCBXVEZMb2dDaGFubmVsU3RhdGUgc3RhdGUsIGVudW06dWludDhfdCBX
VEZMb2dMZXZlbCBsZXZlbCkKIAogI2lmIFBMQVRGT1JNKEdUSykKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCShy
ZXZpc2lvbiAyNjYwODMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJWaWV3SW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW1w
b3J0ICJXS1dlYlZpZXdQcml2YXRlLmgiCiAKKyNpbXBvcnQgIlBERlBsdWdpbklkZW50aWZpZXIu
aCIKICNpbXBvcnQgIlNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlLmgiCiAjaW1wb3J0ICJXS1No
YXJlU2hlZXQuaCIKICNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb24uaCIKQEAgLTEwMCw2
ICsxMDEsMTAgQEAgY2xhc3MgVmlld0dlc3R1cmVDb250cm9sbGVyOwogQGNsYXNzIFdLVGV4dEZp
bmRlckNsaWVudDsKICNlbmRpZgogCisjaWYgSEFWRShVSV9QUk9DRVNTX1BERl9IVUQpCitAY2xh
c3MgV0tQREZIVURWaWV3OworI2VuZGlmCisKIEBwcm90b2NvbCBfV0tUZXh0TWFuaXB1bGF0aW9u
RGVsZWdhdGU7CiBAcHJvdG9jb2wgX1dLSW5wdXREZWxlZ2F0ZTsKIApAQCAtMTI3LDEzICsxMzIs
MTYgQEAgY2xhc3MgVmlld0dlc3R1cmVDb250cm9sbGVyOwogICAgIEJPT0wgX3VzZVBsYXRmb3Jt
RmluZFVJOwogCiAjaWYgUExBVEZPUk0oTUFDKQorI2lmIEhBVkUoVUlfUFJPQ0VTU19QREZfSFVE
KQorICAgIEhhc2hNYXA8V2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVyLCBSZXRhaW5QdHI8V0tQ
REZIVURWaWV3Pj4gX3BkZkhVRFZpZXdzOworI2VuZGlmIC8vIEhBVkUoVUlfUFJPQ0VTU19QREZf
SFVEKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6OldlYlZpZXdJbXBsPiBfaW1wbDsKICAg
ICBSZXRhaW5QdHI8V0tUZXh0RmluZGVyQ2xpZW50PiBfdGV4dEZpbmRlckNsaWVudDsKIAogICAg
IC8vIE9ubHkgdXNlZCB3aXRoIFVJLXNpZGUgY29tcG9zaXRpbmcuCiAgICAgUmV0YWluUHRyPFdL
U2Nyb2xsVmlldz4gX3Njcm9sbFZpZXc7CiAgICAgUmV0YWluUHRyPFdLQ29udGVudFZpZXc+IF9j
b250ZW50VmlldzsKLSNlbmRpZgorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCiAgICAgUmV0YWluUHRyPFdLU2Nyb2xsVmlldz4gX3Njcm9sbFZpZXc7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkocmV2aXNp
b24gMjY2MDgzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0J
KHdvcmtpbmcgY29weSkKQEAgLTk5MSw2ICs5OTEsMzAgQEAgLSAodm9pZClfd2ViX3N1cGVyUXVp
Y2tMb29rV2l0aEV2ZW50OihOUwogICAgIFtzdXBlciBxdWlja0xvb2tXaXRoRXZlbnQ6ZXZlbnRd
OwogfQogCisjaWYgSEFWRShVSV9QUk9DRVNTX1BERl9IVUQpCisKKy0gKHZvaWQpX2NyZWF0ZVBE
RkhVRDooV2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVyKWlkZW50aWZpZXIgcmVjdDooY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYpcmVjdAoreworICAgIC8vIFVuc3VwcG9ydGVkIGluIFdLVmlldy4K
K30KKworLSAodm9pZClfcGRmSFVEOihXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIpaWRlbnRp
ZmllciBjaGFuZ2VkTG9jYXRpb246KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKXJlY3QKK3sKKyAg
ICAvLyBVbnN1cHBvcnRlZCBpbiBXS1ZpZXcuCit9CisKKy0gKHZvaWQpX3JlbW92ZVBERkhVRDoo
V2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVyKWlkZW50aWZpZXIKK3sKKyAgICAvLyBVbnN1cHBv
cnRlZCBpbiBXS1ZpZXcuCit9CisKKy0gKHZvaWQpX3JlbW92ZUFsbFBERkhVRHMKK3sKKyAgICAv
LyBVbnN1cHBvcnRlZCBpbiBXS1ZpZXcuCit9CisKKyNlbmRpZiAvLyBIQVZFKFVJX1BST0NFU1Nf
UERGX0hVRCkKKwogLSAodm9pZClfd2ViX3N1cGVyU3dpcGVXaXRoRXZlbnQ6KE5TRXZlbnQgKill
dmVudAogewogICAgIFtzdXBlciBzd2lwZVdpdGhFdmVudDpldmVudF07CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld01hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld01hYy5tbQkocmV2aXNpb24g
MjY2MDgzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgIkFwcEtpdFNQSS5o
IgogI2ltcG9ydCAiVmVyc2lvbkNoZWNrcy5oIgogI2ltcG9ydCAiV0tDb250ZW50Vmlld01hYy5o
IgorI2ltcG9ydCAiV0tQREZIVURWaWV3LmgiCiAjaW1wb3J0ICJXS1NhZmVCcm93c2luZ1dhcm5p
bmcuaCIKICNpbXBvcnQgIldLU2Nyb2xsVmlld01hYy5oIgogI2ltcG9ydCAiV0tUZXh0RmluZGVy
Q2xpZW50LmgiCkBAIC00NTMsMTYgKzQ1NCwyOCBAQCAtICh2b2lkKXN3aXBlV2l0aEV2ZW50OihO
U0V2ZW50ICopZXZlbnQKIAogLSAodm9pZCltb3VzZU1vdmVkOihOU0V2ZW50ICopZXZlbnQKIHsK
KyNpZiBIQVZFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBmb3IgKGF1dG8mIGh1ZCA6IF9wZGZI
VURWaWV3cy52YWx1ZXMoKSkKKyAgICAgICAgW2h1ZCBtb3VzZU1vdmVkOmV2ZW50XTsKKyNlbmRp
ZgogICAgIF9pbXBsLT5tb3VzZU1vdmVkKGV2ZW50KTsKIH0KIAogLSAodm9pZCltb3VzZURvd246
KE5TRXZlbnQgKilldmVudAogeworI2lmIEhBVkUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIGZv
ciAoYXV0byYgaHVkIDogX3BkZkhVRFZpZXdzLnZhbHVlcygpKQorICAgICAgICBbaHVkIG1vdXNl
RG93bjpldmVudF07CisjZW5kaWYKICAgICBfaW1wbC0+bW91c2VEb3duKGV2ZW50KTsKIH0KIAog
LSAodm9pZCltb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKIHsKKyNpZiBIQVZFKFVJX1BST0NFU1Nf
UERGX0hVRCkKKyAgICBmb3IgKGF1dG8mIGh1ZCA6IF9wZGZIVURWaWV3cy52YWx1ZXMoKSkKKyAg
ICAgICAgW2h1ZCBtb3VzZVVwOmV2ZW50XTsKKyNlbmRpZgogICAgIF9pbXBsLT5tb3VzZVVwKGV2
ZW50KTsKIH0KIApAQCAtMTA1NCw2ICsxMDY3LDM3IEBAIC0gKElCQWN0aW9uKXN0b3BMb2FkaW5n
OihpZClzZW5kZXIKIAogQGltcGxlbWVudGF0aW9uIFdLV2ViVmlldyAoV0tJbnRlcm5hbE1hYykK
IAorI2lmIEhBVkUoVUlfUFJPQ0VTU19QREZfSFVEKQorCistICh2b2lkKV9jcmVhdGVQREZIVUQ6
KFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllcilpZGVudGlmaWVyIHJlY3Q6KGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKXJlY3QKK3sKKyAgICBbc2VsZiBfcmVtb3ZlUERGSFVEOmlkZW50aWZpZXJd
OworICAgIGF1dG8gaHVkID0gYWRvcHROUyhbW1dLUERGSFVEVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpyZWN0IHBsdWdpbklkZW50aWZpZXI6aWRlbnRpZmllciBwYWdlOipfcGFnZV0pOworICAg
IFtzZWxmIGFkZFN1YnZpZXc6aHVkLmdldCgpXTsKKyAgICBfcGRmSFVEVmlld3MuYWRkKGlkZW50
aWZpZXIsIFdURk1vdmUoaHVkKSk7Cit9CisKKy0gKHZvaWQpX3BkZkhVRDooV2ViS2l0OjpQREZQ
bHVnaW5JZGVudGlmaWVyKWlkZW50aWZpZXIgY2hhbmdlZExvY2F0aW9uOihjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JilyZWN0Cit7CisgICAgaWYgKGF1dG8gaHVkID0gX3BkZkhVRFZpZXdzLmdldChp
ZGVudGlmaWVyKSkKKyAgICAgICAgW2h1ZCBzZXRGcmFtZTpyZWN0XTsKK30KKworLSAodm9pZClf
cmVtb3ZlUERGSFVEOihXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIpaWRlbnRpZmllcgorewor
ICAgIGlmIChhdXRvIGh1ZCA9IF9wZGZIVURWaWV3cy50YWtlKGlkZW50aWZpZXIpKQorICAgICAg
ICBbaHVkIHJlbW92ZUZyb21TdXBlcnZpZXddOworfQorCistICh2b2lkKV9yZW1vdmVBbGxQREZI
VURzCit7CisgICAgZm9yIChhdXRvJiBodWQgOiBfcGRmSFVEVmlld3MudmFsdWVzKCkpCisgICAg
ICAgIFtodWQgcmVtb3ZlRnJvbVN1cGVydmlld107CisgICAgX3BkZkhVRFZpZXdzLmNsZWFyKCk7
Cit9CisKKyNlbmRpZiAvLyBIQVZFKFVJX1BST0NFU1NfUERGX0hVRCkKKwogLSAoTlNUZXh0SW5w
dXRDb250ZXh0ICopX3dlYl9zdXBlcklucHV0Q29udGV4dAogewogICAgIHJldHVybiBbc3VwZXIg
aW5wdXRDb250ZXh0XTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tX
ZWJWaWV3UHJpdmF0ZUZvclRlc3RpbmdNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nTWFjLmgJKHJldmlz
aW9uIDI2NjA4MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3
UHJpdmF0ZUZvclRlc3RpbmdNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBA
aW50ZXJmYWNlIFdLV2ViVmlldyAoV0tUZXN0aW5nTWFjKQogCiAtICh2b2lkKV9zZXRIZWFkZXJC
YW5uZXJIZWlnaHQ6KGludCloZWlnaHQ7CiAtICh2b2lkKV9zZXRGb290ZXJCYW5uZXJIZWlnaHQ6
KGludCloZWlnaHQ7CistIChOU1NldDxOU1ZpZXcgKj4gKilwZGZIVURzOwogCiBAZW5kCiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmll
d1Rlc3RpbmdNYWMubW0JKHJldmlzaW9uIDI2NjA4MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTAz
LDYgKzEwMywxNiBAQCAtICh2b2lkKV9zZXRGb290ZXJCYW5uZXJIZWlnaHQ6KGludCloZWlnCiAg
ICAgX3BhZ2UtPnNldEZvb3RlckJhbm5lckhlaWdodEZvclRlc3RpbmcoaGVpZ2h0KTsKIH0KIAor
LSAoTlNTZXQ8TlNWaWV3ICo+ICopcGRmSFVEcworeworI2lmIEhBVkUoVUlfUFJPQ0VTU19QREZf
SFVEKQorICAgIE5TTXV0YWJsZVNldDxOU1ZpZXcgKj4gKnNldCA9IFtOU011dGFibGVTZXQgc2V0
V2l0aENhcGFjaXR5Ol9wZGZIVURWaWV3cy5zaXplKCldOworICAgIGZvciAoYXV0byYgaHVkIDog
X3BkZkhVRFZpZXdzLnZhbHVlcygpKQorICAgICAgICBbc2V0IGFkZE9iamVjdDpodWQuZ2V0KCld
OworICAgIHJldHVybiBzZXQ7CisjZW5kaWYKK30KKwogLSAoTlNNZW51ICopX2FjdGl2ZU1lbnUK
IHsKICAgICAvLyBGSVhNRTogT25seSB0aGUgRE9NIHBhc3RlIGFjY2VzcyBtZW51IGlzIHN1cHBv
cnRlZCBmb3Igbm93LiBJbiB0aGUgZnV0dXJlLCBpdCBjb3VsZCBiZQpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5oCShyZXZpc2lvbiAyNjYwODMpCisr
KyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBQTEFURk9STShNQUMpCiAKKyNpbmNsdWRlICJQ
REZQbHVnaW5JZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiUGx1Z2luQ29tcGxleFRleHRJbnB1dFN0
YXRlLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSAiV0tMYXlvdXRN
b2RlLmgiCkBAIC0xMjAsNiArMTIxLDEzIEBAIHN0cnVjdCBTaGFyZURhdGFXaXRoUGFyc2VkVVJM
OwogCiAtICh2b2lkKV93ZWJfZ3JhbnRET01QYXN0ZUFjY2VzczsKIAorI2lmIEhBVkUoVUlfUFJP
Q0VTU19QREZfSFVEKQorLSAodm9pZClfY3JlYXRlUERGSFVEOihXZWJLaXQ6OlBERlBsdWdpbklk
ZW50aWZpZXIpaWRlbnRpZmllciByZWN0Oihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JilyZWN0Owor
LSAodm9pZClfcGRmSFVEOihXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIpaWRlbnRpZmllciBj
aGFuZ2VkTG9jYXRpb246KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKXJlY3Q7CistICh2b2lkKV9y
ZW1vdmVQREZIVUQ6KFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllcilpZGVudGlmaWVyOworLSAo
dm9pZClfcmVtb3ZlQWxsUERGSFVEczsKKyNlbmRpZgorCiBAb3B0aW9uYWwKIC0gKHZvaWQpX3dl
Yl9kaWRBZGRNZWRpYUNvbnRyb2xzTWFuYWdlcjooaWQpY29udHJvbHNNYW5hZ2VyOwogLSAodm9p
ZClfd2ViX2RpZFJlbW92ZU1lZGlhQ29udHJvbHNNYW5hZ2VyOwpAQCAtMTkwLDYgKzE5OCwxMyBA
QCBwdWJsaWM6CiAgICAgdm9pZCB2aWV3V2lsbFN0YXJ0TGl2ZVJlc2l6ZSgpOwogICAgIHZvaWQg
dmlld0RpZEVuZExpdmVSZXNpemUoKTsKIAorI2lmIEhBVkUoVUlfUFJPQ0VTU19QREZfSFVEKQor
ICAgIHZvaWQgY3JlYXRlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmKTsKKyAgICB2b2lkIHVwZGF0ZVBERkhVRExvY2F0aW9uKFBERlBsdWdpbklkZW50
aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIHJlbW92ZVBERkhVRChQ
REZQbHVnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHJlbW92ZUFsbFBERkhVRHMoKTsKKyNlbmRp
ZgorCiAgICAgdm9pZCByZW5ld0dTdGF0ZSgpOwogICAgIHZvaWQgc2V0RnJhbWVTaXplKENHU2l6
ZSk7CiAgICAgdm9pZCBkaXNhYmxlRnJhbWVTaXplVXBkYXRlcygpOwpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0JKHJldmlzaW9uIDI2NjA4MykK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzE4LDYgKzE3MTgsMzAgQEAgdm9pZCBXZWJWaWV3SW1wbDo6dmlld0RpZEVu
ZExpdmVSZXNpemUoKQogICAgIFttX2xheW91dFN0cmF0ZWd5IGRpZEVuZExpdmVSZXNpemVdOwog
fQogCisjaWYgSEFWRShVSV9QUk9DRVNTX1BERl9IVUQpCisKK3ZvaWQgV2ViVmlld0ltcGw6OmNy
ZWF0ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIHJlY3QpCit7CisgICAgW21fdmlldyBfY3JlYXRlUERGSFVEOmlkZW50aWZpZXIg
cmVjdDpyZWN0XTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlUERGSFVETG9jYXRpb24o
UERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBy
ZWN0KQoreworICAgIFttX3ZpZXcgX3BkZkhVRDppZGVudGlmaWVyIGNoYW5nZWRMb2NhdGlvbjpy
ZWN0XTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6cmVtb3ZlUERGSFVEKFBERlBsdWdpbklkZW50
aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBbbV92aWV3IF9yZW1vdmVQREZIVUQ6aWRlbnRpZmll
cl07Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnJlbW92ZUFsbFBERkhVRHMoKQoreworICAgIFtt
X3ZpZXcgX3JlbW92ZUFsbFBERkhVRHNdOworfQorCisjZW5kaWYgLy8gSEFWRShVSV9QUk9DRVNT
X1BERl9IVUQpCisKIHZvaWQgV2ViVmlld0ltcGw6OnJlbmV3R1N0YXRlKCkKIHsKICAgICBpZiAo
bV90ZXh0SW5kaWNhdG9yV2luZG93KQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9z
L1dlYlBhZ2VQcm94eUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCShyZXZpc2lvbiAyNjYwODMpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDg4LDE2ICsxMDg4LDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZFBlcmZvcm1EaWN0aW9uYXJ5
TAogICAgIHBhZ2VDbGllbnQoKS5kaWRQZXJmb3JtRGljdGlvbmFyeUxvb2t1cChkaWN0aW9uYXJ5
UG9wdXBJbmZvKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnNhdmVQREZUb1RlbXBvcmFyeUZv
bGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oY29uc3QgU3RyaW5nJiwgRnJhbWVJbmZv
RGF0YSYmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViUGFnZVByb3h5OjpvcGVuUERGRnJvbVRl
bXBvcmFyeUZvbGRlcldpdGhOYXRpdmVBcHBsaWNhdGlvbihGcmFtZUluZm9EYXRhJiYsIGNvbnN0
IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogdm9pZCBXZWJQYWdlUHJv
eHk6OnNldFJlbW90ZUxheWVyVHJlZVJvb3ROb2RlKFJlbW90ZUxheWVyVHJlZU5vZGUqIHJvb3RO
b2RlKQogewogICAgIHBhZ2VDbGllbnQoKS5zZXRSZW1vdGVMYXllclRyZWVSb290Tm9kZShyb290
Tm9kZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxN
YWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVu
dEltcGxNYWMuaAkocmV2aXNpb24gMjY2MDgzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
bWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5MCw2ICsxOTAsMTMg
QEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcmVnaXN0ZXJJbnNlcnRpb25VbmRvR3JvdXBpbmcoKSBv
dmVycmlkZTsKIAorI2lmIEhBVkUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIHZvaWQgY3JlYXRl
UERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHVwZGF0ZVBERkhVRExvY2F0aW9uKFBERlBsdWdpbklkZW50aWZpZXIs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbW92ZVBERkhV
RChQREZQbHVnaW5JZGVudGlmaWVyKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbW92ZUFsbFBERkhV
RHMoKSBvdmVycmlkZTsKKyNlbmRpZgorCiAgICAgLy8gQXV4aWxpYXJ5IENsaWVudCBDcmVhdGlv
bgogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICBXZWJGdWxsU2NyZWVuTWFuYWdlclBy
b3h5Q2xpZW50JiBmdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50KCkgb3ZlcnJpZGU7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1t
CShyZXZpc2lvbiAyNjYwODMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNs
aWVudEltcGxNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM0OSw2ICszNDksMzAgQEAgdm9pZCBQ
YWdlQ2xpZW50SW1wbDo6cmVnaXN0ZXJJbnNlcnRpb25VbgogICAgIHJlZ2lzdGVySW5zZXJ0aW9u
VW5kb0dyb3VwaW5nV2l0aFVuZG9NYW5hZ2VyKFttX3ZpZXcgdW5kb01hbmFnZXJdKTsKIH0KIAor
I2lmIEhBVkUoVUlfUFJPQ0VTU19QREZfSFVEKQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpjcmVh
dGVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiByZWN0KQoreworICAgIG1faW1wbC0+Y3JlYXRlUERGSFVEKGlkZW50aWZpZXIsIHJl
Y3QpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjp1cGRhdGVQREZIVURMb2NhdGlvbihQREZQ
bHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3Qp
Cit7CisgICAgbV9pbXBsLT51cGRhdGVQREZIVURMb2NhdGlvbihpZGVudGlmaWVyLCByZWN0KTsK
K30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVtb3ZlUERGSFVEKFBERlBsdWdpbklkZW50aWZp
ZXIgaWRlbnRpZmllcikKK3sKKyAgICBtX2ltcGwtPnJlbW92ZVBERkhVRChpZGVudGlmaWVyKTsK
K30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVtb3ZlQWxsUERGSFVEcygpCit7CisgICAgbV9p
bXBsLT5yZW1vdmVBbGxQREZIVURzKCk7Cit9CisKKyNlbmRpZiAvLyBIQVZFKFVJX1BST0NFU1Nf
UERGX0hVRCkKKwogdm9pZCBQYWdlQ2xpZW50SW1wbDo6Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKQog
ewogICAgIG1faW1wbC0+Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQkocmV2aXNpb24gMjY2MDgz
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtNDc1LDggKzQ3NSw2IEBAIHN0YXRpYyBOU1N0cmluZyAqcGF0aFRvUERG
T25EaXNrKGNvbnN0IFMKIAogdm9pZCBXZWJQYWdlUHJveHk6OnNhdmVQREZUb1RlbXBvcmFyeUZv
bGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRG
aWxlbmFtZSwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywgY29uc3QgSVBDOjpEYXRhUmVmZXJl
bmNlJiBkYXRhLCBjb25zdCBTdHJpbmcmIHBkZlVVSUQpCiB7Ci0gICAgTUVTU0FHRV9DSEVDSyhU
ZW1wb3JhcnlQREZGaWxlTWFwOjppc1ZhbGlkS2V5KHBkZlVVSUQpKTsKLQogICAgIGlmIChkYXRh
LmlzRW1wdHkoKSkgewogICAgICAgICBXVEZMb2dBbHdheXMoIkNhbm5vdCBzYXZlIGVtcHR5IFBE
RiBmaWxlIHRvIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5LiIpOwogICAgICAgICByZXR1cm47CkBA
IC01MDQsNyArNTAyLDggQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNhdmVQREZUb1RlbXBvcmFyeUZv
bAogICAgIGF1dG8gb3JpZ2luYXRpbmdVUkxTdHJpbmcgPSBmcmFtZUluZm8ucmVxdWVzdC51cmwo
KS5zdHJpbmcoKTsKICAgICBGaWxlU3lzdGVtOjpzZXRNZXRhZGF0YVVSTChuc1BhdGguZ2V0KCks
IG9yaWdpbmF0aW5nVVJMU3RyaW5nKTsKIAotICAgIG1fdGVtcG9yYXJ5UERGRmlsZXMuYWRkKHBk
ZlVVSUQsIG5zUGF0aC5nZXQoKSk7CisgICAgaWYgKFRlbXBvcmFyeVBERkZpbGVNYXA6OmlzVmFs
aWRLZXkocGRmVVVJRCkpCisgICAgICAgIG1fdGVtcG9yYXJ5UERGRmlsZXMuYWRkKHBkZlVVSUQs
IG5zUGF0aC5nZXQoKSk7CiAKICAgICBhdXRvIHBkZkZpbGVVUkwgPSBVUkw6OmZpbGVVUkxXaXRo
RmlsZVN5c3RlbVBhdGgoU3RyaW5nKG5zUGF0aC5nZXQoKSkpOwogICAgIG1fdWlDbGllbnQtPmNv
bmZpcm1QREZPcGVuaW5nKCp0aGlzLCBwZGZGaWxlVVJMLCBXVEZNb3ZlKGZyYW1lSW5mbyksIFtw
ZGZGaWxlVVJMXSAoYm9vbCBhbGxvd2VkKSB7CkBAIC01MTQsNiArNTEzLDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OnNhdmVQREZUb1RlbXBvcmFyeUZvbAogICAgIH0pOwogfQogCisjaWYgRU5BQkxF
KFBERktJVF9QTFVHSU4pICYmICFIQVZFKFVJX1BST0NFU1NfUERGX0hVRCkKIHZvaWQgV2ViUGFn
ZVByb3h5OjpvcGVuUERGRnJvbVRlbXBvcmFyeUZvbGRlcldpdGhOYXRpdmVBcHBsaWNhdGlvbihG
cmFtZUluZm9EYXRhJiYgZnJhbWVJbmZvLCBjb25zdCBTdHJpbmcmIHBkZlVVSUQpCiB7CiAgICAg
TUVTU0FHRV9DSEVDSyhUZW1wb3JhcnlQREZGaWxlTWFwOjppc1ZhbGlkS2V5KHBkZlVVSUQpKTsK
QEAgLTUzMCw2ICs1MzAsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6b3BlblBERkZyb21UZW1wb3Jh
cnlGCiAgICAgICAgIFtbTlNXb3Jrc3BhY2Ugc2hhcmVkV29ya3NwYWNlXSBvcGVuVVJMOnBkZkZp
bGVVUkxdOwogICAgIH0pOwogfQorI2VuZGlmCiAKICNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikK
IHZvaWQgV2ViUGFnZVByb3h5OjpzaG93UERGQ29udGV4dE1lbnUoY29uc3QgV2ViS2l0OjpQREZD
b250ZXh0TWVudSYgY29udGV4dE1lbnUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8
aW50MzJfdD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC02NzMsNiArNjc0LDQ5IEBAIFBs
YXRmb3JtVmlldyogV2ViUGFnZVByb3h5OjpwbGF0Zm9ybVZpZXcKICAgICByZXR1cm4gW3BhZ2VD
bGllbnQoKS5wbGF0Zm9ybVdpbmRvdygpIGNvbnRlbnRWaWV3XTsKIH0KIAorI2lmIEhBVkUoVUlf
UFJPQ0VTU19QREZfSFVEKQorCit2b2lkIFdlYlBhZ2VQcm94eTo6Y3JlYXRlUERGSFVEKFBERlBs
dWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkK
K3sKKyAgICBwYWdlQ2xpZW50KCkuY3JlYXRlUERGSFVEKGlkZW50aWZpZXIsIHJlY3QpOworfQor
Cit2b2lkIFdlYlBhZ2VQcm94eTo6cmVtb3ZlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIgaWRl
bnRpZmllcikKK3sKKyAgICBwYWdlQ2xpZW50KCkucmVtb3ZlUERGSFVEKGlkZW50aWZpZXIpOwor
fQorCit2b2lkIFdlYlBhZ2VQcm94eTo6dXBkYXRlUERGSFVETG9jYXRpb24oUERGUGx1Z2luSWRl
bnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAg
IHBhZ2VDbGllbnQoKS51cGRhdGVQREZIVURMb2NhdGlvbihpZGVudGlmaWVyLCByZWN0KTsKK30K
Kwordm9pZCBXZWJQYWdlUHJveHk6OnBkZlpvb21JbihQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50
aWZpZXIpCit7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Wm9vbVBERkluKGlkZW50aWZp
ZXIpKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnBkZlpvb21PdXQoUERGUGx1Z2luSWRlbnRp
ZmllciBpZGVudGlmaWVyKQoreworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Olpvb21QREZP
dXQoaWRlbnRpZmllcikpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6cGRmU2F2ZVRvUERGKFBE
RlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBzZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6OldlYlBhZ2U6OlNhdmVQREYoaWRlbnRpZmllciksIFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyldIChTdHJpbmcmJiBzdWdnZXN0ZWRGaWxlbmFtZSwgVVJMJiYg
b3JpZ2luYXRpbmdVUkwsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YVJlZmVyZW5jZSkg
eworICAgICAgICBzYXZlUERGVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIoV1RGTW92ZShzdWdnZXN0
ZWRGaWxlbmFtZSksIFdURk1vdmUob3JpZ2luYXRpbmdVUkwpLCBkYXRhUmVmZXJlbmNlKTsKKyAg
ICB9KTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnBkZk9wZW5XaXRoUHJldmlldyhQREZQbHVn
aW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3Nh
Z2VzOjpXZWJQYWdlOjpPcGVuUERGV2l0aFByZXZpZXcoaWRlbnRpZmllciksIFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIChTdHJpbmcmJiBzdWdnZXN0ZWRGaWxlbmFtZSwg
RnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRh
LCBjb25zdCBTdHJpbmcmIHBkZlVVSUQpIHsKKyAgICAgICAgc2F2ZVBERlRvVGVtcG9yYXJ5Rm9s
ZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbihXVEZNb3ZlKHN1Z2dlc3RlZEZpbGVuYW1l
KSwgV1RGTW92ZShmcmFtZUluZm8pLCBkYXRhLCBwZGZVVUlEKTsKKyAgICB9KTsKK30KKworI2Vu
ZGlmIC8vIEhBVkUoVUlfUFJPQ0VTU19QREZfSFVEKQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
IAogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJL
aXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjY2MDgzKQorKysgU291cmNl
L1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMTc5MCw2ICsxNzkwLDcgQEAKIAkJRDNCOTQ4NDkxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlNl
YXJjaFBvcHVwTWVudS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRDNCOTQ4NDUxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlNlYXJjaFBvcHVwTWVudS5oICov
OyB9OwogCQlERjQ2MkUwRjIzRjIyRjU1MDBFRkYzNUYgLyogV0tIVFRQQ29va2llU3RvcmVQcml2
YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERjQ2
MkUwRTIzRjIyRjUzMDBFRkYzNUYgLyogV0tIVFRQQ29va2llU3RvcmVQcml2YXRlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREY0NjJFMTIyM0Yz
MzhCRTAwRUZGMzVGIC8qIFdLQ29udGVudFdvcmxkUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREY0NjJFMTEyM0YzMzhBRDAwRUZGMzVGIC8q
IFdLQ29udGVudFdvcmxkUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCURGODRDRUU0MjQ5QUEyNEQwMDkwOTZGNiAvKiBXS1BERkhVRFZp
ZXcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERjg0
Q0VFMjI0OUFBMjFGMDA5MDk2RjYgLyogV0tQREZIVURWaWV3Lm1tICovOyB9OwogCQlFMTA1RkU1
NDE4RDdCOURFMDA4RjU3QTggLyogRWRpdGluZ1JhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTA1RkU1MzE4RDdCOURFMDA4RjU3QTggLyogRWRp
dGluZ1JhbmdlLmggKi87IH07CiAJCUUxMUQzNUFFMTZCNjNEMUIwMDZEMjNENyAvKiBjb20uYXBw
bGUuV2ViUHJvY2Vzcy5zYiBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTE5NjdFMzcxNTBBQjVFMjAwQzczMTY5IC8qIGNvbS5hcHBsZS5XZWJQcm9jZXNz
LnNiICovOyB9OwogCQlFMTRBOTU0QTE2RTAxNkE0MDA2OERFODIgLyogTmV0d29ya1Byb2Nlc3NQ
bGF0Zm9ybVN0cmF0ZWdpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxNEE5NTQ4MTZFMDE2QTQwMDY4REU4MiAvKiBOZXR3b3JrUHJvY2Vzc1BsYXRm
b3JtU3RyYXRlZ2llcy5oICovOyB9OwpAQCAtNTI3NSwxMCArNTI3NiwxMyBAQAogCQlEM0I5NDg0
MzExRkY0QjY1MDAwMzJCMzkgLyogV2ViUG9wdXBNZW51LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYlBvcHVwTWVudS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlEM0I5NDg0NDExRkY0QjY1MDAwMzJCMzkgLyogV2ViU2VhcmNoUG9wdXBNZW51LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlNlYXJjaFBvcHVwTWVudS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQzQjk0ODQ1MTFGRjRCNjUwMDAzMkIzOSAv
KiBXZWJTZWFyY2hQb3B1cE1lbnUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2ViU2VhcmNoUG9wdXBNZW51Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURGMkIx
M0IxMjQ5RDhGNTQwMDVCQ0M1MiAvKiBQREZQbHVnaW5JZGVudGlmaWVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBERlBsdWdpbklkZW50aWZpZXIuaDsgcGF0aCA9IFBERi9Q
REZQbHVnaW5JZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURGNDYy
RTBFMjNGMjJGNTMwMEVGRjM1RiAvKiBXS0hUVFBDb29raWVTdG9yZVByaXZhdGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tIVFRQQ29va2llU3RvcmVQcml2YXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURGNDYyRTExMjNGMzM4QUQwMEVGRjM1RiAvKiBX
S0NvbnRlbnRXb3JsZFByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0tDb250ZW50V29ybGRQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURG
NThDNjMxMTM3MUFDNTgwMEY5QTM3QyAvKiBOYXRpdmVXZWJXaGVlbEV2ZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hdGl2ZVdlYldoZWVsRXZlbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREY1OEM2MzUxMzcxQUNBMDAwRjlBMzdDIC8qIE5hdGl2ZVdl
YldoZWVsRXZlbnRNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBOYXRpdmVXZWJXaGVlbEV2ZW50TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlERjg0Q0VFMjI0OUFBMjFGMDA5MDk2RjYgLyogV0tQREZIVURWaWV3Lm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tQREZIVURWaWV3Lm1tOyBwYXRoID0gUERG
L1dLUERGSFVEVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREY4NENFRTMy
NDlBQTIxRjAwOTA5NkY2IC8qIFdLUERGSFVEVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBXS1BERkhVRFZpZXcuaDsgcGF0aCA9IFBERi9XS1BERkhVRFZpZXcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEwNUZFNTMxOEQ3QjlERTAwOEY1N0E4IC8qIEVk
aXRpbmdSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFZGl0aW5nUmFu
Z2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTExNUM3MTUxOTBGOEEyNTAwRUND
NTE2IC8qIGNvbS5hcHBsZS5XZWJLaXQuU3RvcmFnZS5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUg
PSBjb20uYXBwbGUuV2ViS2l0LlN0b3JhZ2Uuc2I7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJL
aXQyL2NvbS5hcHBsZS5XZWJLaXQuU3RvcmFnZS5zYjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RV
Q1RTX0RJUjsgfTsKIAkJRTEzM0ZEODkxNDIzREQ3RjAwRkM3QkZCIC8qIFdlYktpdC5pY25zICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gaW1hZ2UuaWNu
czsgbmFtZSA9IFdlYktpdC5pY25zOyBwYXRoID0gUmVzb3VyY2VzL1dlYktpdC5pY25zOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODk2Myw2ICs4OTY3LDcgQEAKIAkJCQlDRDQ1NzBE
ODI0NDRDQTE3MDBBM0RDRUIgLyogTWVkaWEgKi8sCiAJCQkJNTEwQ0M3RTcxNjEzOEU3MjAwRDAz
RUQzIC8qIE5ldHdvcmsgKi8sCiAJCQkJMzFBMkVDNDAxNDg5OTczNzAwODEwRDcxIC8qIE5vdGlm
aWNhdGlvbnMgKi8sCisJCQkJREY4NENFRTEyNDlBQTIwMDAwOTA5NkY2IC8qIFBERiAqLywKIAkJ
CQkxQUVGQ0MwNTExRDAxRjM0MDA4MjE5RDMgLyogUGx1Z2lucyAqLywKIAkJCQkyRDE1NTFBOTFG
NUE5QjQyMDAwNkUzRkUgLyogUmVtb3RlTGF5ZXJUcmVlICovLAogCQkJCTFBQUYwODlFMTkyNjgx
QUMwMEI2MzkwQyAvKiBVc2VyQ29udGVudCAqLywKQEAgLTEwNDUxLDYgKzEwNDU2LDE1IEBACiAJ
CQlwYXRoID0gaW9zOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJREY4NENF
RTEyNDlBQTIwMDAwOTA5NkY2IC8qIFBERiAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJ
Y2hpbGRyZW4gPSAoCisJCQkJREY4NENFRTMyNDlBQTIxRjAwOTA5NkY2IC8qIFdLUERGSFVEVmll
dy5oICovLAorCQkJCURGODRDRUUyMjQ5QUEyMUYwMDkwOTZGNiAvKiBXS1BERkhVRFZpZXcubW0g
Ki8sCisJCQkpOworCQkJbmFtZSA9IFBERjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJ
CX07CiAJCUUxNzA4NzZEMTZENkNBNzIwMEY5OTIyNiAvKiBGaWxlQVBJICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTEwNDc5LDYgKzEwNDkzLDcgQEAKIAkJ
CQkyRDJBREYwMzE2MzYyNDM1MDAxOTdFNDcgLyogUERGUGx1Z2luQW5ub3RhdGlvbi5tbSAqLywK
IAkJCQkyRDJBREYwRDE2MzY0RDgyMDAxOTdFNDcgLyogUERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlv
bi5oICovLAogCQkJCTJEMkFERjBFMTYzNjREODIwMDE5N0U0NyAvKiBQREZQbHVnaW5DaG9pY2VB
bm5vdGF0aW9uLm1tICovLAorCQkJCURGMkIxM0IxMjQ5RDhGNTQwMDVCQ0M1MiAvKiBQREZQbHVn
aW5JZGVudGlmaWVyLmggKi8sCiAJCQkJMkQ0MjlCRkExNzIxRTJCQTAwRUM2ODFGIC8qIFBERlBs
dWdpblBhc3N3b3JkRmllbGQuaCAqLywKIAkJCQkyRDQyOUJGQjE3MjFFMkJBMDBFQzY4MUYgLyog
UERGUGx1Z2luUGFzc3dvcmRGaWVsZC5tbSAqLywKIAkJCQkyRDJBREYwNTE2MzYyREM3MDAxOTdF
NDcgLyogUERGUGx1Z2luVGV4dEFubm90YXRpb24uaCAqLywKQEAgLTEzMTQyLDYgKzEzMTU3LDcg
QEAKIAkJCQk2MzcyODFBMzIxQURDNzQ0MDA5RTBERTYgLyogV0tEb3dubG9hZFByb2dyZXNzLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJNUNFOTEyMEQyMjkzQzIxOTAwNUJFQzc4IC8qIFdLTWFpbi5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTQ2NTdEODhBMjI2NjRBMkYwMDVERTgyMyAvKiBXS09yaWVu
dGF0aW9uQWNjZXNzQWxlcnQubW0gaW4gU291cmNlcyAqLywKKwkJCQlERjg0Q0VFNDI0OUFBMjRE
MDA5MDk2RjYgLyogV0tQREZIVURWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNBMjZEODMy
MTdBRDFCODAwRjk3QTM1IC8qIFdLU2FmZUJyb3dzaW5nV2FybmluZy5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTFEQjAxOTQ0MjExQ0YwMDUwMDlGQjNFOCAvKiBXS1NoYXJlU2hlZXQubW0gaW4gU291
cmNlcyAqLywKIAkJCQk3QTc4RkYzMzIyNDE5MTlCMDA5NjQ4M0UgLyogV0tTdG9yYWdlQWNjZXNz
QWxlcnQubW0gaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BERi9QREZMYXllckNvbnRyb2xsZXJTUEkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGTGF5ZXJDb250cm9sbGVyU1BJLmgJKHJl
dmlzaW9uIDI2NjA4MykKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9Q
REZMYXllckNvbnRyb2xsZXJTUEkuaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsMTIgQEAg
dHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgUERGTGF5ZXJDb250cgogCiAtICh2b2lkKXNuYXBz
aG90SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY29udGV4dDsKIAorI2lmIEhBVkUoVUlfUFJPQ0VT
U19QREZfSFVEKQorLSAodm9pZClzZXREaXNwbGF5c1BERkhVRENvbnRyb2xsZXI6KEJPT0wpZGlz
cGxheXNDb250cm9sbGVyOworLSAodm9pZCl6b29tSW46KGlkKWF0UG9pbnQ7CistICh2b2lkKXpv
b21PdXQ6KGlkKWF0UG9pbnQ7CisjZW5kaWYKKwogLSAodm9pZCltYWduaWZ5V2l0aE1hZ25pZmlj
YXRpb246KENHRmxvYXQpbWFnbmlmaWNhdGlvbiBhdFBvaW50OihDR1BvaW50KXBvaW50IGltbWVk
aWF0ZWx5OihCT09MKWltbWVkaWF0ZWx5OwogCiAtIChDR1BvaW50KXNjcm9sbFBvc2l0aW9uOwpJ
bmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVn
aW4uaAkocmV2aXNpb24gMjY2MDgzKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdp
bnMvUERGL1BERlBsdWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYg
RU5BQkxFKFBERktJVF9QTFVHSU4pCiAKICNpbmNsdWRlICJQREZLaXRJbXBvcnRzLmgiCisjaW5j
bHVkZSAiUERGUGx1Z2luSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlBsdWdpbi5oIgogI2luY2x1
ZGUgIldlYkV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViSGl0VGVzdFJlc3VsdERhdGEuaCIKQEAgLTUw
LDYgKzUxLDcgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNWYQogT0JK
Q19DTEFTUyBOU0FycmF5OwogT0JKQ19DTEFTUyBOU0F0dHJpYnV0ZWRTdHJpbmc7CiBPQkpDX0NM
QVNTIE5TRGF0YTsKK09CSkNfQ0xBU1MgTlNFdmVudDsKIE9CSkNfQ0xBU1MgTlNTdHJpbmc7CiBP
QkpDX0NMQVNTIFBERkFubm90YXRpb247CiBPQkpDX0NMQVNTIFBERkxheWVyQ29udHJvbGxlcjsK
QEAgLTc3LDggKzc5LDkgQEAgY2xhc3MgUERGUGx1Z2luQW5ub3RhdGlvbjsKIGNsYXNzIFBERlBs
dWdpblBhc3N3b3JkRmllbGQ7CiBjbGFzcyBQbHVnaW5WaWV3OwogY2xhc3MgV2ViRnJhbWU7Citz
dHJ1Y3QgRnJhbWVJbmZvRGF0YTsKIAotY2xhc3MgUERGUGx1Z2luIGZpbmFsIDogcHVibGljIFBs
dWdpbiwgcHJpdmF0ZSBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYQorY2xhc3MgUERGUGx1Z2luIGZp
bmFsIDogcHVibGljIFBsdWdpbiwgcHVibGljIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhCiAjaWYg
SEFWRShJTkNSRU1FTlRBTF9QREZfQVBJUykKICAgICAsIHByaXZhdGUgV2ViQ29yZTo6TmV0c2Nh
cGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQKICNlbmRpZgpAQCAtMTAzLDkgKzEwNiwxOSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBub3RpZnlTZWxlY3Rpb25DaGFuZ2VkKFBERlNlbGVjdGlvbiAqKTsK
ICAgICB2b2lkIG5vdGlmeUN1cnNvckNoYW5nZWQodWludDY0X3QgLyogUERGTGF5ZXJDb250cm9s
bGVyQ3Vyc29yVHlwZSAqLyk7CiAKKyNpZiBIQVZFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICB2
b2lkIHpvb21JbigpOworICAgIHZvaWQgem9vbU91dCgpOworICAgIHZvaWQgc2F2ZShDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFVSTCYsIGNvbnN0IElQQzo6RGF0
YVJlZmVyZW5jZSYpPiYmKTsKKyAgICB2b2lkIG9wZW5XaXRoUHJldmlldyhDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYsIEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgSVBDOjpEYXRh
UmVmZXJlbmNlJiwgY29uc3QgU3RyaW5nJik+JiYpOworICAgIFBERlBsdWdpbklkZW50aWZpZXIg
aWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorI2VuZGlmCisKICAg
ICB2b2lkIGNsaWNrZWRMaW5rKE5TVVJMICopOworI2lmICFIQVZFKFVJX1BST0NFU1NfUERGX0hV
RCkKICAgICB2b2lkIHNhdmVUb1BERigpOwogICAgIHZvaWQgb3BlbldpdGhOYXRpdmVBcHBsaWNh
dGlvbigpOworI2VuZGlmCiAgICAgdm9pZCB3cml0ZUl0ZW1zVG9QYXN0ZWJvYXJkKE5TU3RyaW5n
ICpwYXN0ZWJvYXJkTmFtZSwgTlNBcnJheSAqaXRlbXMsIE5TQXJyYXkgKnR5cGVzKTsKICAgICB2
b2lkIHNob3dEZWZpbml0aW9uRm9yQXR0cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcg
KiwgQ0dQb2ludCk7CiAgICAgdm9pZCBwZXJmb3JtV2ViU2VhcmNoKE5TU3RyaW5nICopOwpAQCAt
MTE4LDcgKzEzMSwxMCBAQCBwdWJsaWM6CiAKICAgICBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVy
dEZyb21QREZWaWV3VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgY29uc3Q7CiAg
ICAgV2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZyb21Sb290Vmlld1RvUERGVmlldyhjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRG
cm9tUERGVmlld1RvUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKKyAg
ICBXZWJDb3JlOjpJbnRSZWN0IGNvbnZlcnRGcm9tUERGVmlld1RvUm9vdFZpZXcoY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYpIGNvbnN0OwogICAgIFdlYkNvcmU6OkludFJlY3QgYm91bmRzT25TY3Jl
ZW4oKSBjb25zdDsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IGZyYW1lRm9ySFVEKCkgY29uc3Q7CiAK
ICAgICBib29sIHNob3dDb250ZXh0TWVudUF0UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
KTsKIApAQCAtMTU5LDcgKzE3NSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCB3YW50c1doZWVsRXZl
bnRzKCkgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZvaWQgZ2VvbWV0cnlEaWRDaGFuZ2Uo
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcGx1Z2luU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgY2xpcFJlY3QsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYgcGx1Z2luVG9Sb290
Vmlld1RyYW5zZm9ybSkgZmluYWw7CiAgICAgdm9pZCBjb250ZW50c1NjYWxlRmFjdG9yQ2hhbmdl
ZChmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCB2aXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wpIGZpbmFs
IHsgfQorICAgIHZvaWQgdmlzaWJpbGl0eURpZENoYW5nZShib29sKSBmaW5hbDsKICAgICB2b2lk
IGZyYW1lRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCByZXF1ZXN0SUQpIGZpbmFsOwogICAgIHZv
aWQgZnJhbWVEaWRGYWlsKHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCB3YXNDYW5jZWxsZWQpIGZp
bmFsOwogICAgIHZvaWQgZGlkRXZhbHVhdGVKYXZhU2NyaXB0KHVpbnQ2NF90IHJlcXVlc3RJRCwg
Y29uc3QgU3RyaW5nJiByZXN1bHQpIGZpbmFsOwpAQCAtMjYzLDcgKzI3OSw2IEBAIHByaXZhdGU6
CiAgICAgTlNFdmVudCAqbnNFdmVudEZvcldlYk1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVu
dCYpOwogICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tUGx1Z2luVG9QREZWaWV3KGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgY29u
dmVydEZyb21Sb290Vmlld1RvUGx1Z2luKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7
Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZyb21QREZWaWV3VG9Sb290Vmlldyhjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OwogICAgIAogICAgIGJvb2wgc3VwcG9ydHNGb3Jt
cygpOwogICAgIGJvb2wgaXNGdWxsRnJhbWVQbHVnaW4oKSBjb25zdDsKQEAgLTQwMyw2ICs0MTgs
OSBAQCBwcml2YXRlOgogI2VuZGlmCiAKICNlbmRpZiAvLyBIQVZFKElOQ1JFTUVOVEFMX1BERl9B
UElTKQorI2lmIEhBVkUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIFBERlBsdWdpbklkZW50aWZp
ZXIgbV9pZGVudGlmaWVyOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdp
bi5tbQkocmV2aXNpb24gMjY2MDgzKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdp
bnMvUERGL1BERlBsdWdpbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNDMzLDEyICs0MzMsMTYgQEAg
LSAodm9pZClwZXJmb3JtU3BvdGxpZ2h0U2VhcmNoOihOU1N0cmluZwogCiAtICh2b2lkKW9wZW5X
aXRoTmF0aXZlQXBwbGljYXRpb24KIHsKKyNpZiAhSEFWRShVSV9QUk9DRVNTX1BERl9IVUQpCiAg
ICAgX3BkZlBsdWdpbi0+b3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbigpOworI2VuZGlmCiB9CiAK
IC0gKHZvaWQpc2F2ZVRvUERGCiB7CisjaWYgIUhBVkUoVUlfUFJPQ0VTU19QREZfSFVEKQogICAg
IF9wZGZQbHVnaW4tPnNhdmVUb1BERigpOworI2VuZGlmCiB9CiAKIC0gKHZvaWQpcGRmTGF5ZXJD
b250cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgY2xpY2tl
ZExpbmtXaXRoVVJMOihOU1VSTCAqKXVybApAQCAtNjAwLDcgKzYwNCwxMyBAQCBpbmxpbmUgUERG
UGx1Z2luOjpQREZQbHVnaW4oV2ViRnJhbWUmIGZyCiAjaWYgSEFWRShJTkNSRU1FTlRBTF9QREZf
QVBJUykKICAgICAsIG1faW5jcmVtZW50YWxQREZMb2FkaW5nRW5hYmxlZChXZWJDb3JlOjpSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmluY3JlbWVudGFsUERGTG9hZGlu
Z0VuYWJsZWQoKSkKICNlbmRpZgorI2lmIEhBVkUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgICwg
bV9pZGVudGlmaWVyKFBERlBsdWdpbklkZW50aWZpZXI6OmdlbmVyYXRlKCkpCisjZW5kaWYKIHsK
KyNpZiBIQVZFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICAgICAgW21fcGRmTGF5ZXJDb250cm9s
bGVyIHNldERpc3BsYXlzUERGSFVEQ29udHJvbGxlcjpOT107CisjZW5kaWYKICAgICBtX3BkZkxh
eWVyQ29udHJvbGxlci5nZXQoKS5kZWxlZ2F0ZSA9IG1fcGRmTGF5ZXJDb250cm9sbGVyRGVsZWdh
dGUuZ2V0KCk7CiAgICAgbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkucGFyZW50TGF5ZXIgPSBt
X2NvbnRlbnRMYXllci5nZXQoKTsKIApAQCAtNjQwLDYgKzY1MCwxMCBAQCBpbmxpbmUgUERGUGx1
Z2luOjpQREZQbHVnaW4oV2ViRnJhbWUmIGZyCiAKIFBERlBsdWdpbjo6flBERlBsdWdpbigpCiB7
CisjaWYgSEFWRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2Zy
YW1lLnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+cmVtb3ZlUERGSFVEKCp0aGlzKTsKKyNlbmRpZgog
fQogCiAjaWYgSEFWRShJTkNSRU1FTlRBTF9QREZfQVBJUykKQEAgLTE3NzIsNiArMTc4NiwxMSBA
QCB2b2lkIFBERlBsdWdpbjo6Y29udGVudHNTY2FsZUZhY3RvckNoYW5nCiAgICAgdXBkYXRlUGFn
ZUFuZERldmljZVNjYWxlRmFjdG9ycygpOwogfQogCitJbnRSZWN0IFBERlBsdWdpbjo6ZnJhbWVG
b3JIVUQoKSBjb25zdAoreworICAgIHJldHVybiBjb252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3
KEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSgpKSk7Cit9CisKIHZvaWQgUERGUGx1Z2luOjpjYWxj
dWxhdGVTaXplcygpCiB7CiAgICAgaWYgKFttX3BkZkRvY3VtZW50IGlzTG9ja2VkXSkgewpAQCAt
MTc4Miw2ICsxODAxLDEwIEBAIHZvaWQgUERGUGx1Z2luOjpjYWxjdWxhdGVTaXplcygpCiAKICAg
ICBtX2ZpcnN0UGFnZUhlaWdodCA9IFttX3BkZkRvY3VtZW50IHBhZ2VDb3VudF0gPyBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oQ0dDZWlsaW5nKFtbbV9wZGZEb2N1bWVudCBwYWdlQXRJbmRleDowXSBi
b3VuZHNGb3JCb3g6a1BERkRpc3BsYXlCb3hDcm9wQm94XS5zaXplLmhlaWdodCkpIDogMDsKICAg
ICBzZXRQREZEb2N1bWVudFNpemUoSW50U2l6ZShbbV9wZGZMYXllckNvbnRyb2xsZXIgY29udGVu
dFNpemVSZXNwZWN0aW5nWm9vbV0pKTsKKworI2lmIEhBVkUoVUlfUFJPQ0VTU19QREZfSFVEKQor
ICAgIG1fZnJhbWUucGFnZSgpLT51cGRhdGVQREZIVURMb2NhdGlvbigqdGhpcywgZnJhbWVGb3JI
VUQoKSk7CisjZW5kaWYKIH0KIAogYm9vbCBQREZQbHVnaW46OmluaXRpYWxpemUoY29uc3QgUGFy
YW1ldGVycyYgcGFyYW1ldGVycykKQEAgLTE5MTYsNyArMTkzOSwxMyBAQCBJbnRQb2ludCBQREZQ
bHVnaW46OmNvbnZlcnRGcm9tUERGVmlld1RvCiAgICAgSW50UG9pbnQgcG9pbnRJblBsdWdpbkNv
b3JkaW5hdGVzKHBvaW50LngoKSwgc2l6ZSgpLmhlaWdodCgpIC0gcG9pbnQueSgpKTsKICAgICBy
ZXR1cm4gbV9yb290Vmlld1RvUGx1Z2luVHJhbnNmb3JtLmludmVyc2UoKS52YWx1ZU9yKEFmZmlu
ZVRyYW5zZm9ybSgpKS5tYXBQb2ludChwb2ludEluUGx1Z2luQ29vcmRpbmF0ZXMpOwogfQotICAg
IAorCitJbnRSZWN0IFBERlBsdWdpbjo6Y29udmVydEZyb21QREZWaWV3VG9Sb290Vmlldyhjb25z
dCBJbnRSZWN0JiByZWN0KSBjb25zdAoreworICAgIEludFJlY3QgcmVjdEluUGx1Z2luQ29vcmRp
bmF0ZXMocmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwor
ICAgIHJldHVybiBtX3Jvb3RWaWV3VG9QbHVnaW5UcmFuc2Zvcm0uaW52ZXJzZSgpLnZhbHVlT3Io
QWZmaW5lVHJhbnNmb3JtKCkpLm1hcFJlY3QocmVjdEluUGx1Z2luQ29vcmRpbmF0ZXMpOworfQor
CiBJbnRQb2ludCBQREZQbHVnaW46OmNvbnZlcnRGcm9tUm9vdFZpZXdUb1BERlZpZXcoY29uc3Qg
SW50UG9pbnQmIHBvaW50KSBjb25zdAogewogICAgIEludFBvaW50IHBvaW50SW5QbHVnaW5Db29y
ZGluYXRlcyA9IG1fcm9vdFZpZXdUb1BsdWdpblRyYW5zZm9ybS5tYXBQb2ludChwb2ludCk7CkBA
IC0xOTQ3LDYgKzE5NzYsMTggQEAgSW50UmVjdCBQREZQbHVnaW46OmJvdW5kc09uU2NyZWVuKCkg
Y29ucwogICAgIHJldHVybiBmcmFtZVZpZXctPmNvbnRlbnRzVG9TY3JlZW4oZW5jbG9zaW5nSW50
UmVjdChyZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKSk7CiB9CiAKK3ZvaWQgUERGUGx1Z2luOjp2
aXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wgdmlzaWJsZSkKK3sKKyNpZiBIQVZFKFVJX1BST0NFU1Nf
UERGX0hVRCkKKyAgICBpZiAodmlzaWJsZSkKKyAgICAgICAgbV9mcmFtZS5wYWdlKCktPmNyZWF0
ZVBERkhVRCgqdGhpcywgZnJhbWVGb3JIVUQoKSk7CisgICAgZWxzZQorICAgICAgICBtX2ZyYW1l
LnBhZ2UoKS0+cmVtb3ZlUERGSFVEKCp0aGlzKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHZp
c2libGUpOworI2VuZGlmCit9CisKIHZvaWQgUERGUGx1Z2luOjpnZW9tZXRyeURpZENoYW5nZShj
b25zdCBJbnRTaXplJiBwbHVnaW5TaXplLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtKQogewogICAgIGlmIChzaXplKCkgPT0g
cGx1Z2luU2l6ZSAmJiBwbHVnaW5WaWV3KCktPnBhZ2VTY2FsZUZhY3RvcigpID09IFttX3BkZkxh
eWVyQ29udHJvbGxlciBjb250ZW50U2NhbGVGYWN0b3JdKQpAQCAtMjM5Miw2ICsyNDMzLDMzIEBA
IGJvb2wgUERGUGx1Z2luOjpwbHVnaW5IYW5kbGVzQ29udGVudE9mZnMKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAorI2lmIEhBVkUoVUlfUFJPQ0VTU19QREZfSFVEKQorCit2b2lkIFBERlBsdWdpbjo6
em9vbUluKCkKK3sKKyAgICBpZiAoW21fcGRmTGF5ZXJDb250cm9sbGVyIHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3Ioem9vbUluOildKQorICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIg
em9vbUluOm5pbF07Cit9CisKK3ZvaWQgUERGUGx1Z2luOjp6b29tT3V0KCkKK3sKKyAgICBpZiAo
W21fcGRmTGF5ZXJDb250cm9sbGVyIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Ioem9vbU91
dDopXSkKKyAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHpvb21PdXQ6bmlsXTsKK30KKwor
dm9pZCBQREZQbHVnaW46OnNhdmUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcm
LCBjb25zdCBVUkwmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKK3sKKyAgICBOU0RhdGEgKmRhdGEgPSBsaXZlRGF0YSgpOworICAgIGNvbXBsZXRpb25I
YW5kbGVyKG1fc3VnZ2VzdGVkRmlsZW5hbWUsIG1fZnJhbWUudXJsKCksIElQQzo6IERhdGFSZWZl
cmVuY2UgeyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5ieXRlcyksIGRhdGEubGVu
Z3RoIH0pOworfQorCit2b2lkIFBERlBsdWdpbjo6b3BlbldpdGhQcmV2aWV3KENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJiwgRnJhbWVJbmZvRGF0YSYmLCBjb25zdCBJUEM6OkRh
dGFSZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAg
ICBOU0RhdGEgKmRhdGEgPSBsaXZlRGF0YSgpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fc3Vn
Z2VzdGVkRmlsZW5hbWUsIG1fZnJhbWUuaW5mbygpLCBJUEM6OiBEYXRhUmVmZXJlbmNlIHsgc3Rh
dGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxlbmd0aCB9LCBjcmVh
dGVDYW5vbmljYWxVVUlEU3RyaW5nKCkpOworfQorCisjZWxzZSAvLyBIQVZFKFVJX1BST0NFU1Nf
UERGX0hVRCkKICAgICAKIHZvaWQgUERGUGx1Z2luOjpzYXZlVG9QREYoKQogewpAQCAtMjQyNCw2
ICsyNDkyLDggQEAgdm9pZCBQREZQbHVnaW46Om9wZW5XaXRoTmF0aXZlQXBwbGljYXRpbwogICAg
IG1fZnJhbWUucGFnZSgpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6Ok9wZW5QREZGcm9t
VGVtcG9yYXJ5Rm9sZGVyV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKG1fZnJhbWUuaW5mbygpLCBtX3Rl
bXBvcmFyeVBERlVVSUQpKTsKIH0KIAorI2VuZGlmIC8vIEhBVkUoVUlfUFJPQ0VTU19QREZfSFVE
KQorCiB2b2lkIFBERlBsdWdpbjo6d3JpdGVJdGVtc1RvUGFzdGVib2FyZChOU1N0cmluZyAqcGFz
dGVib2FyZE5hbWUsIE5TQXJyYXkgKml0ZW1zLCBOU0FycmF5ICp0eXBlcykKIHsKICAgICBhdXRv
IHBhc3RlYm9hcmRUeXBlcyA9IG1ha2VWZWN0b3I8U3RyaW5nPih0eXBlcyk7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luSWRlbnRpZmllci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVn
aW5JZGVudGlmaWVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1BsdWdpbnMvUERGL1BERlBsdWdpbklkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvT2Jq
ZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworI2lmIEhBVkUoVUlfUFJP
Q0VTU19QREZfSFVEKQorZW51bSBQREZQbHVnaW5JZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBQ
REZQbHVnaW5JZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxQREZQbHVnaW5JZGVudGlmaWVy
VHlwZT47CisjZW5kaWYKKworfQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDI2NjA4MykKKysrIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3
IEBACiAjaW5jbHVkZSAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIgog
I2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIk5vdGlmaWNh
dGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5oIgorI2luY2x1ZGUgIlBERlBsdWdJbi5oIgog
I2luY2x1ZGUgIlBhZ2VCYW5uZXIuaCIKICNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzQXR0cmlidXRl
cy5oIgogI2luY2x1ZGUgIlBsdWdpblByb3h5LmgiCkBAIC01MTIzLDEyICs1MTI0LDEyIEBAIHZv
aWQgV2ViUGFnZTo6ZGlkRmluaXNoUHJpbnRPcGVyYXRpb24oY28KIH0KICNlbmRpZgogCisjaWYg
RU5BQkxFKFBERktJVF9QTFVHSU4pICYmICFIQVZFKFVJX1BST0NFU1NfUERGX0hVRCkKIHZvaWQg
V2ViUGFnZTo6c2F2ZVBERlRvRmlsZUluRG93bmxvYWRzRm9sZGVyKGNvbnN0IFN0cmluZyYgc3Vn
Z2VzdGVkRmlsZW5hbWUsIGNvbnN0IFVSTCYgb3JpZ2luYXRpbmdVUkwsIGNvbnN0IHVpbnQ4X3Qq
IGRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OlNhdmVQREZUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcihzdWdnZXN0ZWRGaWxlbmFtZSwg
b3JpZ2luYXRpbmdVUkwsIElQQzo6RGF0YVJlZmVyZW5jZShkYXRhLCBzaXplKSkpOwogfQogCi0j
aWYgUExBVEZPUk0oQ09DT0EpCiB2b2lkIFdlYlBhZ2U6OnNhdmVQREZUb1RlbXBvcmFyeUZvbGRl
ckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxl
bmFtZSwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywgY29uc3QgdWludDhfdCogZGF0YSwgdW5z
aWduZWQgbG9uZyBzaXplLCBjb25zdCBTdHJpbmcmIHBkZlVVSUQpCiB7CiAgICAgc2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpTYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5h
dGl2ZUFwcGxpY2F0aW9uKHN1Z2dlc3RlZEZpbGVuYW1lLCBmcmFtZUluZm8sIElQQzo6RGF0YVJl
ZmVyZW5jZShkYXRhLCBzaXplKSwgcGRmVVVJRCkpOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNpb24gMjY2MDgzKQorKysgU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2
ICs0NSw3IEBACiAjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCiAjaW5jbHVkZSAiTWVzc2Fn
ZVNlbmRlci5oIgogI2luY2x1ZGUgIk9wdGlvbmFsQ2FsbGJhY2tJRC5oIgorI2luY2x1ZGUgIlBE
RlBsdWdpbklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJQbHVnaW4uaCIKICNpbmNsdWRlICJQb2xp
Y3lEZWNpc2lvbi5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKQEAgLTM0NSw2ICsz
NDYsMTYgQEAgcHVibGljOgogCiAgICAgdm9pZCBjZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVh
KCk7CiAKKyNpZiBIQVZFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICB2b2lkIGNyZWF0ZVBERkhV
RChQREZQbHVnaW4mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCB1cGRhdGVQ
REZIVURMb2NhdGlvbihQREZQbHVnaW4mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAg
dm9pZCByZW1vdmVQREZIVUQoUERGUGx1Z2luJik7CisgICAgdm9pZCB6b29tUERGSW4oUERGUGx1
Z2luSWRlbnRpZmllcik7CisgICAgdm9pZCB6b29tUERGT3V0KFBERlBsdWdpbklkZW50aWZpZXIp
OworICAgIHZvaWQgc2F2ZVBERihQREZQbHVnaW5JZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFVSTCYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5j
ZSYpPiYmKTsKKyAgICB2b2lkIG9wZW5QREZXaXRoUHJldmlldyhQREZQbHVnaW5JZGVudGlmaWVy
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYsIEZyYW1lSW5mb0RhdGEmJiwg
Y29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwgY29uc3QgU3RyaW5nJik+JiYpOworI2VuZGlmCisK
ICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIHdpbGxDb21taXRMYXllclRyZWUoUmVtb3Rl
TGF5ZXJUcmVlVHJhbnNhY3Rpb24mKTsKICAgICB2b2lkIGRpZEZsdXNoTGF5ZXJUcmVlQXRUaW1l
KE1vbm90b25pY1RpbWUpOwpAQCAtNTY0LDcgKzU3NSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
c2V0VW5kZXJsYXlDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYgY29sb3IpIHsgbV91bmRlcmxh
eUNvbG9yID0gY29sb3I7IH0KICAgICBXZWJDb3JlOjpDb2xvciB1bmRlcmxheUNvbG9yKCkgY29u
c3QgeyByZXR1cm4gbV91bmRlcmxheUNvbG9yOyB9Ci0KKyAgICAKICAgICB2b2lkIHN0b3BMb2Fk
aW5nKCk7CiAgICAgdm9pZCBzdG9wTG9hZGluZ0ZyYW1lKFdlYkNvcmU6OkZyYW1lSWRlbnRpZmll
cik7CiAgICAgYm9vbCBkZWZlcnNMb2FkaW5nKCkgY29uc3Q7CkBAIC0xMDc0LDkgKzEwODUsOCBA
QCBwdWJsaWM6CiAgICAgTlNEaWN0aW9uYXJ5ICpkYXRhRGV0ZWN0aW9uQ29udGV4dCgpIGNvbnN0
IHsgcmV0dXJuIG1fZGF0YURldGVjdGlvbkNvbnRleHQuZ2V0KCk7IH0KICNlbmRpZgogCisjaWYg
RU5BQkxFKFBERktJVF9QTFVHSU4pICYmICFIQVZFKFVJX1BST0NFU1NfUERGX0hVRCkKICAgICB2
b2lkIHNhdmVQREZUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcihjb25zdCBTdHJpbmcmIHN1Z2dlc3Rl
ZEZpbGVuYW1lLCBjb25zdCBVUkwmIG9yaWdpbmF0aW5nVVJMLCBjb25zdCB1aW50OF90KiBkYXRh
LCB1bnNpZ25lZCBsb25nIHNpemUpOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBz
YXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKGNvbnN0
IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgdWludDhf
dCogZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplLCBjb25zdCBTdHJpbmcmIHBkZlVVSUQpOwogI2Vu
ZGlmCiAKQEAgLTE3OTEsNiArMTgwMSwxMCBAQCBwcml2YXRlOgogCiAgICAgV2ViQ29yZTo6Q29s
b3IgbV91bmRlcmxheUNvbG9yOwogCisjaWYgSEFWRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAg
SGFzaE1hcDxQREZQbHVnaW5JZGVudGlmaWVyLCBXZWFrUHRyPFBERlBsdWdpbj4+IG1fcGRmUGx1
Z0luc1dpdGhIVUQ7CisjZW5kaWYKKwogICAgIGJvb2wgbV9pc0luUmVkbyB7IGZhbHNlIH07CiAg
ICAgYm9vbCBtX2lzQ2xvc2VkIHsgZmFsc2UgfTsKICAgICBib29sIG1fdGFiVG9MaW5rcyB7IGZh
bHNlIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1l
c3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UubWVzc2FnZXMuaW4JKHJldmlzaW9uIDI2NjA4MykKKysrIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAg
LTU3Niw2ICs1NzYsMTMgQEAgR2VuZXJhdGVTeW50aGV0aWNFZGl0aW5nQ29tbWFuZChlbnVtOnVp
bgogCiAgICAgU2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVyc0xvYWRpbmcpCiAKKyNpZiBIQVZF
KFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBab29tUERGSW4oV2ViS2l0OjpQREZQbHVnaW5JZGVu
dGlmaWVyIGlkZW50aWZpZXIpCisgICAgWm9vbVBERk91dChXZWJLaXQ6OlBERlBsdWdpbklkZW50
aWZpZXIgaWRlbnRpZmllcikKKyAgICBTYXZlUERGKFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmll
ciBpZGVudGlmaWVyKSAtPiAoU3RyaW5nIGZpbGVuYW1lLCBVUkwgdXJsLCBJUEM6OkRhdGFSZWZl
cmVuY2UgZGF0YSkgQXN5bmMKKyAgICBPcGVuUERGV2l0aFByZXZpZXcoV2ViS2l0OjpQREZQbHVn
aW5JZGVudGlmaWVyIGlkZW50aWZpZXIpIC0+IChTdHJpbmcgZmlsZW5hbWUsIHN0cnVjdCBXZWJL
aXQ6OkZyYW1lSW5mb0RhdGEgZnJhbWVJbmZvLCBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YSwgU3Ry
aW5nIHV1aWQpIEFzeW5jCisjZW5kaWYKKwogICAgIFVwZGF0ZUN1cnJlbnRNb2RpZmllclN0YXRl
KE9wdGlvblNldDxXZWJDb3JlOjpQbGF0Zm9ybUV2ZW50OjpNb2RpZmllcj4gbW9kaWZpZXJzKQog
ICAgIFNpbXVsYXRlRGV2aWNlT3JpZW50YXRpb25DaGFuZ2UoZG91YmxlIGFscGhhLCBkb3VibGUg
YmV0YSwgZG91YmxlIGdhbW1hKQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvV2ViUGFnZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQkocmV2aXNpb24gMjY2MDgzKQorKysgU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbXBvcnQgIkVkaXRpbmdSYW5nZS5oIgogI2ltcG9y
dCAiRWRpdG9yU3RhdGUuaCIKICNpbXBvcnQgIkZvbnRJbmZvLmgiCisjaW1wb3J0ICJGcmFtZUlu
Zm9EYXRhLmgiCiAjaW1wb3J0ICJJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQuaCIKICNpbXBv
cnQgIlBERktpdEltcG9ydHMuaCIKICNpbXBvcnQgIlBERlBsdWdpbi5oIgpAQCAtMTA1MSw3ICsx
MDUyLDYyIEBAIHZvaWQgV2ViUGFnZTo6c2V0QWNjZW50Q29sb3IoV2ViQ29yZTo6Q28KICAgICBb
TlNBcHAgX3NldEFjY2VudENvbG9yOmNvbG9yLmlzVmFsaWQoKSA/IFdlYkNvcmU6Om5zQ29sb3Io
Y29sb3IpIDogbmlsXTsKIH0KIAotI2VuZGlmCisjZW5kaWYgLy8gSEFWRShBUFBfQUNDRU5UX0NP
TE9SUykKKworI2lmIEhBVkUoVUlfUFJPQ0VTU19QREZfSFVEKQorCit2b2lkIFdlYlBhZ2U6Onpv
b21QREZJbihQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgYXV0byBwZGZQ
bHVnaW4gPSBtX3BkZlBsdWdJbnNXaXRoSFVELmdldChpZGVudGlmaWVyKTsKKyAgICBpZiAoIXBk
ZlBsdWdpbikKKyAgICAgICAgcmV0dXJuOworICAgIHBkZlBsdWdpbi0+em9vbUluKCk7Cit9CisK
K3ZvaWQgV2ViUGFnZTo6em9vbVBERk91dChQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIp
Cit7CisgICAgYXV0byBwZGZQbHVnaW4gPSBtX3BkZlBsdWdJbnNXaXRoSFVELmdldChpZGVudGlm
aWVyKTsKKyAgICBpZiAoIXBkZlBsdWdpbikKKyAgICAgICAgcmV0dXJuOworICAgIHBkZlBsdWdp
bi0+em9vbU91dCgpOworfQorCit2b2lkIFdlYlBhZ2U6OnNhdmVQREYoUERGUGx1Z2luSWRlbnRp
ZmllciBpZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYsIGNv
bnN0IFVSTCYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQoreworICAgIGF1dG8gcGRmUGx1Z2luID0gbV9wZGZQbHVnSW5zV2l0aEhVRC5nZXQoaWRlbnRp
Zmllcik7CisgICAgaWYgKCFwZGZQbHVnaW4pCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFu
ZGxlcih7IH0sIHsgfSwgeyB9KTsKKyAgICBwZGZQbHVnaW4tPnNhdmUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOworfQorCit2b2lkIFdlYlBhZ2U6Om9wZW5QREZXaXRoUHJldmlldyhQREZQ
bHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3Qg
U3RyaW5nJiwgRnJhbWVJbmZvRGF0YSYmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25z
dCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBhdXRvIHBkZlBsdWdpbiA9
IG1fcGRmUGx1Z0luc1dpdGhIVUQuZ2V0KGlkZW50aWZpZXIpOworICAgIGlmICghcGRmUGx1Z2lu
KQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9LCB7IH0sIHsgfSwgeyB9KTsK
KyAgICBwZGZQbHVnaW4tPm9wZW5XaXRoUHJldmlldyhXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6Y3JlYXRlUERGSFVEKFBERlBsdWdpbiYgcGx1Z2luLCBj
b25zdCBJbnRSZWN0JiBib3VuZGluZ0JveCkKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fcGRm
UGx1Z0luc1dpdGhIVUQuYWRkKHBsdWdpbi5pZGVudGlmaWVyKCksIG1ha2VXZWFrUHRyKHBsdWdp
bikpOworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgc2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpDcmVhdGVQREZIVUQocGx1Z2luLmlkZW50aWZpZXIoKSwgYm91bmRp
bmdCb3gpKTsKK30KKwordm9pZCBXZWJQYWdlOjp1cGRhdGVQREZIVURMb2NhdGlvbihQREZQbHVn
aW4mIHBsdWdpbiwgY29uc3QgSW50UmVjdCYgYm91bmRpbmdCb3gpCit7CisgICAgaWYgKG1fcGRm
UGx1Z0luc1dpdGhIVUQuY29udGFpbnMocGx1Z2luLmlkZW50aWZpZXIoKSkpCisgICAgICAgIHNl
bmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6VXBkYXRlUERGSFVETG9jYXRpb24ocGx1Z2luLmlk
ZW50aWZpZXIoKSwgYm91bmRpbmdCb3gpKTsKK30KKwordm9pZCBXZWJQYWdlOjpyZW1vdmVQREZI
VUQoUERGUGx1Z2luJiBwbHVnaW4pCit7CisgICAgaWYgKG1fcGRmUGx1Z0luc1dpdGhIVUQucmVt
b3ZlKHBsdWdpbi5pZGVudGlmaWVyKCkpKQorICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OlJlbW92ZVBERkhVRChwbHVnaW4uaWRlbnRpZmllcigpKSk7Cit9CisKKyNlbmRpZiAv
LyBIQVZFKFVJX1BST0NFU1NfUERGX0hVRCkKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKSW5k
ZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDI2NjA4MykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE5IEBACisyMDIwLTA4LTI0ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgTW92ZSBQREYgaGVhZHMtdXAgZGlzcGxheSB0byBVSSBwcm9jZXNz
IG9uIG1hY09TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTU3ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU4NzE1ODQ3PgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9XS1BERlZpZXcubW06CisgICAgICAgIChwZGZEYXRhKToKKyAgICAgICAg
KFRFU1QpOgorICAgICAgICAoY2hlY2tGcmFtZSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9j
b2NvYS9UZXN0VUlEZWxlZ2F0ZS5oOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvY29jb2EvVGVz
dFVJRGVsZWdhdGUubW06CisgICAgICAgICgtW1Rlc3RVSURlbGVnYXRlIF93ZWJWaWV3OnNhdmVE
YXRhVG9GaWxlOnN1Z2dlc3RlZEZpbGVuYW1lOm1pbWVUeXBlOm9yaWdpbmF0aW5nVVJMOl0pOgor
CiAyMDIwLTA4LTI0ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbcmVzdWx0c2RicHldIEZpeCBwaXAgcGFja2FnZQpJbmRleDogVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1BERlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1BERlZpZXcubW0JKHJldmlzaW9uIDI2
NjA4MykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tQREZWaWV3
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMjYgQEAKICNpbXBvcnQgIlBsYXRmb3Jt
VXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXN0LmgiCiAjaW1wb3J0ICJUZXN0TmF2aWdhdGlvbkRl
bGVnYXRlLmgiCisjaW1wb3J0ICJUZXN0VUlEZWxlZ2F0ZS5oIgorI2ltcG9ydCAiVGVzdFVSTFNj
aGVtZUhhbmRsZXIuaCIKKyNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgPFdlYktp
dC9XS1dlYlZpZXcuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJp
dmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nLmg+CiAj
aW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKLSNpZiBIQVZFKFBERktJVCkgJiYgUExBVEZPUk0o
SU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgPENhcmJvbi9DYXJib24uaD4KKyNlbmRp
ZgorCisjaWYgUExBVEZPUk0oSU9TKSB8fCBIQVZFKFVJX1BST0NFU1NfUERGX0hVRCkKK3N0YXRp
YyBOU0RhdGEgKnBkZkRhdGEoKQoreworICAgIHJldHVybiBbTlNEYXRhIGRhdGFXaXRoQ29udGVu
dHNPZlVSTDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAidGVzdCIgd2l0
aEV4dGVuc2lvbjpAInBkZiIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMi
XV07Cit9CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPUykKIAogQGludGVyZmFjZSBQREZIb3N0
Vmlld0NvbnRyb2xsZXIgOiBVSVZpZXdDb250cm9sbGVyCiArICh2b2lkKWNyZWF0ZUhvc3RWaWV3
Oih2b2lkKF4pKGlkIGhvc3RWaWV3Q29udHJvbGxlcikpY2FsbGJhY2sgZm9yRXh0ZW5zaW9uSWRl
bnRpZmllcjooTlNTdHJpbmcgKilleHRlbnNpb25JZGVudGlmaWVyOwpAQCAtMTAxLDcgKzExNiw3
IEBAIFRFU1QoV2ViS2l0LCBXS1BERlZpZXdMb3Nlc0FwcGxpY2F0aW9uRm8KICAgICBSZXRhaW5Q
dHI8V0tXZWJWaWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3Vy
YXRpb24uZ2V0KCldKTsKIAogICAgIC8vIExvYWQgYSBQREYsIHNvIHdlIGluc3RhbGwgYSBXS1BE
RlZpZXcuCi0gICAgW3dlYlZpZXcgbG9hZERhdGE6W05TRGF0YSBkYXRhV2l0aENvbnRlbnRzT2ZV
Ukw6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInRlc3QiIHdpdGhFeHRl
bnNpb246QCJwZGYiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dIE1J
TUVUeXBlOkAiYXBwbGljYXRpb24vcGRmIiBjaGFyYWN0ZXJFbmNvZGluZ05hbWU6QCIiIGJhc2VV
Ukw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwczovL3d3dy5hcHBsZS5jb20vMCJdXTsKKyAg
ICBbd2ViVmlldyBsb2FkRGF0YTpwZGZEYXRhIE1JTUVUeXBlOkAiYXBwbGljYXRpb24vcGRmIiBj
aGFyYWN0ZXJFbmNvZGluZ05hbWU6QCIiIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJo
dHRwczovL3d3dy5hcHBsZS5jb20vMCJdXTsKICAgICBbd2ViVmlldyBfdGVzdF93YWl0Rm9yRGlk
RmluaXNoTmF2aWdhdGlvbl07CiAKICAgICAvLyBHbyBpbnRvIHRoZSBiYWNrZ3JvdW5kIGFuZCBw
YXJlbnQgdGhlIFdLV2ViVmlldy4KQEAgLTEzMiwzICsxNDcsMjA4IEBAIFRFU1QoV2ViS2l0LCBX
S1BERlZpZXdMb3Nlc0FwcGxpY2F0aW9uRm8KIH0KIAogI2VuZGlmCisKKyNpZiBIQVZFKFVJX1BS
T0NFU1NfUERGX0hVRCkKKworc3RhdGljIHZvaWQgY2hlY2tGcmFtZShOU1JlY3QgZnJhbWUsIENH
RmxvYXQgeCwgQ0dGbG9hdCB5LCBDR0Zsb2F0IHdpZHRoLCBDR0Zsb2F0IGhlaWdodCkKK3sKKyAg
ICBFWFBFQ1RfRVEoZnJhbWUub3JpZ2luLngsIHgpOworICAgIEVYUEVDVF9FUShmcmFtZS5vcmln
aW4ueSwgeSk7CisgICAgRVhQRUNUX0VRKGZyYW1lLnNpemUud2lkdGgsIHdpZHRoKTsKKyAgICBF
WFBFQ1RfRVEoZnJhbWUuc2l6ZS5oZWlnaHQsIGhlaWdodCk7Cit9CisKK1RFU1QoUERGSFVELCBN
YWluUmVzb3VyY2VQREYpCit7CisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldyA9IFtbW1Rlc3RX
S1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkg
Y29uZmlndXJhdGlvbjpbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV1d
IGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldyBsb2FkRGF0YTpwZGZEYXRhKCkgTUlNRVR5cGU6
QCJhcHBsaWNhdGlvbi9wZGYiIGNoYXJhY3RlckVuY29kaW5nTmFtZTpAIiIgYmFzZVVSTDpbTlNV
UkwgVVJMV2l0aFN0cmluZzpAImh0dHBzOi8vd3d3LmFwcGxlLmNvbS90ZXN0UGF0aCJdXTsKKyAg
ICBFWFBFQ1RfRVEod2ViVmlldy5wZGZIVURzLmNvdW50LCAwdSk7CisgICAgW3dlYlZpZXcgX3Rl
c3Rfd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOworICAgIEVYUEVDVF9FUSh3ZWJWaWV3LnBk
ZkhVRHMuY291bnQsIDF1KTsKKyAgICBjaGVja0ZyYW1lKHdlYlZpZXcucGRmSFVEcy5hbnlPYmpl
Y3QuZnJhbWUsIDAsIDAsIDgwMCwgNjAwKTsKKyAgICAKKyAgICBUZXN0VUlEZWxlZ2F0ZSAqZGVs
ZWdhdGUgPSBbW1Rlc3RVSURlbGVnYXRlIG5ld10gYXV0b3JlbGVhc2VdOworICAgIHdlYlZpZXcu
VUlEZWxlZ2F0ZSA9IGRlbGVnYXRlOworICAgIF9fYmxvY2sgYm9vbCBzYXZlUmVxdWVzdFJlY2Vp
dmVkID0gZmFsc2U7CisgICAgZGVsZWdhdGUuc2F2ZURhdGFUb0ZpbGUgPSBeKFdLV2ViVmlldyAq
d2ViVmlld0Zyb21EZWxlZ2F0ZSwgTlNEYXRhICpkYXRhLCBOU1N0cmluZyAqc3VnZ2VzdGVkRmls
ZW5hbWUsIE5TU3RyaW5nICptaW1lVHlwZSwgTlNVUkwgKm9yaWdpbmF0aW5nVVJMKSB7CisgICAg
ICAgIEVYUEVDVF9FUSh3ZWJWaWV3LCB3ZWJWaWV3RnJvbURlbGVnYXRlKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoW2RhdGEgaXNFcXVhbFRvRGF0YTpwZGZEYXRhKCldKTsKKyAgICAgICAgRVhQRUNU
X1dLX1NUUkVRKHN1Z2dlc3RlZEZpbGVuYW1lLCAidGVzdFBhdGgucGRmIik7CisgICAgICAgIEVY
UEVDVF9XS19TVFJFUShtaW1lVHlwZSwgImFwcGxpY2F0aW9uL3BkZiIpOworICAgICAgICBzYXZl
UmVxdWVzdFJlY2VpdmVkID0gdHJ1ZTsKKyAgICB9OworICAgIFtbd2ViVmlldyBwZGZIVURzXS5h
bnlPYmplY3QgcGVyZm9ybVNlbGVjdG9yOk5TU2VsZWN0b3JGcm9tU3RyaW5nKEAiX3BlcmZvcm1B
Y3Rpb25Gb3JDb250cm9sOiIpIHdpdGhPYmplY3Q6QCJhcnJvdy5kb3duLmNpcmNsZSJdOworICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmc2F2ZVJlcXVlc3RSZWNlaXZlZCk7CisKKyAgICBF
WFBFQ1RfRVEod2ViVmlldy5wZGZIVURzLmNvdW50LCAxdSk7CisgICAgW3dlYlZpZXcgX2tpbGxX
ZWJDb250ZW50UHJvY2Vzc107CisgICAgd2hpbGUgKHdlYlZpZXcucGRmSFVEcy5jb3VudCkKKyAg
ICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoKTsKK30KKworVEVTVChQREZI
VUQsIE1vdmVJRnJhbWUpCit7CisgICAgVGVzdFVSTFNjaGVtZUhhbmRsZXIgKmhhbmRsZXIgPSBb
W1Rlc3RVUkxTY2hlbWVIYW5kbGVyIG5ld10gYXV0b3JlbGVhc2VdOworICAgIGhhbmRsZXIuc3Rh
cnRVUkxTY2hlbWVUYXNrSGFuZGxlciA9IF4oV0tXZWJWaWV3ICosIGlkPFdLVVJMU2NoZW1lVGFz
az4gdGFzaykgeworICAgICAgICBpZiAoW3Rhc2sucmVxdWVzdC5VUkwucGF0aCBpc0VxdWFsVG9T
dHJpbmc6QCIvbWFpbi5odG1sIl0pIHsKKyAgICAgICAgICAgIE5TVVJMUmVzcG9uc2UgKnJlc3Bv
bnNlID0gW1tbTlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGFzay5yZXF1ZXN0LlVS
TCBNSU1FVHlwZTpAInRleHQvaHRtbCIgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOjAgdGV4dEVuY29k
aW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGh0bWwg
PSAiPGJyLz48aWZyYW1lIHNyYz0ndGVzdC5wZGYnIGlkPSdwZGZmcmFtZSc+PC9pZnJhbWU+IjsK
KyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVSZXNwb25zZTpyZXNwb25zZV07CisgICAgICAg
ICAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6aHRtbCBsZW5n
dGg6c3RybGVuKGh0bWwpXV07CisgICAgICAgICAgICBbdGFzayBkaWRGaW5pc2hdOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgRVhQRUNUX1dLX1NUUkVRKHRhc2sucmVxdWVzdC5VUkwu
cGF0aCwgIi90ZXN0LnBkZiIpOworICAgICAgICAgICAgTlNEYXRhICpkYXRhID0gcGRmRGF0YSgp
OworICAgICAgICAgICAgTlNVUkxSZXNwb25zZSAqcmVzcG9uc2UgPSBbW1tOU1VSTFJlc3BvbnNl
IGFsbG9jXSBpbml0V2l0aFVSTDp0YXNrLnJlcXVlc3QuVVJMIE1JTUVUeXBlOkAiYXBwbGljYXRp
b24vcGRmIiBleHBlY3RlZENvbnRlbnRMZW5ndGg6ZGF0YS5sZW5ndGggdGV4dEVuY29kaW5nTmFt
ZTpuaWxdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVSZXNwb25z
ZTpyZXNwb25zZV07CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpkYXRhXTsKKyAg
ICAgICAgICAgIFt0YXNrIGRpZEZpbmlzaF07CisgICAgICAgIH0KKyAgICB9OworCisgICAgV0tX
ZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IFtbV0tXZWJWaWV3Q29uZmlndXJh
dGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRVUkxTY2hlbWVI
YW5kbGVyOmhhbmRsZXIgZm9yVVJMU2NoZW1lOkAidGVzdCJdOworICAgIFRlc3RXS1dlYlZpZXcg
KndlYlZpZXcgPSBbW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJl
Y3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbl0gYXV0b3JlbGVh
c2VdOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhV
Ukw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJ0ZXN0Oi8vL21haW4uaHRtbCJdXV07CisgICAgRVhQ
RUNUX0VRKHdlYlZpZXcucGRmSFVEcy5jb3VudCwgMHUpOworICAgIFt3ZWJWaWV3IF90ZXN0X3dh
aXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKKyAgICBFWFBFQ1RfRVEod2ViVmlldy5wZGZIVURz
LmNvdW50LCAxdSk7CisgICAgY2hlY2tGcmFtZSh3ZWJWaWV3LnBkZkhVRHMuYW55T2JqZWN0LmZy
YW1lLCAxMCwgMjgsIDMwMCwgMTUwKTsKKworICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlw
dDpAInBkZmZyYW1lLndpZHRoPTQwMCIgY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKKyAgICB3aGls
ZSAod2ViVmlldy5wZGZIVURzLmFueU9iamVjdC5mcmFtZS5zaXplLndpZHRoICE9IDQwMCkKKyAg
ICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoKTsKKyAgICBjaGVja0ZyYW1l
KHdlYlZpZXcucGRmSFVEcy5hbnlPYmplY3QuZnJhbWUsIDEwLCAyOCwgNDAwLCAxNTApOworCisg
ICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAidmFyIGZyYW1lUmVmZXJlbmNlID0gcGRm
ZnJhbWU7IGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQocGRmZnJhbWUpIiBjb21wbGV0aW9uSGFu
ZGxlcjpuaWxdOworICAgIHdoaWxlICh3ZWJWaWV3LnBkZkhVRHMuY291bnQpCisgICAgICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisgICAgW3dlYlZpZXcgZXZhbHVhdGVK
YXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmcmFtZVJlZmVyZW5jZSkiIGNv
bXBsZXRpb25IYW5kbGVyOm5pbF07CisgICAgd2hpbGUgKCF3ZWJWaWV3LnBkZkhVRHMuY291bnQp
CisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisgICAgRVhQRUNU
X0VRKHdlYlZpZXcucGRmSFVEcy5jb3VudCwgMXUpOworICAgIGNoZWNrRnJhbWUod2ViVmlldy5w
ZGZIVURzLmFueU9iamVjdC5mcmFtZSwgMCwgMCwgMCwgMCk7CisgICAgd2hpbGUgKHdlYlZpZXcu
cGRmSFVEcy5hbnlPYmplY3QuZnJhbWUuc2l6ZS53aWR0aCAhPSA0MDApCisgICAgICAgIFRlc3RX
ZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisgICAgRVhQRUNUX0VRKHdlYlZpZXcucGRm
SFVEcy5jb3VudCwgMXUpOworICAgIGNoZWNrRnJhbWUod2ViVmlldy5wZGZIVURzLmFueU9iamVj
dC5mcmFtZSwgMTAsIDI4LCA0MDAsIDE1MCk7CisKKyAgICB3ZWJWaWV3LnBhZ2Vab29tID0gMS40
OworICAgIHdoaWxlICh3ZWJWaWV3LnBkZkhVRHMuYW55T2JqZWN0LmZyYW1lLnNpemUud2lkdGgg
IT0gNTYwKQorICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgpOworICAg
IEVYUEVDVF9FUSh3ZWJWaWV3LnBkZkhVRHMuY291bnQsIDF1KTsKKyAgICBjaGVja0ZyYW1lKHdl
YlZpZXcucGRmSFVEcy5hbnlPYmplY3QuZnJhbWUsIDE0LCA0MCwgNTYwLCAyMTApOworfQorCitU
RVNUKFBERkhVRCwgTmVzdGVkSUZyYW1lcykKK3sKKyAgICBUZXN0VVJMU2NoZW1lSGFuZGxlciAq
aGFuZGxlciA9IFtbVGVzdFVSTFNjaGVtZUhhbmRsZXIgbmV3XSBhdXRvcmVsZWFzZV07CisgICAg
aGFuZGxlci5zdGFydFVSTFNjaGVtZVRhc2tIYW5kbGVyID0gXihXS1dlYlZpZXcgKiwgaWQ8V0tV
UkxTY2hlbWVUYXNrPiB0YXNrKSB7CisgICAgICAgIE5TVVJMUmVzcG9uc2UgKmh0bWxSZXNwb25z
ZSA9IFtbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVxdWVzdC5VUkwg
TUlNRVR5cGU6QCJ0ZXh0L2h0bWwiIGV4cGVjdGVkQ29udGVudExlbmd0aDowIHRleHRFbmNvZGlu
Z05hbWU6bmlsXSBhdXRvcmVsZWFzZV07CisgICAgICAgIGlmIChbdGFzay5yZXF1ZXN0LlVSTC5w
YXRoIGlzRXF1YWxUb1N0cmluZzpAIi9tYWluLmh0bWwiXSkgeworICAgICAgICAgICAgY29uc3Qg
Y2hhciogaHRtbCA9ICI8aWZyYW1lIHNyYz0nZnJhbWUuaHRtbCcgaWQ9J3BhcmVudGZyYW1lJz48
L2lmcmFtZT4iOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3BvbnNlOmh0bWxSZXNw
b25zZV07CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpbTlNEYXRhIGRhdGFXaXRo
Qnl0ZXM6aHRtbCBsZW5ndGg6c3RybGVuKGh0bWwpXV07CisgICAgICAgICAgICBbdGFzayBkaWRG
aW5pc2hdOworICAgICAgICB9IGVsc2UgaWYgKFt0YXNrLnJlcXVlc3QuVVJMLnBhdGggaXNFcXVh
bFRvU3RyaW5nOkAiL2ZyYW1lLmh0bWwiXSkgeworICAgICAgICAgICAgY29uc3QgY2hhciogaHRt
bCA9ICI8aWZyYW1lIHNyYz0ndGVzdC5wZGYnPjwvaWZyYW1lPiI7CisgICAgICAgICAgICBbdGFz
ayBkaWRSZWNlaXZlUmVzcG9uc2U6aHRtbFJlc3BvbnNlXTsKKyAgICAgICAgICAgIFt0YXNrIGRp
ZFJlY2VpdmVEYXRhOltOU0RhdGEgZGF0YVdpdGhCeXRlczpodG1sIGxlbmd0aDpzdHJsZW4oaHRt
bCldXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZEZpbmlzaF07CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBFWFBFQ1RfV0tfU1RSRVEodGFzay5yZXF1ZXN0LlVSTC5wYXRoLCAiL3Rlc3Qu
cGRmIik7CisgICAgICAgICAgICBOU0RhdGEgKmRhdGEgPSBwZGZEYXRhKCk7CisgICAgICAgICAg
ICBOU1VSTFJlc3BvbnNlICpyZXNwb25zZSA9IFtbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRX
aXRoVVJMOnRhc2sucmVxdWVzdC5VUkwgTUlNRVR5cGU6QCJhcHBsaWNhdGlvbi9wZGYiIGV4cGVj
dGVkQ29udGVudExlbmd0aDpkYXRhLmxlbmd0aCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0gYXV0b3Jl
bGVhc2VdOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3BvbnNlOnJlc3BvbnNlXTsK
KyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVEYXRhOmRhdGFdOworICAgICAgICAgICAgW3Rh
c2sgZGlkRmluaXNoXTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBXS1dlYlZpZXdDb25maWd1
cmF0aW9uICpjb25maWd1cmF0aW9uID0gW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIG5ld10gYXV0
b3JlbGVhc2VdOworICAgIFtjb25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6aGFuZGxl
ciBmb3JVUkxTY2hlbWU6QCJ0ZXN0Il07CisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldyA9IFtb
W1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAs
IDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07CisgICAgW3dl
YlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJM
V2l0aFN0cmluZzpAInRlc3Q6Ly8vbWFpbi5odG1sIl1dXTsKKyAgICBFWFBFQ1RfRVEod2ViVmll
dy5wZGZIVURzLmNvdW50LCAwdSk7CisgICAgW3dlYlZpZXcgX3Rlc3Rfd2FpdEZvckRpZEZpbmlz
aE5hdmlnYXRpb25dOworICAgIEVYUEVDVF9FUSh3ZWJWaWV3LnBkZkhVRHMuY291bnQsIDF1KTsK
KyAgICBjaGVja0ZyYW1lKHdlYlZpZXcucGRmSFVEcy5hbnlPYmplY3QuZnJhbWUsIDIwLCAyMCwg
MzAwLCAxNTApOworICAgIAorICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAImRvY3Vt
ZW50LmJvZHkucmVtb3ZlQ2hpbGQocGFyZW50ZnJhbWUpIiBjb21wbGV0aW9uSGFuZGxlcjpuaWxd
OworICAgIHdoaWxlICh3ZWJWaWV3LnBkZkhVRHMuY291bnQpCisgICAgICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7Cit9CisKK1RFU1QoUERGSFVELCBJRnJhbWUzRFRyYW5z
Zm9ybSkKK3sKKyAgICBUZXN0VVJMU2NoZW1lSGFuZGxlciAqaGFuZGxlciA9IFtbVGVzdFVSTFNj
aGVtZUhhbmRsZXIgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgaGFuZGxlci5zdGFydFVSTFNjaGVt
ZVRhc2tIYW5kbGVyID0gXihXS1dlYlZpZXcgKiwgaWQ8V0tVUkxTY2hlbWVUYXNrPiB0YXNrKSB7
CisgICAgICAgIE5TVVJMUmVzcG9uc2UgKmh0bWxSZXNwb25zZSA9IFtbW05TVVJMUmVzcG9uc2Ug
YWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVxdWVzdC5VUkwgTUlNRVR5cGU6QCJ0ZXh0L2h0bWwi
IGV4cGVjdGVkQ29udGVudExlbmd0aDowIHRleHRFbmNvZGluZ05hbWU6bmlsXSBhdXRvcmVsZWFz
ZV07CisgICAgICAgIGlmIChbdGFzay5yZXF1ZXN0LlVSTC5wYXRoIGlzRXF1YWxUb1N0cmluZzpA
Ii9tYWluLmh0bWwiXSkgeworICAgICAgICAgICAgY29uc3QgY2hhciogaHRtbCA9ICI8aWZyYW1l
IHNyYz0ndGVzdC5wZGYnIGhlaWdodD01MDAgd2lkdGg9NTAwIHN0eWxlPSd0cmFuc2Zvcm06cm90
YXRlWSgyMzVkZWcpOyc+PC9pZnJhbWU+IjsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVS
ZXNwb25zZTpodG1sUmVzcG9uc2VdOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZURhdGE6
W05TRGF0YSBkYXRhV2l0aEJ5dGVzOmh0bWwgbGVuZ3RoOnN0cmxlbihodG1sKV1dOworICAgICAg
ICAgICAgW3Rhc2sgZGlkRmluaXNoXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEVY
UEVDVF9XS19TVFJFUSh0YXNrLnJlcXVlc3QuVVJMLnBhdGgsICIvdGVzdC5wZGYiKTsKKyAgICAg
ICAgICAgIE5TRGF0YSAqZGF0YSA9IHBkZkRhdGEoKTsKKyAgICAgICAgICAgIE5TVVJMUmVzcG9u
c2UgKnJlc3BvbnNlID0gW1tbTlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGFzay5y
ZXF1ZXN0LlVSTCBNSU1FVHlwZTpAImFwcGxpY2F0aW9uL3BkZiIgZXhwZWN0ZWRDb250ZW50TGVu
Z3RoOmRhdGEubGVuZ3RoIHRleHRFbmNvZGluZ05hbWU6bmlsXSBhdXRvcmVsZWFzZV07CisgICAg
ICAgICAgICBbdGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6cmVzcG9uc2VdOworICAgICAgICAgICAg
W3Rhc2sgZGlkUmVjZWl2ZURhdGE6ZGF0YV07CisgICAgICAgICAgICBbdGFzayBkaWRGaW5pc2hd
OworICAgICAgICB9CisgICAgfTsKKworICAgIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKmNvbmZp
Z3VyYXRpb24gPSBbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07Cisg
ICAgW2NvbmZpZ3VyYXRpb24gc2V0VVJMU2NoZW1lSGFuZGxlcjpoYW5kbGVyIGZvclVSTFNjaGVt
ZTpAInRlc3QiXTsKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3ID0gW1tbVGVzdFdLV2ViVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1
cmF0aW9uOmNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldyBsb2FkUmVx
dWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAi
dGVzdDovLy9tYWluLmh0bWwiXV1dOworICAgIEVYUEVDVF9FUSh3ZWJWaWV3LnBkZkhVRHMuY291
bnQsIDB1KTsKKyAgICBbd2ViVmlldyBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07
CisgICAgRVhQRUNUX0VRKHdlYlZpZXcucGRmSFVEcy5jb3VudCwgMXUpOworICAgIGNoZWNrRnJh
bWUod2ViVmlldy5wZGZIVURzLmFueU9iamVjdC5mcmFtZSwgNDAzLCAxMCwgNTAwLCA1MDApOwor
fQorCitURVNUKFBERkhVRCwgTXVsdGlwbGVJRnJhbWVzKQoreworICAgIFRlc3RVUkxTY2hlbWVI
YW5kbGVyICpoYW5kbGVyID0gW1tUZXN0VVJMU2NoZW1lSGFuZGxlciBuZXddIGF1dG9yZWxlYXNl
XTsKKyAgICBoYW5kbGVyLnN0YXJ0VVJMU2NoZW1lVGFza0hhbmRsZXIgPSBeKFdLV2ViVmlldyAq
LCBpZDxXS1VSTFNjaGVtZVRhc2s+IHRhc2spIHsKKyAgICAgICAgTlNVUkxSZXNwb25zZSAqaHRt
bFJlc3BvbnNlID0gW1tbTlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGFzay5yZXF1
ZXN0LlVSTCBNSU1FVHlwZTpAInRleHQvaHRtbCIgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOjAgdGV4
dEVuY29kaW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgaWYgKFt0YXNrLnJlcXVl
c3QuVVJMLnBhdGggaXNFcXVhbFRvU3RyaW5nOkAiL21haW4uaHRtbCJdKSB7CisgICAgICAgICAg
ICBjb25zdCBjaGFyKiBodG1sID0gIjxpZnJhbWUgc3JjPSd0ZXN0LnBkZicgaGVpZ2h0PTEwMCB3
aWR0aD0xNTA+PC9pZnJhbWU+PGlmcmFtZSBzcmM9J3Rlc3QucGRmJyBoZWlnaHQ9MTIzIHdpZHRo
PTEzND48L2lmcmFtZT4iOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3BvbnNlOmh0
bWxSZXNwb25zZV07CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpbTlNEYXRhIGRh
dGFXaXRoQnl0ZXM6aHRtbCBsZW5ndGg6c3RybGVuKGh0bWwpXV07CisgICAgICAgICAgICBbdGFz
ayBkaWRGaW5pc2hdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgRVhQRUNUX1dLX1NU
UkVRKHRhc2sucmVxdWVzdC5VUkwucGF0aCwgIi90ZXN0LnBkZiIpOworICAgICAgICAgICAgTlNE
YXRhICpkYXRhID0gcGRmRGF0YSgpOworICAgICAgICAgICAgTlNVUkxSZXNwb25zZSAqcmVzcG9u
c2UgPSBbW1tOU1VSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0YXNrLnJlcXVlc3QuVVJM
IE1JTUVUeXBlOkAiYXBwbGljYXRpb24vcGRmIiBleHBlY3RlZENvbnRlbnRMZW5ndGg6ZGF0YS5s
ZW5ndGggdGV4dEVuY29kaW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgICAgIFt0
YXNrIGRpZFJlY2VpdmVSZXNwb25zZTpyZXNwb25zZV07CisgICAgICAgICAgICBbdGFzayBkaWRS
ZWNlaXZlRGF0YTpkYXRhXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZEZpbmlzaF07CisgICAgICAg
IH0KKyAgICB9OworCisgICAgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9
IFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBbY29uZmln
dXJhdGlvbiBzZXRVUkxTY2hlbWVIYW5kbGVyOmhhbmRsZXIgZm9yVVJMU2NoZW1lOkAidGVzdCJd
OworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcgPSBbW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29u
ZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VS
TFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJ0ZXN0Oi8vL21h
aW4uaHRtbCJdXV07CisgICAgRVhQRUNUX0VRKHdlYlZpZXcucGRmSFVEcy5jb3VudCwgMHUpOwor
ICAgIFt3ZWJWaWV3IF90ZXN0X3dhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKKyAgICBFWFBF
Q1RfRVEod2ViVmlldy5wZGZIVURzLmNvdW50LCAydSk7CisgICAgYm9vbCBoYWRMZWZ0RnJhbWUg
PSBmYWxzZTsKKyAgICBib29sIGhhZFJpZ2h0RnJhbWUgPSBmYWxzZTsKKyAgICBmb3IgKE5TVmll
dyAqaHVkIGluIHdlYlZpZXcucGRmSFVEcykgeworICAgICAgICBpZiAoaHVkLmZyYW1lLm9yaWdp
bi54ID09IDEwKSB7CisgICAgICAgICAgICBjaGVja0ZyYW1lKGh1ZC5mcmFtZSwgMTAsIDMzLCAx
NTAsIDEwMCk7CisgICAgICAgICAgICBoYWRMZWZ0RnJhbWUgPSB0cnVlOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgY2hlY2tGcmFtZShodWQuZnJhbWUsIDE2NCwgMTAsIDEzNCwgMTIz
KTsKKyAgICAgICAgICAgIGhhZFJpZ2h0RnJhbWUgPSB0cnVlOworICAgICAgICB9CisgICAgfQor
ICAgIEVYUEVDVF9UUlVFKGhhZExlZnRGcmFtZSk7CisgICAgRVhQRUNUX1RSVUUoaGFkUmlnaHRG
cmFtZSk7Cit9CisKKyNlbmRpZgpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0
VUlEZWxlZ2F0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVz
dFVJRGVsZWdhdGUuaAkocmV2aXNpb24gMjY2MDgzKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9j
b2NvYS9UZXN0VUlEZWxlZ2F0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAj
aWYgUExBVEZPUk0oTUFDKQogQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIHZvaWQgKF5nZXRD
b250ZXh0TWVudUZyb21Qcm9wb3NlZE1lbnUpKE5TTWVudSAqLCBfV0tDb250ZXh0TWVudUVsZW1l
bnRJbmZvICosIGlkIDxOU1NlY3VyZUNvZGluZz4sIHZvaWQgKF4pKE5TTWVudSAqKSk7CiAjZW5k
aWYKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSB2b2lkIChec2F2ZURhdGFUb0ZpbGUpKFdL
V2ViVmlldyAqLCBOU0RhdGEgKiwgTlNTdHJpbmcgKiwgTlNTdHJpbmcgKiwgTlNVUkwgKik7CiAK
IC0gKE5TU3RyaW5nICopd2FpdEZvckFsZXJ0OwogCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L2NvY29hL1Rlc3RVSURlbGVnYXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvY29jb2EvVGVzdFVJRGVsZWdhdGUubW0JKHJldmlzaW9uIDI2NjA4MykKKysrIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvY29jb2EvVGVzdFVJRGVsZWdhdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTUw
LDYgKzUwLDEyIEBAIC0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZ2UKIH0K
ICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKKy0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAq
KXdlYlZpZXcgc2F2ZURhdGFUb0ZpbGU6KE5TRGF0YSAqKWRhdGEgc3VnZ2VzdGVkRmlsZW5hbWU6
KE5TU3RyaW5nICopc3VnZ2VzdGVkRmlsZW5hbWUgbWltZVR5cGU6KE5TU3RyaW5nICopbWltZVR5
cGUgb3JpZ2luYXRpbmdVUkw6KE5TVVJMICopdXJsCit7CisgICAgaWYgKF9zYXZlRGF0YVRvRmls
ZSkKKyAgICAgICAgX3NhdmVEYXRhVG9GaWxlKHdlYlZpZXcsIGRhdGEsIHN1Z2dlc3RlZEZpbGVu
YW1lLCBtaW1lVHlwZSwgdXJsKTsKK30KKwogLSAoTlNTdHJpbmcgKil3YWl0Rm9yQWxlcnQKIHsK
ICAgICBFWFBFQ1RfRkFMU0Uoc2VsZi5ydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdl
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407136</attachid>
            <date>2020-08-24 14:43:55 -0700</date>
            <delta_ts>2020-08-24 15:09:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215780-20200824144354.patch</filename>
            <type>text/plain</type>
            <size>80033</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjYwODMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA4LTI0ICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBQREYgaGVhZHMtdXAgZGlz
cGxheSB0byBVSSBwcm9jZXNzIG9uIG1hY09TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU3ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU4NzE1
ODQ3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
d3RmL1BsYXRmb3JtSGF2ZS5oOgorCiAyMDIwLTA4LTIyICBZdXN1a2UgU3V6dWtpICA8eXN1enVr
aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gQWRkIEludGwuU2VnbWVudGVyCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZUNvY29hLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvUGxhdGZvcm1FbmFibGVDb2NvYS5oCShyZXZpc2lvbiAyNjYwODMpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZUNvY29hLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw2
ICsyMjgsMTAgQEAKICNkZWZpbmUgRU5BQkxFX0dQVV9EUklWRVJfUFJFV0FSTUlORyAxCiAjZW5k
aWYKIAorI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJF
RCA+PSAxMTAwMDAKKyNkZWZpbmUgRU5BQkxFX1VJX1BST0NFU1NfUERGX0hVRCAxCisjZW5kaWYK
KwogI2lmICFkZWZpbmVkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKQogI2RlZmluZSBFTkFCTEVf
SU5ERVhFRF9EQVRBQkFTRSAxCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjYwODMp
CisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk2
IEBACisyMDIwLTA4LTI0ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgTW92ZSBQREYgaGVhZHMtdXAgZGlzcGxheSB0byBVSSBwcm9jZXNzIG9u
IG1hY09TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTU3ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU4NzE1ODQ3PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaGFzIG1hbnkgYmVuZWZpdHMg
aW5jbHVkaW5nIHRoZSBvbmUgaW4gdGhlIHJhZGFyLCB0ZXN0YWJpbGl0eSwgYW5kIG1vdmluZyBX
ZWJLaXQtc3BlY2lmaWMgY29kZSBmcm9tIFBERktpdCB0byBXZWJLaXQuCisKKyAgICAgICAgTm93
IHRoYXQgdGhlIEhVRCBpcyBkaXNwbGF5ZWQgaW4gdGhlIFVJIHByb2Nlc3MgaW5zdGVhZCBvZiBp
biB0aGUgd2ViIGNvbnRlbnQsIHpvb21pbmcgaW4ga2VlcHMgdGhlIEhVRCB0aGUgc2FtZSBzaXpl
LgorICAgICAgICBBIDNkLXRyYW5zZm9ybWVkIGlmcmFtZSB3aXRoIGEgUERGIGluIGl0IG5vdyBz
aG93cyB0aGUgSFVEIGluIHRoZSBwbGFjZSB5b3UgY2FuIGNsaWNrIG9uIGl0LCBpbnN0ZWFkIG9m
IGluIHRoZSB0cmFuc2Zvcm1lZCBQREYuCisgICAgICAgIEFsc28sIG1vdmluZyB0aGUgbW91c2Ug
dG8gdGhlIEhVRCB3aXRoaW4gdGhlIGZpcnN0IDMgc2Vjb25kcyBwcmV2ZW50cyBpdCBmcm9tIGhp
ZGluZywgd2hpY2ggaXQgZG9lcyB3aGVuIHRoZSBtb3VzZSBsZWF2ZXMgdGhlIEhVRC4KKyAgICAg
ICAgVGhlIHJlc3Qgb2YgdGhlIGJlaGF2aW9yIEkgdGhpbmsgc2hvdWxkIGJlIHRoZSBzYW1lLiAg
TW9zdCB1c2VycyBzaG91bGQgbm90IG5vdGljZSBhbnkgZGlmZmVyZW5jZS4KKworICAgICAgICBG
dW5jdGlvbmFsaXR5IGNvdmVyZWQgYnkgQVBJIHRlc3RzLCB0aGUgZmlyc3QgdGVzdHMgZm9yIFBE
RiBjb250ZW50IGludGVyYWN0aW9uIQorCisgICAgICAgICogU2NyaXB0cy93ZWJraXQvbWVzc2Fn
ZXMucHk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToKKyAgICAgICAgKC1bV0tW
aWV3IF9jcmVhdGVQREZIVUQ6cmVjdDpdKToKKyAgICAgICAgKC1bV0tWaWV3IF9wZGZIVUQ6Y2hh
bmdlZExvY2F0aW9uOl0pOgorICAgICAgICAoLVtXS1ZpZXcgX3JlbW92ZVBERkhVRDpdKToKKyAg
ICAgICAgKC1bV0tWaWV3IF9yZW1vdmVBbGxQREZIVURzXSk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9tYWMvV0tXZWJWaWV3TWFjLm1tOgorICAgICAgICAoLVtXS1dlYlZpZXcgbW91c2VNb3Zl
ZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IG1vdXNlRG93bjpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IG1vdXNlVXA6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY3JlYXRlUERGSFVEOnJl
Y3Q6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcGRmSFVEOmNoYW5nZWRMb2NhdGlvbjpdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZW1vdmVQREZIVUQ6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfcmVtb3ZlQWxsUERGSFVEc10pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dL
V2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nTWFjLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9t
YWMvV0tXZWJWaWV3VGVzdGluZ01hYy5tbToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHBkZkhVRHNd
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW06CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJ
bXBsOjpjcmVhdGVQREZIVUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dXBkYXRl
UERGSFVETG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cmVtb3ZlUERG
SFVEKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnJlbW92ZUFsbFBERkhVRHMpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0
TG9hZEZvckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpwcm9jZXNzRGlk
VGVybWluYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nl
c3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpvcGVuUERGRnJvbVRlbXBv
cmFyeUZvbGRlcldpdGhOYXRpdmVBcHBsaWNhdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMv
UGFnZUNsaWVudEltcGxNYWMubW06CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpj
cmVhdGVQREZIVUQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6dXBkYXRlUERG
SFVETG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6cmVtb3ZlUERG
SFVEKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnJlbW92ZUFsbFBERkhVRHMp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OnNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRo
TmF0aXZlQXBwbGljYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNyZWF0
ZVBERkhVRCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVtb3ZlUERGSFVEKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojp1cGRhdGVQREZIVURMb2NhdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGRmWm9vbUluKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpwZGZab29tT3V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpwZGZTYXZlVG9QREYpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBkZk9w
ZW5XaXRoUHJldmlldyk6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZMYXllckNvbnRyb2xsZXJT
UEkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tOgorICAgICAgICAoLVtX
S1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlIG9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb25dKToK
KyAgICAgICAgKC1bV0tQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZSBzYXZlVG9QREZdKToKKyAg
ICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpQREZQbHVnaW4pOgorICAgICAgICAoV2ViS2l0OjpQ
REZQbHVnaW46On5QREZQbHVnaW4pOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmZyYW1l
Rm9ySFVEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpjYWxjdWxhdGVTaXpl
cyk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6Y29udmVydEZyb21QREZWaWV3VG9Sb290
VmlldyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6dmlzaWJpbGl0eURpZENo
YW5nZSk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6em9vbUluKToKKyAgICAgICAgKFdl
YktpdDo6UERGUGx1Z2luOjp6b29tT3V0KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpz
YXZlKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpvcGVuV2l0aFByZXZpZXcpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFn
ZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6em9vbVBERkluKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6em9vbVBERk91dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6
OnNhdmVQREYpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpvcGVuUERGV2l0aFByZXZpZXcp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjcmVhdGVQREZIVUQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjp1cGRhdGVQREZIVURMb2NhdGlvbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OnJlbW92ZVBERkhVRCk6CisKIDIwMjAtMDgtMjQgIEFkaXR5YSBLZWVydGhpICA8YWtl
ZXJ0aGlAYXBwbGUuY29tPgogCiAgICAgICAgIFttYWNPU10gU2hvdyBwaWNrZXIgZm9yIGRhdGUg
YW5kIGRhdGV0aW1lLWxvY2FsIGlucHV0IHR5cGVzCkluZGV4OiBTb3VyY2UvV2ViS2l0L1Njcmlw
dHMvd2Via2l0L21lc3NhZ2VzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2NyaXB0
cy93ZWJraXQvbWVzc2FnZXMucHkJKHJldmlzaW9uIDI2NjA4MykKKysrIFNvdXJjZS9XZWJLaXQv
U2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkJKHdvcmtpbmcgY29weSkKQEAgLTI0Myw2ICsyNDMs
NyBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlCiAgICAgICAgICdX
ZWJLaXQ6Ok1ETlNSZWdpc3RlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpNZWRpYVBs
YXllclByaXZhdGVSZW1vdGVJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6TWVkaWFSZWNv
cmRlcklkZW50aWZpZXInLAorICAgICAgICAnV2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVyJywK
ICAgICAgICAgJ1dlYktpdDo6UGxheWJhY2tTZXNzaW9uQ29udGV4dElkZW50aWZpZXInLAogICAg
ICAgICAnV2ViS2l0OjpQbHVnaW5Qcm9jZXNzVHlwZScsCiAgICAgICAgICdXZWJLaXQ6OlJlbW90
ZUF1ZGlvRGVzdGluYXRpb25JZGVudGlmaWVyJywKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1BhZ2VDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Q
YWdlQ2xpZW50LmgJKHJldmlzaW9uIDI2NjA4MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1BhZ2VDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBv
bmNlCiAKICNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCisjaW5jbHVkZSAiUERGUGx1Z2lu
SWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlLmgiCiAj
aW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSAiV2ViQ29sb3JQaWNrZXIuaCIK
QEAgLTI0Miw2ICsyNDMsMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsUHJv
dmlzaW9uYWxMb2FkRm9yTWFpbkZyYW1lKCkgeyB9OwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21t
aXRMb2FkRm9yTWFpbkZyYW1lKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgdXNlQ3VzdG9t
Q29udGVudFByb3ZpZGVyKSA9IDA7CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQor
ICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllciwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUERGSFVETG9j
YXRpb24oUERGUGx1Z2luSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQWxsUERGSFVEcygpID0gMDsKKyNlbmRpZgorICAgIAog
ICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSYpID0g
MDsKIAogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVSdW5PcGVuUGFuZWwoV2ViUGFnZVByb3h5Kiwg
V2ViRnJhbWVQcm94eSosIGNvbnN0IEZyYW1lSW5mb0RhdGEmLCBBUEk6Ok9wZW5QYW5lbFBhcmFt
ZXRlcnMqLCBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5KikgeyByZXR1cm4gZmFsc2U7
IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNp
b24gMjY2MDgzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDc3MiwxNSArNDc3MiwxNCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
ZGlkQ29tbWl0TG9hZEZvckZyYW1lCiAgICAgICAgICAgICBtX3BsdWdpblNjYWxlRmFjdG9yID0g
MTsKICAgICAgICAgICAgIG1fbWFpbkZyYW1lUGx1Z2luSGFuZGxlc1BhZ2VTY2FsZUdlc3R1cmUg
PSBmYWxzZTsKICAgICAgICAgfQotICAgIH0KLQogI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCi0g
ICAgaWYgKGZyYW1lLT5pc01haW5GcmFtZSgpKQogICAgICAgICByZXF1ZXN0UG9pbnRlclVubG9j
aygpOwogI2VuZGlmCi0KLSAgICBpZiAoZnJhbWUtPmlzTWFpbkZyYW1lKCkpCiAgICAgICAgIHBh
Z2VDbGllbnQoKS5zZXRNb3VzZUV2ZW50UG9saWN5KG1vdXNlRXZlbnRQb2xpY3kpOworI2lmIEVO
QUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgICAgIHBhZ2VDbGllbnQoKS5yZW1vdmVBbGxQ
REZIVURzKCk7CisjZW5kaWYKKyAgICB9CiAKICAgICBtX3BhZ2VMb2FkU3RhdGUuY29tbWl0Q2hh
bmdlcygpOwogICAgIGlmIChtX2xvYWRlckNsaWVudCkKQEAgLTc0NTEsNiArNzQ1MCw5IEBAIHZv
aWQgV2ViUGFnZVByb3h5Ojpwcm9jZXNzRGlkVGVybWluYXRlKFAKIAogICAgIHJlc2V0U3RhdGVB
ZnRlclByb2Nlc3NFeGl0ZWQocmVhc29uKTsKICAgICBzdG9wQWxsVVJMU2NoZW1lVGFza3MobV9w
cm9jZXNzLnB0cigpKTsKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIHBhZ2VD
bGllbnQoKS5yZW1vdmVBbGxQREZIVURzKCk7CisjZW5kaWYKIAogICAgIC8vIEZvciBicmluZ3Vw
IG9mIHByb2Nlc3Mgc3dhcHBpbmcsIE5hdmlnYXRpb25Td2FwIHRlcm1pbmF0aW9uIHdpbGwgbm90
IGdvIG91dCB0byBjbGllbnRzLgogICAgIC8vIElmIGl0IGRvZXMgKmR1cmluZyogcHJvY2VzcyBz
d2FwcGluZywgYW5kIHRoZSBjbGllbnQgdHJpZ2dlcnMgYSByZWxvYWQsIHRoYXQgY2F1c2VzIGJp
emFycmUgV2ViS2l0IHJlLWVudHJ5LgpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmgJKHJldmlzaW9uIDI2NjA4MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAi
TGF5ZXJUcmVlQ29udGV4dC5oIgogI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKICNpbmNsdWRl
ICJOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5oIgorI2luY2x1ZGUg
IlBERlBsdWdJbklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJQYWdlTG9hZFN0YXRlLmgiCiAjaW5j
bHVkZSAiUGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJQb2xpY3lEZWNpc2lv
bi5oIgpAQCAtMTMxMSwxMCArMTMxMiwxMiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNhdmVEYXRh
VG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIoU3RyaW5nJiYgc3VnZ2VzdGVkRmlsZW5hbWUsIFN0cmlu
ZyYmIG1pbWVUeXBlLCBVUkwmJiBvcmlnaW5hdGluZ1VSTCwgQVBJOjpEYXRhJik7CiAgICAgdm9p
ZCBzYXZlUERGVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIoU3RyaW5nJiYgc3VnZ2VzdGVkRmlsZW5h
bWUsIFVSTCYmIG9yaWdpbmF0aW5nVVJMLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKTsKLSNp
ZiBQTEFURk9STShDT0NPQSkKKyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKICAgICB2b2lkIHNh
dmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oY29uc3Qg
U3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgRnJhbWVJbmZvRGF0YSYmLCBjb25zdCBJUEM6OkRh
dGFSZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmIHBkZlVVSUQpOworI2lmICFFTkFCTEUoVUlfUFJP
Q0VTU19QREZfSFVEKQogICAgIHZvaWQgb3BlblBERkZyb21UZW1wb3JhcnlGb2xkZXJXaXRoTmF0
aXZlQXBwbGljYXRpb24oRnJhbWVJbmZvRGF0YSYmLCBjb25zdCBTdHJpbmcmIHBkZlVVSUQpOwog
I2VuZGlmCisjZW5kaWYKIAogI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQogICAgIHZvaWQgc2hv
d1BERkNvbnRleHRNZW51KGNvbnN0IFdlYktpdDo6UERGQ29udGV4dE1lbnUmLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKE9wdGlvbmFsPGludDMyX3Q+JiYpPiYmKTsKQEAgLTE4MDYsNiArMTgwOSwx
NiBAQCBwdWJsaWM6CiAgICAgYm9vbCBjYW5Vc2VDcmVkZW50aWFsU3RvcmFnZSgpIHsgcmV0dXJu
IG1fY2FuVXNlQ3JlZGVudGlhbFN0b3JhZ2U7IH0KICAgICB2b2lkIHNldENhblVzZUNyZWRlbnRp
YWxTdG9yYWdlKGJvb2wpOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICB2
b2lkIGNyZWF0ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0Jik7CisgICAgdm9pZCB1cGRhdGVQREZIVURMb2NhdGlvbihQREZQbHVnaW5JZGVudGlmaWVy
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCByZW1vdmVQREZIVUQoUERGUGx1
Z2luSWRlbnRpZmllcik7CisgICAgdm9pZCBwZGZab29tSW4oUERGUGx1Z2luSWRlbnRpZmllcik7
CisgICAgdm9pZCBwZGZab29tT3V0KFBERlBsdWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgcGRm
U2F2ZVRvUERGKFBERlBsdWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgcGRmT3BlbldpdGhQcmV2
aWV3KFBERlBsdWdpbklkZW50aWZpZXIpOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgV2ViUGFn
ZVByb3h5KFBhZ2VDbGllbnQmLCBXZWJQcm9jZXNzUHJveHkmLCBSZWY8QVBJOjpQYWdlQ29uZmln
dXJhdGlvbj4mJik7CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlz
aW9uIDI2NjA4MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNz
YWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNDMzLDkgKzQzMyw4IEBAIG1lc3NhZ2VzIC0+IFdl
YlBhZ2VQcm94eSB7CiAgICAgU2F2ZVJlY2VudFNlYXJjaGVzKFN0cmluZyBuYW1lLCBWZWN0b3I8
V2ViQ29yZTo6UmVjZW50U2VhcmNoPiBzZWFyY2hJdGVtcykKICAgICBMb2FkUmVjZW50U2VhcmNo
ZXMoU3RyaW5nIG5hbWUpIC0+IChWZWN0b3I8V2ViQ29yZTo6UmVjZW50U2VhcmNoPiByZXN1bHQp
IFN5bmNocm9ub3VzCiAKKyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikgJiYgIUVOQUJMRShVSV9Q
Uk9DRVNTX1BERl9IVUQpCiAgICAgU2F2ZVBERlRvRmlsZUluRG93bmxvYWRzRm9sZGVyKFN0cmlu
ZyBzdWdnZXN0ZWRGaWxlbmFtZSwgVVJMIG9yaWdpbmF0aW5nVVJMLCBJUEM6OkRhdGFSZWZlcmVu
Y2UgZGF0YSkKLQotI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFNhdmVQREZUb1RlbXBvcmFyeUZv
bGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oU3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1l
LCBzdHJ1Y3QgV2ViS2l0OjpGcmFtZUluZm9EYXRhIHNvdXJjZUZyYW1lSW5mbywgSVBDOjpEYXRh
UmVmZXJlbmNlIGRhdGEsIFN0cmluZyBwZGZVVUlEKQogICAgIE9wZW5QREZGcm9tVGVtcG9yYXJ5
Rm9sZGVyV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKHN0cnVjdCBXZWJLaXQ6OkZyYW1lSW5mb0RhdGEg
c291cmNlRnJhbWVJbmZvLCBTdHJpbmcgcGRmVVVJRCkKICNlbmRpZgpAQCAtNTY2LDYgKzU2NSwx
MiBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIFNwZWVjaFN5bnRoZXNpc1Jlc3Vt
ZSgpIC0+ICgpIEFzeW5jCiAjZW5kaWYKIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQp
CisgICAgQ3JlYXRlUERGSFVEKFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVy
LCBXZWJDb3JlOjpJbnRSZWN0IGJvdW5kaW5nQm94KQorICAgIFVwZGF0ZVBERkhVRExvY2F0aW9u
KFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJDb3JlOjpJbnRSZWN0
IGJvdW5kaW5nQm94KQorICAgIFJlbW92ZVBERkhVRChXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZp
ZXIgaWRlbnRpZmllcikKKyNlbmRpZgorCiAgICAgQ29uZmlndXJlTG9nZ2luZ0NoYW5uZWwoU3Ry
aW5nIGNoYW5uZWxOYW1lLCBlbnVtOnVpbnQ4X3QgV1RGTG9nQ2hhbm5lbFN0YXRlIHN0YXRlLCBl
bnVtOnVpbnQ4X3QgV1RGTG9nTGV2ZWwgbGV2ZWwpCiAKICNpZiBQTEFURk9STShHVEspCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3
SW50ZXJuYWwuaAkocmV2aXNpb24gMjY2MDgzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDExICsy
MywxMSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbXBv
cnQgIldLV2ViVmlld1ByaXZhdGUuaCIKLQorI2ltcG9ydCAiUERGUGx1Z2luSWRlbnRpZmllci5o
IgogI2ltcG9ydCAiU2FtZURvY3VtZW50TmF2aWdhdGlvblR5cGUuaCIKICNpbXBvcnQgIldLU2hh
cmVTaGVldC5oIgogI2ltcG9ydCAiV0tXZWJWaWV3Q29uZmlndXJhdGlvbi5oIgorI2ltcG9ydCAi
V0tXZWJWaWV3UHJpdmF0ZS5oIgogI2ltcG9ydCAiX1dLQXR0YWNobWVudEludGVybmFsLmgiCiAj
aW1wb3J0ICJfV0tXZWJWaWV3UHJpbnRGb3JtYXR0ZXJJbnRlcm5hbC5oIgogI2ltcG9ydCA8d3Rm
L0NvbXBsZXRpb25IYW5kbGVyLmg+CkBAIC0xMzMsNyArMTMzLDcgQEAgY2xhc3MgVmlld0dlc3R1
cmVDb250cm9sbGVyOwogICAgIC8vIE9ubHkgdXNlZCB3aXRoIFVJLXNpZGUgY29tcG9zaXRpbmcu
CiAgICAgUmV0YWluUHRyPFdLU2Nyb2xsVmlldz4gX3Njcm9sbFZpZXc7CiAgICAgUmV0YWluUHRy
PFdLQ29udGVudFZpZXc+IF9jb250ZW50VmlldzsKLSNlbmRpZgorI2VuZGlmIC8vIFBMQVRGT1JN
KE1BQykKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgUmV0YWluUHRyPFdLU2Nyb2xs
Vmlldz4gX3Njcm9sbFZpZXc7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFj
L1dLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdQcml2YXRlRm9yVGVzdGluZ01hYy5oCShy
ZXZpc2lvbiAyNjYwODMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2Vi
Vmlld1ByaXZhdGVGb3JUZXN0aW5nTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcg
QEAgQGludGVyZmFjZSBXS1dlYlZpZXcgKFdLVGVzdGluZ01hYykKIAogLSAodm9pZClfc2V0SGVh
ZGVyQmFubmVySGVpZ2h0OihpbnQpaGVpZ2h0OwogLSAodm9pZClfc2V0Rm9vdGVyQmFubmVySGVp
Z2h0OihpbnQpaGVpZ2h0OworLSAoTlNTZXQ8TlNWaWV3ICo+ICopX3BkZkhVRHM7CiAKIEBlbmQK
IApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdUZXN0aW5n
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tX
ZWJWaWV3VGVzdGluZ01hYy5tbQkocmV2aXNpb24gMjY2MDgzKQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdUZXN0aW5nTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDMsNiArMTAzLDE1IEBAIC0gKHZvaWQpX3NldEZvb3RlckJhbm5lckhlaWdodDooaW50KWhl
aWcKICAgICBfcGFnZS0+c2V0Rm9vdGVyQmFubmVySGVpZ2h0Rm9yVGVzdGluZyhoZWlnaHQpOwog
fQogCistIChOU1NldDxOU1ZpZXcgKj4gKilfcGRmSFVEcworeworI2lmIEVOQUJMRShVSV9QUk9D
RVNTX1BERl9IVUQpCisgICAgcmV0dXJuIF9pbXBsLT5wZGZIVURzKCk7CisjZWxzZQorICAgIHJl
dHVybiBuaWw7CisjZW5kaWYKK30KKwogLSAoTlNNZW51ICopX2FjdGl2ZU1lbnUKIHsKICAgICAv
LyBGSVhNRTogT25seSB0aGUgRE9NIHBhc3RlIGFjY2VzcyBtZW51IGlzIHN1cHBvcnRlZCBmb3Ig
bm93LiBJbiB0aGUgZnV0dXJlLCBpdCBjb3VsZCBiZQpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5oCShyZXZpc2lvbiAyNjYwODMpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw2ICsyNyw3IEBACiAKICNpZiBQTEFURk9STShNQUMpCiAKKyNpbmNsdWRlICJQREZQbHVnaW5J
ZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiUGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlLmgiCiAj
aW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSAiV0tMYXlvdXRNb2RlLmgiCkBA
IC03Niw2ICs3NywxMCBAQCBPQkpDX0NMQVNTIFdLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXI7
CiBPQkpDX0NMQVNTIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyOwogI2VuZGlmIC8vIEhBVkUo
VE9VQ0hfQkFSKQogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKK09CSkNfQ0xBU1Mg
V0tQREZIVURWaWV3OworI2VuZGlmCisKIG5hbWVzcGFjZSBBUEkgewogY2xhc3MgSGl0VGVzdFJl
c3VsdDsKIGNsYXNzIE9iamVjdDsKQEAgLTE5MCw2ICsxOTUsMTQgQEAgcHVibGljOgogICAgIHZv
aWQgdmlld1dpbGxTdGFydExpdmVSZXNpemUoKTsKICAgICB2b2lkIHZpZXdEaWRFbmRMaXZlUmVz
aXplKCk7CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIHZvaWQgY3JlYXRl
UERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAg
ICB2b2lkIHVwZGF0ZVBERkhVRExvY2F0aW9uKFBERlBsdWdpbklkZW50aWZpZXIsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIHJlbW92ZVBERkhVRChQREZQbHVnaW5JZGVudGlm
aWVyKTsKKyAgICB2b2lkIHJlbW92ZUFsbFBERkhVRHMoKTsKKyAgICBOU1NldCAqcGRmSFVEcygp
OworI2VuZGlmCisKICAgICB2b2lkIHJlbmV3R1N0YXRlKCk7CiAgICAgdm9pZCBzZXRGcmFtZVNp
emUoQ0dTaXplKTsKICAgICB2b2lkIGRpc2FibGVGcmFtZVNpemVVcGRhdGVzKCk7CkBAIC03Mjks
NyArNzQyLDExIEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgIFJl
dGFpblB0cjxXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyPiBtX2Z1bGxTY3JlZW5XaW5kb3dD
b250cm9sbGVyOwogI2VuZGlmCi0gICAgCisKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVE
KQorICAgIEhhc2hNYXA8V2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVyLCBSZXRhaW5QdHI8V0tQ
REZIVURWaWV3Pj4gX3BkZkhVRFZpZXdzOworI2VuZGlmCisKICAgICBSZXRhaW5QdHI8V0tTaGFy
ZVNoZWV0PiBfc2hhcmVTaGVldDsKIAogICAgIFJldGFpblB0cjxXS1dpbmRvd1Zpc2liaWxpdHlP
YnNlcnZlcj4gbV93aW5kb3dWaXNpYmlsaXR5T2JzZXJ2ZXI7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQkocmV2aXNpb24gMjY2MDgzKQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTYyLDYgKzYyLDcgQEAKICNpbXBvcnQgIldLRXJyb3JJbnRlcm5hbC5oIgogI2ltcG9y
dCAiV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5oIgogI2ltcG9ydCAiV0tJbW1lZGlhdGVB
Y3Rpb25Db250cm9sbGVyLmgiCisjaW1wb3J0ICJXS1BERkhVRFZpZXcuaCIKICNpbXBvcnQgIldL
UHJpbnRpbmdWaWV3LmgiCiAjaW1wb3J0ICJXS1NhZmVCcm93c2luZ1dhcm5pbmcuaCIKICNpbXBv
cnQgIldLU2hhcmVTaGVldC5oIgpAQCAtMTcxOCw2ICsxNzE5LDQ1IEBAIHZvaWQgV2ViVmlld0lt
cGw6OnZpZXdEaWRFbmRMaXZlUmVzaXplKCkKICAgICBbbV9sYXlvdXRTdHJhdGVneSBkaWRFbmRM
aXZlUmVzaXplXTsKIH0KIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKK3ZvaWQg
V2ViVmlld0ltcGw6OmNyZWF0ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCit7CisgICAgcmVtb3ZlUERGSFVEKGlkZW50
aWZpZXIpOworICAgIGF1dG8gaHVkID0gYWRvcHROUyhbW1dLUERGSFVEVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpyZWN0IHBsdWdpbklkZW50aWZpZXI6aWRlbnRpZmllciBwYWdlOm1fcGFnZS5n
ZXQoKV0pOworICAgIFttX3ZpZXcgYWRkU3VidmlldzpodWQuZ2V0KCldOworICAgIF9wZGZIVURW
aWV3cy5hZGQoaWRlbnRpZmllciwgV1RGTW92ZShodWQpKTsKK30KKwordm9pZCBXZWJWaWV3SW1w
bDo6dXBkYXRlUERGSFVETG9jYXRpb24oUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChhdXRvIGh1ZCA9IF9wZGZI
VURWaWV3cy5nZXQoaWRlbnRpZmllcikpCisgICAgICAgIFtodWQgc2V0RnJhbWU6cmVjdF07Cit9
CisKK3ZvaWQgV2ViVmlld0ltcGw6OnJlbW92ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyIGlk
ZW50aWZpZXIpCit7CisgICAgaWYgKGF1dG8gaHVkID0gX3BkZkhVRFZpZXdzLnRha2UoaWRlbnRp
ZmllcikpCisgICAgICAgIFtodWQgcmVtb3ZlRnJvbVN1cGVydmlld107Cit9CisKK3ZvaWQgV2Vi
Vmlld0ltcGw6OnJlbW92ZUFsbFBERkhVRHMoKQoreworICAgIGZvciAoYXV0byYgaHVkIDogX3Bk
ZkhVRFZpZXdzLnZhbHVlcygpKQorICAgICAgICBbaHVkIHJlbW92ZUZyb21TdXBlcnZpZXddOwor
ICAgIF9wZGZIVURWaWV3cy5jbGVhcigpOworfQorCitOU1NldCAqV2ViVmlld0ltcGw6OnBkZkhV
RHMoKQoreworICAgIE5TTXV0YWJsZVNldDxOU1ZpZXcgKj4gKnNldCA9IFtOU011dGFibGVTZXQg
c2V0V2l0aENhcGFjaXR5Ol9wZGZIVURWaWV3cy5zaXplKCldOworICAgIGZvciAoYXV0byYgaHVk
IDogX3BkZkhVRFZpZXdzLnZhbHVlcygpKQorICAgICAgICBbc2V0IGFkZE9iamVjdDpodWQuZ2V0
KCldOworICAgIHJldHVybiBzZXQ7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoVUlfUFJPQ0VTU19Q
REZfSFVEKQorCiB2b2lkIFdlYlZpZXdJbXBsOjpyZW5ld0dTdGF0ZSgpCiB7CiAgICAgaWYgKG1f
dGV4dEluZGljYXRvcldpbmRvdykKQEAgLTUzOTEsNiArNTQzMSwxMSBAQCB2b2lkIFdlYlZpZXdJ
bXBsOjptb3VzZU1vdmVkKE5TRXZlbnQgKmV2CiAgICAgaWYgKG1faWdub3Jlc05vbldoZWVsRXZl
bnRzKQogICAgICAgICByZXR1cm47CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQor
ICAgIGZvciAoYXV0byYgaHVkIDogX3BkZkhVRFZpZXdzLnZhbHVlcygpKQorICAgICAgICBbaHVk
IG1vdXNlTW92ZWQ6ZXZlbnRdOworI2VuZGlmCisKICAgICAvLyBXaGVuIGEgdmlldyBpcyBmaXJz
dCByZXNwb25kZXIsIGl0IGdldHMgbW91c2UgbW92ZWQgZXZlbnRzIGV2ZW4gd2hlbiB0aGUgbW91
c2UgaXMgb3V0c2lkZSBpdHMgdmlzaWJsZSByZWN0LgogICAgIGlmIChtX3ZpZXcuZ2V0QXV0b3Jl
bGVhc2VkKCkgPT0gW21fdmlldyB3aW5kb3ddLmZpcnN0UmVzcG9uZGVyICYmICFOU1BvaW50SW5S
ZWN0KFttX3ZpZXcgY29udmVydFBvaW50OltldmVudCBsb2NhdGlvbkluV2luZG93XSBmcm9tVmll
dzpuaWxdLCBbbV92aWV3IHZpc2libGVSZWN0XSkpCiAgICAgICAgIHJldHVybjsKQEAgLTU0Mzks
NiArNTQ4NCwxMSBAQCB2b2lkIFdlYlZpZXdJbXBsOjptb3VzZURvd24oTlNFdmVudCAqZXZlCiAg
ICAgaWYgKG1faWdub3Jlc05vbldoZWVsRXZlbnRzKQogICAgICAgICByZXR1cm47CiAKKyNpZiBF
TkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIGZvciAoYXV0byYgaHVkIDogX3BkZkhVRFZp
ZXdzLnZhbHVlcygpKQorICAgICAgICBbaHVkIG1vdXNlRG93bjpldmVudF07CisjZW5kaWYKKwog
ICAgIHNldExhc3RNb3VzZURvd25FdmVudChldmVudCk7CiAgICAgc2V0SWdub3Jlc01vdXNlRHJh
Z2dlZEV2ZW50cyhmYWxzZSk7CiAKQEAgLTU0NTAsNiArNTUwMCwxMSBAQCB2b2lkIFdlYlZpZXdJ
bXBsOjptb3VzZVVwKE5TRXZlbnQgKmV2ZW50CiAgICAgaWYgKG1faWdub3Jlc05vbldoZWVsRXZl
bnRzKQogICAgICAgICByZXR1cm47CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQor
ICAgIGZvciAoYXV0byYgaHVkIDogX3BkZkhVRFZpZXdzLnZhbHVlcygpKQorICAgICAgICBbaHVk
IG1vdXNlVXA6ZXZlbnRdOworI2VuZGlmCisKICAgICBzZXRMYXN0TW91c2VEb3duRXZlbnQobmls
KTsKICAgICBtb3VzZVVwSW50ZXJuYWwoZXZlbnQpOwogfQpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvUERGL1dLUERGSFVEVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1BERi9XS1BERkhVRFZpZXcuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9QREYvV0tQREZIVURWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCisj
aW1wb3J0ICJQREZQbHVnaW5JZGVudGlmaWVyLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xh
c3MgV2ViUGFnZVByb3h5OworfQorCitAaW50ZXJmYWNlIFdLUERGSFVEVmlldyA6IE5TVmlldwor
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIHBsdWdpbklkZW50
aWZpZXI6KFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllcilwbHVnaW5JZGVudGlmaWVyIHBhZ2U6
KFdlYktpdDo6V2ViUGFnZVByb3h5JilwYWdlOworLSAodm9pZClzZXRGcmFtZTooTlNSZWN0KWZy
YW1lOworLSAodm9pZCltb3VzZU1vdmVkOihOU0V2ZW50ICopZXZlbnQ7CistICh2b2lkKW1vdXNl
RG93bjooTlNFdmVudCAqKWV2ZW50OworLSAodm9pZCltb3VzZVVwOihOU0V2ZW50ICopZXZlbnQ7
CisKK0BlbmQKKworI2VuZGlmIC8vIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QREYvV0tQREZIVURWaWV3Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BERi9XS1BERkhVRFZpZXcubW0JKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUERGL1dLUERGSFVEVmlldy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDM1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5o
IgorI2ltcG9ydCAiV0tQREZIVURWaWV3LmgiCisKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZf
SFVEKQorCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ0FU
cmFuc2FjdGlvbi5oPgorI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9RdWFydHpDb3JlU1BJLmg+Cisj
aW1wb3J0IDxwYWwvc3BpL21hYy9OU0ltYWdlU1BJLmg+CisjaW1wb3J0IDx3dGYvV2Vha09iakNQ
dHIuaD4KKworLy8gIFRoZSBIVUQgaXRlbXMgc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyBzcGFj
aW5nOgorLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKy8vIHwgICAgICAxMiAgICAgICAgMTIgICAgICAxMCAgICAgMTIgICAgICAgIDEyICAgICAg
fAorLy8gfCAgICAgLS0tLSAgICAgIC0tLS0gICAgIHwgICAgIC0tLS0gICAgICAtLS0tICAgICB8
CisvLyB8IDEwIHxpY29ufCAxMCB8aWNvbnwgMTAgfCAxMCB8aWNvbnwgMTAgfGljb258IDEwIHwK
Ky8vIHwgICAgIC0tLS0gICAgICAtLS0tICAgICB8ICAgICAtLS0tICAgICAgLS0tLSAgICAgfAor
Ly8gfCAgICAgIDEyICAgICAgICAxMiAgICAgIDEwICAgICAxMiAgICAgICAgMTIgICAgICB8Cisv
LyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8g
IHdoZXJlIHRoZSAxMiBwb2ludCB2ZXJ0aWNhbCBzcGFjaW5nIGlzIGFuY2hvcmVkIHRvIHRoZSBz
bWFsbGVzdCBpY29uIGltYWdlLAorLy8gIGFuZCBhbGwgc3Vic2VxdWVudCBpY29ucyB3aXRoIGJl
IGNlbnRlcmVkIHZlcnRpY2FsbHkgd2l0aCB0aGUgc21hbGxlc3QgaWNvbi4KKworc3RhdGljIGNv
bnN0IENHRmxvYXQga0xheWVyVmVydGljYWxPZmZzZXQgPSA0MDsKK3N0YXRpYyBjb25zdCBDR0Zs
b2F0IGtMYXllckNvcm5lclJhZGl1cyA9IDEyOworc3RhdGljIGNvbnN0IENHRmxvYXQga0xheWVy
R3JheUNvbXBvbmVudCA9IDA7CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrTGF5ZXJBbHBoYSA9IDAu
NzU7CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrTGF5ZXJJbWFnZVNjYWxlID0gMS41Oworc3RhdGlj
IGNvbnN0IENHRmxvYXQga0xheWVyU2VwZXJhdG9yQ29udHJvbGxlclNpemUgPSAxLjU7CitzdGF0
aWMgY29uc3QgQ0dGbG9hdCBrTGF5ZXJDb250cm9sbGVySG9yaXpvbnRhbE1hcmdpbiA9IDEwLjA7
CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrTGF5ZXJJbWFnZVZlcnRpY2FsTWFyZ2luID0gMTIuMDsK
K3N0YXRpYyBjb25zdCBDR0Zsb2F0IGtMYXllclNlcGVyYXRvclZlcnRpY2FsTWFyZ2luID0gMTAu
MDsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGtDb250cm9sTGF5ZXJOb3JtYWxBbHBoYSA9IDAuNzU7
CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrQ29udHJvbExheWVyRG93bkFscGhhID0gMC40NTsKKwor
c3RhdGljIE5TU3RyaW5nICogY29uc3QgUERGSFVEWm9vbUluQ29udHJvbCA9IEAicGx1cy5tYWdu
aWZ5aW5nZ2xhc3MiOworc3RhdGljIE5TU3RyaW5nICogY29uc3QgUERGSFVEWm9vbU91dENvbnRy
b2wgPSBAIm1pbnVzLm1hZ25pZnlpbmdnbGFzcyI7CitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBQ
REZIVURMYXVuY2hQcmV2aWV3Q29udHJvbCA9IEAicHJldmlldyI7CitzdGF0aWMgTlNTdHJpbmcg
KiBjb25zdCBQREZIVURTYXZlUERGQ29udHJvbCA9IEAiYXJyb3cuZG93bi5jaXJjbGUiOworc3Rh
dGljIE5TU3RyaW5nICogY29uc3QgUERGSFVEU2VwZXJhdG9yQ29udHJvbCA9IEAiUERGSFVEU2Vw
ZXJhdG9yQ29udHJvbCI7CisKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGtMYXllckZhZGVJblRpbWVJ
bnRlcnZhbCA9IDAuMjU7CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrTGF5ZXJGYWRlT3V0VGltZUlu
dGVydmFsID0gMC41Oworc3RhdGljIGNvbnN0IENHRmxvYXQga0luaXRpYWxIaWRlVGltZUludGVy
dmFsID0gMy4wOworCitzdGF0aWMgTlNBcnJheTxOU1N0cmluZyAqPiAqY29udHJvbEFycmF5KCkK
K3sKKyAgICByZXR1cm4gQFsKKyAgICAgICAgUERGSFVEWm9vbU91dENvbnRyb2wsCisgICAgICAg
IFBERkhVRFpvb21JbkNvbnRyb2wsCisgICAgICAgIFBERkhVRFNlcGVyYXRvckNvbnRyb2wsCisg
ICAgICAgIFBERkhVRExhdW5jaFByZXZpZXdDb250cm9sLAorICAgICAgICBQREZIVURTYXZlUERG
Q29udHJvbAorICAgIF07Cit9CisKK3N0YXRpYyBOU0NvbG9yKiBQREZDR0NvbG9yQ3JlYXRlR2Vu
ZXJpY1JHQihDR0Zsb2F0IHJlZCwgQ0dGbG9hdCBncmVlbiwgQ0dGbG9hdCBibHVlLCBDR0Zsb2F0
IGFscGhhKQoreworICAgIGF1dG8gY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3Jl
YXRlRGV2aWNlUkdCKCkpOworICAgIGNvbnN0IENHRmxvYXQgY29tcG9uZW50c1s0XSA9IHsgcmVk
LCBncmVlbiwgYmx1ZSwgYWxwaGEgfTsKKyAgICBhdXRvIGNnQ29sb3IgPSBhZG9wdENGKENHQ29s
b3JDcmVhdGUoY29sb3JTcGFjZS5nZXQoKSwgY29tcG9uZW50cykpOworICAgIHJldHVybiBbTlND
b2xvciBjb2xvcldpdGhDR0NvbG9yOmNnQ29sb3IuZ2V0KCldOworfQorCitAaW1wbGVtZW50YXRp
b24gV0tQREZIVURWaWV3IHsKK0Bwcml2YXRlCisgICAgV2Vha1B0cjxXZWJLaXQ6OldlYlBhZ2VQ
cm94eT4gX3BhZ2U7CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBfYWN0aXZlQ29udHJvbDsKKyAg
ICBXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIgX3BsdWdpbklkZW50aWZpZXI7CisgICAgQ0dG
bG9hdCBfZGV2aWNlU2NhbGVGYWN0b3I7CisgICAgUmV0YWluUHRyPENBTGF5ZXI+IF9sYXllcjsK
KyAgICBSZXRhaW5QdHI8Q0FMYXllcj4gX2FjdGl2ZUxheWVyOworICAgIENHU2l6ZSBfZnJhbWVT
aXplOworICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PE5TU3RyaW5nKiwgTlNJbWFn
ZSo+PiBfY2FjaGVkSWNvbnM7CisgICAgQk9PTCBfdmlzaWJsZTsKKyAgICBib29sIF9tb3VzZU1v
dmVkVG9IVUQ7CisgICAgYm9vbCBfaW5pdGlhbEhpZGVUaW1lckZpcmVkOworfQorCistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIHBsdWdpbklkZW50aWZpZXI6KFdl
YktpdDo6UERGUGx1Z2luSWRlbnRpZmllcilwbHVnaW5JZGVudGlmaWVyIHBhZ2U6KFdlYktpdDo6
V2ViUGFnZVByb3h5JilwYWdlCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEZy
YW1lOmZyYW1lXSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgc2VsZi53YW50c0xh
eWVyID0gWUVTOworICAgIF9jYWNoZWRJY29ucyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9u
YXJ5IGFsbG9jXSBpbml0XSk7CisgICAgX3BsdWdpbklkZW50aWZpZXIgPSBwbHVnaW5JZGVudGlm
aWVyOworICAgIF9wYWdlID0gbWFrZVdlYWtQdHIocGFnZSk7CisgICAgX2RldmljZVNjYWxlRmFj
dG9yID0gcGFnZS5kZXZpY2VTY2FsZUZhY3RvcigpOworICAgIF92aXNpYmxlID0gWUVTOworICAg
IFtzZWxmIF9zZXR1cExheWVyOnNlbGYubGF5ZXJdOworICAgIFtzZWxmIHNldEZyYW1lOmZyYW1l
XTsKKworICAgIFdlYWtPYmpDUHRyPFdLUERGSFVEVmlldz4gd2Vha1NlbGYgPSBzZWxmOworICAg
IGRpc3BhdGNoX2FmdGVyKGRpc3BhdGNoX3RpbWUoRElTUEFUQ0hfVElNRV9OT1csIChpbnQ2NF90
KShrSW5pdGlhbEhpZGVUaW1lSW50ZXJ2YWwgKiBOU0VDX1BFUl9TRUMpKSwgZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgW3dlYWtTZWxmIF9oaWRlVGltZXJGaXJlZF07Cisg
ICAgfSk7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtf
bGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKwor
LSAodm9pZClzZXRGcmFtZTooTlNSZWN0KXJlY3QKK3sKKyAgICBbc3VwZXIgc2V0RnJhbWU6cmVj
dF07CisgICAgX2ZyYW1lU2l6ZSA9IHJlY3Quc2l6ZTsKKworICAgIFtDQVRyYW5zYWN0aW9uIGJl
Z2luXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOworICAgIENH
UmVjdCBsYXllckJvdW5kcyA9IFtfbGF5ZXIgYm91bmRzXTsKKyAgICBbX2xheWVyIHNldEZyYW1l
OkNHUmVjdE1ha2UocmVjdC5zaXplLndpZHRoIC8gMi4wIC0gbGF5ZXJCb3VuZHMuc2l6ZS53aWR0
aCAvIDIuMCwga0xheWVyVmVydGljYWxPZmZzZXQsIGxheWVyQm91bmRzLnNpemUud2lkdGgsIGxh
eWVyQm91bmRzLnNpemUuaGVpZ2h0KV07CisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKK30K
KworLSAodm9pZClfaGlkZVRpbWVyRmlyZWQKK3sKKyAgICBfaW5pdGlhbEhpZGVUaW1lckZpcmVk
ID0gdHJ1ZTsKKyAgICBpZiAoIV9tb3VzZU1vdmVkVG9IVUQpCisgICAgICAgIFtzZWxmIF9zZXRW
aXNpYmxlOmZhbHNlXTsKK30KKworLSAodm9pZClfc2V0VmlzaWJsZTooYm9vbClpc1Zpc2libGUK
K3sKKyAgICBpZiAoX3Zpc2libGUgPT0gaXNWaXNpYmxlKQorICAgICAgICByZXR1cm47CisgICAg
X3Zpc2libGUgPSBpc1Zpc2libGU7CisgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAgIFtD
QVRyYW5zYWN0aW9uIHNldEFuaW1hdGlvbkR1cmF0aW9uOiBpc1Zpc2libGUgPyBrTGF5ZXJGYWRl
SW5UaW1lSW50ZXJ2YWwgOiBrTGF5ZXJGYWRlT3V0VGltZUludGVydmFsXTsKKyAgICBbc2VsZiBf
c2V0TGF5ZXJPcGFjaXR5OmlzVmlzaWJsZSA/IGtMYXllckFscGhhIDogMC4wXTsKKyAgICBbQ0FU
cmFuc2FjdGlvbiBjb21taXRdOworfQorCistICh2b2lkKW1vdXNlTW92ZWQ6KE5TRXZlbnQgKill
dmVudAoreworICAgIGlmIChDR1JlY3RDb250YWluc1BvaW50KFtzZWxmIGNvbnZlcnRSZWN0OkNH
UmVjdEluc2V0KFtfbGF5ZXIgZnJhbWVdLCAtMTYuMCwgLTE2LjApIHRvVmlldzpuaWxdLCBOU1Bv
aW50VG9DR1BvaW50KGV2ZW50LmxvY2F0aW9uSW5XaW5kb3cpKSkgeworICAgICAgICBbc2VsZiBf
c2V0VmlzaWJsZTp0cnVlXTsKKyAgICAgICAgX21vdXNlTW92ZWRUb0hVRCA9IHRydWU7CisgICAg
fSBlbHNlIGlmIChfaW5pdGlhbEhpZGVUaW1lckZpcmVkKQorICAgICAgICBbc2VsZiBfc2V0Vmlz
aWJsZTpmYWxzZV07Cit9CisKKy0gKHZvaWQpbW91c2VEb3duOihOU0V2ZW50ICopZXZlbnQKK3sK
KyAgICBfYWN0aXZlQ29udHJvbCA9IFtzZWxmIF9jb250cm9sRm9yRXZlbnQ6ZXZlbnRdOworICAg
IGlmIChbX2FjdGl2ZUNvbnRyb2wgaXNFcXVhbFRvU3RyaW5nOlBERkhVRFNlcGVyYXRvckNvbnRy
b2xdKQorICAgICAgICBfYWN0aXZlQ29udHJvbCA9IG5pbDsKKyAgICBpZiAoX2FjdGl2ZUNvbnRy
b2wpIHsKKyAgICAgICAgLy8gVXBkYXRlIHJlbmRlcmluZyB0byBoaWdobGlnaHQgaXQuLgorICAg
ICAgICBfYWN0aXZlTGF5ZXIgPSBbc2VsZiBfbGF5ZXJGb3JFdmVudDpldmVudF07CisgICAgICAg
IAorICAgICAgICAvLyBVcGRhdGUgbGF5ZXIgaW1hZ2U7IGRvIG5vdCBhbmltYXRlCisgICAgICAg
IFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICAgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJs
ZUFjdGlvbnM6WUVTXTsKKyAgICAgICAgCisgICAgICAgIFtfYWN0aXZlTGF5ZXIgc2V0T3BhY2l0
eToga0NvbnRyb2xMYXllckRvd25BbHBoYV07CisgICAgICAgIAorICAgICAgICBbQ0FUcmFuc2Fj
dGlvbiBjb21taXRdOworICAgIH0KK30KKworLSAodm9pZCltb3VzZVVwOihOU0V2ZW50ICopZXZl
bnQKK3sKKyAgICBpZiAoIV9hY3RpdmVDb250cm9sKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgTlNTdHJpbmcqIG1vdXNlVXBDb250cm9sID0gW3NlbGYgX2NvbnRyb2xGb3JFdmVudDpldmVu
dF07CisgICAgaWYgKFtfYWN0aXZlQ29udHJvbCBpc0VxdWFsVG9TdHJpbmc6bW91c2VVcENvbnRy
b2xdKQorICAgICAgICBbc2VsZiBfcGVyZm9ybUFjdGlvbkZvckNvbnRyb2w6X2FjdGl2ZUNvbnRy
b2wuZ2V0KCldOworICAgIAorICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICBbQ0FUcmFu
c2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOworICAgIFtfYWN0aXZlTGF5ZXIgc2V0T3Bh
Y2l0eTprQ29udHJvbExheWVyTm9ybWFsQWxwaGFdOworICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1p
dF07CisKKyAgICBfYWN0aXZlTGF5ZXIgPSBuaWw7CisgICAgX2FjdGl2ZUNvbnRyb2wgPSBuaWw7
Cit9CisKKy0gKE9wdGlvbmFsPE5TVUludGVnZXI+KV9jb250cm9sSW5kZXhGb3JFdmVudDooTlNF
dmVudCAqKWV2ZW50Cit7CisgICAgQ0dQb2ludCBpbml0aWFsUG9pbnQgPSBOU1BvaW50VG9DR1Bv
aW50KGV2ZW50LmxvY2F0aW9uSW5XaW5kb3cpOworICAgIGluaXRpYWxQb2ludC54IC09IFtfbGF5
ZXIgZnJhbWVdLm9yaWdpbi54OworICAgIGluaXRpYWxQb2ludC55IC09IFtfbGF5ZXIgZnJhbWVd
Lm9yaWdpbi55OworICAgIGZvciAoTlNVSW50ZWdlciBpbmRleCA9IDA7IGluZGV4IDwgW19sYXll
ciBzdWJsYXllcnNdLmNvdW50OyBpbmRleCsrKSB7CisgICAgICAgIENBTGF5ZXIgKnN1YkxheWVy
ID0gW19sYXllciBzdWJsYXllcnNdW2luZGV4XTsKKyAgICAgICAgTlNSZWN0IHdpbmRvd1NwYWNl
UmVjdCA9IFtzZWxmIGNvbnZlcnRSZWN0OnN1YkxheWVyLmZyYW1lIHRvVmlldzpuaWxdOworICAg
ICAgICBpZiAoQ0dSZWN0Q29udGFpbnNQb2ludCh3aW5kb3dTcGFjZVJlY3QsIGluaXRpYWxQb2lu
dCkpCisgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgfQorICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Cit9CisKKy0gKE5TU3RyaW5nICopX2NvbnRyb2xGb3JFdmVudDooTlNFdmVudCAqKWV2
ZW50Cit7CisgICAgaWYgKGF1dG8gaW5kZXggPSBbc2VsZiBfY29udHJvbEluZGV4Rm9yRXZlbnQ6
ZXZlbnRdKQorICAgICAgICByZXR1cm4gY29udHJvbEFycmF5KClbKmluZGV4XTsKKyAgICByZXR1
cm4gbmlsOworfQorCistIChDQUxheWVyICopX2xheWVyRm9yRXZlbnQ6KE5TRXZlbnQgKilldmVu
dAoreworICAgIGlmIChhdXRvIGluZGV4ID0gW3NlbGYgX2NvbnRyb2xJbmRleEZvckV2ZW50OmV2
ZW50XSkKKyAgICAgICAgcmV0dXJuIFtfbGF5ZXIgc3VibGF5ZXJzXVsqaW5kZXhdOworICAgIHJl
dHVybiBuaWw7Cit9CisKKy0gKHZvaWQpX3BlcmZvcm1BY3Rpb25Gb3JDb250cm9sOihOU1N0cmlu
ZyAqKWNvbnRyb2wKK3sKKyAgICBpZiAoIV92aXNpYmxlKQorICAgICAgICByZXR1cm47CisgICAg
YXV0byogcGFnZSA9IF9wYWdlLmdldCgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJu
OworICAgIGlmIChbY29udHJvbCBpc0VxdWFsVG9TdHJpbmc6UERGSFVEWm9vbUluQ29udHJvbF0p
CisgICAgICAgIHBhZ2UtPnBkZlpvb21JbihfcGx1Z2luSWRlbnRpZmllcik7CisgICAgZWxzZSBp
ZiAoW2NvbnRyb2wgaXNFcXVhbFRvU3RyaW5nOlBERkhVRFpvb21PdXRDb250cm9sXSkKKyAgICAg
ICAgcGFnZS0+cGRmWm9vbU91dChfcGx1Z2luSWRlbnRpZmllcik7CisgICAgZWxzZSBpZiAoW2Nv
bnRyb2wgaXNFcXVhbFRvU3RyaW5nOlBERkhVRFNhdmVQREZDb250cm9sXSkKKyAgICAgICAgcGFn
ZS0+cGRmU2F2ZVRvUERGKF9wbHVnaW5JZGVudGlmaWVyKTsKKyAgICBlbHNlIGlmIChbY29udHJv
bCBpc0VxdWFsVG9TdHJpbmc6UERGSFVETGF1bmNoUHJldmlld0NvbnRyb2xdKQorICAgICAgICBw
YWdlLT5wZGZPcGVuV2l0aFByZXZpZXcoX3BsdWdpbklkZW50aWZpZXIpOworfQorCistICh2b2lk
KV9sb2FkSWNvbkltYWdlcworeworICAgIGZvciAoTlNTdHJpbmcgKmNvbnRyb2xOYW1lIGluIGNv
bnRyb2xBcnJheSgpKQorICAgICAgICBbc2VsZiBfZ2V0SW1hZ2VGb3JDb250cm9sTmFtZTogY29u
dHJvbE5hbWVdOworfQorCistICh2b2lkKV9zZXR1cExheWVyOihDQUxheWVyICopcGFyZW50TGF5
ZXIKK3sKKyAgICBfbGF5ZXIgPSBhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0pOworICAg
IFtfbGF5ZXIgc2V0Q29ybmVyUmFkaXVzOmtMYXllckNvcm5lclJhZGl1c107CisgICAgCisgICAg
YXV0byBjb2xvciA9IGFkb3B0TlMoUERGQ0dDb2xvckNyZWF0ZUdlbmVyaWNSR0Ioa0xheWVyR3Jh
eUNvbXBvbmVudCwga0xheWVyR3JheUNvbXBvbmVudCwga0xheWVyR3JheUNvbXBvbmVudCwgMS4w
KSk7CisgICAgW19sYXllciBzZXRCYWNrZ3JvdW5kQ29sb3I6W2NvbG9yIENHQ29sb3JdXTsKKyAg
ICBbc2VsZiBfc2V0TGF5ZXJPcGFjaXR5OmtMYXllckFscGhhXTsKKyAgICAKKyAgICBbc2VsZiBf
bG9hZEljb25JbWFnZXNdOworICAgIENHRmxvYXQgbWluSWNvbkltYWdlSGVpZ2h0ID0gc3RkOjpu
dW1lcmljX2xpbWl0czxDR0Zsb2F0Pjo6bWF4KCk7CisgICAgZm9yIChOU0ltYWdlKiBpbWFnZSBp
biBbX2NhY2hlZEljb25zIGFsbFZhbHVlc10pCisgICAgICAgIG1pbkljb25JbWFnZUhlaWdodCA9
IHN0ZDo6bWluKG1pbkljb25JbWFnZUhlaWdodCwgKGltYWdlLnNpemUuaGVpZ2h0IC8gX2Rldmlj
ZVNjYWxlRmFjdG9yKSk7CisgICAgCisgICAgQ0dGbG9hdCBkeCA9IGtMYXllckNvbnRyb2xsZXJI
b3Jpem9udGFsTWFyZ2luOworICAgIGZvciAoTlNTdHJpbmcgKmNvbnRyb2xOYW1lIGluIGNvbnRy
b2xBcnJheSgpKSB7CisgICAgICAgIGF1dG8gY29udHJvbExheWVyID0gYWRvcHROUyhbW0NBTGF5
ZXIgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgQ0dGbG9hdCBkeSA9IDAuMDsKKyAgICAgICAgQ0dG
bG9hdCBjb250cm9sbGVyV2lkdGggPSAwLjA7CisgICAgICAgIENHRmxvYXQgY29udHJvbGxlckhl
aWdodCA9IDAuMDsKKworICAgICAgICBpZiAoW2NvbnRyb2xOYW1lIGlzRXF1YWxUb1N0cmluZzog
UERGSFVEU2VwZXJhdG9yQ29udHJvbF0pIHsKKyAgICAgICAgICAgIGR5ID0ga0xheWVyU2VwZXJh
dG9yVmVydGljYWxNYXJnaW47CisgICAgICAgICAgICBjb250cm9sbGVyV2lkdGggPSBrTGF5ZXJT
ZXBlcmF0b3JDb250cm9sbGVyU2l6ZTsKKyAgICAgICAgICAgIGNvbnRyb2xsZXJIZWlnaHQgPSBt
aW5JY29uSW1hZ2VIZWlnaHQgKyAoMi4wICoga0xheWVySW1hZ2VWZXJ0aWNhbE1hcmdpbikgLSAo
Mi4wICoga0xheWVyU2VwZXJhdG9yVmVydGljYWxNYXJnaW4pOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBbY29udHJvbExheWVyIHNldEJhY2tncm91bmRDb2xvcjogW1tOU0NvbG9yIGxpZ2h0
R3JheUNvbG9yXSBDR0NvbG9yXV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBOU0lt
YWdlKiBjb250cm9sSW1hZ2UgPSBbc2VsZiBfZ2V0SW1hZ2VGb3JDb250cm9sTmFtZTpjb250cm9s
TmFtZV07CisgICAgICAgICAgICBbY29udHJvbExheWVyIHNldENvbnRlbnRzOiBjb250cm9sSW1h
Z2VdOworICAgICAgICAgICAgW2NvbnRyb2xMYXllciBzZXRPcGFjaXR5OiBrQ29udHJvbExheWVy
Tm9ybWFsQWxwaGFdOworCisgICAgICAgICAgICBkeSA9IGtMYXllckltYWdlVmVydGljYWxNYXJn
aW47CisgICAgICAgICAgICBjb250cm9sbGVyV2lkdGggPSBbY29udHJvbEltYWdlIHNpemVdLndp
ZHRoIC8gX2RldmljZVNjYWxlRmFjdG9yOworICAgICAgICAgICAgY29udHJvbGxlckhlaWdodCA9
IFtjb250cm9sSW1hZ2Ugc2l6ZV0uaGVpZ2h0IC8gX2RldmljZVNjYWxlRmFjdG9yOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBkeSAtPSAoY29udHJvbGxlckhlaWdodCAtIG1pbkljb25JbWFn
ZUhlaWdodCkgLyAyLjA7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFtjb250cm9sTGF5ZXIg
c2V0RmlsdGVyczpAW1tDQUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJDb2xvckludmVy
dF1dXTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgW2NvbnRyb2xMYXllciBzZXRGcmFt
ZTpDR1JlY3RNYWtlKGR4LCBkeSwgY29udHJvbGxlcldpZHRoLCBjb250cm9sbGVySGVpZ2h0KV07
CisgICAgICAgIFtfbGF5ZXIgYWRkU3VibGF5ZXI6Y29udHJvbExheWVyLmdldCgpXTsKKyAgICAg
ICAgCisgICAgICAgIGR4ICs9IGNvbnRyb2xsZXJXaWR0aCArIGtMYXllckNvbnRyb2xsZXJIb3Jp
em9udGFsTWFyZ2luOworICAgIH0KKyAgICAKKyAgICBbX2xheWVyIHNldEZyYW1lOkNHUmVjdE1h
a2UoMCwga0xheWVyVmVydGljYWxPZmZzZXQsIGR4LCBtaW5JY29uSW1hZ2VIZWlnaHQgKyAyLjAg
KiBrTGF5ZXJJbWFnZVZlcnRpY2FsTWFyZ2luKV07CisgICAgW3BhcmVudExheWVyIGFkZFN1Ymxh
eWVyOiBfbGF5ZXIuZ2V0KCldOworfQorCistICh2b2lkKV9yZWRyYXdMYXllcgoreworICAgIFtf
Y2FjaGVkSWNvbnMgcmVtb3ZlQWxsT2JqZWN0c107CisgICAgQ0FMYXllciAqcGFyZW50TGF5ZXIg
PSBbX2xheWVyIHN1cGVybGF5ZXJdOworICAgIFtfbGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJd
OworICAgIFtzZWxmIF9zZXR1cExheWVyOnBhcmVudExheWVyXTsKKyAgICBbc2VsZiBzZXRGcmFt
ZVNpemU6X2ZyYW1lU2l6ZV07Cit9CisKKy0gKE5TSW1hZ2UqKV9nZXRJbWFnZUZvckNvbnRyb2xO
YW1lOihOU1N0cmluZyAqKWNvbnRyb2wKK3sKKyAgICBOU0ltYWdlKiBpY29uSW1hZ2UgPSBfY2Fj
aGVkSWNvbnMuZ2V0KClbY29udHJvbF07CisgICAgaWYgKGljb25JbWFnZSkKKyAgICAgICAgcmV0
dXJuIGljb25JbWFnZTsKKworICAgIGljb25JbWFnZSA9IFtOU0ltYWdlIF9pbWFnZVdpdGhTeXN0
ZW1TeW1ib2xOYW1lOiBjb250cm9sXTsKKyAgICBpZiAoIWljb25JbWFnZSkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKworICAgIGljb25JbWFnZSA9IFtpY29uSW1hZ2UgX2ltYWdlV2l0aENvbmZpZ3Vy
YXRpb246QHsKKyAgICAgICAgTlNJbWFnZUFsdGVybmF0ZUNyaXRlcmlvbkZvbnQgOiBbTlNGb250
IHByZWZlcnJlZEZvbnRGb3JUZXh0U3R5bGU6TlNGb250VGV4dFN0eWxlVGl0bGUyIG9wdGlvbnM6
QHsgfV0sCisgICAgICAgIE5TSW1hZ2VBbHRlcm5hdGVDcml0ZXJpb25TeW1ib2xTY2FsZSA6IEAo
TlNJbWFnZVN5bWJvbFNjYWxlTGFyZ2UpCisgICAgfV07CisgICAgICAgIAorICAgIE5TUmVjdCBp
Y29uSW1hZ2VSZWN0ID0gTlNNYWtlUmVjdCgwLCAwLCBbaWNvbkltYWdlIHNpemVdLndpZHRoICog
a0xheWVySW1hZ2VTY2FsZSAqIF9kZXZpY2VTY2FsZUZhY3RvciwgW2ljb25JbWFnZSBzaXplXS5o
ZWlnaHQgKiBrTGF5ZXJJbWFnZVNjYWxlICogX2RldmljZVNjYWxlRmFjdG9yKTsKKyAgICBOU0lt
YWdlUmVwKiBpY29uSW1hZ2VSZXAgPSBbaWNvbkltYWdlIGJlc3RSZXByZXNlbnRhdGlvbkZvclJl
Y3Q6aWNvbkltYWdlUmVjdCBjb250ZXh0Om5pbCBoaW50czpuaWxdOworICAgIGljb25JbWFnZSA9
IFtOU0ltYWdlIGltYWdlV2l0aEltYWdlUmVwOiBpY29uSW1hZ2VSZXBdOworICAgIAorICAgIF9j
YWNoZWRJY29ucy5nZXQoKVtjb250cm9sXSA9IGljb25JbWFnZTsKKyAgICByZXR1cm4gaWNvbklt
YWdlOworfQorCistICh2b2lkKV9zZXRMYXllck9wYWNpdHk6KENHRmxvYXQpYWxwaGEKK3sKKyAg
ICBbX2xheWVyIHNldE9wYWNpdHk6YWxwaGFdOworICAgIGZvciAoQ0FMYXllciAqc3ViTGF5ZXIg
aW4gW19sYXllciBzdWJsYXllcnNdKQorICAgICAgICBbc3ViTGF5ZXIgc2V0T3BhY2l0eTphbHBo
YV07Cit9CisKK0BlbmQKKworI2VuZGlmIC8vIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0J
KHJldmlzaW9uIDI2NjA4MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdl
UHJveHlJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwODgsMTYgKzEwODgsNiBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6ZGlkUGVyZm9ybURpY3Rpb25hcnlMCiAgICAgcGFnZUNsaWVudCgpLmRpZFBl
cmZvcm1EaWN0aW9uYXJ5TG9va3VwKGRpY3Rpb25hcnlQb3B1cEluZm8pOwogfQogCi12b2lkIFdl
YlBhZ2VQcm94eTo6c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBs
aWNhdGlvbihjb25zdCBTdHJpbmcmLCBGcmFtZUluZm9EYXRhJiYsIGNvbnN0IElQQzo6RGF0YVJl
ZmVyZW5jZSYsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBXZWJQYWdlUHJveHk6Om9wZW5QREZGcm9tVGVtcG9yYXJ5Rm9sZGVyV2l0aE5hdGl2ZUFw
cGxpY2F0aW9uKEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0UmVtb3RlTGF5ZXJUcmVlUm9v
dE5vZGUoUmVtb3RlTGF5ZXJUcmVlTm9kZSogcm9vdE5vZGUpCiB7CiAgICAgcGFnZUNsaWVudCgp
LnNldFJlbW90ZUxheWVyVHJlZVJvb3ROb2RlKHJvb3ROb2RlKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5oCShyZXZpc2lvbiAyNjYw
ODMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMuaAko
d29ya2luZyBjb3B5KQpAQCAtMTkwLDYgKzE5MCwxMyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBy
ZWdpc3Rlckluc2VydGlvblVuZG9Hcm91cGluZygpIG92ZXJyaWRlOwogCisjaWYgRU5BQkxFKFVJ
X1BST0NFU1NfUERGX0hVRCkKKyAgICB2b2lkIGNyZWF0ZVBERkhVRChQREZQbHVnaW5JZGVudGlm
aWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCB1cGRhdGVQ
REZIVURMb2NhdGlvbihQREZQbHVnaW5JZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jikgb3ZlcnJpZGU7CisgICAgdm9pZCByZW1vdmVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllcikg
b3ZlcnJpZGU7CisgICAgdm9pZCByZW1vdmVBbGxQREZIVURzKCkgb3ZlcnJpZGU7CisjZW5kaWYK
KwogICAgIC8vIEF1eGlsaWFyeSBDbGllbnQgQ3JlYXRpb24KICNpZiBFTkFCTEUoRlVMTFNDUkVF
Tl9BUEkpCiAgICAgV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudCYgZnVsbFNjcmVlbk1h
bmFnZXJQcm94eUNsaWVudCgpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQkocmV2aXNpb24gMjY2MDgzKQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0zNDksNiArMzQ5LDMwIEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OnJlZ2lzdGVy
SW5zZXJ0aW9uVW4KICAgICByZWdpc3Rlckluc2VydGlvblVuZG9Hcm91cGluZ1dpdGhVbmRvTWFu
YWdlcihbbV92aWV3IHVuZG9NYW5hZ2VyXSk7CiB9CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19Q
REZfSFVEKQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpjcmVhdGVQREZIVUQoUERGUGx1Z2luSWRl
bnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAg
IG1faW1wbC0+Y3JlYXRlUERGSFVEKGlkZW50aWZpZXIsIHJlY3QpOworfQorCit2b2lkIFBhZ2VD
bGllbnRJbXBsOjp1cGRhdGVQREZIVURMb2NhdGlvbihQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50
aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCit7CisgICAgbV9pbXBsLT51cGRh
dGVQREZIVURMb2NhdGlvbihpZGVudGlmaWVyLCByZWN0KTsKK30KKwordm9pZCBQYWdlQ2xpZW50
SW1wbDo6cmVtb3ZlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAg
ICBtX2ltcGwtPnJlbW92ZVBERkhVRChpZGVudGlmaWVyKTsKK30KKwordm9pZCBQYWdlQ2xpZW50
SW1wbDo6cmVtb3ZlQWxsUERGSFVEcygpCit7CisgICAgbV9pbXBsLT5yZW1vdmVBbGxQREZIVURz
KCk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCiB2b2lkIFBh
Z2VDbGllbnRJbXBsOjpjbGVhckFsbEVkaXRDb21tYW5kcygpCiB7CiAgICAgbV9pbXBsLT5jbGVh
ckFsbEVkaXRDb21tYW5kcygpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dl
YlBhZ2VQcm94eU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9t
YWMvV2ViUGFnZVByb3h5TWFjLm1tCShyZXZpc2lvbiAyNjYwODMpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NzUs
OCArNDc1LDYgQEAgc3RhdGljIE5TU3RyaW5nICpwYXRoVG9QREZPbkRpc2soY29uc3QgUwogCiB2
b2lkIFdlYlBhZ2VQcm94eTo6c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRp
dmVBcHBsaWNhdGlvbihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBGcmFtZUluZm9E
YXRhJiYgZnJhbWVJbmZvLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGEsIGNvbnN0IFN0
cmluZyYgcGRmVVVJRCkKIHsKLSAgICBNRVNTQUdFX0NIRUNLKFRlbXBvcmFyeVBERkZpbGVNYXA6
OmlzVmFsaWRLZXkocGRmVVVJRCkpOwotCiAgICAgaWYgKGRhdGEuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIFdURkxvZ0Fsd2F5cygiQ2Fubm90IHNhdmUgZW1wdHkgUERGIGZpbGUgdG8gdGhlIHRlbXBv
cmFyeSBkaXJlY3RvcnkuIik7CiAgICAgICAgIHJldHVybjsKQEAgLTUwNCw3ICs1MDIsOCBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sCiAgICAgYXV0byBvcmlnaW5h
dGluZ1VSTFN0cmluZyA9IGZyYW1lSW5mby5yZXF1ZXN0LnVybCgpLnN0cmluZygpOwogICAgIEZp
bGVTeXN0ZW06OnNldE1ldGFkYXRhVVJMKG5zUGF0aC5nZXQoKSwgb3JpZ2luYXRpbmdVUkxTdHJp
bmcpOwogCi0gICAgbV90ZW1wb3JhcnlQREZGaWxlcy5hZGQocGRmVVVJRCwgbnNQYXRoLmdldCgp
KTsKKyAgICBpZiAoVGVtcG9yYXJ5UERGRmlsZU1hcDo6aXNWYWxpZEtleShwZGZVVUlEKSkKKyAg
ICAgICAgbV90ZW1wb3JhcnlQREZGaWxlcy5hZGQocGRmVVVJRCwgbnNQYXRoLmdldCgpKTsKIAog
ICAgIGF1dG8gcGRmRmlsZVVSTCA9IFVSTDo6ZmlsZVVSTFdpdGhGaWxlU3lzdGVtUGF0aChTdHJp
bmcobnNQYXRoLmdldCgpKSk7CiAgICAgbV91aUNsaWVudC0+Y29uZmlybVBERk9wZW5pbmcoKnRo
aXMsIHBkZkZpbGVVUkwsIFdURk1vdmUoZnJhbWVJbmZvKSwgW3BkZkZpbGVVUkxdIChib29sIGFs
bG93ZWQpIHsKQEAgLTUxNCw2ICs1MTMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2F2ZVBERlRv
VGVtcG9yYXJ5Rm9sCiAgICAgfSk7CiB9CiAKKyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikgJiYg
IUVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCiB2b2lkIFdlYlBhZ2VQcm94eTo6b3BlblBERkZy
b21UZW1wb3JhcnlGb2xkZXJXaXRoTmF0aXZlQXBwbGljYXRpb24oRnJhbWVJbmZvRGF0YSYmIGZy
YW1lSW5mbywgY29uc3QgU3RyaW5nJiBwZGZVVUlEKQogewogICAgIE1FU1NBR0VfQ0hFQ0soVGVt
cG9yYXJ5UERGRmlsZU1hcDo6aXNWYWxpZEtleShwZGZVVUlEKSk7CkBAIC01MzAsNiArNTMwLDcg
QEAgdm9pZCBXZWJQYWdlUHJveHk6Om9wZW5QREZGcm9tVGVtcG9yYXJ5RgogICAgICAgICBbW05T
V29ya3NwYWNlIHNoYXJlZFdvcmtzcGFjZV0gb3BlblVSTDpwZGZGaWxlVVJMXTsKICAgICB9KTsK
IH0KKyNlbmRpZgogCiAjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCiB2b2lkIFdlYlBhZ2VQcm94
eTo6c2hvd1BERkNvbnRleHRNZW51KGNvbnN0IFdlYktpdDo6UERGQ29udGV4dE1lbnUmIGNvbnRl
eHRNZW51LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPGludDMyX3Q+JiYpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQpAQCAtNjczLDYgKzY3NCw0OSBAQCBQbGF0Zm9ybVZpZXcqIFdlYlBh
Z2VQcm94eTo6cGxhdGZvcm1WaWV3CiAgICAgcmV0dXJuIFtwYWdlQ2xpZW50KCkucGxhdGZvcm1X
aW5kb3coKSBjb250ZW50Vmlld107CiB9CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVE
KQorCit2b2lkIFdlYlBhZ2VQcm94eTo6Y3JlYXRlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIg
aWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBwYWdlQ2xp
ZW50KCkuY3JlYXRlUERGSFVEKGlkZW50aWZpZXIsIHJlY3QpOworfQorCit2b2lkIFdlYlBhZ2VQ
cm94eTo6cmVtb3ZlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAg
ICBwYWdlQ2xpZW50KCkucmVtb3ZlUERGSFVEKGlkZW50aWZpZXIpOworfQorCit2b2lkIFdlYlBh
Z2VQcm94eTo6dXBkYXRlUERGSFVETG9jYXRpb24oUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlm
aWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIHBhZ2VDbGllbnQoKS51
cGRhdGVQREZIVURMb2NhdGlvbihpZGVudGlmaWVyLCByZWN0KTsKK30KKwordm9pZCBXZWJQYWdl
UHJveHk6OnBkZlpvb21JbihQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Wm9vbVBERkluKGlkZW50aWZpZXIpKTsKK30KKwordm9p
ZCBXZWJQYWdlUHJveHk6OnBkZlpvb21PdXQoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVy
KQoreworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Olpvb21QREZPdXQoaWRlbnRpZmllcikp
OworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6cGRmU2F2ZVRvUERGKFBERlBsdWdpbklkZW50aWZp
ZXIgaWRlbnRpZmllcikKK3sKKyAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBh
Z2U6OlNhdmVQREYoaWRlbnRpZmllciksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyldIChTdHJpbmcmJiBzdWdnZXN0ZWRGaWxlbmFtZSwgVVJMJiYgb3JpZ2luYXRpbmdVUkws
IGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YVJlZmVyZW5jZSkgeworICAgICAgICBzYXZl
UERGVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIoV1RGTW92ZShzdWdnZXN0ZWRGaWxlbmFtZSksIFdU
Rk1vdmUob3JpZ2luYXRpbmdVUkwpLCBkYXRhUmVmZXJlbmNlKTsKKyAgICB9KTsKK30KKwordm9p
ZCBXZWJQYWdlUHJveHk6OnBkZk9wZW5XaXRoUHJldmlldyhQREZQbHVnaW5JZGVudGlmaWVyIGlk
ZW50aWZpZXIpCit7CisgICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJQYWdlOjpP
cGVuUERGV2l0aFByZXZpZXcoaWRlbnRpZmllciksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyldIChTdHJpbmcmJiBzdWdnZXN0ZWRGaWxlbmFtZSwgRnJhbWVJbmZvRGF0YSYm
IGZyYW1lSW5mbywgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhLCBjb25zdCBTdHJpbmcm
IHBkZlVVSUQpIHsKKyAgICAgICAgc2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhO
YXRpdmVBcHBsaWNhdGlvbihXVEZNb3ZlKHN1Z2dlc3RlZEZpbGVuYW1lKSwgV1RGTW92ZShmcmFt
ZUluZm8pLCBkYXRhLCBwZGZVVUlEKTsKKyAgICB9KTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShV
SV9QUk9DRVNTX1BERl9IVUQpCisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8g
UExBVEZPUk0oTUFDKQpJbmRleDogU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNjYwODMpCisrKyBTb3VyY2UvV2ViS2l0L1dlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNzkwLDYgKzE3
OTAsNyBAQAogCQlEM0I5NDg0OTExRkY0QjY1MDAwMzJCMzkgLyogV2ViU2VhcmNoUG9wdXBNZW51
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0I5NDg0
NTExRkY0QjY1MDAwMzJCMzkgLyogV2ViU2VhcmNoUG9wdXBNZW51LmggKi87IH07CiAJCURGNDYy
RTBGMjNGMjJGNTUwMEVGRjM1RiAvKiBXS0hUVFBDb29raWVTdG9yZVByaXZhdGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERGNDYyRTBFMjNGMjJGNTMw
MEVGRjM1RiAvKiBXS0hUVFBDb29raWVTdG9yZVByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlERjQ2MkUxMjIzRjMzOEJFMDBFRkYzNUYg
LyogV0tDb250ZW50V29ybGRQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBERjQ2MkUxMTIzRjMzOEFEMDBFRkYzNUYgLyogV0tDb250ZW50V29y
bGRQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJREY4NENFRTQyNDlBQTI0RDAwOTA5NkY2IC8qIFdLUERGSFVEVmlldy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERGODRDRUUyMjQ5QUEyMUYw
MDkwOTZGNiAvKiBXS1BERkhVRFZpZXcubW0gKi87IH07CiAJCUUxMDVGRTU0MThEN0I5REUwMDhG
NTdBOCAvKiBFZGl0aW5nUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUxMDVGRTUzMThEN0I5REUwMDhGNTdBOCAvKiBFZGl0aW5nUmFuZ2UuaCAq
LzsgfTsKIAkJRTExRDM1QUUxNkI2M0QxQjAwNkQyM0Q3IC8qIGNvbS5hcHBsZS5XZWJQcm9jZXNz
LnNiIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTk2
N0UzNzE1MEFCNUUyMDBDNzMxNjkgLyogY29tLmFwcGxlLldlYlByb2Nlc3Muc2IgKi87IH07CiAJ
CUUxNEE5NTRBMTZFMDE2QTQwMDY4REU4MiAvKiBOZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRl
Z2llcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE0
QTk1NDgxNkUwMTZBNDAwNjhERTgyIC8qIE5ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVz
LmggKi87IH07CkBAIC01Mjc1LDEwICs1Mjc2LDEzIEBACiAJCUQzQjk0ODQzMTFGRjRCNjUwMDAz
MkIzOSAvKiBXZWJQb3B1cE1lbnUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2ViUG9wdXBNZW51Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQzQjk0ODQ0MTFG
RjRCNjUwMDAzMkIzOSAvKiBXZWJTZWFyY2hQb3B1cE1lbnUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2ViU2VhcmNoUG9wdXBNZW51LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRDNCOTQ4NDUxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlNlYXJjaFBv
cHVwTWVudS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJTZWFyY2hQb3B1
cE1lbnUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREYyQjEzQjEyNDlEOEY1NDAw
NUJDQzUyIC8qIFBERlBsdWdpbklkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gUERGUGx1Z2luSWRlbnRpZmllci5oOyBwYXRoID0gUERGL1BERlBsdWdpbklkZW50
aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREY0NjJFMEUyM0YyMkY1MzAw
RUZGMzVGIC8qIFdLSFRUUENvb2tpZVN0b3JlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXS0hUVFBDb29raWVTdG9yZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJREY0NjJFMTEyM0YzMzhBRDAwRUZGMzVGIC8qIFdLQ29udGVudFdvcmxk
UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0NvbnRlbnRXb3Js
ZFByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREY1OEM2MzExMzcxQUM1
ODAwRjlBMzdDIC8qIE5hdGl2ZVdlYldoZWVsRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTmF0aXZlV2ViV2hlZWxFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlERjU4QzYzNTEzNzFBQ0EwMDBGOUEzN0MgLyogTmF0aXZlV2ViV2hlZWxFdmVudE1h
Yy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5hdGl2ZVdlYldo
ZWVsRXZlbnRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURGODRDRUUyMjQ5
QUEyMUYwMDkwOTZGNiAvKiBXS1BERkhVRFZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IG5hbWUgPSBXS1BERkhVRFZpZXcubW07IHBhdGggPSBQREYvV0tQREZIVURWaWV3
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlERjg0Q0VFMzI0OUFBMjFGMDA5MDk2
RjYgLyogV0tQREZIVURWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdL
UERGSFVEVmlldy5oOyBwYXRoID0gUERGL1dLUERGSFVEVmlldy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFMTA1RkU1MzE4RDdCOURFMDA4RjU3QTggLyogRWRpdGluZ1JhbmdlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVkaXRpbmdSYW5nZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFMTE1QzcxNTE5MEY4QTI1MDBFQ0M1MTYgLyogY29tLmFw
cGxlLldlYktpdC5TdG9yYWdlLnNiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IGNvbS5hcHBsZS5X
ZWJLaXQuU3RvcmFnZS5zYjsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvY29tLmFwcGxl
LldlYktpdC5TdG9yYWdlLnNiOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9Owog
CQlFMTMzRkQ4OTE0MjNERDdGMDBGQzdCRkIgLyogV2ViS2l0LmljbnMgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBpbWFnZS5pY25zOyBuYW1lID0gV2Vi
S2l0LmljbnM7IHBhdGggPSBSZXNvdXJjZXMvV2ViS2l0LmljbnM7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC04OTYzLDYgKzg5NjcsNyBAQAogCQkJCUNENDU3MEQ4MjQ0NENBMTcwMEEz
RENFQiAvKiBNZWRpYSAqLywKIAkJCQk1MTBDQzdFNzE2MTM4RTcyMDBEMDNFRDMgLyogTmV0d29y
ayAqLywKIAkJCQkzMUEyRUM0MDE0ODk5NzM3MDA4MTBENzEgLyogTm90aWZpY2F0aW9ucyAqLywK
KwkJCQlERjg0Q0VFMTI0OUFBMjAwMDA5MDk2RjYgLyogUERGICovLAogCQkJCTFBRUZDQzA1MTFE
MDFGMzQwMDgyMTlEMyAvKiBQbHVnaW5zICovLAogCQkJCTJEMTU1MUE5MUY1QTlCNDIwMDA2RTNG
RSAvKiBSZW1vdGVMYXllclRyZWUgKi8sCiAJCQkJMUFBRjA4OUUxOTI2ODFBQzAwQjYzOTBDIC8q
IFVzZXJDb250ZW50ICovLApAQCAtMTA0NTEsNiArMTA0NTYsMTUgQEAKIAkJCXBhdGggPSBpb3M7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQlERjg0Q0VFMTI0OUFBMjAwMDA5
MDk2RjYgLyogUERGICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgK
KwkJCQlERjg0Q0VFMzI0OUFBMjFGMDA5MDk2RjYgLyogV0tQREZIVURWaWV3LmggKi8sCisJCQkJ
REY4NENFRTIyNDlBQTIxRjAwOTA5NkY2IC8qIFdLUERGSFVEVmlldy5tbSAqLywKKwkJCSk7CisJ
CQluYW1lID0gUERGOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJRTE3MDg3
NkQxNkQ2Q0E3MjAwRjk5MjI2IC8qIEZpbGVBUEkgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKApAQCAtMTA0NzksNiArMTA0OTMsNyBAQAogCQkJCTJEMkFERjAzMTYz
NjI0MzUwMDE5N0U0NyAvKiBQREZQbHVnaW5Bbm5vdGF0aW9uLm1tICovLAogCQkJCTJEMkFERjBE
MTYzNjREODIwMDE5N0U0NyAvKiBQREZQbHVnaW5DaG9pY2VBbm5vdGF0aW9uLmggKi8sCiAJCQkJ
MkQyQURGMEUxNjM2NEQ4MjAwMTk3RTQ3IC8qIFBERlBsdWdpbkNob2ljZUFubm90YXRpb24ubW0g
Ki8sCisJCQkJREYyQjEzQjEyNDlEOEY1NDAwNUJDQzUyIC8qIFBERlBsdWdpbklkZW50aWZpZXIu
aCAqLywKIAkJCQkyRDQyOUJGQTE3MjFFMkJBMDBFQzY4MUYgLyogUERGUGx1Z2luUGFzc3dvcmRG
aWVsZC5oICovLAogCQkJCTJENDI5QkZCMTcyMUUyQkEwMEVDNjgxRiAvKiBQREZQbHVnaW5QYXNz
d29yZEZpZWxkLm1tICovLAogCQkJCTJEMkFERjA1MTYzNjJEQzcwMDE5N0U0NyAvKiBQREZQbHVn
aW5UZXh0QW5ub3RhdGlvbi5oICovLApAQCAtMTMxNDIsNiArMTMxNTcsNyBAQAogCQkJCTYzNzI4
MUEzMjFBREM3NDQwMDlFMERFNiAvKiBXS0Rvd25sb2FkUHJvZ3Jlc3MubW0gaW4gU291cmNlcyAq
LywKIAkJCQk1Q0U5MTIwRDIyOTNDMjE5MDA1QkVDNzggLyogV0tNYWluLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNDY1N0Q4OEEyMjY2NEEyRjAwNURFODIzIC8qIFdLT3JpZW50YXRpb25BY2Nlc3NB
bGVydC5tbSBpbiBTb3VyY2VzICovLAorCQkJCURGODRDRUU0MjQ5QUEyNEQwMDkwOTZGNiAvKiBX
S1BERkhVRFZpZXcubW0gaW4gU291cmNlcyAqLywKIAkJCQk1Q0EyNkQ4MzIxN0FEMUI4MDBGOTdB
MzUgLyogV0tTYWZlQnJvd3NpbmdXYXJuaW5nLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMURCMDE5
NDQyMTFDRjAwNTAwOUZCM0U4IC8qIFdLU2hhcmVTaGVldC5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTdBNzhGRjMzMjI0MTkxOUIwMDk2NDgzRSAvKiBXS1N0b3JhZ2VBY2Nlc3NBbGVydC5tbSBpbiBT
b3VyY2VzICovLApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BE
RkxheWVyQ29udHJvbGxlclNQSS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BERi9QREZMYXllckNvbnRyb2xsZXJTUEkuaAkocmV2aXNpb24gMjY2MDgz
KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERkxheWVyQ29udHJv
bGxlclNQSS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4NywxMiBAQCB0eXBlZGVmIE5TX0VO
VU0oTlNJbnRlZ2VyLCBQREZMYXllckNvbnRyCiAKIC0gKHZvaWQpc25hcHNob3RJbkNvbnRleHQ6
KENHQ29udGV4dFJlZiljb250ZXh0OwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkK
Ky0gKHZvaWQpc2V0RGlzcGxheXNQREZIVURDb250cm9sbGVyOihCT09MKWRpc3BsYXlzQ29udHJv
bGxlcjsKKy0gKHZvaWQpem9vbUluOihpZClhdFBvaW50OworLSAodm9pZCl6b29tT3V0OihpZClh
dFBvaW50OworI2VuZGlmCisKIC0gKHZvaWQpbWFnbmlmeVdpdGhNYWduaWZpY2F0aW9uOihDR0Zs
b2F0KW1hZ25pZmljYXRpb24gYXRQb2ludDooQ0dQb2ludClwb2ludCBpbW1lZGlhdGVseTooQk9P
TClpbW1lZGlhdGVseTsKIAogLSAoQ0dQb2ludClzY3JvbGxQb3NpdGlvbjsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmgJKHJldmlz
aW9uIDI2NjA4MykKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQ
bHVnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShQREZL
SVRfUExVR0lOKQogCiAjaW5jbHVkZSAiUERGS2l0SW1wb3J0cy5oIgorI2luY2x1ZGUgIlBERlBs
dWdpbklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJQbHVnaW4uaCIKICNpbmNsdWRlICJXZWJFdmVu
dC5oIgogI2luY2x1ZGUgIldlYkhpdFRlc3RSZXN1bHREYXRhLmgiCkBAIC01MCw2ICs1MSw3IEBA
IHR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTVmFsdWUqIEpTVmEKIE9CSkNfQ0xBU1MgTlNB
cnJheTsKIE9CSkNfQ0xBU1MgTlNBdHRyaWJ1dGVkU3RyaW5nOwogT0JKQ19DTEFTUyBOU0RhdGE7
CitPQkpDX0NMQVNTIE5TRXZlbnQ7CiBPQkpDX0NMQVNTIE5TU3RyaW5nOwogT0JKQ19DTEFTUyBQ
REZBbm5vdGF0aW9uOwogT0JKQ19DTEFTUyBQREZMYXllckNvbnRyb2xsZXI7CkBAIC03Nyw4ICs3
OSw5IEBAIGNsYXNzIFBERlBsdWdpbkFubm90YXRpb247CiBjbGFzcyBQREZQbHVnaW5QYXNzd29y
ZEZpZWxkOwogY2xhc3MgUGx1Z2luVmlldzsKIGNsYXNzIFdlYkZyYW1lOworc3RydWN0IEZyYW1l
SW5mb0RhdGE7CiAKLWNsYXNzIFBERlBsdWdpbiBmaW5hbCA6IHB1YmxpYyBQbHVnaW4sIHByaXZh
dGUgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEKK2NsYXNzIFBERlBsdWdpbiBmaW5hbCA6IHB1Ymxp
YyBQbHVnaW4sIHB1YmxpYyBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYQogI2lmIEhBVkUoSU5DUkVN
RU5UQUxfUERGX0FQSVMpCiAgICAgLCBwcml2YXRlIFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3Ry
ZWFtTG9hZGVyQ2xpZW50CiAjZW5kaWYKQEAgLTEwMyw5ICsxMDYsMTkgQEAgcHVibGljOgogICAg
IHZvaWQgbm90aWZ5U2VsZWN0aW9uQ2hhbmdlZChQREZTZWxlY3Rpb24gKik7CiAgICAgdm9pZCBu
b3RpZnlDdXJzb3JDaGFuZ2VkKHVpbnQ2NF90IC8qIFBERkxheWVyQ29udHJvbGxlckN1cnNvclR5
cGUgKi8pOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICB2b2lkIHpvb21J
bigpOworICAgIHZvaWQgem9vbU91dCgpOworICAgIHZvaWQgc2F2ZShDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFVSTCYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5j
ZSYpPiYmKTsKKyAgICB2b2lkIG9wZW5XaXRoUHJldmlldyhDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGNvbnN0IFN0cmluZyYsIEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNl
JiwgY29uc3QgU3RyaW5nJik+JiYpOworICAgIFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmll
cigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorI2VuZGlmCisKICAgICB2b2lkIGNs
aWNrZWRMaW5rKE5TVVJMICopOworI2lmICFFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQogICAg
IHZvaWQgc2F2ZVRvUERGKCk7CiAgICAgdm9pZCBvcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKCk7
CisjZW5kaWYKICAgICB2b2lkIHdyaXRlSXRlbXNUb1Bhc3RlYm9hcmQoTlNTdHJpbmcgKnBhc3Rl
Ym9hcmROYW1lLCBOU0FycmF5ICppdGVtcywgTlNBcnJheSAqdHlwZXMpOwogICAgIHZvaWQgc2hv
d0RlZmluaXRpb25Gb3JBdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0cmluZyAqLCBDR1Bv
aW50KTsKICAgICB2b2lkIHBlcmZvcm1XZWJTZWFyY2goTlNTdHJpbmcgKik7CkBAIC0xMTgsNyAr
MTMxLDEwIEBAIHB1YmxpYzoKIAogICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0RnJvbVBE
RlZpZXdUb1NjcmVlbihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBjb25zdDsKICAgICBXZWJD
b3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbVJvb3RWaWV3VG9QREZWaWV3KGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JikgY29uc3Q7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZyb21QREZW
aWV3VG9Sb290Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OworICAgIFdlYkNv
cmU6OkludFJlY3QgY29udmVydEZyb21QREZWaWV3VG9Sb290Vmlldyhjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JikgY29uc3Q7CiAgICAgV2ViQ29yZTo6SW50UmVjdCBib3VuZHNPblNjcmVlbigpIGNv
bnN0OworICAgIFdlYkNvcmU6OkludFJlY3QgZnJhbWVGb3JIVUQoKSBjb25zdDsKIAogICAgIGJv
b2wgc2hvd0NvbnRleHRNZW51QXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwogCkBA
IC0xNTksNyArMTc1LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHdhbnRzV2hlZWxFdmVudHMoKSBm
aW5hbCB7IHJldHVybiB0cnVlOyB9CiAgICAgdm9pZCBnZW9tZXRyeURpZENoYW5nZShjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBwbHVnaW5TaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlw
UmVjdCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiBwbHVnaW5Ub1Jvb3RWaWV3VHJh
bnNmb3JtKSBmaW5hbDsKICAgICB2b2lkIGNvbnRlbnRzU2NhbGVGYWN0b3JDaGFuZ2VkKGZsb2F0
KSBmaW5hbDsKLSAgICB2b2lkIHZpc2liaWxpdHlEaWRDaGFuZ2UoYm9vbCkgZmluYWwgeyB9Cisg
ICAgdm9pZCB2aXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wpIGZpbmFsOwogICAgIHZvaWQgZnJhbWVE
aWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHJlcXVlc3RJRCkgZmluYWw7CiAgICAgdm9pZCBmcmFt
ZURpZEZhaWwodWludDY0X3QgcmVxdWVzdElELCBib29sIHdhc0NhbmNlbGxlZCkgZmluYWw7CiAg
ICAgdm9pZCBkaWRFdmFsdWF0ZUphdmFTY3JpcHQodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBT
dHJpbmcmIHJlc3VsdCkgZmluYWw7CkBAIC0yNjMsNyArMjc5LDYgQEAgcHJpdmF0ZToKICAgICBO
U0V2ZW50ICpuc0V2ZW50Rm9yV2ViTW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7CiAg
ICAgV2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZyb21QbHVnaW5Ub1BERlZpZXcoY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmKSBjb25zdDsKICAgICBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJv
bVJvb3RWaWV3VG9QbHVnaW4oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKLSAgICBX
ZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3KGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JikgY29uc3Q7CiAgICAgCiAgICAgYm9vbCBzdXBwb3J0c0Zvcm1zKCk7CiAg
ICAgYm9vbCBpc0Z1bGxGcmFtZVBsdWdpbigpIGNvbnN0OwpAQCAtNDAzLDYgKzQxOCw5IEBAIHBy
aXZhdGU6CiAjZW5kaWYKIAogI2VuZGlmIC8vIEhBVkUoSU5DUkVNRU5UQUxfUERGX0FQSVMpCisj
aWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBQREZQbHVnaW5JZGVudGlmaWVyIG1f
aWRlbnRpZmllcjsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0J
KHJldmlzaW9uIDI2NjA4MykKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BE
Ri9QREZQbHVnaW4ubW0JKHdvcmtpbmcgY29weSkKQEAgLTQzMywxMiArNDMzLDE2IEBAIC0gKHZv
aWQpcGVyZm9ybVNwb3RsaWdodFNlYXJjaDooTlNTdHJpbmcKIAogLSAodm9pZClvcGVuV2l0aE5h
dGl2ZUFwcGxpY2F0aW9uCiB7CisjaWYgIUVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCiAgICAg
X3BkZlBsdWdpbi0+b3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbigpOworI2VuZGlmCiB9CiAKIC0g
KHZvaWQpc2F2ZVRvUERGCiB7CisjaWYgIUVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCiAgICAg
X3BkZlBsdWdpbi0+c2F2ZVRvUERGKCk7CisjZW5kaWYKIH0KIAogLSAodm9pZClwZGZMYXllckNv
bnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBjbGlja2Vk
TGlua1dpdGhVUkw6KE5TVVJMICopdXJsCkBAIC02MDAsNyArNjA0LDEzIEBAIGlubGluZSBQREZQ
bHVnaW46OlBERlBsdWdpbihXZWJGcmFtZSYgZnIKICNpZiBIQVZFKElOQ1JFTUVOVEFMX1BERl9B
UElTKQogICAgICwgbV9pbmNyZW1lbnRhbFBERkxvYWRpbmdFbmFibGVkKFdlYkNvcmU6OlJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuaW5jcmVtZW50YWxQREZMb2FkaW5n
RW5hYmxlZCgpKQogI2VuZGlmCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICAs
IG1faWRlbnRpZmllcihQREZQbHVnaW5JZGVudGlmaWVyOjpnZW5lcmF0ZSgpKQorI2VuZGlmCiB7
CisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBbbV9wZGZMYXllckNvbnRyb2xs
ZXIgc2V0RGlzcGxheXNQREZIVURDb250cm9sbGVyOk5PXTsKKyNlbmRpZgogICAgIG1fcGRmTGF5
ZXJDb250cm9sbGVyLmdldCgpLmRlbGVnYXRlID0gbV9wZGZMYXllckNvbnRyb2xsZXJEZWxlZ2F0
ZS5nZXQoKTsKICAgICBtX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKS5wYXJlbnRMYXllciA9IG1f
Y29udGVudExheWVyLmdldCgpOwogCkBAIC02NDAsNiArNjUwLDEwIEBAIGlubGluZSBQREZQbHVn
aW46OlBERlBsdWdpbihXZWJGcmFtZSYgZnIKIAogUERGUGx1Z2luOjp+UERGUGx1Z2luKCkKIHsK
KyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIGlmIChhdXRvKiBwYWdlID0gbV9m
cmFtZS5wYWdlKCkpCisgICAgICAgIHBhZ2UtPnJlbW92ZVBERkhVRCgqdGhpcyk7CisjZW5kaWYK
IH0KIAogI2lmIEhBVkUoSU5DUkVNRU5UQUxfUERGX0FQSVMpCkBAIC0xNzcyLDYgKzE3ODYsMTEg
QEAgdm9pZCBQREZQbHVnaW46OmNvbnRlbnRzU2NhbGVGYWN0b3JDaGFuZwogICAgIHVwZGF0ZVBh
Z2VBbmREZXZpY2VTY2FsZUZhY3RvcnMoKTsKIH0KIAorSW50UmVjdCBQREZQbHVnaW46OmZyYW1l
Rm9ySFVEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29udmVydEZyb21QREZWaWV3VG9Sb290Vmll
dyhJbnRSZWN0KEludFBvaW50KCksIHNpemUoKSkpOworfQorCiB2b2lkIFBERlBsdWdpbjo6Y2Fs
Y3VsYXRlU2l6ZXMoKQogewogICAgIGlmIChbbV9wZGZEb2N1bWVudCBpc0xvY2tlZF0pIHsKQEAg
LTE3ODIsNiArMTgwMSwxMCBAQCB2b2lkIFBERlBsdWdpbjo6Y2FsY3VsYXRlU2l6ZXMoKQogCiAg
ICAgbV9maXJzdFBhZ2VIZWlnaHQgPSBbbV9wZGZEb2N1bWVudCBwYWdlQ291bnRdID8gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KENHQ2VpbGluZyhbW21fcGRmRG9jdW1lbnQgcGFnZUF0SW5kZXg6MF0g
Ym91bmRzRm9yQm94OmtQREZEaXNwbGF5Qm94Q3JvcEJveF0uc2l6ZS5oZWlnaHQpKSA6IDA7CiAg
ICAgc2V0UERGRG9jdW1lbnRTaXplKEludFNpemUoW21fcGRmTGF5ZXJDb250cm9sbGVyIGNvbnRl
bnRTaXplUmVzcGVjdGluZ1pvb21dKSk7CisKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVE
KQorICAgIG1fZnJhbWUucGFnZSgpLT51cGRhdGVQREZIVURMb2NhdGlvbigqdGhpcywgZnJhbWVG
b3JIVUQoKSk7CisjZW5kaWYKIH0KIAogYm9vbCBQREZQbHVnaW46OmluaXRpYWxpemUoY29uc3Qg
UGFyYW1ldGVycyYgcGFyYW1ldGVycykKQEAgLTE5MTYsNyArMTkzOSwxMyBAQCBJbnRQb2ludCBQ
REZQbHVnaW46OmNvbnZlcnRGcm9tUERGVmlld1RvCiAgICAgSW50UG9pbnQgcG9pbnRJblBsdWdp
bkNvb3JkaW5hdGVzKHBvaW50LngoKSwgc2l6ZSgpLmhlaWdodCgpIC0gcG9pbnQueSgpKTsKICAg
ICByZXR1cm4gbV9yb290Vmlld1RvUGx1Z2luVHJhbnNmb3JtLmludmVyc2UoKS52YWx1ZU9yKEFm
ZmluZVRyYW5zZm9ybSgpKS5tYXBQb2ludChwb2ludEluUGx1Z2luQ29vcmRpbmF0ZXMpOwogfQot
ICAgIAorCitJbnRSZWN0IFBERlBsdWdpbjo6Y29udmVydEZyb21QREZWaWV3VG9Sb290Vmlldyhj
b25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAoreworICAgIEludFJlY3QgcmVjdEluUGx1Z2luQ29v
cmRpbmF0ZXMocmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkp
OworICAgIHJldHVybiBtX3Jvb3RWaWV3VG9QbHVnaW5UcmFuc2Zvcm0uaW52ZXJzZSgpLnZhbHVl
T3IoQWZmaW5lVHJhbnNmb3JtKCkpLm1hcFJlY3QocmVjdEluUGx1Z2luQ29vcmRpbmF0ZXMpOwor
fQorCiBJbnRQb2ludCBQREZQbHVnaW46OmNvbnZlcnRGcm9tUm9vdFZpZXdUb1BERlZpZXcoY29u
c3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAogewogICAgIEludFBvaW50IHBvaW50SW5QbHVnaW5D
b29yZGluYXRlcyA9IG1fcm9vdFZpZXdUb1BsdWdpblRyYW5zZm9ybS5tYXBQb2ludChwb2ludCk7
CkBAIC0xOTQ3LDYgKzE5NzYsMTggQEAgSW50UmVjdCBQREZQbHVnaW46OmJvdW5kc09uU2NyZWVu
KCkgY29ucwogICAgIHJldHVybiBmcmFtZVZpZXctPmNvbnRlbnRzVG9TY3JlZW4oZW5jbG9zaW5n
SW50UmVjdChyZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKSk7CiB9CiAKK3ZvaWQgUERGUGx1Z2lu
Ojp2aXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wgdmlzaWJsZSkKK3sKKyNpZiBFTkFCTEUoVUlfUFJP
Q0VTU19QREZfSFVEKQorICAgIGlmICh2aXNpYmxlKQorICAgICAgICBtX2ZyYW1lLnBhZ2UoKS0+
Y3JlYXRlUERGSFVEKCp0aGlzLCBmcmFtZUZvckhVRCgpKTsKKyAgICBlbHNlCisgICAgICAgIG1f
ZnJhbWUucGFnZSgpLT5yZW1vdmVQREZIVUQoKnRoaXMpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0odmlzaWJsZSk7CisjZW5kaWYKK30KKwogdm9pZCBQREZQbHVnaW46Omdlb21ldHJ5RGlkQ2hh
bmdlKGNvbnN0IEludFNpemUmIHBsdWdpblNpemUsIGNvbnN0IEludFJlY3QmLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0pCiB7CiAgICAgaWYgKHNpemUo
KSA9PSBwbHVnaW5TaXplICYmIHBsdWdpblZpZXcoKS0+cGFnZVNjYWxlRmFjdG9yKCkgPT0gW21f
cGRmTGF5ZXJDb250cm9sbGVyIGNvbnRlbnRTY2FsZUZhY3Rvcl0pCkBAIC0yMzkyLDYgKzI0MzMs
MzEgQEAgYm9vbCBQREZQbHVnaW46OnBsdWdpbkhhbmRsZXNDb250ZW50T2ZmcwogICAgIHJldHVy
biB0cnVlOwogfQogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKwordm9pZCBQREZQ
bHVnaW46Onpvb21JbigpCit7CisgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHpvb21JbjpuaWxd
OworfQorCit2b2lkIFBERlBsdWdpbjo6em9vbU91dCgpCit7CisgICAgW21fcGRmTGF5ZXJDb250
cm9sbGVyIHpvb21PdXQ6bmlsXTsKK30KKwordm9pZCBQREZQbHVnaW46OnNhdmUoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmLCBjb25zdCBVUkwmLCBjb25zdCBJUEM6OkRhdGFS
ZWZlcmVuY2UmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBOU0RhdGEgKmRhdGEgPSBs
aXZlRGF0YSgpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fc3VnZ2VzdGVkRmlsZW5hbWUsIG1f
ZnJhbWUudXJsKCksIElQQzo6IERhdGFSZWZlcmVuY2Uoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxlbmd0aCkpOworfQorCit2b2lkIFBERlBsdWdpbjo6b3Bl
bldpdGhQcmV2aWV3KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJiwgRnJhbWVJ
bmZvRGF0YSYmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBOU0RhdGEgKmRhdGEgPSBsaXZlRGF0YSgpOworICAg
IGNvbXBsZXRpb25IYW5kbGVyKG1fc3VnZ2VzdGVkRmlsZW5hbWUsIG1fZnJhbWUuaW5mbygpLCBJ
UEM6OiBEYXRhUmVmZXJlbmNlIHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuYnl0
ZXMpLCBkYXRhLmxlbmd0aCB9LCBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCkpOworfQorCisj
ZWxzZSAvLyBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQogICAgIAogdm9pZCBQREZQbHVnaW46
OnNhdmVUb1BERigpCiB7CkBAIC0yNDI0LDYgKzI0OTAsOCBAQCB2b2lkIFBERlBsdWdpbjo6b3Bl
bldpdGhOYXRpdmVBcHBsaWNhdGlvCiAgICAgbV9mcmFtZS5wYWdlKCktPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6T3BlblBERkZyb21UZW1wb3JhcnlGb2xkZXJXaXRoTmF0aXZlQXBwbGlj
YXRpb24obV9mcmFtZS5pbmZvKCksIG1fdGVtcG9yYXJ5UERGVVVJRCkpOwogfQogCisjZW5kaWYg
Ly8gRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKwogdm9pZCBQREZQbHVnaW46OndyaXRlSXRl
bXNUb1Bhc3RlYm9hcmQoTlNTdHJpbmcgKnBhc3RlYm9hcmROYW1lLCBOU0FycmF5ICppdGVtcywg
TlNBcnJheSAqdHlwZXMpCiB7CiAgICAgYXV0byBwYXN0ZWJvYXJkVHlwZXMgPSBtYWtlVmVjdG9y
PFN0cmluZz4odHlwZXMpOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMv
UERGL1BERlBsdWdpbklkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luSWRlbnRpZmllci5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW5JZGVudGlm
aWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorZW51bSBQREZQbHVn
aW5JZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBQREZQbHVnaW5JZGVudGlmaWVyID0gT2JqZWN0
SWRlbnRpZmllcjxQREZQbHVnaW5JZGVudGlmaWVyVHlwZT47CisjZW5kaWYKKworfQpJbmRleDog
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9u
IDI2NjA4MykKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiTmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29u
bmVjdGlvbi5oIgogI2luY2x1ZGUgIk5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdl
ci5oIgorI2luY2x1ZGUgIlBERlBsdWdJbi5oIgogI2luY2x1ZGUgIlBhZ2VCYW5uZXIuaCIKICNp
bmNsdWRlICJQbHVnaW5Qcm9jZXNzQXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIlBsdWdpblByb3h5
LmgiCkBAIC01MTIzLDEyICs1MTI0LDEyIEBAIHZvaWQgV2ViUGFnZTo6ZGlkRmluaXNoUHJpbnRP
cGVyYXRpb24oY28KIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pICYmICFF
TkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQogdm9pZCBXZWJQYWdlOjpzYXZlUERGVG9GaWxlSW5E
b3dubG9hZHNGb2xkZXIoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgY29uc3QgVVJM
JiBvcmlnaW5hdGluZ1VSTCwgY29uc3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgbG9uZyBzaXpl
KQogewogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2F2ZVBERlRvRmlsZUluRG93
bmxvYWRzRm9sZGVyKHN1Z2dlc3RlZEZpbGVuYW1lLCBvcmlnaW5hdGluZ1VSTCwgSVBDOjpEYXRh
UmVmZXJlbmNlKGRhdGEsIHNpemUpKSk7CiB9CiAKLSNpZiBQTEFURk9STShDT0NPQSkKIHZvaWQg
V2ViUGFnZTo6c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNh
dGlvbihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBGcmFtZUluZm9EYXRhJiYgZnJh
bWVJbmZvLCBjb25zdCB1aW50OF90KiBkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUsIGNvbnN0IFN0
cmluZyYgcGRmVVVJRCkKIHsKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNhdmVQ
REZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oc3VnZ2VzdGVk
RmlsZW5hbWUsIGZyYW1lSW5mbywgSVBDOjpEYXRhUmVmZXJlbmNlKGRhdGEsIHNpemUpLCBwZGZV
VUlEKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
CShyZXZpc2lvbiAyNjYwODMpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJNZXNz
YWdlUmVjZWl2ZXIuaCIKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCiAjaW5jbHVkZSAiT3B0
aW9uYWxDYWxsYmFja0lELmgiCisjaW5jbHVkZSAiUERGUGx1Z2luSWRlbnRpZmllci5oIgogI2lu
Y2x1ZGUgIlBsdWdpbi5oIgogI2luY2x1ZGUgIlBvbGljeURlY2lzaW9uLmgiCiAjaW5jbHVkZSAi
U2FuZGJveEV4dGVuc2lvbi5oIgpAQCAtMzQ1LDYgKzM0NiwxNiBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGNlbnRlclNlbGVjdGlvbkluVmlzaWJsZUFyZWEoKTsKIAorI2lmIEVOQUJMRShVSV9QUk9D
RVNTX1BERl9IVUQpCisgICAgdm9pZCBjcmVhdGVQREZIVUQoUERGUGx1Z2luJiwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgdXBkYXRlUERGSFVETG9jYXRpb24oUERGUGx1Z2lu
JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgcmVtb3ZlUERGSFVEKFBERlBs
dWdpbiYpOworICAgIHZvaWQgem9vbVBERkluKFBERlBsdWdpbklkZW50aWZpZXIpOworICAgIHZv
aWQgem9vbVBERk91dChQREZQbHVnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHNhdmVQREYoUERG
UGx1Z2luSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmLCBj
b25zdCBVUkwmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKT4mJik7CisgICAgdm9pZCBvcGVu
UERGV2l0aFByZXZpZXcoUERGUGx1Z2luSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChjb25zdCBTdHJpbmcmLCBGcmFtZUluZm9EYXRhJiYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5j
ZSYsIGNvbnN0IFN0cmluZyYpPiYmKTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAg
ICAgdm9pZCB3aWxsQ29tbWl0TGF5ZXJUcmVlKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJik7
CiAgICAgdm9pZCBkaWRGbHVzaExheWVyVHJlZUF0VGltZShNb25vdG9uaWNUaW1lKTsKQEAgLTEw
NzQsOSArMTA4NSw4IEBAIHB1YmxpYzoKICAgICBOU0RpY3Rpb25hcnkgKmRhdGFEZXRlY3Rpb25D
b250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhRGV0ZWN0aW9uQ29udGV4dC5nZXQoKTsgfQog
I2VuZGlmCiAKKyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikgJiYgIUVOQUJMRShVSV9QUk9DRVNT
X1BERl9IVUQpCiAgICAgdm9pZCBzYXZlUERGVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIoY29uc3Qg
U3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgY29uc3QgVVJMJiBvcmlnaW5hdGluZ1VSTCwgY29u
c3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKTsKLQotI2lmIFBMQVRGT1JNKENP
Q09BKQogICAgIHZvaWQgc2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVB
cHBsaWNhdGlvbihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBGcmFtZUluZm9EYXRh
JiYsIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgY29uc3QgU3RyaW5n
JiBwZGZVVUlEKTsKICNlbmRpZgogCkBAIC0xNzkxLDYgKzE4MDEsMTAgQEAgcHJpdmF0ZToKIAog
ICAgIFdlYkNvcmU6OkNvbG9yIG1fdW5kZXJsYXlDb2xvcjsKIAorI2lmIEVOQUJMRShVSV9QUk9D
RVNTX1BERl9IVUQpCisgICAgSGFzaE1hcDxQREZQbHVnaW5JZGVudGlmaWVyLCBXZWFrUHRyPFBE
RlBsdWdpbj4+IG1fcGRmUGx1Z0luc1dpdGhIVUQ7CisjZW5kaWYKKwogICAgIGJvb2wgbV9pc0lu
UmVkbyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzQ2xvc2VkIHsgZmFsc2UgfTsKICAgICBib29s
IG1fdGFiVG9MaW5rcyB7IGZhbHNlIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHJldmlzaW9uIDI2NjA4MykK
KysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4J
KHdvcmtpbmcgY29weSkKQEAgLTU3Niw2ICs1NzYsMTMgQEAgR2VuZXJhdGVTeW50aGV0aWNFZGl0
aW5nQ29tbWFuZChlbnVtOnVpbgogCiAgICAgU2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVyc0xv
YWRpbmcpCiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIFpvb21QREZJbihX
ZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikKKyAgICBab29tUERGT3V0KFdl
YktpdDo6UERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQorICAgIFNhdmVQREYoV2ViS2l0
OjpQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpIC0+IChTdHJpbmcgZmlsZW5hbWUsIFVS
TCB1cmwsIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhKSBBc3luYworICAgIE9wZW5QREZXaXRoUHJl
dmlldyhXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikgLT4gKFN0cmluZyBm
aWxlbmFtZSwgc3RydWN0IFdlYktpdDo6RnJhbWVJbmZvRGF0YSBmcmFtZUluZm8sIElQQzo6RGF0
YVJlZmVyZW5jZSBkYXRhLCBTdHJpbmcgdXVpZCkgQXN5bmMKKyNlbmRpZgorCiAgICAgVXBkYXRl
Q3VycmVudE1vZGlmaWVyU3RhdGUoT3B0aW9uU2V0PFdlYkNvcmU6OlBsYXRmb3JtRXZlbnQ6Ok1v
ZGlmaWVyPiBtb2RpZmllcnMpCiAgICAgU2ltdWxhdGVEZXZpY2VPcmllbnRhdGlvbkNoYW5nZShk
b3VibGUgYWxwaGEsIGRvdWJsZSBiZXRhLCBkb3VibGUgZ2FtbWEpCiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCShyZXZp
c2lvbiAyNjYwODMpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2Vi
UGFnZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2ltcG9ydCAiRWRp
dGluZ1JhbmdlLmgiCiAjaW1wb3J0ICJFZGl0b3JTdGF0ZS5oIgogI2ltcG9ydCAiRm9udEluZm8u
aCIKKyNpbXBvcnQgIkZyYW1lSW5mb0RhdGEuaCIKICNpbXBvcnQgIkluamVjdGVkQnVuZGxlSGl0
VGVzdFJlc3VsdC5oIgogI2ltcG9ydCAiUERGS2l0SW1wb3J0cy5oIgogI2ltcG9ydCAiUERGUGx1
Z2luLmgiCkBAIC0xMDUxLDcgKzEwNTIsNjIgQEAgdm9pZCBXZWJQYWdlOjpzZXRBY2NlbnRDb2xv
cihXZWJDb3JlOjpDbwogICAgIFtOU0FwcCBfc2V0QWNjZW50Q29sb3I6Y29sb3IuaXNWYWxpZCgp
ID8gV2ViQ29yZTo6bnNDb2xvcihjb2xvcikgOiBuaWxdOwogfQogCi0jZW5kaWYKKyNlbmRpZiAv
LyBIQVZFKEFQUF9BQ0NFTlRfQ09MT1JTKQorCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hV
RCkKKwordm9pZCBXZWJQYWdlOjp6b29tUERGSW4oUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlm
aWVyKQoreworICAgIGF1dG8gcGRmUGx1Z2luID0gbV9wZGZQbHVnSW5zV2l0aEhVRC5nZXQoaWRl
bnRpZmllcik7CisgICAgaWYgKCFwZGZQbHVnaW4pCisgICAgICAgIHJldHVybjsKKyAgICBwZGZQ
bHVnaW4tPnpvb21JbigpOworfQorCit2b2lkIFdlYlBhZ2U6Onpvb21QREZPdXQoUERGUGx1Z2lu
SWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIGF1dG8gcGRmUGx1Z2luID0gbV9wZGZQbHVn
SW5zV2l0aEhVRC5nZXQoaWRlbnRpZmllcik7CisgICAgaWYgKCFwZGZQbHVnaW4pCisgICAgICAg
IHJldHVybjsKKyAgICBwZGZQbHVnaW4tPnpvb21PdXQoKTsKK30KKwordm9pZCBXZWJQYWdlOjpz
YXZlUERGKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChjb25zdCBTdHJpbmcmLCBjb25zdCBVUkwmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2Um
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBhdXRvIHBkZlBsdWdpbiA9IG1fcGRmUGx1
Z0luc1dpdGhIVUQuZ2V0KGlkZW50aWZpZXIpOworICAgIGlmICghcGRmUGx1Z2luKQorICAgICAg
ICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9LCB7IH0sIHsgfSk7CisgICAgcGRmUGx1Z2lu
LT5zYXZlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBXZWJQYWdlOjpv
cGVuUERGV2l0aFByZXZpZXcoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYsIEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgSVBD
OjpEYXRhUmVmZXJlbmNlJiwgY29uc3QgU3RyaW5nJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7
CisgICAgYXV0byBwZGZQbHVnaW4gPSBtX3BkZlBsdWdJbnNXaXRoSFVELmdldChpZGVudGlmaWVy
KTsKKyAgICBpZiAoIXBkZlBsdWdpbikKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVy
KHsgfSwgeyB9LCB7IH0sIHsgfSk7CisgICAgcGRmUGx1Z2luLT5vcGVuV2l0aFByZXZpZXcoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIFdlYlBhZ2U6OmNyZWF0ZVBERkhV
RChQREZQbHVnaW4mIHBsdWdpbiwgY29uc3QgSW50UmVjdCYgYm91bmRpbmdCb3gpCit7CisgICAg
YXV0byBhZGRSZXN1bHQgPSBtX3BkZlBsdWdJbnNXaXRoSFVELmFkZChwbHVnaW4uaWRlbnRpZmll
cigpLCBtYWtlV2Vha1B0cihwbHVnaW4pKTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkp
CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Q3JlYXRlUERGSFVEKHBsdWdp
bi5pZGVudGlmaWVyKCksIGJvdW5kaW5nQm94KSk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6dXBkYXRl
UERGSFVETG9jYXRpb24oUERGUGx1Z2luJiBwbHVnaW4sIGNvbnN0IEludFJlY3QmIGJvdW5kaW5n
Qm94KQoreworICAgIGlmIChtX3BkZlBsdWdJbnNXaXRoSFVELmNvbnRhaW5zKHBsdWdpbi5pZGVu
dGlmaWVyKCkpKQorICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlVwZGF0ZVBE
RkhVRExvY2F0aW9uKHBsdWdpbi5pZGVudGlmaWVyKCksIGJvdW5kaW5nQm94KSk7Cit9CisKK3Zv
aWQgV2ViUGFnZTo6cmVtb3ZlUERGSFVEKFBERlBsdWdpbiYgcGx1Z2luKQoreworICAgIGlmICht
X3BkZlBsdWdJbnNXaXRoSFVELnJlbW92ZShwbHVnaW4uaWRlbnRpZmllcigpKSkKKyAgICAgICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSZW1vdmVQREZIVUQocGx1Z2luLmlkZW50aWZp
ZXIoKSkpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CiAKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NjA4MykKKysrIFRvb2xzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDIwLTA4LTI0ICBBbGV4IENocmlzdGVu
c2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBQREYgaGVhZHMt
dXAgZGlzcGxheSB0byBVSSBwcm9jZXNzIG9uIG1hY09TCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU3ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzU4NzE1ODQ3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1BERlZpZXcubW06CisgICAg
ICAgIChwZGZEYXRhKToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAoY2hlY2tGcmFtZSk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0VUlEZWxlZ2F0ZS5oOgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFVJRGVsZWdhdGUubW06CisgICAgICAgICgtW1Rlc3RV
SURlbGVnYXRlIF93ZWJWaWV3OnNhdmVEYXRhVG9GaWxlOnN1Z2dlc3RlZEZpbGVuYW1lOm1pbWVU
eXBlOm9yaWdpbmF0aW5nVVJMOl0pOgorCiAyMDIwLTA4LTI0ICBKb25hdGhhbiBCZWRhcmQgIDxq
YmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBbcmVzdWx0c2RicHldIEZpeCBwaXAgcGFja2Fn
ZQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1BERlZpZXcu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9X
S1BERlZpZXcubW0JKHJldmlzaW9uIDI2NjA4MykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvV0tQREZWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAs
MjYgQEAKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXN0LmgiCiAj
aW1wb3J0ICJUZXN0TmF2aWdhdGlvbkRlbGVnYXRlLmgiCisjaW1wb3J0ICJUZXN0VUlEZWxlZ2F0
ZS5oIgorI2ltcG9ydCAiVGVzdFVSTFNjaGVtZUhhbmRsZXIuaCIKKyNpbXBvcnQgIlRlc3RXS1dl
YlZpZXcuaCIKICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXcuaD4KICNpbXBvcnQgPFdlYktpdC9X
S1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmll
d1ByaXZhdGVGb3JUZXN0aW5nLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKLSNpZiBI
QVZFKFBERktJVCkgJiYgUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQg
PENhcmJvbi9DYXJib24uaD4KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TKSB8fCBFTkFCTEUo
VUlfUFJPQ0VTU19QREZfSFVEKQorc3RhdGljIE5TRGF0YSAqcGRmRGF0YSgpCit7CisgICAgcmV0
dXJuIFtOU0RhdGEgZGF0YVdpdGhDb250ZW50c09mVVJMOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0g
VVJMRm9yUmVzb3VyY2U6QCJ0ZXN0IiB3aXRoRXh0ZW5zaW9uOkAicGRmIiBzdWJkaXJlY3Rvcnk6
QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXTsKK30KKyNlbmRpZgorCisjaWYgUExBVEZPUk0o
SU9TKQogCiBAaW50ZXJmYWNlIFBERkhvc3RWaWV3Q29udHJvbGxlciA6IFVJVmlld0NvbnRyb2xs
ZXIKICsgKHZvaWQpY3JlYXRlSG9zdFZpZXc6KHZvaWQoXikoaWQgaG9zdFZpZXdDb250cm9sbGVy
KSljYWxsYmFjayBmb3JFeHRlbnNpb25JZGVudGlmaWVyOihOU1N0cmluZyAqKWV4dGVuc2lvbklk
ZW50aWZpZXI7CkBAIC0xMDEsNyArMTE2LDcgQEAgVEVTVChXZWJLaXQsIFdLUERGVmlld0xvc2Vz
QXBwbGljYXRpb25GbwogICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5T
KFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2
MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCiAgICAgLy8gTG9hZCBh
IFBERiwgc28gd2UgaW5zdGFsbCBhIFdLUERGVmlldy4KLSAgICBbd2ViVmlldyBsb2FkRGF0YTpb
TlNEYXRhIGRhdGFXaXRoQ29udGVudHNPZlVSTDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZv
clJlc291cmNlOkAidGVzdCIgd2l0aEV4dGVuc2lvbjpAInBkZiIgc3ViZGlyZWN0b3J5OkAiVGVz
dFdlYktpdEFQSS5yZXNvdXJjZXMiXV0gTUlNRVR5cGU6QCJhcHBsaWNhdGlvbi9wZGYiIGNoYXJh
Y3RlckVuY29kaW5nTmFtZTpAIiIgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHBz
Oi8vd3d3LmFwcGxlLmNvbS8wIl1dOworICAgIFt3ZWJWaWV3IGxvYWREYXRhOnBkZkRhdGEgTUlN
RVR5cGU6QCJhcHBsaWNhdGlvbi9wZGYiIGNoYXJhY3RlckVuY29kaW5nTmFtZTpAIiIgYmFzZVVS
TDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHBzOi8vd3d3LmFwcGxlLmNvbS8wIl1dOwogICAg
IFt3ZWJWaWV3IF90ZXN0X3dhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKIAogICAgIC8vIEdv
IGludG8gdGhlIGJhY2tncm91bmQgYW5kIHBhcmVudCB0aGUgV0tXZWJWaWV3LgpAQCAtMTMyLDMg
KzE0NywyMDggQEAgVEVTVChXZWJLaXQsIFdLUERGVmlld0xvc2VzQXBwbGljYXRpb25GbwogfQog
CiAjZW5kaWYKKworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKK3N0YXRpYyB2b2lk
IGNoZWNrRnJhbWUoTlNSZWN0IGZyYW1lLCBDR0Zsb2F0IHgsIENHRmxvYXQgeSwgQ0dGbG9hdCB3
aWR0aCwgQ0dGbG9hdCBoZWlnaHQpCit7CisgICAgRVhQRUNUX0VRKGZyYW1lLm9yaWdpbi54LCB4
KTsKKyAgICBFWFBFQ1RfRVEoZnJhbWUub3JpZ2luLnksIHkpOworICAgIEVYUEVDVF9FUShmcmFt
ZS5zaXplLndpZHRoLCB3aWR0aCk7CisgICAgRVhQRUNUX0VRKGZyYW1lLnNpemUuaGVpZ2h0LCBo
ZWlnaHQpOworfQorCitURVNUKFBERkhVRCwgTWFpblJlc291cmNlUERGKQoreworICAgIFRlc3RX
S1dlYlZpZXcgKndlYlZpZXcgPSBbW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
Ok5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246W1tXS1dlYlZpZXdDb25m
aWd1cmF0aW9uIG5ld10gYXV0b3JlbGVhc2VdXSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZpZXcg
bG9hZERhdGE6cGRmRGF0YSgpIE1JTUVUeXBlOkAiYXBwbGljYXRpb24vcGRmIiBjaGFyYWN0ZXJF
bmNvZGluZ05hbWU6QCIiIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwczovL3d3
dy5hcHBsZS5jb20vdGVzdFBhdGgiXV07CisgICAgRVhQRUNUX0VRKHdlYlZpZXcuX3BkZkhVRHMu
Y291bnQsIDB1KTsKKyAgICBbd2ViVmlldyBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlv
bl07CisgICAgRVhQRUNUX0VRKHdlYlZpZXcuX3BkZkhVRHMuY291bnQsIDF1KTsKKyAgICBjaGVj
a0ZyYW1lKHdlYlZpZXcuX3BkZkhVRHMuYW55T2JqZWN0LmZyYW1lLCAwLCAwLCA4MDAsIDYwMCk7
CisgICAgCisgICAgVGVzdFVJRGVsZWdhdGUgKmRlbGVnYXRlID0gW1tUZXN0VUlEZWxlZ2F0ZSBu
ZXddIGF1dG9yZWxlYXNlXTsKKyAgICB3ZWJWaWV3LlVJRGVsZWdhdGUgPSBkZWxlZ2F0ZTsKKyAg
ICBfX2Jsb2NrIGJvb2wgc2F2ZVJlcXVlc3RSZWNlaXZlZCA9IGZhbHNlOworICAgIGRlbGVnYXRl
LnNhdmVEYXRhVG9GaWxlID0gXihXS1dlYlZpZXcgKndlYlZpZXdGcm9tRGVsZWdhdGUsIE5TRGF0
YSAqZGF0YSwgTlNTdHJpbmcgKnN1Z2dlc3RlZEZpbGVuYW1lLCBOU1N0cmluZyAqbWltZVR5cGUs
IE5TVVJMICpvcmlnaW5hdGluZ1VSTCkgeworICAgICAgICBFWFBFQ1RfRVEod2ViVmlldywgd2Vi
Vmlld0Zyb21EZWxlZ2F0ZSk7CisgICAgICAgIEVYUEVDVF9UUlVFKFtkYXRhIGlzRXF1YWxUb0Rh
dGE6cGRmRGF0YSgpXSk7CisgICAgICAgIEVYUEVDVF9XS19TVFJFUShzdWdnZXN0ZWRGaWxlbmFt
ZSwgInRlc3RQYXRoLnBkZiIpOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEobWltZVR5cGUsICJh
cHBsaWNhdGlvbi9wZGYiKTsKKyAgICAgICAgc2F2ZVJlcXVlc3RSZWNlaXZlZCA9IHRydWU7Cisg
ICAgfTsKKyAgICBbW3dlYlZpZXcgX3BkZkhVRHNdLmFueU9iamVjdCBwZXJmb3JtU2VsZWN0b3I6
TlNTZWxlY3RvckZyb21TdHJpbmcoQCJfcGVyZm9ybUFjdGlvbkZvckNvbnRyb2w6Iikgd2l0aE9i
amVjdDpAImFycm93LmRvd24uY2lyY2xlIl07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZzYXZlUmVxdWVzdFJlY2VpdmVkKTsKKworICAgIEVYUEVDVF9FUSh3ZWJWaWV3Ll9wZGZIVURz
LmNvdW50LCAxdSk7CisgICAgW3dlYlZpZXcgX2tpbGxXZWJDb250ZW50UHJvY2Vzc107CisgICAg
d2hpbGUgKHdlYlZpZXcuX3BkZkhVRHMuY291bnQpCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0
aWw6OnNwaW5SdW5Mb29wKCk7Cit9CisKK1RFU1QoUERGSFVELCBNb3ZlSUZyYW1lKQoreworICAg
IFRlc3RVUkxTY2hlbWVIYW5kbGVyICpoYW5kbGVyID0gW1tUZXN0VVJMU2NoZW1lSGFuZGxlciBu
ZXddIGF1dG9yZWxlYXNlXTsKKyAgICBoYW5kbGVyLnN0YXJ0VVJMU2NoZW1lVGFza0hhbmRsZXIg
PSBeKFdLV2ViVmlldyAqLCBpZDxXS1VSTFNjaGVtZVRhc2s+IHRhc2spIHsKKyAgICAgICAgaWYg
KFt0YXNrLnJlcXVlc3QuVVJMLnBhdGggaXNFcXVhbFRvU3RyaW5nOkAiL21haW4uaHRtbCJdKSB7
CisgICAgICAgICAgICBOU1VSTFJlc3BvbnNlICpyZXNwb25zZSA9IFtbW05TVVJMUmVzcG9uc2Ug
YWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVxdWVzdC5VUkwgTUlNRVR5cGU6QCJ0ZXh0L2h0bWwi
IGV4cGVjdGVkQ29udGVudExlbmd0aDowIHRleHRFbmNvZGluZ05hbWU6bmlsXSBhdXRvcmVsZWFz
ZV07CisgICAgICAgICAgICBjb25zdCBjaGFyKiBodG1sID0gIjxici8+PGlmcmFtZSBzcmM9J3Rl
c3QucGRmJyBpZD0ncGRmZnJhbWUnPjwvaWZyYW1lPiI7CisgICAgICAgICAgICBbdGFzayBkaWRS
ZWNlaXZlUmVzcG9uc2U6cmVzcG9uc2VdOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZURh
dGE6W05TRGF0YSBkYXRhV2l0aEJ5dGVzOmh0bWwgbGVuZ3RoOnN0cmxlbihodG1sKV1dOworICAg
ICAgICAgICAgW3Rhc2sgZGlkRmluaXNoXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IEVYUEVDVF9XS19TVFJFUSh0YXNrLnJlcXVlc3QuVVJMLnBhdGgsICIvdGVzdC5wZGYiKTsKKyAg
ICAgICAgICAgIE5TRGF0YSAqZGF0YSA9IHBkZkRhdGEoKTsKKyAgICAgICAgICAgIE5TVVJMUmVz
cG9uc2UgKnJlc3BvbnNlID0gW1tbTlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGFz
ay5yZXF1ZXN0LlVSTCBNSU1FVHlwZTpAImFwcGxpY2F0aW9uL3BkZiIgZXhwZWN0ZWRDb250ZW50
TGVuZ3RoOmRhdGEubGVuZ3RoIHRleHRFbmNvZGluZ05hbWU6bmlsXSBhdXRvcmVsZWFzZV07Cisg
ICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6cmVzcG9uc2VdOworICAgICAgICAg
ICAgW3Rhc2sgZGlkUmVjZWl2ZURhdGE6ZGF0YV07CisgICAgICAgICAgICBbdGFzayBkaWRGaW5p
c2hdOworICAgICAgICB9CisgICAgfTsKKworICAgIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKmNv
bmZpZ3VyYXRpb24gPSBbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07
CisgICAgW2NvbmZpZ3VyYXRpb24gc2V0VVJMU2NoZW1lSGFuZGxlcjpoYW5kbGVyIGZvclVSTFNj
aGVtZTpAInRlc3QiXTsKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3ID0gW1tbVGVzdFdLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25m
aWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldyBsb2Fk
UmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5n
OkAidGVzdDovLy9tYWluLmh0bWwiXV1dOworICAgIEVYUEVDVF9FUSh3ZWJWaWV3Ll9wZGZIVURz
LmNvdW50LCAwdSk7CisgICAgW3dlYlZpZXcgX3Rlc3Rfd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRp
b25dOworICAgIEVYUEVDVF9FUSh3ZWJWaWV3Ll9wZGZIVURzLmNvdW50LCAxdSk7CisgICAgY2hl
Y2tGcmFtZSh3ZWJWaWV3Ll9wZGZIVURzLmFueU9iamVjdC5mcmFtZSwgMTAsIDI4LCAzMDAsIDE1
MCk7CisKKyAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJwZGZmcmFtZS53aWR0aD00
MDAiIGNvbXBsZXRpb25IYW5kbGVyOm5pbF07CisgICAgd2hpbGUgKHdlYlZpZXcuX3BkZkhVRHMu
YW55T2JqZWN0LmZyYW1lLnNpemUud2lkdGggIT0gNDAwKQorICAgICAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpzcGluUnVuTG9vcCgpOworICAgIGNoZWNrRnJhbWUod2ViVmlldy5fcGRmSFVEcy5h
bnlPYmplY3QuZnJhbWUsIDEwLCAyOCwgNDAwLCAxNTApOworCisgICAgW3dlYlZpZXcgZXZhbHVh
dGVKYXZhU2NyaXB0OkAidmFyIGZyYW1lUmVmZXJlbmNlID0gcGRmZnJhbWU7IGRvY3VtZW50LmJv
ZHkucmVtb3ZlQ2hpbGQocGRmZnJhbWUpIiBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOworICAgIHdo
aWxlICh3ZWJWaWV3Ll9wZGZIVURzLmNvdW50KQorICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpzcGluUnVuTG9vcCgpOworICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAImRvY3Vt
ZW50LmJvZHkuYXBwZW5kQ2hpbGQoZnJhbWVSZWZlcmVuY2UpIiBjb21wbGV0aW9uSGFuZGxlcjpu
aWxdOworICAgIHdoaWxlICghd2ViVmlldy5fcGRmSFVEcy5jb3VudCkKKyAgICAgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoKTsKKyAgICBFWFBFQ1RfRVEod2ViVmlldy5fcGRm
SFVEcy5jb3VudCwgMXUpOworICAgIGNoZWNrRnJhbWUod2ViVmlldy5fcGRmSFVEcy5hbnlPYmpl
Y3QuZnJhbWUsIDAsIDAsIDAsIDApOworICAgIHdoaWxlICh3ZWJWaWV3Ll9wZGZIVURzLmFueU9i
amVjdC5mcmFtZS5zaXplLndpZHRoICE9IDQwMCkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6c3BpblJ1bkxvb3AoKTsKKyAgICBFWFBFQ1RfRVEod2ViVmlldy5fcGRmSFVEcy5jb3VudCwg
MXUpOworICAgIGNoZWNrRnJhbWUod2ViVmlldy5fcGRmSFVEcy5hbnlPYmplY3QuZnJhbWUsIDEw
LCAyOCwgNDAwLCAxNTApOworCisgICAgd2ViVmlldy5wYWdlWm9vbSA9IDEuNDsKKyAgICB3aGls
ZSAod2ViVmlldy5fcGRmSFVEcy5hbnlPYmplY3QuZnJhbWUuc2l6ZS53aWR0aCAhPSA1NjApCisg
ICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisgICAgRVhQRUNUX0VR
KHdlYlZpZXcuX3BkZkhVRHMuY291bnQsIDF1KTsKKyAgICBjaGVja0ZyYW1lKHdlYlZpZXcuX3Bk
ZkhVRHMuYW55T2JqZWN0LmZyYW1lLCAxNCwgNDAsIDU2MCwgMjEwKTsKK30KKworVEVTVChQREZI
VUQsIE5lc3RlZElGcmFtZXMpCit7CisgICAgVGVzdFVSTFNjaGVtZUhhbmRsZXIgKmhhbmRsZXIg
PSBbW1Rlc3RVUkxTY2hlbWVIYW5kbGVyIG5ld10gYXV0b3JlbGVhc2VdOworICAgIGhhbmRsZXIu
c3RhcnRVUkxTY2hlbWVUYXNrSGFuZGxlciA9IF4oV0tXZWJWaWV3ICosIGlkPFdLVVJMU2NoZW1l
VGFzaz4gdGFzaykgeworICAgICAgICBOU1VSTFJlc3BvbnNlICpodG1sUmVzcG9uc2UgPSBbW1tO
U1VSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0YXNrLnJlcXVlc3QuVVJMIE1JTUVUeXBl
OkAidGV4dC9odG1sIiBleHBlY3RlZENvbnRlbnRMZW5ndGg6MCB0ZXh0RW5jb2RpbmdOYW1lOm5p
bF0gYXV0b3JlbGVhc2VdOworICAgICAgICBpZiAoW3Rhc2sucmVxdWVzdC5VUkwucGF0aCBpc0Vx
dWFsVG9TdHJpbmc6QCIvbWFpbi5odG1sIl0pIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGh0
bWwgPSAiPGlmcmFtZSBzcmM9J2ZyYW1lLmh0bWwnIGlkPSdwYXJlbnRmcmFtZSc+PC9pZnJhbWU+
IjsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVSZXNwb25zZTpodG1sUmVzcG9uc2VdOwor
ICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZURhdGE6W05TRGF0YSBkYXRhV2l0aEJ5dGVzOmh0
bWwgbGVuZ3RoOnN0cmxlbihodG1sKV1dOworICAgICAgICAgICAgW3Rhc2sgZGlkRmluaXNoXTsK
KyAgICAgICAgfSBlbHNlIGlmIChbdGFzay5yZXF1ZXN0LlVSTC5wYXRoIGlzRXF1YWxUb1N0cmlu
ZzpAIi9mcmFtZS5odG1sIl0pIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGh0bWwgPSAiPGlm
cmFtZSBzcmM9J3Rlc3QucGRmJz48L2lmcmFtZT4iOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVj
ZWl2ZVJlc3BvbnNlOmh0bWxSZXNwb25zZV07CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZl
RGF0YTpbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6aHRtbCBsZW5ndGg6c3RybGVuKGh0bWwpXV07Cisg
ICAgICAgICAgICBbdGFzayBkaWRGaW5pc2hdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgRVhQRUNUX1dLX1NUUkVRKHRhc2sucmVxdWVzdC5VUkwucGF0aCwgIi90ZXN0LnBkZiIpOwor
ICAgICAgICAgICAgTlNEYXRhICpkYXRhID0gcGRmRGF0YSgpOworICAgICAgICAgICAgTlNVUkxS
ZXNwb25zZSAqcmVzcG9uc2UgPSBbW1tOU1VSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0
YXNrLnJlcXVlc3QuVVJMIE1JTUVUeXBlOkAiYXBwbGljYXRpb24vcGRmIiBleHBlY3RlZENvbnRl
bnRMZW5ndGg6ZGF0YS5sZW5ndGggdGV4dEVuY29kaW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNlXTsK
KyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVSZXNwb25zZTpyZXNwb25zZV07CisgICAgICAg
ICAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpkYXRhXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZEZp
bmlzaF07CisgICAgICAgIH0KKyAgICB9OworCisgICAgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAq
Y29uZmlndXJhdGlvbiA9IFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNl
XTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRVUkxTY2hlbWVIYW5kbGVyOmhhbmRsZXIgZm9yVVJM
U2NoZW1lOkAidGVzdCJdOworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcgPSBbW1tUZXN0V0tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNv
bmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3IGxv
YWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJp
bmc6QCJ0ZXN0Oi8vL21haW4uaHRtbCJdXV07CisgICAgRVhQRUNUX0VRKHdlYlZpZXcuX3BkZkhV
RHMuY291bnQsIDB1KTsKKyAgICBbd2ViVmlldyBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdh
dGlvbl07CisgICAgRVhQRUNUX0VRKHdlYlZpZXcuX3BkZkhVRHMuY291bnQsIDF1KTsKKyAgICBj
aGVja0ZyYW1lKHdlYlZpZXcuX3BkZkhVRHMuYW55T2JqZWN0LmZyYW1lLCAyMCwgMjAsIDMwMCwg
MTUwKTsKKyAgICAKKyAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJkb2N1bWVudC5i
b2R5LnJlbW92ZUNoaWxkKHBhcmVudGZyYW1lKSIgY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKKyAg
ICB3aGlsZSAod2ViVmlldy5fcGRmSFVEcy5jb3VudCkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6c3BpblJ1bkxvb3AoKTsKK30KKworVEVTVChQREZIVUQsIElGcmFtZTNEVHJhbnNmb3Jt
KQoreworICAgIFRlc3RVUkxTY2hlbWVIYW5kbGVyICpoYW5kbGVyID0gW1tUZXN0VVJMU2NoZW1l
SGFuZGxlciBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBoYW5kbGVyLnN0YXJ0VVJMU2NoZW1lVGFz
a0hhbmRsZXIgPSBeKFdLV2ViVmlldyAqLCBpZDxXS1VSTFNjaGVtZVRhc2s+IHRhc2spIHsKKyAg
ICAgICAgTlNVUkxSZXNwb25zZSAqaHRtbFJlc3BvbnNlID0gW1tbTlNVUkxSZXNwb25zZSBhbGxv
Y10gaW5pdFdpdGhVUkw6dGFzay5yZXF1ZXN0LlVSTCBNSU1FVHlwZTpAInRleHQvaHRtbCIgZXhw
ZWN0ZWRDb250ZW50TGVuZ3RoOjAgdGV4dEVuY29kaW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNlXTsK
KyAgICAgICAgaWYgKFt0YXNrLnJlcXVlc3QuVVJMLnBhdGggaXNFcXVhbFRvU3RyaW5nOkAiL21h
aW4uaHRtbCJdKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBodG1sID0gIjxpZnJhbWUgc3Jj
PSd0ZXN0LnBkZicgaGVpZ2h0PTUwMCB3aWR0aD01MDAgc3R5bGU9J3RyYW5zZm9ybTpyb3RhdGVZ
KDIzNWRlZyk7Jz48L2lmcmFtZT4iOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3Bv
bnNlOmh0bWxSZXNwb25zZV07CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpbTlNE
YXRhIGRhdGFXaXRoQnl0ZXM6aHRtbCBsZW5ndGg6c3RybGVuKGh0bWwpXV07CisgICAgICAgICAg
ICBbdGFzayBkaWRGaW5pc2hdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgRVhQRUNU
X1dLX1NUUkVRKHRhc2sucmVxdWVzdC5VUkwucGF0aCwgIi90ZXN0LnBkZiIpOworICAgICAgICAg
ICAgTlNEYXRhICpkYXRhID0gcGRmRGF0YSgpOworICAgICAgICAgICAgTlNVUkxSZXNwb25zZSAq
cmVzcG9uc2UgPSBbW1tOU1VSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0YXNrLnJlcXVl
c3QuVVJMIE1JTUVUeXBlOkAiYXBwbGljYXRpb24vcGRmIiBleHBlY3RlZENvbnRlbnRMZW5ndGg6
ZGF0YS5sZW5ndGggdGV4dEVuY29kaW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAg
ICAgIFt0YXNrIGRpZFJlY2VpdmVSZXNwb25zZTpyZXNwb25zZV07CisgICAgICAgICAgICBbdGFz
ayBkaWRSZWNlaXZlRGF0YTpkYXRhXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZEZpbmlzaF07Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJh
dGlvbiA9IFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBb
Y29uZmlndXJhdGlvbiBzZXRVUkxTY2hlbWVIYW5kbGVyOmhhbmRsZXIgZm9yVVJMU2NoZW1lOkAi
dGVzdCJdOworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcgPSBbW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRp
b246Y29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0
OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJ0ZXN0
Oi8vL21haW4uaHRtbCJdXV07CisgICAgRVhQRUNUX0VRKHdlYlZpZXcuX3BkZkhVRHMuY291bnQs
IDB1KTsKKyAgICBbd2ViVmlldyBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07Cisg
ICAgRVhQRUNUX0VRKHdlYlZpZXcuX3BkZkhVRHMuY291bnQsIDF1KTsKKyAgICBjaGVja0ZyYW1l
KHdlYlZpZXcuX3BkZkhVRHMuYW55T2JqZWN0LmZyYW1lLCA0MDMsIDEwLCA1MDAsIDUwMCk7Cit9
CisKK1RFU1QoUERGSFVELCBNdWx0aXBsZUlGcmFtZXMpCit7CisgICAgVGVzdFVSTFNjaGVtZUhh
bmRsZXIgKmhhbmRsZXIgPSBbW1Rlc3RVUkxTY2hlbWVIYW5kbGVyIG5ld10gYXV0b3JlbGVhc2Vd
OworICAgIGhhbmRsZXIuc3RhcnRVUkxTY2hlbWVUYXNrSGFuZGxlciA9IF4oV0tXZWJWaWV3ICos
IGlkPFdLVVJMU2NoZW1lVGFzaz4gdGFzaykgeworICAgICAgICBOU1VSTFJlc3BvbnNlICpodG1s
UmVzcG9uc2UgPSBbW1tOU1VSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0YXNrLnJlcXVl
c3QuVVJMIE1JTUVUeXBlOkAidGV4dC9odG1sIiBleHBlY3RlZENvbnRlbnRMZW5ndGg6MCB0ZXh0
RW5jb2RpbmdOYW1lOm5pbF0gYXV0b3JlbGVhc2VdOworICAgICAgICBpZiAoW3Rhc2sucmVxdWVz
dC5VUkwucGF0aCBpc0VxdWFsVG9TdHJpbmc6QCIvbWFpbi5odG1sIl0pIHsKKyAgICAgICAgICAg
IGNvbnN0IGNoYXIqIGh0bWwgPSAiPGlmcmFtZSBzcmM9J3Rlc3QucGRmJyBoZWlnaHQ9MTAwIHdp
ZHRoPTE1MD48L2lmcmFtZT48aWZyYW1lIHNyYz0ndGVzdC5wZGYnIGhlaWdodD0xMjMgd2lkdGg9
MTM0PjwvaWZyYW1lPiI7CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6aHRt
bFJlc3BvbnNlXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVEYXRhOltOU0RhdGEgZGF0
YVdpdGhCeXRlczpodG1sIGxlbmd0aDpzdHJsZW4oaHRtbCldXTsKKyAgICAgICAgICAgIFt0YXNr
IGRpZEZpbmlzaF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBFWFBFQ1RfV0tfU1RS
RVEodGFzay5yZXF1ZXN0LlVSTC5wYXRoLCAiL3Rlc3QucGRmIik7CisgICAgICAgICAgICBOU0Rh
dGEgKmRhdGEgPSBwZGZEYXRhKCk7CisgICAgICAgICAgICBOU1VSTFJlc3BvbnNlICpyZXNwb25z
ZSA9IFtbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVxdWVzdC5VUkwg
TUlNRVR5cGU6QCJhcHBsaWNhdGlvbi9wZGYiIGV4cGVjdGVkQ29udGVudExlbmd0aDpkYXRhLmxl
bmd0aCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0gYXV0b3JlbGVhc2VdOworICAgICAgICAgICAgW3Rh
c2sgZGlkUmVjZWl2ZVJlc3BvbnNlOnJlc3BvbnNlXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJl
Y2VpdmVEYXRhOmRhdGFdOworICAgICAgICAgICAgW3Rhc2sgZGlkRmluaXNoXTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICBXS1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0g
W1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIG5ld10gYXV0b3JlbGVhc2VdOworICAgIFtjb25maWd1
cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6aGFuZGxlciBmb3JVUkxTY2hlbWU6QCJ0ZXN0Il07
CisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldyA9IFtbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25m
aWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJM
UmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAInRlc3Q6Ly8vbWFp
bi5odG1sIl1dXTsKKyAgICBFWFBFQ1RfRVEod2ViVmlldy5fcGRmSFVEcy5jb3VudCwgMHUpOwor
ICAgIFt3ZWJWaWV3IF90ZXN0X3dhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKKyAgICBFWFBF
Q1RfRVEod2ViVmlldy5fcGRmSFVEcy5jb3VudCwgMnUpOworICAgIGJvb2wgaGFkTGVmdEZyYW1l
ID0gZmFsc2U7CisgICAgYm9vbCBoYWRSaWdodEZyYW1lID0gZmFsc2U7CisgICAgZm9yIChOU1Zp
ZXcgKmh1ZCBpbiB3ZWJWaWV3Ll9wZGZIVURzKSB7CisgICAgICAgIGlmIChodWQuZnJhbWUub3Jp
Z2luLnggPT0gMTApIHsKKyAgICAgICAgICAgIGNoZWNrRnJhbWUoaHVkLmZyYW1lLCAxMCwgMzMs
IDE1MCwgMTAwKTsKKyAgICAgICAgICAgIGhhZExlZnRGcmFtZSA9IHRydWU7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBjaGVja0ZyYW1lKGh1ZC5mcmFtZSwgMTY0LCAxMCwgMTM0LCAx
MjMpOworICAgICAgICAgICAgaGFkUmlnaHRGcmFtZSA9IHRydWU7CisgICAgICAgIH0KKyAgICB9
CisgICAgRVhQRUNUX1RSVUUoaGFkTGVmdEZyYW1lKTsKKyAgICBFWFBFQ1RfVFJVRShoYWRSaWdo
dEZyYW1lKTsKK30KKworI2VuZGlmCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rl
c3RVSURlbGVnYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9U
ZXN0VUlEZWxlZ2F0ZS5oCShyZXZpc2lvbiAyNjYwODMpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJ
L2NvY29hL1Rlc3RVSURlbGVnYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAK
ICNpZiBQTEFURk9STShNQUMpCiBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgdm9pZCAoXmdl
dENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudSkoTlNNZW51ICosIF9XS0NvbnRleHRNZW51RWxl
bWVudEluZm8gKiwgaWQgPE5TU2VjdXJlQ29kaW5nPiwgdm9pZCAoXikoTlNNZW51ICopKTsKICNl
bmRpZgorQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIHZvaWQgKF5zYXZlRGF0YVRvRmlsZSko
V0tXZWJWaWV3ICosIE5TRGF0YSAqLCBOU1N0cmluZyAqLCBOU1N0cmluZyAqLCBOU1VSTCAqKTsK
IAogLSAoTlNTdHJpbmcgKil3YWl0Rm9yQWxlcnQ7CiAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRB
UEkvY29jb2EvVGVzdFVJRGVsZWdhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktp
dEFQSS9jb2NvYS9UZXN0VUlEZWxlZ2F0ZS5tbQkocmV2aXNpb24gMjY2MDgzKQorKysgVG9vbHMv
VGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0VUlEZWxlZ2F0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAt
NTAsNiArNTAsMTIgQEAgLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBnZQog
fQogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAorLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3
ICopd2ViVmlldyBzYXZlRGF0YVRvRmlsZTooTlNEYXRhICopZGF0YSBzdWdnZXN0ZWRGaWxlbmFt
ZTooTlNTdHJpbmcgKilzdWdnZXN0ZWRGaWxlbmFtZSBtaW1lVHlwZTooTlNTdHJpbmcgKiltaW1l
VHlwZSBvcmlnaW5hdGluZ1VSTDooTlNVUkwgKil1cmwKK3sKKyAgICBpZiAoX3NhdmVEYXRhVG9G
aWxlKQorICAgICAgICBfc2F2ZURhdGFUb0ZpbGUod2ViVmlldywgZGF0YSwgc3VnZ2VzdGVkRmls
ZW5hbWUsIG1pbWVUeXBlLCB1cmwpOworfQorCiAtIChOU1N0cmluZyAqKXdhaXRGb3JBbGVydAog
ewogICAgIEVYUEVDVF9GQUxTRShzZWxmLnJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3Nh
Z2UpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407137</attachid>
            <date>2020-08-24 15:09:34 -0700</date>
            <delta_ts>2020-08-24 15:19:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215780-20200824150933.patch</filename>
            <type>text/plain</type>
            <size>80593</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjYwODMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA4LTI0ICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBQREYgaGVhZHMtdXAgZGlz
cGxheSB0byBVSSBwcm9jZXNzIG9uIG1hY09TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU3ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU4NzE1
ODQ3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
d3RmL1BsYXRmb3JtSGF2ZS5oOgorCiAyMDIwLTA4LTIyICBZdXN1a2UgU3V6dWtpICA8eXN1enVr
aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gQWRkIEludGwuU2VnbWVudGVyCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZUNvY29hLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvUGxhdGZvcm1FbmFibGVDb2NvYS5oCShyZXZpc2lvbiAyNjYwODMpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZUNvY29hLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw2
ICsyMjgsMTAgQEAKICNkZWZpbmUgRU5BQkxFX0dQVV9EUklWRVJfUFJFV0FSTUlORyAxCiAjZW5k
aWYKIAorI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJF
RCA+PSAxMTAwMDAKKyNkZWZpbmUgRU5BQkxFX1VJX1BST0NFU1NfUERGX0hVRCAxCisjZW5kaWYK
KwogI2lmICFkZWZpbmVkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKQogI2RlZmluZSBFTkFCTEVf
SU5ERVhFRF9EQVRBQkFTRSAxCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjYwODMp
CisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk2
IEBACisyMDIwLTA4LTI0ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgTW92ZSBQREYgaGVhZHMtdXAgZGlzcGxheSB0byBVSSBwcm9jZXNzIG9u
IG1hY09TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTU3ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU4NzE1ODQ3PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaGFzIG1hbnkgYmVuZWZpdHMg
aW5jbHVkaW5nIHRoZSBvbmUgaW4gdGhlIHJhZGFyLCB0ZXN0YWJpbGl0eSwgYW5kIG1vdmluZyBX
ZWJLaXQtc3BlY2lmaWMgY29kZSBmcm9tIFBERktpdCB0byBXZWJLaXQuCisKKyAgICAgICAgTm93
IHRoYXQgdGhlIEhVRCBpcyBkaXNwbGF5ZWQgaW4gdGhlIFVJIHByb2Nlc3MgaW5zdGVhZCBvZiBp
biB0aGUgd2ViIGNvbnRlbnQsIHpvb21pbmcgaW4ga2VlcHMgdGhlIEhVRCB0aGUgc2FtZSBzaXpl
LgorICAgICAgICBBIDNkLXRyYW5zZm9ybWVkIGlmcmFtZSB3aXRoIGEgUERGIGluIGl0IG5vdyBz
aG93cyB0aGUgSFVEIGluIHRoZSBwbGFjZSB5b3UgY2FuIGNsaWNrIG9uIGl0LCBpbnN0ZWFkIG9m
IGluIHRoZSB0cmFuc2Zvcm1lZCBQREYuCisgICAgICAgIEFsc28sIG1vdmluZyB0aGUgbW91c2Ug
dG8gdGhlIEhVRCB3aXRoaW4gdGhlIGZpcnN0IDMgc2Vjb25kcyBwcmV2ZW50cyBpdCBmcm9tIGhp
ZGluZywgd2hpY2ggaXQgZG9lcyB3aGVuIHRoZSBtb3VzZSBsZWF2ZXMgdGhlIEhVRC4KKyAgICAg
ICAgVGhlIHJlc3Qgb2YgdGhlIGJlaGF2aW9yIEkgdGhpbmsgc2hvdWxkIGJlIHRoZSBzYW1lLiAg
TW9zdCB1c2VycyBzaG91bGQgbm90IG5vdGljZSBhbnkgZGlmZmVyZW5jZS4KKworICAgICAgICBG
dW5jdGlvbmFsaXR5IGNvdmVyZWQgYnkgQVBJIHRlc3RzLCB0aGUgZmlyc3QgdGVzdHMgZm9yIFBE
RiBjb250ZW50IGludGVyYWN0aW9uIQorCisgICAgICAgICogU2NyaXB0cy93ZWJraXQvbWVzc2Fn
ZXMucHk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToKKyAgICAgICAgKC1bV0tW
aWV3IF9jcmVhdGVQREZIVUQ6cmVjdDpdKToKKyAgICAgICAgKC1bV0tWaWV3IF9wZGZIVUQ6Y2hh
bmdlZExvY2F0aW9uOl0pOgorICAgICAgICAoLVtXS1ZpZXcgX3JlbW92ZVBERkhVRDpdKToKKyAg
ICAgICAgKC1bV0tWaWV3IF9yZW1vdmVBbGxQREZIVURzXSk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9tYWMvV0tXZWJWaWV3TWFjLm1tOgorICAgICAgICAoLVtXS1dlYlZpZXcgbW91c2VNb3Zl
ZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IG1vdXNlRG93bjpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IG1vdXNlVXA6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY3JlYXRlUERGSFVEOnJl
Y3Q6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcGRmSFVEOmNoYW5nZWRMb2NhdGlvbjpdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZW1vdmVQREZIVUQ6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfcmVtb3ZlQWxsUERGSFVEc10pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dL
V2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nTWFjLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9t
YWMvV0tXZWJWaWV3VGVzdGluZ01hYy5tbToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHBkZkhVRHNd
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW06CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJ
bXBsOjpjcmVhdGVQREZIVUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dXBkYXRl
UERGSFVETG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cmVtb3ZlUERG
SFVEKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnJlbW92ZUFsbFBERkhVRHMpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0
TG9hZEZvckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpwcm9jZXNzRGlk
VGVybWluYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nl
c3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpvcGVuUERGRnJvbVRlbXBv
cmFyeUZvbGRlcldpdGhOYXRpdmVBcHBsaWNhdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMv
UGFnZUNsaWVudEltcGxNYWMubW06CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpj
cmVhdGVQREZIVUQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6dXBkYXRlUERG
SFVETG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6cmVtb3ZlUERG
SFVEKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnJlbW92ZUFsbFBERkhVRHMp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OnNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRo
TmF0aXZlQXBwbGljYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNyZWF0
ZVBERkhVRCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVtb3ZlUERGSFVEKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojp1cGRhdGVQREZIVURMb2NhdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGRmWm9vbUluKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpwZGZab29tT3V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpwZGZTYXZlVG9QREYpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBkZk9w
ZW5XaXRoUHJldmlldyk6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZMYXllckNvbnRyb2xsZXJT
UEkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tOgorICAgICAgICAoLVtX
S1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlIG9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb25dKToK
KyAgICAgICAgKC1bV0tQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZSBzYXZlVG9QREZdKToKKyAg
ICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpQREZQbHVnaW4pOgorICAgICAgICAoV2ViS2l0OjpQ
REZQbHVnaW46On5QREZQbHVnaW4pOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmZyYW1l
Rm9ySFVEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpjYWxjdWxhdGVTaXpl
cyk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6Y29udmVydEZyb21QREZWaWV3VG9Sb290
VmlldyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6dmlzaWJpbGl0eURpZENo
YW5nZSk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6em9vbUluKToKKyAgICAgICAgKFdl
YktpdDo6UERGUGx1Z2luOjp6b29tT3V0KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpz
YXZlKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpvcGVuV2l0aFByZXZpZXcpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFn
ZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6em9vbVBERkluKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6em9vbVBERk91dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6
OnNhdmVQREYpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpvcGVuUERGV2l0aFByZXZpZXcp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjcmVhdGVQREZIVUQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjp1cGRhdGVQREZIVURMb2NhdGlvbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OnJlbW92ZVBERkhVRCk6CisKIDIwMjAtMDgtMjQgIEFkaXR5YSBLZWVydGhpICA8YWtl
ZXJ0aGlAYXBwbGUuY29tPgogCiAgICAgICAgIFttYWNPU10gU2hvdyBwaWNrZXIgZm9yIGRhdGUg
YW5kIGRhdGV0aW1lLWxvY2FsIGlucHV0IHR5cGVzCkluZGV4OiBTb3VyY2UvV2ViS2l0L0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQJKHJl
dmlzaW9uIDI2NjA4MykKKysrIFNvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMSw2ICsxMDEsNyBAQCBzZXQoV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMK
ICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL09yaWdpbkRhdGEiCiAgICAgIiR7V0VCS0lU
X0RJUn0vV2ViUHJvY2Vzcy9QbHVnaW5zIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3Mv
UGx1Z2lucy9OZXRzY2FwZSIKKyAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL1BsdWdpbnMv
UERGIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvUmVzb3VyY2VDYWNoZSIKICAgICAi
JHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL1N0b3JhZ2UiCiAgICAgIiR7V0VCS0lUX0RJUn0vV2Vi
UHJvY2Vzcy9Vc2VyQ29udGVudCIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQv
bWVzc2FnZXMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9t
ZXNzYWdlcy5weQkocmV2aXNpb24gMjY2MDgzKQorKysgU291cmNlL1dlYktpdC9TY3JpcHRzL3dl
YmtpdC9tZXNzYWdlcy5weQkod29ya2luZyBjb3B5KQpAQCAtMjQzLDYgKzI0Myw3IEBAIGRlZiB0
eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmUKICAgICAgICAgJ1dlYktpdDo6TURO
U1JlZ2lzdGVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6Ok1lZGlhUGxheWVyUHJpdmF0
ZVJlbW90ZUlkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpNZWRpYVJlY29yZGVySWRlbnRp
ZmllcicsCisgICAgICAgICdXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXInLAogICAgICAgICAn
V2ViS2l0OjpQbGF5YmFja1Nlc3Npb25Db250ZXh0SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJL
aXQ6OlBsdWdpblByb2Nlc3NUeXBlJywKICAgICAgICAgJ1dlYktpdDo6UmVtb3RlQXVkaW9EZXN0
aW5hdGlvbklkZW50aWZpZXInLApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFnZUNs
aWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BhZ2VDbGllbnQu
aAkocmV2aXNpb24gMjY2MDgzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFnZUNsaWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKKyNpbmNsdWRlICJQREZQbHVnaW5JZGVudGlmaWVy
LmgiCiAjaW5jbHVkZSAiU2FtZURvY3VtZW50TmF2aWdhdGlvblR5cGUuaCIKICNpbmNsdWRlICJT
aGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJXZWJDb2xvclBpY2tlci5oIgpAQCAtMjQyLDYg
KzI0MywxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWxQcm92aXNpb25hbExv
YWRGb3JNYWluRnJhbWUoKSB7IH07CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdExvYWRGb3JN
YWluRnJhbWUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCB1c2VDdXN0b21Db250ZW50UHJv
dmlkZXIpID0gMDsKIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgdmlydHVh
bCB2b2lkIGNyZWF0ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVQREZIVURMb2NhdGlvbihQREZQ
bHVnaW5JZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllcikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVBbGxQREZIVURzKCkgPSAwOworI2VuZGlmCisgICAgCiAgICAgdmlydHVh
bCB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5JikgPSAwOwogCiAgICAg
dmlydHVhbCBib29sIGhhbmRsZVJ1bk9wZW5QYW5lbChXZWJQYWdlUHJveHkqLCBXZWJGcmFtZVBy
b3h5KiwgY29uc3QgRnJhbWVJbmZvRGF0YSYsIEFQSTo6T3BlblBhbmVsUGFyYW1ldGVycyosIFdl
Yk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkqKSB7IHJldHVybiBmYWxzZTsgfQpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAyNjYwODMp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NzcyLDE1ICs0NzcyLDE0IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDb21taXRM
b2FkRm9yRnJhbWUKICAgICAgICAgICAgIG1fcGx1Z2luU2NhbGVGYWN0b3IgPSAxOwogICAgICAg
ICAgICAgbV9tYWluRnJhbWVQbHVnaW5IYW5kbGVzUGFnZVNjYWxlR2VzdHVyZSA9IGZhbHNlOwog
ICAgICAgICB9Ci0gICAgfQotCiAjaWYgRU5BQkxFKFBPSU5URVJfTE9DSykKLSAgICBpZiAoZnJh
bWUtPmlzTWFpbkZyYW1lKCkpCiAgICAgICAgIHJlcXVlc3RQb2ludGVyVW5sb2NrKCk7CiAjZW5k
aWYKLQotICAgIGlmIChmcmFtZS0+aXNNYWluRnJhbWUoKSkKICAgICAgICAgcGFnZUNsaWVudCgp
LnNldE1vdXNlRXZlbnRQb2xpY3kobW91c2VFdmVudFBvbGljeSk7CisjaWYgRU5BQkxFKFVJX1BS
T0NFU1NfUERGX0hVRCkKKyAgICAgICAgcGFnZUNsaWVudCgpLnJlbW92ZUFsbFBERkhVRHMoKTsK
KyNlbmRpZgorICAgIH0KIAogICAgIG1fcGFnZUxvYWRTdGF0ZS5jb21taXRDaGFuZ2VzKCk7CiAg
ICAgaWYgKG1fbG9hZGVyQ2xpZW50KQpAQCAtNzQ1MSw2ICs3NDUwLDkgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OnByb2Nlc3NEaWRUZXJtaW5hdGUoUAogCiAgICAgcmVzZXRTdGF0ZUFmdGVyUHJvY2Vz
c0V4aXRlZChyZWFzb24pOwogICAgIHN0b3BBbGxVUkxTY2hlbWVUYXNrcyhtX3Byb2Nlc3MucHRy
KCkpOworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgcGFnZUNsaWVudCgpLnJl
bW92ZUFsbFBERkhVRHMoKTsKKyNlbmRpZgogCiAgICAgLy8gRm9yIGJyaW5ndXAgb2YgcHJvY2Vz
cyBzd2FwcGluZywgTmF2aWdhdGlvblN3YXAgdGVybWluYXRpb24gd2lsbCBub3QgZ28gb3V0IHRv
IGNsaWVudHMuCiAgICAgLy8gSWYgaXQgZG9lcyAqZHVyaW5nKiBwcm9jZXNzIHN3YXBwaW5nLCBh
bmQgdGhlIGNsaWVudCB0cmlnZ2VycyBhIHJlbG9hZCwgdGhhdCBjYXVzZXMgYml6YXJyZSBXZWJL
aXQgcmUtZW50cnkuCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAko
cmV2aXNpb24gMjY2MDgzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJMYXllclRyZWVD
b250ZXh0LmgiCiAjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgogI2luY2x1ZGUgIk5vdGlmaWNh
dGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmgiCisjaW5jbHVkZSAiUERGUGx1Z0lu
SWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlBhZ2VMb2FkU3RhdGUuaCIKICNpbmNsdWRlICJQbHVn
aW5Qcm9jZXNzQXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIlBvbGljeURlY2lzaW9uLmgiCkBAIC0x
MzExLDEwICsxMzEyLDEyIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2F2ZURhdGFUb0ZpbGVJbkRv
d25sb2Fkc0ZvbGRlcihTdHJpbmcmJiBzdWdnZXN0ZWRGaWxlbmFtZSwgU3RyaW5nJiYgbWltZVR5
cGUsIFVSTCYmIG9yaWdpbmF0aW5nVVJMLCBBUEk6OkRhdGEmKTsKICAgICB2b2lkIHNhdmVQREZU
b0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcihTdHJpbmcmJiBzdWdnZXN0ZWRGaWxlbmFtZSwgVVJMJiYg
b3JpZ2luYXRpbmdVUkwsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpOwotI2lmIFBMQVRGT1JN
KENPQ09BKQorI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQogICAgIHZvaWQgc2F2ZVBERlRvVGVt
cG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbihjb25zdCBTdHJpbmcmIHN1
Z2dlc3RlZEZpbGVuYW1lLCBGcmFtZUluZm9EYXRhJiYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5j
ZSYsIGNvbnN0IFN0cmluZyYgcGRmVVVJRCk7CisjaWYgIUVOQUJMRShVSV9QUk9DRVNTX1BERl9I
VUQpCiAgICAgdm9pZCBvcGVuUERGRnJvbVRlbXBvcmFyeUZvbGRlcldpdGhOYXRpdmVBcHBsaWNh
dGlvbihGcmFtZUluZm9EYXRhJiYsIGNvbnN0IFN0cmluZyYgcGRmVVVJRCk7CiAjZW5kaWYKKyNl
bmRpZgogCiAjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCiAgICAgdm9pZCBzaG93UERGQ29udGV4
dE1lbnUoY29uc3QgV2ViS2l0OjpQREZDb250ZXh0TWVudSYsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoT3B0aW9uYWw8aW50MzJfdD4mJik+JiYpOwpAQCAtMTgwNiw2ICsxODA5LDE2IEBAIHB1Ymxp
YzoKICAgICBib29sIGNhblVzZUNyZWRlbnRpYWxTdG9yYWdlKCkgeyByZXR1cm4gbV9jYW5Vc2VD
cmVkZW50aWFsU3RvcmFnZTsgfQogICAgIHZvaWQgc2V0Q2FuVXNlQ3JlZGVudGlhbFN0b3JhZ2Uo
Ym9vbCk7CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIHZvaWQgY3JlYXRl
UERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAg
ICB2b2lkIHVwZGF0ZVBERkhVRExvY2F0aW9uKFBERlBsdWdpbklkZW50aWZpZXIsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIHJlbW92ZVBERkhVRChQREZQbHVnaW5JZGVudGlm
aWVyKTsKKyAgICB2b2lkIHBkZlpvb21JbihQREZQbHVnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lk
IHBkZlpvb21PdXQoUERGUGx1Z2luSWRlbnRpZmllcik7CisgICAgdm9pZCBwZGZTYXZlVG9QREYo
UERGUGx1Z2luSWRlbnRpZmllcik7CisgICAgdm9pZCBwZGZPcGVuV2l0aFByZXZpZXcoUERGUGx1
Z2luSWRlbnRpZmllcik7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBXZWJQYWdlUHJveHkoUGFn
ZUNsaWVudCYsIFdlYlByb2Nlc3NQcm94eSYsIFJlZjxBUEk6OlBhZ2VDb25maWd1cmF0aW9uPiYm
KTsKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjY2MDgz
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3
b3JraW5nIGNvcHkpCkBAIC00MzMsOSArNDMzLDggQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5
IHsKICAgICBTYXZlUmVjZW50U2VhcmNoZXMoU3RyaW5nIG5hbWUsIFZlY3RvcjxXZWJDb3JlOjpS
ZWNlbnRTZWFyY2g+IHNlYXJjaEl0ZW1zKQogICAgIExvYWRSZWNlbnRTZWFyY2hlcyhTdHJpbmcg
bmFtZSkgLT4gKFZlY3RvcjxXZWJDb3JlOjpSZWNlbnRTZWFyY2g+IHJlc3VsdCkgU3luY2hyb25v
dXMKIAorI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKSAmJiAhRU5BQkxFKFVJX1BST0NFU1NfUERG
X0hVRCkKICAgICBTYXZlUERGVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIoU3RyaW5nIHN1Z2dlc3Rl
ZEZpbGVuYW1lLCBVUkwgb3JpZ2luYXRpbmdVUkwsIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhKQot
Ci0jaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgU2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3Bl
bldpdGhOYXRpdmVBcHBsaWNhdGlvbihTdHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWUsIHN0cnVjdCBX
ZWJLaXQ6OkZyYW1lSW5mb0RhdGEgc291cmNlRnJhbWVJbmZvLCBJUEM6OkRhdGFSZWZlcmVuY2Ug
ZGF0YSwgU3RyaW5nIHBkZlVVSUQpCiAgICAgT3BlblBERkZyb21UZW1wb3JhcnlGb2xkZXJXaXRo
TmF0aXZlQXBwbGljYXRpb24oc3RydWN0IFdlYktpdDo6RnJhbWVJbmZvRGF0YSBzb3VyY2VGcmFt
ZUluZm8sIFN0cmluZyBwZGZVVUlEKQogI2VuZGlmCkBAIC01NjYsNiArNTY1LDEyIEBAIG1lc3Nh
Z2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgU3BlZWNoU3ludGhlc2lzUmVzdW1lKCkgLT4gKCkg
QXN5bmMKICNlbmRpZgogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBDcmVh
dGVQREZIVUQoV2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYkNvcmU6
OkludFJlY3QgYm91bmRpbmdCb3gpCisgICAgVXBkYXRlUERGSFVETG9jYXRpb24oV2ViS2l0OjpQ
REZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYkNvcmU6OkludFJlY3QgYm91bmRpbmdC
b3gpCisgICAgUmVtb3ZlUERGSFVEKFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlm
aWVyKQorI2VuZGlmCisKICAgICBDb25maWd1cmVMb2dnaW5nQ2hhbm5lbChTdHJpbmcgY2hhbm5l
bE5hbWUsIGVudW06dWludDhfdCBXVEZMb2dDaGFubmVsU3RhdGUgc3RhdGUsIGVudW06dWludDhf
dCBXVEZMb2dMZXZlbCBsZXZlbCkKIAogI2lmIFBMQVRGT1JNKEdUSykKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5o
CShyZXZpc2lvbiAyNjYwODMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJWaWV3SW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTEgKzIzLDExIEBACiAg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2ltcG9ydCAiV0tXZWJW
aWV3UHJpdmF0ZS5oIgotCisjaW1wb3J0ICJQREZQbHVnaW5JZGVudGlmaWVyLmgiCiAjaW1wb3J0
ICJTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZS5oIgogI2ltcG9ydCAiV0tTaGFyZVNoZWV0Lmgi
CiAjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdQ
cml2YXRlLmgiCiAjaW1wb3J0ICJfV0tBdHRhY2htZW50SW50ZXJuYWwuaCIKICNpbXBvcnQgIl9X
S1dlYlZpZXdQcmludEZvcm1hdHRlckludGVybmFsLmgiCiAjaW1wb3J0IDx3dGYvQ29tcGxldGlv
bkhhbmRsZXIuaD4KQEAgLTEzMyw3ICsxMzMsNyBAQCBjbGFzcyBWaWV3R2VzdHVyZUNvbnRyb2xs
ZXI7CiAgICAgLy8gT25seSB1c2VkIHdpdGggVUktc2lkZSBjb21wb3NpdGluZy4KICAgICBSZXRh
aW5QdHI8V0tTY3JvbGxWaWV3PiBfc2Nyb2xsVmlldzsKICAgICBSZXRhaW5QdHI8V0tDb250ZW50
Vmlldz4gX2NvbnRlbnRWaWV3OwotI2VuZGlmCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiAj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBSZXRhaW5QdHI8V0tTY3JvbGxWaWV3PiBfc2Ny
b2xsVmlldzsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3
UHJpdmF0ZUZvclRlc3RpbmdNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvbWFjL1dLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nTWFjLmgJKHJldmlzaW9uIDI2
NjA4MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3UHJpdmF0
ZUZvclRlc3RpbmdNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBAaW50ZXJm
YWNlIFdLV2ViVmlldyAoV0tUZXN0aW5nTWFjKQogCiAtICh2b2lkKV9zZXRIZWFkZXJCYW5uZXJI
ZWlnaHQ6KGludCloZWlnaHQ7CiAtICh2b2lkKV9zZXRGb290ZXJCYW5uZXJIZWlnaHQ6KGludClo
ZWlnaHQ7CistIChOU1NldDxOU1ZpZXcgKj4gKilfcGRmSFVEczsKIAogQGVuZAogCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1Rlc3RpbmdNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdUZXN0
aW5nTWFjLm1tCShyZXZpc2lvbiAyNjYwODMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvbWFjL1dLV2ViVmlld1Rlc3RpbmdNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwMyw2ICsx
MDMsMTUgQEAgLSAodm9pZClfc2V0Rm9vdGVyQmFubmVySGVpZ2h0OihpbnQpaGVpZwogICAgIF9w
YWdlLT5zZXRGb290ZXJCYW5uZXJIZWlnaHRGb3JUZXN0aW5nKGhlaWdodCk7CiB9CiAKKy0gKE5T
U2V0PE5TVmlldyAqPiAqKV9wZGZIVURzCit7CisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hV
RCkKKyAgICByZXR1cm4gX2ltcGwtPnBkZkhVRHMoKTsKKyNlbHNlCisgICAgcmV0dXJuIG5pbDsK
KyNlbmRpZgorfQorCiAtIChOU01lbnUgKilfYWN0aXZlTWVudQogewogICAgIC8vIEZJWE1FOiBP
bmx5IHRoZSBET00gcGFzdGUgYWNjZXNzIG1lbnUgaXMgc3VwcG9ydGVkIGZvciBub3cuIEluIHRo
ZSBmdXR1cmUsIGl0IGNvdWxkIGJlCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9XZWJWaWV3SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1dlYlZpZXdJbXBsLmgJKHJldmlzaW9uIDI2NjA4MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcg
QEAKIAogI2lmIFBMQVRGT1JNKE1BQykKIAorI2luY2x1ZGUgIlBERlBsdWdpbklkZW50aWZpZXIu
aCIKICNpbmNsdWRlICJQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUuaCIKICNpbmNsdWRlICJT
aGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJXS0xheW91dE1vZGUuaCIKQEAgLTc2LDYgKzc3
LDEwIEBAIE9CSkNfQ0xBU1MgV0tUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlcjsKIE9CSkNfQ0xB
U1MgV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXI7CiAjZW5kaWYgLy8gSEFWRShUT1VDSF9CQVIp
CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorT0JKQ19DTEFTUyBXS1BERkhVRFZp
ZXc7CisjZW5kaWYKKwogbmFtZXNwYWNlIEFQSSB7CiBjbGFzcyBIaXRUZXN0UmVzdWx0OwogY2xh
c3MgT2JqZWN0OwpAQCAtMTkwLDYgKzE5NSwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCB2aWV3V2ls
bFN0YXJ0TGl2ZVJlc2l6ZSgpOwogICAgIHZvaWQgdmlld0RpZEVuZExpdmVSZXNpemUoKTsKIAor
I2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgdm9pZCBjcmVhdGVQREZIVUQoUERG
UGx1Z2luSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgdXBk
YXRlUERGSFVETG9jYXRpb24oUERGUGx1Z2luSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpOworICAgIHZvaWQgcmVtb3ZlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIpOworICAg
IHZvaWQgcmVtb3ZlQWxsUERGSFVEcygpOworICAgIE5TU2V0ICpwZGZIVURzKCk7CisjZW5kaWYK
KwogICAgIHZvaWQgcmVuZXdHU3RhdGUoKTsKICAgICB2b2lkIHNldEZyYW1lU2l6ZShDR1NpemUp
OwogICAgIHZvaWQgZGlzYWJsZUZyYW1lU2l6ZVVwZGF0ZXMoKTsKQEAgLTcyOSw3ICs3NDIsMTEg
QEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgUmV0YWluUHRyPFdL
RnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI+IG1fZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI7
CiAjZW5kaWYKLSAgICAKKworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgSGFz
aE1hcDxXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIsIFJldGFpblB0cjxXS1BERkhVRFZpZXc+
PiBfcGRmSFVEVmlld3M7CisjZW5kaWYKKwogICAgIFJldGFpblB0cjxXS1NoYXJlU2hlZXQ+IF9z
aGFyZVNoZWV0OwogCiAgICAgUmV0YWluUHRyPFdLV2luZG93VmlzaWJpbGl0eU9ic2VydmVyPiBt
X3dpbmRvd1Zpc2liaWxpdHlPYnNlcnZlcjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1dlYlZpZXdJbXBsLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCShyZXZpc2lvbiAyNjYwODMpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQkod29ya2luZyBjb3B5KQpAQCAtNjIs
NiArNjIsNyBAQAogI2ltcG9ydCAiV0tFcnJvckludGVybmFsLmgiCiAjaW1wb3J0ICJXS0Z1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVyLmgiCiAjaW1wb3J0ICJXS0ltbWVkaWF0ZUFjdGlvbkNvbnRy
b2xsZXIuaCIKKyNpbXBvcnQgIldLUERGSFVEVmlldy5oIgogI2ltcG9ydCAiV0tQcmludGluZ1Zp
ZXcuaCIKICNpbXBvcnQgIldLU2FmZUJyb3dzaW5nV2FybmluZy5oIgogI2ltcG9ydCAiV0tTaGFy
ZVNoZWV0LmgiCkBAIC0xNzE4LDYgKzE3MTksNDUgQEAgdm9pZCBXZWJWaWV3SW1wbDo6dmlld0Rp
ZEVuZExpdmVSZXNpemUoKQogICAgIFttX2xheW91dFN0cmF0ZWd5IGRpZEVuZExpdmVSZXNpemVd
OwogfQogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKwordm9pZCBXZWJWaWV3SW1w
bDo6Y3JlYXRlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICByZW1vdmVQREZIVUQoaWRlbnRpZmllcik7Cisg
ICAgYXV0byBodWQgPSBhZG9wdE5TKFtbV0tQREZIVURWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
OnJlY3QgcGx1Z2luSWRlbnRpZmllcjppZGVudGlmaWVyIHBhZ2U6bV9wYWdlLmdldCgpXSk7Cisg
ICAgW21fdmlldyBhZGRTdWJ2aWV3Omh1ZC5nZXQoKV07CisgICAgX3BkZkhVRFZpZXdzLmFkZChp
ZGVudGlmaWVyLCBXVEZNb3ZlKGh1ZCkpOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVQ
REZIVURMb2NhdGlvbihQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKGF1dG8gaHVkID0gX3BkZkhVRFZpZXdzLmdl
dChpZGVudGlmaWVyKSkKKyAgICAgICAgW2h1ZCBzZXRGcmFtZTpyZWN0XTsKK30KKwordm9pZCBX
ZWJWaWV3SW1wbDo6cmVtb3ZlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikK
K3sKKyAgICBpZiAoYXV0byBodWQgPSBfcGRmSFVEVmlld3MudGFrZShpZGVudGlmaWVyKSkKKyAg
ICAgICAgW2h1ZCByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6
cmVtb3ZlQWxsUERGSFVEcygpCit7CisgICAgZm9yIChhdXRvJiBodWQgOiBfcGRmSFVEVmlld3Mu
dmFsdWVzKCkpCisgICAgICAgIFtodWQgcmVtb3ZlRnJvbVN1cGVydmlld107CisgICAgX3BkZkhV
RFZpZXdzLmNsZWFyKCk7Cit9CisKK05TU2V0ICpXZWJWaWV3SW1wbDo6cGRmSFVEcygpCit7Cisg
ICAgTlNNdXRhYmxlU2V0PE5TVmlldyAqPiAqc2V0ID0gW05TTXV0YWJsZVNldCBzZXRXaXRoQ2Fw
YWNpdHk6X3BkZkhVRFZpZXdzLnNpemUoKV07CisgICAgZm9yIChhdXRvJiBodWQgOiBfcGRmSFVE
Vmlld3MudmFsdWVzKCkpCisgICAgICAgIFtzZXQgYWRkT2JqZWN0Omh1ZC5nZXQoKV07CisgICAg
cmV0dXJuIHNldDsKK30KKworI2VuZGlmIC8vIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisK
IHZvaWQgV2ViVmlld0ltcGw6OnJlbmV3R1N0YXRlKCkKIHsKICAgICBpZiAobV90ZXh0SW5kaWNh
dG9yV2luZG93KQpAQCAtNTM5MSw2ICs1NDMxLDExIEBAIHZvaWQgV2ViVmlld0ltcGw6Om1vdXNl
TW92ZWQoTlNFdmVudCAqZXYKICAgICBpZiAobV9pZ25vcmVzTm9uV2hlZWxFdmVudHMpCiAgICAg
ICAgIHJldHVybjsKIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgZm9yIChh
dXRvJiBodWQgOiBfcGRmSFVEVmlld3MudmFsdWVzKCkpCisgICAgICAgIFtodWQgbW91c2VNb3Zl
ZDpldmVudF07CisjZW5kaWYKKwogICAgIC8vIFdoZW4gYSB2aWV3IGlzIGZpcnN0IHJlc3BvbmRl
ciwgaXQgZ2V0cyBtb3VzZSBtb3ZlZCBldmVudHMgZXZlbiB3aGVuIHRoZSBtb3VzZSBpcyBvdXRz
aWRlIGl0cyB2aXNpYmxlIHJlY3QuCiAgICAgaWYgKG1fdmlldy5nZXRBdXRvcmVsZWFzZWQoKSA9
PSBbbV92aWV3IHdpbmRvd10uZmlyc3RSZXNwb25kZXIgJiYgIU5TUG9pbnRJblJlY3QoW21fdmll
dyBjb252ZXJ0UG9pbnQ6W2V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddIGZyb21WaWV3Om5pbF0sIFtt
X3ZpZXcgdmlzaWJsZVJlY3RdKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTQzOSw2ICs1NDg0LDEx
IEBAIHZvaWQgV2ViVmlld0ltcGw6Om1vdXNlRG93bihOU0V2ZW50ICpldmUKICAgICBpZiAobV9p
Z25vcmVzTm9uV2hlZWxFdmVudHMpCiAgICAgICAgIHJldHVybjsKIAorI2lmIEVOQUJMRShVSV9Q
Uk9DRVNTX1BERl9IVUQpCisgICAgZm9yIChhdXRvJiBodWQgOiBfcGRmSFVEVmlld3MudmFsdWVz
KCkpCisgICAgICAgIFtodWQgbW91c2VEb3duOmV2ZW50XTsKKyNlbmRpZgorCiAgICAgc2V0TGFz
dE1vdXNlRG93bkV2ZW50KGV2ZW50KTsKICAgICBzZXRJZ25vcmVzTW91c2VEcmFnZ2VkRXZlbnRz
KGZhbHNlKTsKIApAQCAtNTQ1MCw2ICs1NTAwLDExIEBAIHZvaWQgV2ViVmlld0ltcGw6Om1vdXNl
VXAoTlNFdmVudCAqZXZlbnQKICAgICBpZiAobV9pZ25vcmVzTm9uV2hlZWxFdmVudHMpCiAgICAg
ICAgIHJldHVybjsKIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgZm9yIChh
dXRvJiBodWQgOiBfcGRmSFVEVmlld3MudmFsdWVzKCkpCisgICAgICAgIFtodWQgbW91c2VVcDpl
dmVudF07CisjZW5kaWYKKwogICAgIHNldExhc3RNb3VzZURvd25FdmVudChuaWwpOwogICAgIG1v
dXNlVXBJbnRlcm5hbChldmVudCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Q
REYvV0tQREZIVURWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
UERGL1dLUERGSFVEVmlldy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1BERi9XS1BERkhVRFZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKKyNpbXBvcnQgIlBE
RlBsdWdpbklkZW50aWZpZXIuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJQYWdl
UHJveHk7Cit9CisKK0BpbnRlcmZhY2UgV0tQREZIVURWaWV3IDogTlNWaWV3CisKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aEZyYW1lOihOU1JlY3QpZnJhbWUgcGx1Z2luSWRlbnRpZmllcjooV2Vi
S2l0OjpQREZQbHVnaW5JZGVudGlmaWVyKXBsdWdpbklkZW50aWZpZXIgcGFnZTooV2ViS2l0OjpX
ZWJQYWdlUHJveHkmKXBhZ2U7CistICh2b2lkKXNldEZyYW1lOihOU1JlY3QpZnJhbWU7CistICh2
b2lkKW1vdXNlTW92ZWQ6KE5TRXZlbnQgKilldmVudDsKKy0gKHZvaWQpbW91c2VEb3duOihOU0V2
ZW50ICopZXZlbnQ7CistICh2b2lkKW1vdXNlVXA6KE5TRXZlbnQgKilldmVudDsKKworQGVuZAor
CisjZW5kaWYgLy8gRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1BERi9XS1BERkhVRFZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvUERGL1dLUERGSFVEVmlldy5tbQkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9QREYvV0tQREZIVURWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJXS1BERkhVRFZpZXcuaCIKKworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKKyNp
bXBvcnQgIldlYlBhZ2VQcm94eS5oIgorI2ltcG9ydCA8UXVhcnR6Q29yZS9DQVRyYW5zYWN0aW9u
Lmg+CisjaW1wb3J0IDxwYWwvc3BpL2NvY29hL1F1YXJ0ekNvcmVTUEkuaD4KKyNpbXBvcnQgPHBh
bC9zcGkvbWFjL05TSW1hZ2VTUEkuaD4KKyNpbXBvcnQgPHd0Zi9XZWFrT2JqQ1B0ci5oPgorCisv
LyAgVGhlIEhVRCBpdGVtcyBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIHNwYWNpbmc6CisvLyAg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gfCAg
ICAgIDEyICAgICAgICAxMiAgICAgIDEwICAgICAxMiAgICAgICAgMTIgICAgICB8CisvLyB8ICAg
ICAtLS0tICAgICAgLS0tLSAgICAgfCAgICAgLS0tLSAgICAgIC0tLS0gICAgIHwKKy8vIHwgMTAg
fGljb258IDEwIHxpY29ufCAxMCB8IDEwIHxpY29ufCAxMCB8aWNvbnwgMTAgfAorLy8gfCAgICAg
LS0tLSAgICAgIC0tLS0gICAgIHwgICAgIC0tLS0gICAgICAtLS0tICAgICB8CisvLyB8ICAgICAg
MTIgICAgICAgIDEyICAgICAgMTAgICAgIDEyICAgICAgICAxMiAgICAgIHwKKy8vICAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgd2hlcmUgdGhl
IDEyIHBvaW50IHZlcnRpY2FsIHNwYWNpbmcgaXMgYW5jaG9yZWQgdG8gdGhlIHNtYWxsZXN0IGlj
b24gaW1hZ2UsCisvLyAgYW5kIGFsbCBzdWJzZXF1ZW50IGljb25zIHdpdGggYmUgY2VudGVyZWQg
dmVydGljYWxseSB3aXRoIHRoZSBzbWFsbGVzdCBpY29uLgorCitzdGF0aWMgY29uc3QgQ0dGbG9h
dCBrTGF5ZXJWZXJ0aWNhbE9mZnNldCA9IDQwOworc3RhdGljIGNvbnN0IENHRmxvYXQga0xheWVy
Q29ybmVyUmFkaXVzID0gMTI7CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrTGF5ZXJHcmF5Q29tcG9u
ZW50ID0gMDsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGtMYXllckFscGhhID0gMC43NTsKK3N0YXRp
YyBjb25zdCBDR0Zsb2F0IGtMYXllckltYWdlU2NhbGUgPSAxLjU7CitzdGF0aWMgY29uc3QgQ0dG
bG9hdCBrTGF5ZXJTZXBlcmF0b3JDb250cm9sbGVyU2l6ZSA9IDEuNTsKK3N0YXRpYyBjb25zdCBD
R0Zsb2F0IGtMYXllckNvbnRyb2xsZXJIb3Jpem9udGFsTWFyZ2luID0gMTAuMDsKK3N0YXRpYyBj
b25zdCBDR0Zsb2F0IGtMYXllckltYWdlVmVydGljYWxNYXJnaW4gPSAxMi4wOworc3RhdGljIGNv
bnN0IENHRmxvYXQga0xheWVyU2VwZXJhdG9yVmVydGljYWxNYXJnaW4gPSAxMC4wOworc3RhdGlj
IGNvbnN0IENHRmxvYXQga0NvbnRyb2xMYXllck5vcm1hbEFscGhhID0gMC43NTsKK3N0YXRpYyBj
b25zdCBDR0Zsb2F0IGtDb250cm9sTGF5ZXJEb3duQWxwaGEgPSAwLjQ1OworCitzdGF0aWMgTlNT
dHJpbmcgKiBjb25zdCBQREZIVURab29tSW5Db250cm9sID0gQCJwbHVzLm1hZ25pZnlpbmdnbGFz
cyI7CitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBQREZIVURab29tT3V0Q29udHJvbCA9IEAibWlu
dXMubWFnbmlmeWluZ2dsYXNzIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFBERkhVRExhdW5j
aFByZXZpZXdDb250cm9sID0gQCJwcmV2aWV3IjsKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFBE
RkhVRFNhdmVQREZDb250cm9sID0gQCJhcnJvdy5kb3duLmNpcmNsZSI7CitzdGF0aWMgTlNTdHJp
bmcgKiBjb25zdCBQREZIVURTZXBlcmF0b3JDb250cm9sID0gQCJQREZIVURTZXBlcmF0b3JDb250
cm9sIjsKKworc3RhdGljIGNvbnN0IENHRmxvYXQga0xheWVyRmFkZUluVGltZUludGVydmFsID0g
MC4yNTsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGtMYXllckZhZGVPdXRUaW1lSW50ZXJ2YWwgPSAw
LjU7CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrSW5pdGlhbEhpZGVUaW1lSW50ZXJ2YWwgPSAzLjA7
CisKK3N0YXRpYyBOU0FycmF5PE5TU3RyaW5nICo+ICpjb250cm9sQXJyYXkoKQoreworICAgIHJl
dHVybiBAWworICAgICAgICBQREZIVURab29tT3V0Q29udHJvbCwKKyAgICAgICAgUERGSFVEWm9v
bUluQ29udHJvbCwKKyAgICAgICAgUERGSFVEU2VwZXJhdG9yQ29udHJvbCwKKyAgICAgICAgUERG
SFVETGF1bmNoUHJldmlld0NvbnRyb2wsCisgICAgICAgIFBERkhVRFNhdmVQREZDb250cm9sCisg
ICAgXTsKK30KKworc3RhdGljIE5TQ29sb3IqIFBERkNHQ29sb3JDcmVhdGVHZW5lcmljUkdCKENH
RmxvYXQgcmVkLCBDR0Zsb2F0IGdyZWVuLCBDR0Zsb2F0IGJsdWUsIENHRmxvYXQgYWxwaGEpCit7
CisgICAgYXV0byBjb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VS
R0IoKSk7CisgICAgY29uc3QgQ0dGbG9hdCBjb21wb25lbnRzWzRdID0geyByZWQsIGdyZWVuLCBi
bHVlLCBhbHBoYSB9OworICAgIGF1dG8gY2dDb2xvciA9IGFkb3B0Q0YoQ0dDb2xvckNyZWF0ZShj
b2xvclNwYWNlLmdldCgpLCBjb21wb25lbnRzKSk7CisgICAgcmV0dXJuIFtOU0NvbG9yIGNvbG9y
V2l0aENHQ29sb3I6Y2dDb2xvci5nZXQoKV07Cit9CisKK0BpbXBsZW1lbnRhdGlvbiBXS1BERkhV
RFZpZXcgeworQHByaXZhdGUKKyAgICBXZWFrUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PiBfcGFn
ZTsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IF9hY3RpdmVDb250cm9sOworICAgIFdlYktpdDo6
UERGUGx1Z2luSWRlbnRpZmllciBfcGx1Z2luSWRlbnRpZmllcjsKKyAgICBDR0Zsb2F0IF9kZXZp
Y2VTY2FsZUZhY3RvcjsKKyAgICBSZXRhaW5QdHI8Q0FMYXllcj4gX2xheWVyOworICAgIFJldGFp
blB0cjxDQUxheWVyPiBfYWN0aXZlTGF5ZXI7CisgICAgQ0dTaXplIF9mcmFtZVNpemU7CisgICAg
UmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk8TlNTdHJpbmcqLCBOU0ltYWdlKj4+IF9jYWNo
ZWRJY29uczsKKyAgICBCT09MIF92aXNpYmxlOworICAgIGJvb2wgX21vdXNlTW92ZWRUb0hVRDsK
KyAgICBib29sIF9pbml0aWFsSGlkZVRpbWVyRmlyZWQ7Cit9CisKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aEZyYW1lOihOU1JlY3QpZnJhbWUgcGx1Z2luSWRlbnRpZmllcjooV2ViS2l0OjpQREZQ
bHVnaW5JZGVudGlmaWVyKXBsdWdpbklkZW50aWZpZXIgcGFnZTooV2ViS2l0OjpXZWJQYWdlUHJv
eHkmKXBhZ2UKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoRnJhbWU6ZnJhbWVd
KSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBzZWxmLndhbnRzTGF5ZXIgPSBZRVM7
CisgICAgX2NhY2hlZEljb25zID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2Nd
IGluaXRdKTsKKyAgICBfcGx1Z2luSWRlbnRpZmllciA9IHBsdWdpbklkZW50aWZpZXI7CisgICAg
X3BhZ2UgPSBtYWtlV2Vha1B0cihwYWdlKTsKKyAgICBfZGV2aWNlU2NhbGVGYWN0b3IgPSBwYWdl
LmRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgX3Zpc2libGUgPSBZRVM7CisgICAgW3NlbGYgX3Nl
dHVwTGF5ZXI6c2VsZi5sYXllcl07CisgICAgW3NlbGYgc2V0RnJhbWU6ZnJhbWVdOworCisgICAg
V2Vha09iakNQdHI8V0tQREZIVURWaWV3PiB3ZWFrU2VsZiA9IHNlbGY7CisgICAgZGlzcGF0Y2hf
YWZ0ZXIoZGlzcGF0Y2hfdGltZShESVNQQVRDSF9USU1FX05PVywgKGludDY0X3QpKGtJbml0aWFs
SGlkZVRpbWVJbnRlcnZhbCAqIE5TRUNfUEVSX1NFQykpLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1
ZSgpLCBeeworICAgICAgICBbd2Vha1NlbGYgX2hpZGVUaW1lckZpcmVkXTsKKyAgICB9KTsKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19sYXllciByZW1v
dmVGcm9tU3VwZXJsYXllcl07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNl
dEZyYW1lOihOU1JlY3QpcmVjdAoreworICAgIFtzdXBlciBzZXRGcmFtZTpyZWN0XTsKKyAgICBf
ZnJhbWVTaXplID0gcmVjdC5zaXplOworCisgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAg
IFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107CisgICAgQ0dSZWN0IGxheWVy
Qm91bmRzID0gW19sYXllciBib3VuZHNdOworICAgIFtfbGF5ZXIgc2V0RnJhbWU6Q0dSZWN0TWFr
ZShyZWN0LnNpemUud2lkdGggLyAyLjAgLSBsYXllckJvdW5kcy5zaXplLndpZHRoIC8gMi4wLCBr
TGF5ZXJWZXJ0aWNhbE9mZnNldCwgbGF5ZXJCb3VuZHMuc2l6ZS53aWR0aCwgbGF5ZXJCb3VuZHMu
c2l6ZS5oZWlnaHQpXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworfQorCistICh2b2lk
KV9oaWRlVGltZXJGaXJlZAoreworICAgIF9pbml0aWFsSGlkZVRpbWVyRmlyZWQgPSB0cnVlOwor
ICAgIGlmICghX21vdXNlTW92ZWRUb0hVRCkKKyAgICAgICAgW3NlbGYgX3NldFZpc2libGU6ZmFs
c2VdOworfQorCistICh2b2lkKV9zZXRWaXNpYmxlOihib29sKWlzVmlzaWJsZQoreworICAgIGlm
IChfdmlzaWJsZSA9PSBpc1Zpc2libGUpCisgICAgICAgIHJldHVybjsKKyAgICBfdmlzaWJsZSA9
IGlzVmlzaWJsZTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJhbnNhY3Rp
b24gc2V0QW5pbWF0aW9uRHVyYXRpb246IGlzVmlzaWJsZSA/IGtMYXllckZhZGVJblRpbWVJbnRl
cnZhbCA6IGtMYXllckZhZGVPdXRUaW1lSW50ZXJ2YWxdOworICAgIFtzZWxmIF9zZXRMYXllck9w
YWNpdHk6aXNWaXNpYmxlID8ga0xheWVyQWxwaGEgOiAwLjBdOworICAgIFtDQVRyYW5zYWN0aW9u
IGNvbW1pdF07Cit9CisKKy0gKHZvaWQpbW91c2VNb3ZlZDooTlNFdmVudCAqKWV2ZW50Cit7Cisg
ICAgaWYgKENHUmVjdENvbnRhaW5zUG9pbnQoW3NlbGYgY29udmVydFJlY3Q6Q0dSZWN0SW5zZXQo
W19sYXllciBmcmFtZV0sIC0xNi4wLCAtMTYuMCkgdG9WaWV3Om5pbF0sIE5TUG9pbnRUb0NHUG9p
bnQoZXZlbnQubG9jYXRpb25JbldpbmRvdykpKSB7CisgICAgICAgIFtzZWxmIF9zZXRWaXNpYmxl
OnRydWVdOworICAgICAgICBfbW91c2VNb3ZlZFRvSFVEID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYg
KF9pbml0aWFsSGlkZVRpbWVyRmlyZWQpCisgICAgICAgIFtzZWxmIF9zZXRWaXNpYmxlOmZhbHNl
XTsKK30KKworLSAodm9pZCltb3VzZURvd246KE5TRXZlbnQgKilldmVudAoreworICAgIF9hY3Rp
dmVDb250cm9sID0gW3NlbGYgX2NvbnRyb2xGb3JFdmVudDpldmVudF07CisgICAgaWYgKFtfYWN0
aXZlQ29udHJvbCBpc0VxdWFsVG9TdHJpbmc6UERGSFVEU2VwZXJhdG9yQ29udHJvbF0pCisgICAg
ICAgIF9hY3RpdmVDb250cm9sID0gbmlsOworICAgIGlmIChfYWN0aXZlQ29udHJvbCkgeworICAg
ICAgICAvLyBVcGRhdGUgcmVuZGVyaW5nIHRvIGhpZ2hsaWdodCBpdC4uCisgICAgICAgIF9hY3Rp
dmVMYXllciA9IFtzZWxmIF9sYXllckZvckV2ZW50OmV2ZW50XTsKKyAgICAgICAgCisgICAgICAg
IC8vIFVwZGF0ZSBsYXllciBpbWFnZTsgZG8gbm90IGFuaW1hdGUKKyAgICAgICAgW0NBVHJhbnNh
Y3Rpb24gYmVnaW5dOworICAgICAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZ
RVNdOworICAgICAgICAKKyAgICAgICAgW19hY3RpdmVMYXllciBzZXRPcGFjaXR5OiBrQ29udHJv
bExheWVyRG93bkFscGhhXTsKKyAgICAgICAgCisgICAgICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1p
dF07CisgICAgfQorfQorCistICh2b2lkKW1vdXNlVXA6KE5TRXZlbnQgKilldmVudAoreworICAg
IGlmICghX2FjdGl2ZUNvbnRyb2wpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBOU1N0cmlu
ZyogbW91c2VVcENvbnRyb2wgPSBbc2VsZiBfY29udHJvbEZvckV2ZW50OmV2ZW50XTsKKyAgICBp
ZiAoW19hY3RpdmVDb250cm9sIGlzRXF1YWxUb1N0cmluZzptb3VzZVVwQ29udHJvbF0pCisgICAg
ICAgIFtzZWxmIF9wZXJmb3JtQWN0aW9uRm9yQ29udHJvbDpfYWN0aXZlQ29udHJvbC5nZXQoKV07
CisgICAgCisgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAgIFtDQVRyYW5zYWN0aW9uIHNl
dERpc2FibGVBY3Rpb25zOllFU107CisgICAgW19hY3RpdmVMYXllciBzZXRPcGFjaXR5OmtDb250
cm9sTGF5ZXJOb3JtYWxBbHBoYV07CisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKKworICAg
IF9hY3RpdmVMYXllciA9IG5pbDsKKyAgICBfYWN0aXZlQ29udHJvbCA9IG5pbDsKK30KKworLSAo
T3B0aW9uYWw8TlNVSW50ZWdlcj4pX2NvbnRyb2xJbmRleEZvckV2ZW50OihOU0V2ZW50ICopZXZl
bnQKK3sKKyAgICBDR1BvaW50IGluaXRpYWxQb2ludCA9IE5TUG9pbnRUb0NHUG9pbnQoZXZlbnQu
bG9jYXRpb25JbldpbmRvdyk7CisgICAgaW5pdGlhbFBvaW50LnggLT0gW19sYXllciBmcmFtZV0u
b3JpZ2luLng7CisgICAgaW5pdGlhbFBvaW50LnkgLT0gW19sYXllciBmcmFtZV0ub3JpZ2luLnk7
CisgICAgZm9yIChOU1VJbnRlZ2VyIGluZGV4ID0gMDsgaW5kZXggPCBbX2xheWVyIHN1YmxheWVy
c10uY291bnQ7IGluZGV4KyspIHsKKyAgICAgICAgQ0FMYXllciAqc3ViTGF5ZXIgPSBbX2xheWVy
IHN1YmxheWVyc11baW5kZXhdOworICAgICAgICBOU1JlY3Qgd2luZG93U3BhY2VSZWN0ID0gW3Nl
bGYgY29udmVydFJlY3Q6c3ViTGF5ZXIuZnJhbWUgdG9WaWV3Om5pbF07CisgICAgICAgIGlmIChD
R1JlY3RDb250YWluc1BvaW50KHdpbmRvd1NwYWNlUmVjdCwgaW5pdGlhbFBvaW50KSkKKyAgICAg
ICAgICAgIHJldHVybiBpbmRleDsKKyAgICB9CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30K
KworLSAoTlNTdHJpbmcgKilfY29udHJvbEZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQKK3sKKyAg
ICBpZiAoYXV0byBpbmRleCA9IFtzZWxmIF9jb250cm9sSW5kZXhGb3JFdmVudDpldmVudF0pCisg
ICAgICAgIHJldHVybiBjb250cm9sQXJyYXkoKVsqaW5kZXhdOworICAgIHJldHVybiBuaWw7Cit9
CisKKy0gKENBTGF5ZXIgKilfbGF5ZXJGb3JFdmVudDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAg
aWYgKGF1dG8gaW5kZXggPSBbc2VsZiBfY29udHJvbEluZGV4Rm9yRXZlbnQ6ZXZlbnRdKQorICAg
ICAgICByZXR1cm4gW19sYXllciBzdWJsYXllcnNdWyppbmRleF07CisgICAgcmV0dXJuIG5pbDsK
K30KKworLSAodm9pZClfcGVyZm9ybUFjdGlvbkZvckNvbnRyb2w6KE5TU3RyaW5nICopY29udHJv
bAoreworICAgIGlmICghX3Zpc2libGUpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBwYWdl
ID0gX3BhZ2UuZ2V0KCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisgICAgaWYg
KFtjb250cm9sIGlzRXF1YWxUb1N0cmluZzpQREZIVURab29tSW5Db250cm9sXSkKKyAgICAgICAg
cGFnZS0+cGRmWm9vbUluKF9wbHVnaW5JZGVudGlmaWVyKTsKKyAgICBlbHNlIGlmIChbY29udHJv
bCBpc0VxdWFsVG9TdHJpbmc6UERGSFVEWm9vbU91dENvbnRyb2xdKQorICAgICAgICBwYWdlLT5w
ZGZab29tT3V0KF9wbHVnaW5JZGVudGlmaWVyKTsKKyAgICBlbHNlIGlmIChbY29udHJvbCBpc0Vx
dWFsVG9TdHJpbmc6UERGSFVEU2F2ZVBERkNvbnRyb2xdKQorICAgICAgICBwYWdlLT5wZGZTYXZl
VG9QREYoX3BsdWdpbklkZW50aWZpZXIpOworICAgIGVsc2UgaWYgKFtjb250cm9sIGlzRXF1YWxU
b1N0cmluZzpQREZIVURMYXVuY2hQcmV2aWV3Q29udHJvbF0pCisgICAgICAgIHBhZ2UtPnBkZk9w
ZW5XaXRoUHJldmlldyhfcGx1Z2luSWRlbnRpZmllcik7Cit9CisKKy0gKHZvaWQpX2xvYWRJY29u
SW1hZ2VzCit7CisgICAgZm9yIChOU1N0cmluZyAqY29udHJvbE5hbWUgaW4gY29udHJvbEFycmF5
KCkpCisgICAgICAgIFtzZWxmIF9nZXRJbWFnZUZvckNvbnRyb2xOYW1lOiBjb250cm9sTmFtZV07
Cit9CisKKy0gKHZvaWQpX3NldHVwTGF5ZXI6KENBTGF5ZXIgKilwYXJlbnRMYXllcgoreworICAg
IF9sYXllciA9IGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0XSk7CisgICAgW19sYXllciBz
ZXRDb3JuZXJSYWRpdXM6a0xheWVyQ29ybmVyUmFkaXVzXTsKKyAgICAKKyAgICBhdXRvIGNvbG9y
ID0gYWRvcHROUyhQREZDR0NvbG9yQ3JlYXRlR2VuZXJpY1JHQihrTGF5ZXJHcmF5Q29tcG9uZW50
LCBrTGF5ZXJHcmF5Q29tcG9uZW50LCBrTGF5ZXJHcmF5Q29tcG9uZW50LCAxLjApKTsKKyAgICBb
X2xheWVyIHNldEJhY2tncm91bmRDb2xvcjpbY29sb3IgQ0dDb2xvcl1dOworICAgIFtzZWxmIF9z
ZXRMYXllck9wYWNpdHk6a0xheWVyQWxwaGFdOworICAgIAorICAgIFtzZWxmIF9sb2FkSWNvbklt
YWdlc107CisgICAgQ0dGbG9hdCBtaW5JY29uSW1hZ2VIZWlnaHQgPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPENHRmxvYXQ+OjptYXgoKTsKKyAgICBmb3IgKE5TSW1hZ2UqIGltYWdlIGluIFtfY2FjaGVk
SWNvbnMgYWxsVmFsdWVzXSkKKyAgICAgICAgbWluSWNvbkltYWdlSGVpZ2h0ID0gc3RkOjptaW4o
bWluSWNvbkltYWdlSGVpZ2h0LCAoaW1hZ2Uuc2l6ZS5oZWlnaHQgLyBfZGV2aWNlU2NhbGVGYWN0
b3IpKTsKKyAgICAKKyAgICBDR0Zsb2F0IGR4ID0ga0xheWVyQ29udHJvbGxlckhvcml6b250YWxN
YXJnaW47CisgICAgZm9yIChOU1N0cmluZyAqY29udHJvbE5hbWUgaW4gY29udHJvbEFycmF5KCkp
IHsKKyAgICAgICAgYXV0byBjb250cm9sTGF5ZXIgPSBhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10g
aW5pdF0pOworICAgICAgICBDR0Zsb2F0IGR5ID0gMC4wOworICAgICAgICBDR0Zsb2F0IGNvbnRy
b2xsZXJXaWR0aCA9IDAuMDsKKyAgICAgICAgQ0dGbG9hdCBjb250cm9sbGVySGVpZ2h0ID0gMC4w
OworCisgICAgICAgIGlmIChbY29udHJvbE5hbWUgaXNFcXVhbFRvU3RyaW5nOiBQREZIVURTZXBl
cmF0b3JDb250cm9sXSkgeworICAgICAgICAgICAgZHkgPSBrTGF5ZXJTZXBlcmF0b3JWZXJ0aWNh
bE1hcmdpbjsKKyAgICAgICAgICAgIGNvbnRyb2xsZXJXaWR0aCA9IGtMYXllclNlcGVyYXRvckNv
bnRyb2xsZXJTaXplOworICAgICAgICAgICAgY29udHJvbGxlckhlaWdodCA9IG1pbkljb25JbWFn
ZUhlaWdodCArICgyLjAgKiBrTGF5ZXJJbWFnZVZlcnRpY2FsTWFyZ2luKSAtICgyLjAgKiBrTGF5
ZXJTZXBlcmF0b3JWZXJ0aWNhbE1hcmdpbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFtj
b250cm9sTGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOiBbW05TQ29sb3IgbGlnaHRHcmF5Q29sb3Jd
IENHQ29sb3JdXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIE5TSW1hZ2UqIGNvbnRy
b2xJbWFnZSA9IFtzZWxmIF9nZXRJbWFnZUZvckNvbnRyb2xOYW1lOmNvbnRyb2xOYW1lXTsKKyAg
ICAgICAgICAgIFtjb250cm9sTGF5ZXIgc2V0Q29udGVudHM6IGNvbnRyb2xJbWFnZV07CisgICAg
ICAgICAgICBbY29udHJvbExheWVyIHNldE9wYWNpdHk6IGtDb250cm9sTGF5ZXJOb3JtYWxBbHBo
YV07CisKKyAgICAgICAgICAgIGR5ID0ga0xheWVySW1hZ2VWZXJ0aWNhbE1hcmdpbjsKKyAgICAg
ICAgICAgIGNvbnRyb2xsZXJXaWR0aCA9IFtjb250cm9sSW1hZ2Ugc2l6ZV0ud2lkdGggLyBfZGV2
aWNlU2NhbGVGYWN0b3I7CisgICAgICAgICAgICBjb250cm9sbGVySGVpZ2h0ID0gW2NvbnRyb2xJ
bWFnZSBzaXplXS5oZWlnaHQgLyBfZGV2aWNlU2NhbGVGYWN0b3I7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGR5IC09IChjb250cm9sbGVySGVpZ2h0IC0gbWluSWNvbkltYWdlSGVpZ2h0KSAv
IDIuMDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgW2NvbnRyb2xMYXllciBzZXRGaWx0ZXJz
OkBbW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckNvbG9ySW52ZXJ0XV1dOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBbY29udHJvbExheWVyIHNldEZyYW1lOkNHUmVjdE1h
a2UoZHgsIGR5LCBjb250cm9sbGVyV2lkdGgsIGNvbnRyb2xsZXJIZWlnaHQpXTsKKyAgICAgICAg
W19sYXllciBhZGRTdWJsYXllcjpjb250cm9sTGF5ZXIuZ2V0KCldOworICAgICAgICAKKyAgICAg
ICAgZHggKz0gY29udHJvbGxlcldpZHRoICsga0xheWVyQ29udHJvbGxlckhvcml6b250YWxNYXJn
aW47CisgICAgfQorICAgIAorICAgIFtfbGF5ZXIgc2V0RnJhbWU6Q0dSZWN0TWFrZSgwLCBrTGF5
ZXJWZXJ0aWNhbE9mZnNldCwgZHgsIG1pbkljb25JbWFnZUhlaWdodCArIDIuMCAqIGtMYXllcklt
YWdlVmVydGljYWxNYXJnaW4pXTsKKyAgICBbcGFyZW50TGF5ZXIgYWRkU3VibGF5ZXI6IF9sYXll
ci5nZXQoKV07Cit9CisKKy0gKHZvaWQpX3JlZHJhd0xheWVyCit7CisgICAgW19jYWNoZWRJY29u
cyByZW1vdmVBbGxPYmplY3RzXTsKKyAgICBDQUxheWVyICpwYXJlbnRMYXllciA9IFtfbGF5ZXIg
c3VwZXJsYXllcl07CisgICAgW19sYXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07CisgICAgW3Nl
bGYgX3NldHVwTGF5ZXI6cGFyZW50TGF5ZXJdOworICAgIFtzZWxmIHNldEZyYW1lU2l6ZTpfZnJh
bWVTaXplXTsKK30KKworLSAoTlNJbWFnZSopX2dldEltYWdlRm9yQ29udHJvbE5hbWU6KE5TU3Ry
aW5nICopY29udHJvbAoreworICAgIE5TSW1hZ2UqIGljb25JbWFnZSA9IF9jYWNoZWRJY29ucy5n
ZXQoKVtjb250cm9sXTsKKyAgICBpZiAoaWNvbkltYWdlKQorICAgICAgICByZXR1cm4gaWNvbklt
YWdlOworCisgICAgaWNvbkltYWdlID0gW05TSW1hZ2UgX2ltYWdlV2l0aFN5c3RlbVN5bWJvbE5h
bWU6IGNvbnRyb2xdOworICAgIGlmICghaWNvbkltYWdlKQorICAgICAgICByZXR1cm4gbmlsOwor
CisgICAgaWNvbkltYWdlID0gW2ljb25JbWFnZSBfaW1hZ2VXaXRoQ29uZmlndXJhdGlvbjpAewor
ICAgICAgICBOU0ltYWdlQWx0ZXJuYXRlQ3JpdGVyaW9uRm9udCA6IFtOU0ZvbnQgcHJlZmVycmVk
Rm9udEZvclRleHRTdHlsZTpOU0ZvbnRUZXh0U3R5bGVUaXRsZTIgb3B0aW9uczpAeyB9XSwKKyAg
ICAgICAgTlNJbWFnZUFsdGVybmF0ZUNyaXRlcmlvblN5bWJvbFNjYWxlIDogQChOU0ltYWdlU3lt
Ym9sU2NhbGVMYXJnZSkKKyAgICB9XTsKKyAgICAgICAgCisgICAgTlNSZWN0IGljb25JbWFnZVJl
Y3QgPSBOU01ha2VSZWN0KDAsIDAsIFtpY29uSW1hZ2Ugc2l6ZV0ud2lkdGggKiBrTGF5ZXJJbWFn
ZVNjYWxlICogX2RldmljZVNjYWxlRmFjdG9yLCBbaWNvbkltYWdlIHNpemVdLmhlaWdodCAqIGtM
YXllckltYWdlU2NhbGUgKiBfZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIE5TSW1hZ2VSZXAqIGlj
b25JbWFnZVJlcCA9IFtpY29uSW1hZ2UgYmVzdFJlcHJlc2VudGF0aW9uRm9yUmVjdDppY29uSW1h
Z2VSZWN0IGNvbnRleHQ6bmlsIGhpbnRzOm5pbF07CisgICAgaWNvbkltYWdlID0gW05TSW1hZ2Ug
aW1hZ2VXaXRoSW1hZ2VSZXA6IGljb25JbWFnZVJlcF07CisgICAgCisgICAgX2NhY2hlZEljb25z
LmdldCgpW2NvbnRyb2xdID0gaWNvbkltYWdlOworICAgIHJldHVybiBpY29uSW1hZ2U7Cit9CisK
Ky0gKHZvaWQpX3NldExheWVyT3BhY2l0eTooQ0dGbG9hdClhbHBoYQoreworICAgIFtfbGF5ZXIg
c2V0T3BhY2l0eTphbHBoYV07CisgICAgZm9yIChDQUxheWVyICpzdWJMYXllciBpbiBbX2xheWVy
IHN1YmxheWVyc10pCisgICAgICAgIFtzdWJMYXllciBzZXRPcGFjaXR5OmFscGhhXTsKK30KKwor
QGVuZAorCisjZW5kaWYgLy8gRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQkocmV2aXNpb24g
MjY2MDgzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMTA4OCwxNiArMTA4OCw2IEBAIHZvaWQgV2ViUGFnZVByb3h5
OjpkaWRQZXJmb3JtRGljdGlvbmFyeUwKICAgICBwYWdlQ2xpZW50KCkuZGlkUGVyZm9ybURpY3Rp
b25hcnlMb29rdXAoZGljdGlvbmFyeVBvcHVwSW5mbyk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5
OjpzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKGNv
bnN0IFN0cmluZyYsIEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwg
Y29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYlBh
Z2VQcm94eTo6b3BlblBERkZyb21UZW1wb3JhcnlGb2xkZXJXaXRoTmF0aXZlQXBwbGljYXRpb24o
RnJhbWVJbmZvRGF0YSYmLCBjb25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRSZW1vdGVMYXllclRyZWVSb290Tm9kZShSZW1v
dGVMYXllclRyZWVOb2RlKiByb290Tm9kZSkKIHsKICAgICBwYWdlQ2xpZW50KCkuc2V0UmVtb3Rl
TGF5ZXJUcmVlUm9vdE5vZGUocm9vdE5vZGUpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgJKHJldmlzaW9uIDI2NjA4MykKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xOTAsNiArMTkwLDEzIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHJlZ2lzdGVySW5z
ZXJ0aW9uVW5kb0dyb3VwaW5nKCkgb3ZlcnJpZGU7CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19Q
REZfSFVEKQorICAgIHZvaWQgY3JlYXRlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIHVwZGF0ZVBERkhVRExvY2F0
aW9uKFBERlBsdWdpbklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHJlbW92ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyKSBvdmVycmlkZTsK
KyAgICB2b2lkIHJlbW92ZUFsbFBERkhVRHMoKSBvdmVycmlkZTsKKyNlbmRpZgorCiAgICAgLy8g
QXV4aWxpYXJ5IENsaWVudCBDcmVhdGlvbgogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAg
ICBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50JiBmdWxsU2NyZWVuTWFuYWdlclByb3h5
Q2xpZW50KCkgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFn
ZUNsaWVudEltcGxNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
bWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCShyZXZpc2lvbiAyNjYwODMpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTM0OSw2ICszNDksMzAgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVnaXN0ZXJJbnNlcnRpb25V
bgogICAgIHJlZ2lzdGVySW5zZXJ0aW9uVW5kb0dyb3VwaW5nV2l0aFVuZG9NYW5hZ2VyKFttX3Zp
ZXcgdW5kb01hbmFnZXJdKTsKIH0KIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisK
K3ZvaWQgUGFnZUNsaWVudEltcGw6OmNyZWF0ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyIGlk
ZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCit7CisgICAgbV9pbXBsLT5j
cmVhdGVQREZIVUQoaWRlbnRpZmllciwgcmVjdCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6
OnVwZGF0ZVBERkhVRExvY2F0aW9uKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBtX2ltcGwtPnVwZGF0ZVBERkhVRExv
Y2F0aW9uKGlkZW50aWZpZXIsIHJlY3QpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpyZW1v
dmVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIG1faW1wbC0+
cmVtb3ZlUERGSFVEKGlkZW50aWZpZXIpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpyZW1v
dmVBbGxQREZIVURzKCkKK3sKKyAgICBtX2ltcGwtPnJlbW92ZUFsbFBERkhVRHMoKTsKK30KKwor
I2VuZGlmIC8vIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKIHZvaWQgUGFnZUNsaWVudElt
cGw6OmNsZWFyQWxsRWRpdENvbW1hbmRzKCkKIHsKICAgICBtX2ltcGwtPmNsZWFyQWxsRWRpdENv
bW1hbmRzKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdl
UHJveHlNYWMubW0JKHJldmlzaW9uIDI2NjA4MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9XZWJQYWdlUHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ3NSw4ICs0NzUsNiBA
QCBzdGF0aWMgTlNTdHJpbmcgKnBhdGhUb1BERk9uRGlzayhjb25zdCBTCiAKIHZvaWQgV2ViUGFn
ZVByb3h5OjpzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0
aW9uKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIEZyYW1lSW5mb0RhdGEmJiBmcmFt
ZUluZm8sIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YSwgY29uc3QgU3RyaW5nJiBwZGZV
VUlEKQogewotICAgIE1FU1NBR0VfQ0hFQ0soVGVtcG9yYXJ5UERGRmlsZU1hcDo6aXNWYWxpZEtl
eShwZGZVVUlEKSk7Ci0KICAgICBpZiAoZGF0YS5pc0VtcHR5KCkpIHsKICAgICAgICAgV1RGTG9n
QWx3YXlzKCJDYW5ub3Qgc2F2ZSBlbXB0eSBQREYgZmlsZSB0byB0aGUgdGVtcG9yYXJ5IGRpcmVj
dG9yeS4iKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNTA0LDcgKzUwMiw4IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpzYXZlUERGVG9UZW1wb3JhcnlGb2wKICAgICBhdXRvIG9yaWdpbmF0aW5nVVJMU3Ry
aW5nID0gZnJhbWVJbmZvLnJlcXVlc3QudXJsKCkuc3RyaW5nKCk7CiAgICAgRmlsZVN5c3RlbTo6
c2V0TWV0YWRhdGFVUkwobnNQYXRoLmdldCgpLCBvcmlnaW5hdGluZ1VSTFN0cmluZyk7CiAKLSAg
ICBtX3RlbXBvcmFyeVBERkZpbGVzLmFkZChwZGZVVUlELCBuc1BhdGguZ2V0KCkpOworICAgIGlm
IChUZW1wb3JhcnlQREZGaWxlTWFwOjppc1ZhbGlkS2V5KHBkZlVVSUQpKQorICAgICAgICBtX3Rl
bXBvcmFyeVBERkZpbGVzLmFkZChwZGZVVUlELCBuc1BhdGguZ2V0KCkpOwogCiAgICAgYXV0byBw
ZGZGaWxlVVJMID0gVVJMOjpmaWxlVVJMV2l0aEZpbGVTeXN0ZW1QYXRoKFN0cmluZyhuc1BhdGgu
Z2V0KCkpKTsKICAgICBtX3VpQ2xpZW50LT5jb25maXJtUERGT3BlbmluZygqdGhpcywgcGRmRmls
ZVVSTCwgV1RGTW92ZShmcmFtZUluZm8pLCBbcGRmRmlsZVVSTF0gKGJvb2wgYWxsb3dlZCkgewpA
QCAtNTE0LDYgKzUxMyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzYXZlUERGVG9UZW1wb3JhcnlG
b2wKICAgICB9KTsKIH0KIAorI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKSAmJiAhRU5BQkxFKFVJ
X1BST0NFU1NfUERGX0hVRCkKIHZvaWQgV2ViUGFnZVByb3h5OjpvcGVuUERGRnJvbVRlbXBvcmFy
eUZvbGRlcldpdGhOYXRpdmVBcHBsaWNhdGlvbihGcmFtZUluZm9EYXRhJiYgZnJhbWVJbmZvLCBj
b25zdCBTdHJpbmcmIHBkZlVVSUQpCiB7CiAgICAgTUVTU0FHRV9DSEVDSyhUZW1wb3JhcnlQREZG
aWxlTWFwOjppc1ZhbGlkS2V5KHBkZlVVSUQpKTsKQEAgLTUzMCw2ICs1MzAsNyBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6b3BlblBERkZyb21UZW1wb3JhcnlGCiAgICAgICAgIFtbTlNXb3Jrc3BhY2Ug
c2hhcmVkV29ya3NwYWNlXSBvcGVuVVJMOnBkZkZpbGVVUkxdOwogICAgIH0pOwogfQorI2VuZGlm
CiAKICNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKIHZvaWQgV2ViUGFnZVByb3h5OjpzaG93UERG
Q29udGV4dE1lbnUoY29uc3QgV2ViS2l0OjpQREZDb250ZXh0TWVudSYgY29udGV4dE1lbnUsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8aW50MzJfdD4mJik+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC02NzMsNiArNjc0LDQ5IEBAIFBsYXRmb3JtVmlldyogV2ViUGFnZVByb3h5Ojpw
bGF0Zm9ybVZpZXcKICAgICByZXR1cm4gW3BhZ2VDbGllbnQoKS5wbGF0Zm9ybVdpbmRvdygpIGNv
bnRlbnRWaWV3XTsKIH0KIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKK3ZvaWQg
V2ViUGFnZVByb3h5OjpjcmVhdGVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVy
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIHBhZ2VDbGllbnQoKS5jcmVh
dGVQREZIVUQoaWRlbnRpZmllciwgcmVjdCk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpyZW1v
dmVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIHBhZ2VDbGll
bnQoKS5yZW1vdmVQREZIVUQoaWRlbnRpZmllcik7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5Ojp1
cGRhdGVQREZIVURMb2NhdGlvbihQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCit7CisgICAgcGFnZUNsaWVudCgpLnVwZGF0ZVBERkhV
RExvY2F0aW9uKGlkZW50aWZpZXIsIHJlY3QpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6cGRm
Wm9vbUluKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpab29tUERGSW4oaWRlbnRpZmllcikpOworfQorCit2b2lkIFdlYlBhZ2VQ
cm94eTo6cGRmWm9vbU91dChQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Wm9vbVBERk91dChpZGVudGlmaWVyKSk7Cit9CisKK3Zv
aWQgV2ViUGFnZVByb3h5OjpwZGZTYXZlVG9QREYoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlm
aWVyKQoreworICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViUGFnZTo6U2F2ZVBE
RihpZGVudGlmaWVyKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gKFN0
cmluZyYmIHN1Z2dlc3RlZEZpbGVuYW1lLCBVUkwmJiBvcmlnaW5hdGluZ1VSTCwgY29uc3QgSVBD
OjpEYXRhUmVmZXJlbmNlJiBkYXRhUmVmZXJlbmNlKSB7CisgICAgICAgIHNhdmVQREZUb0ZpbGVJ
bkRvd25sb2Fkc0ZvbGRlcihXVEZNb3ZlKHN1Z2dlc3RlZEZpbGVuYW1lKSwgV1RGTW92ZShvcmln
aW5hdGluZ1VSTCksIGRhdGFSZWZlcmVuY2UpOworICAgIH0pOworfQorCit2b2lkIFdlYlBhZ2VQ
cm94eTo6cGRmT3BlbldpdGhQcmV2aWV3KFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikK
K3sKKyAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6Ok9wZW5QREZXaXRo
UHJldmlldyhpZGVudGlmaWVyKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KV0gKFN0cmluZyYmIHN1Z2dlc3RlZEZpbGVuYW1lLCBGcmFtZUluZm9EYXRhJiYgZnJhbWVJbmZv
LCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGEsIGNvbnN0IFN0cmluZyYgcGRmVVVJRCkg
eworICAgICAgICBzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxp
Y2F0aW9uKFdURk1vdmUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBXVEZNb3ZlKGZyYW1lSW5mbyksIGRh
dGEsIHBkZlVVSUQpOworICAgIH0pOworfQorCisjZW5kaWYgLy8gRU5BQkxFKFVJX1BST0NFU1Nf
UERGX0hVRCkKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBQTEFURk9STShN
QUMpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDI2NjA4MykKKysrIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3OTAsNiArMTc5MCw3IEBACiAJ
CUQzQjk0ODQ5MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJTZWFyY2hQb3B1cE1lbnUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzQjk0ODQ1MTFGRjRCNjUw
MDAzMkIzOSAvKiBXZWJTZWFyY2hQb3B1cE1lbnUuaCAqLzsgfTsKIAkJREY0NjJFMEYyM0YyMkY1
NTAwRUZGMzVGIC8qIFdLSFRUUENvb2tpZVN0b3JlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREY0NjJFMEUyM0YyMkY1MzAwRUZGMzVGIC8q
IFdLSFRUUENvb2tpZVN0b3JlUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCURGNDYyRTEyMjNGMzM4QkUwMEVGRjM1RiAvKiBXS0NvbnRl
bnRXb3JsZFByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IERGNDYyRTExMjNGMzM4QUQwMEVGRjM1RiAvKiBXS0NvbnRlbnRXb3JsZFByaXZhdGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlERjg0
Q0VFNDI0OUFBMjREMDA5MDk2RjYgLyogV0tQREZIVURWaWV3Lm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREY4NENFRTIyNDlBQTIxRjAwOTA5NkY2IC8q
IFdLUERGSFVEVmlldy5tbSAqLzsgfTsKIAkJRTEwNUZFNTQxOEQ3QjlERTAwOEY1N0E4IC8qIEVk
aXRpbmdSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTEwNUZFNTMxOEQ3QjlERTAwOEY1N0E4IC8qIEVkaXRpbmdSYW5nZS5oICovOyB9OwogCQlF
MTFEMzVBRTE2QjYzRDFCMDA2RDIzRDcgLyogY29tLmFwcGxlLldlYlByb2Nlc3Muc2IgaW4gUmVz
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOTY3RTM3MTUwQUI1
RTIwMEM3MzE2OSAvKiBjb20uYXBwbGUuV2ViUHJvY2Vzcy5zYiAqLzsgfTsKIAkJRTE0QTk1NEEx
NkUwMTZBNDAwNjhERTgyIC8qIE5ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTRBOTU0ODE2RTAx
NkE0MDA2OERFODIgLyogTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXMuaCAqLzsgfTsK
QEAgLTUyNzUsMTAgKzUyNzYsMTMgQEAKIAkJRDNCOTQ4NDMxMUZGNEI2NTAwMDMyQjM5IC8qIFdl
YlBvcHVwTWVudS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQb3B1cE1l
bnUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDNCOTQ4NDQxMUZGNEI2NTAwMDMy
QjM5IC8qIFdlYlNlYXJjaFBvcHVwTWVudS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXZWJTZWFyY2hQb3B1cE1lbnUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlEM0I5NDg0NTExRkY0QjY1MDAwMzJCMzkgLyogV2ViU2VhcmNoUG9wdXBNZW51Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlNlYXJjaFBvcHVwTWVudS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlERjJCMTNCMTI0OUQ4RjU0MDA1QkNDNTIgLyog
UERGUGx1Z2luSWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQ
REZQbHVnaW5JZGVudGlmaWVyLmg7IHBhdGggPSBQREYvUERGUGx1Z2luSWRlbnRpZmllci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERjQ2MkUwRTIzRjIyRjUzMDBFRkYzNUYgLyog
V0tIVFRQQ29va2llU3RvcmVQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdLSFRUUENvb2tpZVN0b3JlUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlERjQ2MkUxMTIzRjMzOEFEMDBFRkYzNUYgLyogV0tDb250ZW50V29ybGRQcml2YXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQ29udGVudFdvcmxkUHJpdmF0ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERjU4QzYzMTEzNzFBQzU4MDBGOUEzN0Mg
LyogTmF0aXZlV2ViV2hlZWxFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBOYXRpdmVXZWJXaGVlbEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURG
NThDNjM1MTM3MUFDQTAwMEY5QTM3QyAvKiBOYXRpdmVXZWJXaGVlbEV2ZW50TWFjLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTmF0aXZlV2ViV2hlZWxFdmVudE1h
Yy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREY4NENFRTIyNDlBQTIxRjAwOTA5
NkY2IC8qIFdLUERGSFVEVmlldy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
bmFtZSA9IFdLUERGSFVEVmlldy5tbTsgcGF0aCA9IFBERi9XS1BERkhVRFZpZXcubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURGODRDRUUzMjQ5QUEyMUYwMDkwOTZGNiAvKiBXS1BE
RkhVRFZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tQREZIVURWaWV3
Lmg7IHBhdGggPSBQREYvV0tQREZIVURWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUxMDVGRTUzMThEN0I5REUwMDhGNTdBOCAvKiBFZGl0aW5nUmFuZ2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWRpdGluZ1JhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUUxMTVDNzE1MTkwRjhBMjUwMEVDQzUxNiAvKiBjb20uYXBwbGUuV2ViS2l0
LlN0b3JhZ2Uuc2IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gY29tLmFwcGxlLldlYktpdC5TdG9y
YWdlLnNiOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9jb20uYXBwbGUuV2ViS2l0LlN0
b3JhZ2Uuc2I7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUUxMzNGRDg5
MTQyM0REN0YwMEZDN0JGQiAvKiBXZWJLaXQuaWNucyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGltYWdlLmljbnM7IG5hbWUgPSBXZWJLaXQuaWNuczsg
cGF0aCA9IFJlc291cmNlcy9XZWJLaXQuaWNuczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTg5NjMsNiArODk2Nyw3IEBACiAJCQkJQ0Q0NTcwRDgyNDQ0Q0ExNzAwQTNEQ0VCIC8qIE1l
ZGlhICovLAogCQkJCTUxMENDN0U3MTYxMzhFNzIwMEQwM0VEMyAvKiBOZXR3b3JrICovLAogCQkJ
CTMxQTJFQzQwMTQ4OTk3MzcwMDgxMEQ3MSAvKiBOb3RpZmljYXRpb25zICovLAorCQkJCURGODRD
RUUxMjQ5QUEyMDAwMDkwOTZGNiAvKiBQREYgKi8sCiAJCQkJMUFFRkNDMDUxMUQwMUYzNDAwODIx
OUQzIC8qIFBsdWdpbnMgKi8sCiAJCQkJMkQxNTUxQTkxRjVBOUI0MjAwMDZFM0ZFIC8qIFJlbW90
ZUxheWVyVHJlZSAqLywKIAkJCQkxQUFGMDg5RTE5MjY4MUFDMDBCNjM5MEMgLyogVXNlckNvbnRl
bnQgKi8sCkBAIC0xMDQ1MSw2ICsxMDQ1NiwxNSBAQAogCQkJcGF0aCA9IGlvczsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCURGODRDRUUxMjQ5QUEyMDAwMDkwOTZGNiAvKiBQ
REYgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCURGODRD
RUUzMjQ5QUEyMUYwMDkwOTZGNiAvKiBXS1BERkhVRFZpZXcuaCAqLywKKwkJCQlERjg0Q0VFMjI0
OUFBMjFGMDA5MDk2RjYgLyogV0tQREZIVURWaWV3Lm1tICovLAorCQkJKTsKKwkJCW5hbWUgPSBQ
REY7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlFMTcwODc2RDE2RDZDQTcy
MDBGOTkyMjYgLyogRmlsZUFQSSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCkBAIC0xMDQ3OSw2ICsxMDQ5Myw3IEBACiAJCQkJMkQyQURGMDMxNjM2MjQzNTAwMTk3
RTQ3IC8qIFBERlBsdWdpbkFubm90YXRpb24ubW0gKi8sCiAJCQkJMkQyQURGMEQxNjM2NEQ4MjAw
MTk3RTQ3IC8qIFBERlBsdWdpbkNob2ljZUFubm90YXRpb24uaCAqLywKIAkJCQkyRDJBREYwRTE2
MzY0RDgyMDAxOTdFNDcgLyogUERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlvbi5tbSAqLywKKwkJCQlE
RjJCMTNCMTI0OUQ4RjU0MDA1QkNDNTIgLyogUERGUGx1Z2luSWRlbnRpZmllci5oICovLAogCQkJ
CTJENDI5QkZBMTcyMUUyQkEwMEVDNjgxRiAvKiBQREZQbHVnaW5QYXNzd29yZEZpZWxkLmggKi8s
CiAJCQkJMkQ0MjlCRkIxNzIxRTJCQTAwRUM2ODFGIC8qIFBERlBsdWdpblBhc3N3b3JkRmllbGQu
bW0gKi8sCiAJCQkJMkQyQURGMDUxNjM2MkRDNzAwMTk3RTQ3IC8qIFBERlBsdWdpblRleHRBbm5v
dGF0aW9uLmggKi8sCkBAIC0xMzE0Miw2ICsxMzE1Nyw3IEBACiAJCQkJNjM3MjgxQTMyMUFEQzc0
NDAwOUUwREU2IC8qIFdLRG93bmxvYWRQcm9ncmVzcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTVD
RTkxMjBEMjI5M0MyMTkwMDVCRUM3OCAvKiBXS01haW4ubW0gaW4gU291cmNlcyAqLywKIAkJCQk0
NjU3RDg4QTIyNjY0QTJGMDA1REU4MjMgLyogV0tPcmllbnRhdGlvbkFjY2Vzc0FsZXJ0Lm1tIGlu
IFNvdXJjZXMgKi8sCisJCQkJREY4NENFRTQyNDlBQTI0RDAwOTA5NkY2IC8qIFdLUERGSFVEVmll
dy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTVDQTI2RDgzMjE3QUQxQjgwMEY5N0EzNSAvKiBXS1Nh
ZmVCcm93c2luZ1dhcm5pbmcubW0gaW4gU291cmNlcyAqLywKIAkJCQkxREIwMTk0NDIxMUNGMDA1
MDA5RkIzRTggLyogV0tTaGFyZVNoZWV0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0E3OEZGMzMy
MjQxOTE5QjAwOTY0ODNFIC8qIFdLU3RvcmFnZUFjY2Vzc0FsZXJ0Lm1tIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGTGF5ZXJDb250
cm9sbGVyU1BJLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdp
bnMvUERGL1BERkxheWVyQ29udHJvbGxlclNQSS5oCShyZXZpc2lvbiAyNjYwODMpCisrKyBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGTGF5ZXJDb250cm9sbGVyU1BJLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDEyIEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVn
ZXIsIFBERkxheWVyQ29udHIKIAogLSAodm9pZClzbmFwc2hvdEluQ29udGV4dDooQ0dDb250ZXh0
UmVmKWNvbnRleHQ7CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorLSAodm9pZClz
ZXREaXNwbGF5c1BERkhVRENvbnRyb2xsZXI6KEJPT0wpZGlzcGxheXNDb250cm9sbGVyOworLSAo
dm9pZCl6b29tSW46KGlkKWF0UG9pbnQ7CistICh2b2lkKXpvb21PdXQ6KGlkKWF0UG9pbnQ7Cisj
ZW5kaWYKKwogLSAodm9pZCltYWduaWZ5V2l0aE1hZ25pZmljYXRpb246KENHRmxvYXQpbWFnbmlm
aWNhdGlvbiBhdFBvaW50OihDR1BvaW50KXBvaW50IGltbWVkaWF0ZWx5OihCT09MKWltbWVkaWF0
ZWx5OwogCiAtIChDR1BvaW50KXNjcm9sbFBvc2l0aW9uOwpJbmRleDogU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaAkocmV2aXNpb24gMjY2MDgz
KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4p
CiAKICNpbmNsdWRlICJQREZLaXRJbXBvcnRzLmgiCisjaW5jbHVkZSAiUERGUGx1Z2luSWRlbnRp
Zmllci5oIgogI2luY2x1ZGUgIlBsdWdpbi5oIgogI2luY2x1ZGUgIldlYkV2ZW50LmgiCiAjaW5j
bHVkZSAiV2ViSGl0VGVzdFJlc3VsdERhdGEuaCIKQEAgLTUwLDYgKzUxLDcgQEAgdHlwZWRlZiBj
b25zdCBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNWYQogT0JKQ19DTEFTUyBOU0FycmF5OwogT0JK
Q19DTEFTUyBOU0F0dHJpYnV0ZWRTdHJpbmc7CiBPQkpDX0NMQVNTIE5TRGF0YTsKK09CSkNfQ0xB
U1MgTlNFdmVudDsKIE9CSkNfQ0xBU1MgTlNTdHJpbmc7CiBPQkpDX0NMQVNTIFBERkFubm90YXRp
b247CiBPQkpDX0NMQVNTIFBERkxheWVyQ29udHJvbGxlcjsKQEAgLTc3LDggKzc5LDkgQEAgY2xh
c3MgUERGUGx1Z2luQW5ub3RhdGlvbjsKIGNsYXNzIFBERlBsdWdpblBhc3N3b3JkRmllbGQ7CiBj
bGFzcyBQbHVnaW5WaWV3OwogY2xhc3MgV2ViRnJhbWU7CitzdHJ1Y3QgRnJhbWVJbmZvRGF0YTsK
IAotY2xhc3MgUERGUGx1Z2luIGZpbmFsIDogcHVibGljIFBsdWdpbiwgcHJpdmF0ZSBXZWJDb3Jl
OjpTY3JvbGxhYmxlQXJlYQorY2xhc3MgUERGUGx1Z2luIGZpbmFsIDogcHVibGljIFBsdWdpbiwg
cHVibGljIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhCiAjaWYgSEFWRShJTkNSRU1FTlRBTF9QREZf
QVBJUykKICAgICAsIHByaXZhdGUgV2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJD
bGllbnQKICNlbmRpZgpAQCAtMTAzLDkgKzEwNiwxOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBub3Rp
ZnlTZWxlY3Rpb25DaGFuZ2VkKFBERlNlbGVjdGlvbiAqKTsKICAgICB2b2lkIG5vdGlmeUN1cnNv
ckNoYW5nZWQodWludDY0X3QgLyogUERGTGF5ZXJDb250cm9sbGVyQ3Vyc29yVHlwZSAqLyk7CiAK
KyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIHZvaWQgem9vbUluKCk7CisgICAg
dm9pZCB6b29tT3V0KCk7CisgICAgdm9pZCBzYXZlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29u
c3QgU3RyaW5nJiwgY29uc3QgVVJMJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik+JiYpOwor
ICAgIHZvaWQgb3BlbldpdGhQcmV2aWV3KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3Ry
aW5nJiwgRnJhbWVJbmZvRGF0YSYmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBT
dHJpbmcmKT4mJik7CisgICAgUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3Qg
eyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CisjZW5kaWYKKwogICAgIHZvaWQgY2xpY2tlZExpbmso
TlNVUkwgKik7CisjaWYgIUVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCiAgICAgdm9pZCBzYXZl
VG9QREYoKTsKICAgICB2b2lkIG9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oKTsKKyNlbmRpZgog
ICAgIHZvaWQgd3JpdGVJdGVtc1RvUGFzdGVib2FyZChOU1N0cmluZyAqcGFzdGVib2FyZE5hbWUs
IE5TQXJyYXkgKml0ZW1zLCBOU0FycmF5ICp0eXBlcyk7CiAgICAgdm9pZCBzaG93RGVmaW5pdGlv
bkZvckF0dHJpYnV0ZWRTdHJpbmcoTlNBdHRyaWJ1dGVkU3RyaW5nICosIENHUG9pbnQpOwogICAg
IHZvaWQgcGVyZm9ybVdlYlNlYXJjaChOU1N0cmluZyAqKTsKQEAgLTExOCw3ICsxMzEsMTAgQEAg
cHVibGljOgogCiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRGcm9tUERGVmlld1RvU2Ny
ZWVuKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGNvbnN0OwogICAgIFdlYkNvcmU6OkludFBv
aW50IGNvbnZlcnRGcm9tUm9vdFZpZXdUb1BERlZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
KSBjb25zdDsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RW
aWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7CisgICAgV2ViQ29yZTo6SW50UmVj
dCBjb252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBj
b25zdDsKICAgICBXZWJDb3JlOjpJbnRSZWN0IGJvdW5kc09uU2NyZWVuKCkgY29uc3Q7CisgICAg
V2ViQ29yZTo6SW50UmVjdCBmcmFtZUZvckhVRCgpIGNvbnN0OwogCiAgICAgYm9vbCBzaG93Q29u
dGV4dE1lbnVBdFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CiAKQEAgLTE1OSw3ICsx
NzUsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgd2FudHNXaGVlbEV2ZW50cygpIGZpbmFsIHsgcmV0
dXJuIHRydWU7IH0KICAgICB2b2lkIGdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIHBsdWdpblNpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0LCBjb25z
dCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0pIGZp
bmFsOwogICAgIHZvaWQgY29udGVudHNTY2FsZUZhY3RvckNoYW5nZWQoZmxvYXQpIGZpbmFsOwot
ICAgIHZvaWQgdmlzaWJpbGl0eURpZENoYW5nZShib29sKSBmaW5hbCB7IH0KKyAgICB2b2lkIHZp
c2liaWxpdHlEaWRDaGFuZ2UoYm9vbCkgZmluYWw7CiAgICAgdm9pZCBmcmFtZURpZEZpbmlzaExv
YWRpbmcodWludDY0X3QgcmVxdWVzdElEKSBmaW5hbDsKICAgICB2b2lkIGZyYW1lRGlkRmFpbCh1
aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgd2FzQ2FuY2VsbGVkKSBmaW5hbDsKICAgICB2b2lkIGRp
ZEV2YWx1YXRlSmF2YVNjcmlwdCh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFN0cmluZyYgcmVz
dWx0KSBmaW5hbDsKQEAgLTI2Myw3ICsyNzksNiBAQCBwcml2YXRlOgogICAgIE5TRXZlbnQgKm5z
RXZlbnRGb3JXZWJNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKICAgICBXZWJDb3Jl
OjpJbnRQb2ludCBjb252ZXJ0RnJvbVBsdWdpblRvUERGVmlldyhjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYpIGNvbnN0OwogICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tUm9vdFZpZXdU
b1BsdWdpbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OwotICAgIFdlYkNvcmU6Oklu
dFBvaW50IGNvbnZlcnRGcm9tUERGVmlld1RvUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmKSBjb25zdDsKICAgICAKICAgICBib29sIHN1cHBvcnRzRm9ybXMoKTsKICAgICBib29sIGlz
RnVsbEZyYW1lUGx1Z2luKCkgY29uc3Q7CkBAIC00MDMsNiArNDE4LDkgQEAgcHJpdmF0ZToKICNl
bmRpZgogCiAjZW5kaWYgLy8gSEFWRShJTkNSRU1FTlRBTF9QREZfQVBJUykKKyNpZiBFTkFCTEUo
VUlfUFJPQ0VTU19QREZfSFVEKQorICAgIFBERlBsdWdpbklkZW50aWZpZXIgbV9pZGVudGlmaWVy
OworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQkocmV2aXNpb24g
MjY2MDgzKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdp
bi5tbQkod29ya2luZyBjb3B5KQpAQCAtNDMzLDEyICs0MzMsMTYgQEAgLSAodm9pZClwZXJmb3Jt
U3BvdGxpZ2h0U2VhcmNoOihOU1N0cmluZwogCiAtICh2b2lkKW9wZW5XaXRoTmF0aXZlQXBwbGlj
YXRpb24KIHsKKyNpZiAhRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKICAgICBfcGRmUGx1Z2lu
LT5vcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKCk7CisjZW5kaWYKIH0KIAogLSAodm9pZClzYXZl
VG9QREYKIHsKKyNpZiAhRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKICAgICBfcGRmUGx1Z2lu
LT5zYXZlVG9QREYoKTsKKyNlbmRpZgogfQogCiAtICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjoo
UERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIGNsaWNrZWRMaW5rV2l0aFVS
TDooTlNVUkwgKil1cmwKQEAgLTYwMCw3ICs2MDQsMTMgQEAgaW5saW5lIFBERlBsdWdpbjo6UERG
UGx1Z2luKFdlYkZyYW1lJiBmcgogI2lmIEhBVkUoSU5DUkVNRU5UQUxfUERGX0FQSVMpCiAgICAg
LCBtX2luY3JlbWVudGFsUERGTG9hZGluZ0VuYWJsZWQoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5pbmNyZW1lbnRhbFBERkxvYWRpbmdFbmFibGVkKCkp
CiAjZW5kaWYKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgICwgbV9pZGVudGlm
aWVyKFBERlBsdWdpbklkZW50aWZpZXI6OmdlbmVyYXRlKCkpCisjZW5kaWYKIHsKKyNpZiBFTkFC
TEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBzZXREaXNw
bGF5c1BERkhVRENvbnRyb2xsZXI6Tk9dOworI2VuZGlmCiAgICAgbV9wZGZMYXllckNvbnRyb2xs
ZXIuZ2V0KCkuZGVsZWdhdGUgPSBtX3BkZkxheWVyQ29udHJvbGxlckRlbGVnYXRlLmdldCgpOwog
ICAgIG1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpLnBhcmVudExheWVyID0gbV9jb250ZW50TGF5
ZXIuZ2V0KCk7CiAKQEAgLTY0MCw2ICs2NTAsMTAgQEAgaW5saW5lIFBERlBsdWdpbjo6UERGUGx1
Z2luKFdlYkZyYW1lJiBmcgogCiBQREZQbHVnaW46On5QREZQbHVnaW4oKQogeworI2lmIEVOQUJM
RShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2ZyYW1lLnBhZ2Uo
KSkKKyAgICAgICAgcGFnZS0+cmVtb3ZlUERGSFVEKCp0aGlzKTsKKyNlbmRpZgogfQogCiAjaWYg
SEFWRShJTkNSRU1FTlRBTF9QREZfQVBJUykKQEAgLTE3NzIsNiArMTc4NiwxMSBAQCB2b2lkIFBE
RlBsdWdpbjo6Y29udGVudHNTY2FsZUZhY3RvckNoYW5nCiAgICAgdXBkYXRlUGFnZUFuZERldmlj
ZVNjYWxlRmFjdG9ycygpOwogfQogCitJbnRSZWN0IFBERlBsdWdpbjo6ZnJhbWVGb3JIVUQoKSBj
b25zdAoreworICAgIHJldHVybiBjb252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3KEludFJlY3Qo
SW50UG9pbnQoKSwgc2l6ZSgpKSk7Cit9CisKIHZvaWQgUERGUGx1Z2luOjpjYWxjdWxhdGVTaXpl
cygpCiB7CiAgICAgaWYgKFttX3BkZkRvY3VtZW50IGlzTG9ja2VkXSkgewpAQCAtMTc4Miw2ICsx
ODAxLDEwIEBAIHZvaWQgUERGUGx1Z2luOjpjYWxjdWxhdGVTaXplcygpCiAKICAgICBtX2ZpcnN0
UGFnZUhlaWdodCA9IFttX3BkZkRvY3VtZW50IHBhZ2VDb3VudF0gPyBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oQ0dDZWlsaW5nKFtbbV9wZGZEb2N1bWVudCBwYWdlQXRJbmRleDowXSBib3VuZHNGb3JC
b3g6a1BERkRpc3BsYXlCb3hDcm9wQm94XS5zaXplLmhlaWdodCkpIDogMDsKICAgICBzZXRQREZE
b2N1bWVudFNpemUoSW50U2l6ZShbbV9wZGZMYXllckNvbnRyb2xsZXIgY29udGVudFNpemVSZXNw
ZWN0aW5nWm9vbV0pKTsKKworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgbV9m
cmFtZS5wYWdlKCktPnVwZGF0ZVBERkhVRExvY2F0aW9uKCp0aGlzLCBmcmFtZUZvckhVRCgpKTsK
KyNlbmRpZgogfQogCiBib29sIFBERlBsdWdpbjo6aW5pdGlhbGl6ZShjb25zdCBQYXJhbWV0ZXJz
JiBwYXJhbWV0ZXJzKQpAQCAtMTkxNiw3ICsxOTM5LDEzIEBAIEludFBvaW50IFBERlBsdWdpbjo6
Y29udmVydEZyb21QREZWaWV3VG8KICAgICBJbnRQb2ludCBwb2ludEluUGx1Z2luQ29vcmRpbmF0
ZXMocG9pbnQueCgpLCBzaXplKCkuaGVpZ2h0KCkgLSBwb2ludC55KCkpOwogICAgIHJldHVybiBt
X3Jvb3RWaWV3VG9QbHVnaW5UcmFuc2Zvcm0uaW52ZXJzZSgpLnZhbHVlT3IoQWZmaW5lVHJhbnNm
b3JtKCkpLm1hcFBvaW50KHBvaW50SW5QbHVnaW5Db29yZGluYXRlcyk7CiB9Ci0gICAgCisKK0lu
dFJlY3QgUERGUGx1Z2luOjpjb252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3KGNvbnN0IEludFJl
Y3QmIHJlY3QpIGNvbnN0Cit7CisgICAgSW50UmVjdCByZWN0SW5QbHVnaW5Db29yZGluYXRlcyhy
ZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgcmV0
dXJuIG1fcm9vdFZpZXdUb1BsdWdpblRyYW5zZm9ybS5pbnZlcnNlKCkudmFsdWVPcihBZmZpbmVU
cmFuc2Zvcm0oKSkubWFwUmVjdChyZWN0SW5QbHVnaW5Db29yZGluYXRlcyk7Cit9CisKIEludFBv
aW50IFBERlBsdWdpbjo6Y29udmVydEZyb21Sb290Vmlld1RvUERGVmlldyhjb25zdCBJbnRQb2lu
dCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgSW50UG9pbnQgcG9pbnRJblBsdWdpbkNvb3JkaW5hdGVz
ID0gbV9yb290Vmlld1RvUGx1Z2luVHJhbnNmb3JtLm1hcFBvaW50KHBvaW50KTsKQEAgLTE5NDcs
NiArMTk3NiwxOCBAQCBJbnRSZWN0IFBERlBsdWdpbjo6Ym91bmRzT25TY3JlZW4oKSBjb25zCiAg
ICAgcmV0dXJuIGZyYW1lVmlldy0+Y29udGVudHNUb1NjcmVlbihlbmNsb3NpbmdJbnRSZWN0KHJl
Y3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMpKTsKIH0KIAordm9pZCBQREZQbHVnaW46OnZpc2liaWxp
dHlEaWRDaGFuZ2UoYm9vbCB2aXNpYmxlKQoreworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9I
VUQpCisgICAgaWYgKHZpc2libGUpCisgICAgICAgIG1fZnJhbWUucGFnZSgpLT5jcmVhdGVQREZI
VUQoKnRoaXMsIGZyYW1lRm9ySFVEKCkpOworICAgIGVsc2UKKyAgICAgICAgbV9mcmFtZS5wYWdl
KCktPnJlbW92ZVBERkhVRCgqdGhpcyk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh2aXNpYmxl
KTsKKyNlbmRpZgorfQorCiB2b2lkIFBERlBsdWdpbjo6Z2VvbWV0cnlEaWRDaGFuZ2UoY29uc3Qg
SW50U2l6ZSYgcGx1Z2luU2l6ZSwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybSkKIHsKICAgICBpZiAoc2l6ZSgpID09IHBsdWdp
blNpemUgJiYgcGx1Z2luVmlldygpLT5wYWdlU2NhbGVGYWN0b3IoKSA9PSBbbV9wZGZMYXllckNv
bnRyb2xsZXIgY29udGVudFNjYWxlRmFjdG9yXSkKQEAgLTIzOTIsNiArMjQzMywzMSBAQCBib29s
IFBERlBsdWdpbjo6cGx1Z2luSGFuZGxlc0NvbnRlbnRPZmZzCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCit2b2lkIFBERlBsdWdpbjo6em9v
bUluKCkKK3sKKyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgem9vbUluOm5pbF07Cit9CisKK3Zv
aWQgUERGUGx1Z2luOjp6b29tT3V0KCkKK3sKKyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgem9v
bU91dDpuaWxdOworfQorCit2b2lkIFBERlBsdWdpbjo6c2F2ZShDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFVSTCYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIE5TRGF0YSAqZGF0YSA9IGxpdmVEYXRhKCk7
CisgICAgY29tcGxldGlvbkhhbmRsZXIobV9zdWdnZXN0ZWRGaWxlbmFtZSwgbV9mcmFtZS51cmwo
KSwgSVBDOjogRGF0YVJlZmVyZW5jZShzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5i
eXRlcyksIGRhdGEubGVuZ3RoKSk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpvcGVuV2l0aFByZXZp
ZXcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmLCBGcmFtZUluZm9EYXRhJiYs
IGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYsIGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQoreworICAgIE5TRGF0YSAqZGF0YSA9IGxpdmVEYXRhKCk7CisgICAgY29tcGxldGlv
bkhhbmRsZXIobV9zdWdnZXN0ZWRGaWxlbmFtZSwgbV9mcmFtZS5pbmZvKCksIElQQzo6IERhdGFS
ZWZlcmVuY2UgeyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5ieXRlcyksIGRhdGEu
bGVuZ3RoIH0sIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSk7Cit9CisKKyNlbHNlIC8vIEVO
QUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCiAgICAgCiB2b2lkIFBERlBsdWdpbjo6c2F2ZVRvUERG
KCkKIHsKQEAgLTI0MjQsNiArMjQ5MCw4IEBAIHZvaWQgUERGUGx1Z2luOjpvcGVuV2l0aE5hdGl2
ZUFwcGxpY2F0aW8KICAgICBtX2ZyYW1lLnBhZ2UoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpPcGVuUERGRnJvbVRlbXBvcmFyeUZvbGRlcldpdGhOYXRpdmVBcHBsaWNhdGlvbihtX2Zy
YW1lLmluZm8oKSwgbV90ZW1wb3JhcnlQREZVVUlEKSk7CiB9CiAKKyNlbmRpZiAvLyBFTkFCTEUo
VUlfUFJPQ0VTU19QREZfSFVEKQorCiB2b2lkIFBERlBsdWdpbjo6d3JpdGVJdGVtc1RvUGFzdGVi
b2FyZChOU1N0cmluZyAqcGFzdGVib2FyZE5hbWUsIE5TQXJyYXkgKml0ZW1zLCBOU0FycmF5ICp0
eXBlcykKIHsKICAgICBhdXRvIHBhc3RlYm9hcmRUeXBlcyA9IG1ha2VWZWN0b3I8U3RyaW5nPih0
eXBlcyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1
Z2luSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BERi9QREZQbHVnaW5JZGVudGlmaWVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbklkZW50aWZpZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCitlbnVtIFBERlBsdWdpbklkZW50aWZp
ZXJUeXBlIHsgfTsKK3VzaW5nIFBERlBsdWdpbklkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVy
PFBERlBsdWdpbklkZW50aWZpZXJUeXBlPjsKKyNlbmRpZgorCit9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMjY2MDgzKQor
KysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlICJOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmgi
CiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmgiCisjaW5j
bHVkZSAiUERGUGx1Z0luLmgiCiAjaW5jbHVkZSAiUGFnZUJhbm5lci5oIgogI2luY2x1ZGUgIlBs
dWdpblByb2Nlc3NBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiUGx1Z2luUHJveHkuaCIKQEAgLTUx
MjMsMTIgKzUxMjQsMTIgQEAgdm9pZCBXZWJQYWdlOjpkaWRGaW5pc2hQcmludE9wZXJhdGlvbihj
bwogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikgJiYgIUVOQUJMRShVSV9Q
Uk9DRVNTX1BERl9IVUQpCiB2b2lkIFdlYlBhZ2U6OnNhdmVQREZUb0ZpbGVJbkRvd25sb2Fkc0Zv
bGRlcihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25zdCBVUkwmIG9yaWdpbmF0
aW5nVVJMLCBjb25zdCB1aW50OF90KiBkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAgICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTYXZlUERGVG9GaWxlSW5Eb3dubG9hZHNGb2xk
ZXIoc3VnZ2VzdGVkRmlsZW5hbWUsIG9yaWdpbmF0aW5nVVJMLCBJUEM6OkRhdGFSZWZlcmVuY2Uo
ZGF0YSwgc2l6ZSkpKTsKIH0KIAotI2lmIFBMQVRGT1JNKENPQ09BKQogdm9pZCBXZWJQYWdlOjpz
YXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKGNvbnN0
IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIEZyYW1lSW5mb0RhdGEmJiBmcmFtZUluZm8sIGNv
bnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgY29uc3QgU3RyaW5nJiBwZGZV
VUlEKQogewogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2F2ZVBERlRvVGVtcG9y
YXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbihzdWdnZXN0ZWRGaWxlbmFtZSwg
ZnJhbWVJbmZvLCBJUEM6OkRhdGFSZWZlcmVuY2UoZGF0YSwgc2l6ZSksIHBkZlVVSUQpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9u
IDI2NjA4MykKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZl
ci5oIgogI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKICNpbmNsdWRlICJPcHRpb25hbENhbGxi
YWNrSUQuaCIKKyNpbmNsdWRlICJQREZQbHVnaW5JZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiUGx1
Z2luLmgiCiAjaW5jbHVkZSAiUG9saWN5RGVjaXNpb24uaCIKICNpbmNsdWRlICJTYW5kYm94RXh0
ZW5zaW9uLmgiCkBAIC0zNDUsNiArMzQ2LDE2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2VudGVy
U2VsZWN0aW9uSW5WaXNpYmxlQXJlYSgpOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hV
RCkKKyAgICB2b2lkIGNyZWF0ZVBERkhVRChQREZQbHVnaW4mLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0Jik7CisgICAgdm9pZCB1cGRhdGVQREZIVURMb2NhdGlvbihQREZQbHVnaW4mLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCByZW1vdmVQREZIVUQoUERGUGx1Z2luJik7Cisg
ICAgdm9pZCB6b29tUERGSW4oUERGUGx1Z2luSWRlbnRpZmllcik7CisgICAgdm9pZCB6b29tUERG
T3V0KFBERlBsdWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgc2F2ZVBERihQREZQbHVnaW5JZGVu
dGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFVSTCYs
IGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpPiYmKTsKKyAgICB2b2lkIG9wZW5QREZXaXRoUHJl
dmlldyhQREZQbHVnaW5JZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0
cmluZyYsIEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwgY29uc3Qg
U3RyaW5nJik+JiYpOworI2VuZGlmCisKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIHdp
bGxDb21taXRMYXllclRyZWUoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24mKTsKICAgICB2b2lk
IGRpZEZsdXNoTGF5ZXJUcmVlQXRUaW1lKE1vbm90b25pY1RpbWUpOwpAQCAtMTA3NCw5ICsxMDg1
LDggQEAgcHVibGljOgogICAgIE5TRGljdGlvbmFyeSAqZGF0YURldGVjdGlvbkNvbnRleHQoKSBj
b25zdCB7IHJldHVybiBtX2RhdGFEZXRlY3Rpb25Db250ZXh0LmdldCgpOyB9CiAjZW5kaWYKIAor
I2lmIEVOQUJMRShQREZLSVRfUExVR0lOKSAmJiAhRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkK
ICAgICB2b2lkIHNhdmVQREZUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcihjb25zdCBTdHJpbmcmIHN1
Z2dlc3RlZEZpbGVuYW1lLCBjb25zdCBVUkwmIG9yaWdpbmF0aW5nVVJMLCBjb25zdCB1aW50OF90
KiBkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUpOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCiAgICAg
dm9pZCBzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9u
KGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIEZyYW1lSW5mb0RhdGEmJiwgY29uc3Qg
dWludDhfdCogZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplLCBjb25zdCBTdHJpbmcmIHBkZlVVSUQp
OwogI2VuZGlmCiAKQEAgLTE3OTEsNiArMTgwMSwxMCBAQCBwcml2YXRlOgogCiAgICAgV2ViQ29y
ZTo6Q29sb3IgbV91bmRlcmxheUNvbG9yOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hV
RCkKKyAgICBIYXNoTWFwPFBERlBsdWdpbklkZW50aWZpZXIsIFdlYWtQdHI8UERGUGx1Z2luPj4g
bV9wZGZQbHVnSW5zV2l0aEhVRDsKKyNlbmRpZgorCiAgICAgYm9vbCBtX2lzSW5SZWRvIHsgZmFs
c2UgfTsKICAgICBib29sIG1faXNDbG9zZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV90YWJUb0xp
bmtzIHsgZmFsc2UgfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjY2MDgzKQorKysgU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkod29ya2luZyBj
b3B5KQpAQCAtNTc2LDYgKzU3NiwxMyBAQCBHZW5lcmF0ZVN5bnRoZXRpY0VkaXRpbmdDb21tYW5k
KGVudW06dWluCiAKICAgICBTZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzTG9hZGluZykKIAor
I2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgWm9vbVBERkluKFdlYktpdDo6UERG
UGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQorICAgIFpvb21QREZPdXQoV2ViS2l0OjpQREZQ
bHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCisgICAgU2F2ZVBERihXZWJLaXQ6OlBERlBsdWdp
bklkZW50aWZpZXIgaWRlbnRpZmllcikgLT4gKFN0cmluZyBmaWxlbmFtZSwgVVJMIHVybCwgSVBD
OjpEYXRhUmVmZXJlbmNlIGRhdGEpIEFzeW5jCisgICAgT3BlblBERldpdGhQcmV2aWV3KFdlYktp
dDo6UERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKSAtPiAoU3RyaW5nIGZpbGVuYW1lLCBz
dHJ1Y3QgV2ViS2l0OjpGcmFtZUluZm9EYXRhIGZyYW1lSW5mbywgSVBDOjpEYXRhUmVmZXJlbmNl
IGRhdGEsIFN0cmluZyB1dWlkKSBBc3luYworI2VuZGlmCisKICAgICBVcGRhdGVDdXJyZW50TW9k
aWZpZXJTdGF0ZShPcHRpb25TZXQ8V2ViQ29yZTo6UGxhdGZvcm1FdmVudDo6TW9kaWZpZXI+IG1v
ZGlmaWVycykKICAgICBTaW11bGF0ZURldmljZU9yaWVudGF0aW9uQ2hhbmdlKGRvdWJsZSBhbHBo
YSwgZG91YmxlIGJldGEsIGRvdWJsZSBnYW1tYSkKIApJbmRleDogU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0JKHJldmlzaW9uIDI2NjA4
MykKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW1wb3J0ICJFZGl0aW5nUmFuZ2Uu
aCIKICNpbXBvcnQgIkVkaXRvclN0YXRlLmgiCiAjaW1wb3J0ICJGb250SW5mby5oIgorI2ltcG9y
dCAiRnJhbWVJbmZvRGF0YS5oIgogI2ltcG9ydCAiSW5qZWN0ZWRCdW5kbGVIaXRUZXN0UmVzdWx0
LmgiCiAjaW1wb3J0ICJQREZLaXRJbXBvcnRzLmgiCiAjaW1wb3J0ICJQREZQbHVnaW4uaCIKQEAg
LTEwNTEsNyArMTA1Miw2MiBAQCB2b2lkIFdlYlBhZ2U6OnNldEFjY2VudENvbG9yKFdlYkNvcmU6
OkNvCiAgICAgW05TQXBwIF9zZXRBY2NlbnRDb2xvcjpjb2xvci5pc1ZhbGlkKCkgPyBXZWJDb3Jl
Ojpuc0NvbG9yKGNvbG9yKSA6IG5pbF07CiB9CiAKLSNlbmRpZgorI2VuZGlmIC8vIEhBVkUoQVBQ
X0FDQ0VOVF9DT0xPUlMpCisKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCit2b2lk
IFdlYlBhZ2U6Onpvb21QREZJbihQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCit7Cisg
ICAgYXV0byBwZGZQbHVnaW4gPSBtX3BkZlBsdWdJbnNXaXRoSFVELmdldChpZGVudGlmaWVyKTsK
KyAgICBpZiAoIXBkZlBsdWdpbikKKyAgICAgICAgcmV0dXJuOworICAgIHBkZlBsdWdpbi0+em9v
bUluKCk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6em9vbVBERk91dChQREZQbHVnaW5JZGVudGlmaWVy
IGlkZW50aWZpZXIpCit7CisgICAgYXV0byBwZGZQbHVnaW4gPSBtX3BkZlBsdWdJbnNXaXRoSFVE
LmdldChpZGVudGlmaWVyKTsKKyAgICBpZiAoIXBkZlBsdWdpbikKKyAgICAgICAgcmV0dXJuOwor
ICAgIHBkZlBsdWdpbi0+em9vbU91dCgpOworfQorCit2b2lkIFdlYlBhZ2U6OnNhdmVQREYoUERG
UGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0
IFN0cmluZyYsIGNvbnN0IFVSTCYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQoreworICAgIGF1dG8gcGRmUGx1Z2luID0gbV9wZGZQbHVnSW5zV2l0aEhV
RC5nZXQoaWRlbnRpZmllcik7CisgICAgaWYgKCFwZGZQbHVnaW4pCisgICAgICAgIHJldHVybiBj
b21wbGV0aW9uSGFuZGxlcih7IH0sIHsgfSwgeyB9KTsKKyAgICBwZGZQbHVnaW4tPnNhdmUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIFdlYlBhZ2U6Om9wZW5QREZXaXRo
UHJldmlldyhQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoY29uc3QgU3RyaW5nJiwgRnJhbWVJbmZvRGF0YSYmLCBjb25zdCBJUEM6OkRhdGFSZWZl
cmVuY2UmLCBjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBhdXRv
IHBkZlBsdWdpbiA9IG1fcGRmUGx1Z0luc1dpdGhIVUQuZ2V0KGlkZW50aWZpZXIpOworICAgIGlm
ICghcGRmUGx1Z2luKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9LCB7IH0s
IHsgfSwgeyB9KTsKKyAgICBwZGZQbHVnaW4tPm9wZW5XaXRoUHJldmlldyhXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6Y3JlYXRlUERGSFVEKFBERlBsdWdp
biYgcGx1Z2luLCBjb25zdCBJbnRSZWN0JiBib3VuZGluZ0JveCkKK3sKKyAgICBhdXRvIGFkZFJl
c3VsdCA9IG1fcGRmUGx1Z0luc1dpdGhIVUQuYWRkKHBsdWdpbi5pZGVudGlmaWVyKCksIG1ha2VX
ZWFrUHRyKHBsdWdpbikpOworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDcmVhdGVQREZIVUQocGx1Z2luLmlkZW50aWZp
ZXIoKSwgYm91bmRpbmdCb3gpKTsKK30KKwordm9pZCBXZWJQYWdlOjp1cGRhdGVQREZIVURMb2Nh
dGlvbihQREZQbHVnaW4mIHBsdWdpbiwgY29uc3QgSW50UmVjdCYgYm91bmRpbmdCb3gpCit7Cisg
ICAgaWYgKG1fcGRmUGx1Z0luc1dpdGhIVUQuY29udGFpbnMocGx1Z2luLmlkZW50aWZpZXIoKSkp
CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6VXBkYXRlUERGSFVETG9jYXRp
b24ocGx1Z2luLmlkZW50aWZpZXIoKSwgYm91bmRpbmdCb3gpKTsKK30KKwordm9pZCBXZWJQYWdl
OjpyZW1vdmVQREZIVUQoUERGUGx1Z2luJiBwbHVnaW4pCit7CisgICAgaWYgKG1fcGRmUGx1Z0lu
c1dpdGhIVUQucmVtb3ZlKHBsdWdpbi5pZGVudGlmaWVyKCkpKQorICAgICAgICBzZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OlJlbW92ZVBERkhVRChwbHVnaW4uaWRlbnRpZmllcigpKSk7Cit9
CisKKyNlbmRpZiAvLyBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKIApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0No
YW5nZUxvZwkocmV2aXNpb24gMjY2MDgzKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjAtMDgtMjQgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hy
aXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBNb3ZlIFBERiBoZWFkcy11cCBkaXNwbGF5
IHRvIFVJIHByb2Nlc3Mgb24gbWFjT1MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxNTc4MAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTg3MTU4NDc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLUERGVmlldy5tbToKKyAgICAgICAgKHBkZkRh
dGEpOgorICAgICAgICAoVEVTVCk6CisgICAgICAgIChjaGVja0ZyYW1lKToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RVSURlbGVnYXRlLmg6CisgICAgICAgICogVGVzdFdlYktp
dEFQSS9jb2NvYS9UZXN0VUlEZWxlZ2F0ZS5tbToKKyAgICAgICAgKC1bVGVzdFVJRGVsZWdhdGUg
X3dlYlZpZXc6c2F2ZURhdGFUb0ZpbGU6c3VnZ2VzdGVkRmlsZW5hbWU6bWltZVR5cGU6b3JpZ2lu
YXRpbmdVUkw6XSk6CisKIDIwMjAtMDgtMjQgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBw
bGUuY29tPgogCiAgICAgICAgIFtyZXN1bHRzZGJweV0gRml4IHBpcCBwYWNrYWdlCkluZGV4OiBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLUERGVmlldy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLUERGVmlldy5t
bQkocmV2aXNpb24gMjY2MDgzKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9XS1BERlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwyNiBAQAogI2lt
cG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKICNpbXBvcnQgIlRlc3QuaCIKICNpbXBvcnQgIlRl
c3ROYXZpZ2F0aW9uRGVsZWdhdGUuaCIKKyNpbXBvcnQgIlRlc3RVSURlbGVnYXRlLmgiCisjaW1w
b3J0ICJUZXN0VVJMU2NoZW1lSGFuZGxlci5oIgorI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgog
I2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlldy5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZUZv
clRlc3RpbmcuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAotI2lmIEhBVkUoUERGS0lU
KSAmJiBQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorI2ltcG9ydCA8Q2FyYm9uL0Nh
cmJvbi5oPgorI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpIHx8IEVOQUJMRShVSV9QUk9DRVNT
X1BERl9IVUQpCitzdGF0aWMgTlNEYXRhICpwZGZEYXRhKCkKK3sKKyAgICByZXR1cm4gW05TRGF0
YSBkYXRhV2l0aENvbnRlbnRzT2ZVUkw6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNv
dXJjZTpAInRlc3QiIHdpdGhFeHRlbnNpb246QCJwZGYiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJL
aXRBUEkucmVzb3VyY2VzIl1dOworfQorI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpCiAKIEBp
bnRlcmZhY2UgUERGSG9zdFZpZXdDb250cm9sbGVyIDogVUlWaWV3Q29udHJvbGxlcgogKyAodm9p
ZCljcmVhdGVIb3N0Vmlldzoodm9pZCheKShpZCBob3N0Vmlld0NvbnRyb2xsZXIpKWNhbGxiYWNr
IGZvckV4dGVuc2lvbklkZW50aWZpZXI6KE5TU3RyaW5nICopZXh0ZW5zaW9uSWRlbnRpZmllcjsK
QEAgLTEwMSw3ICsxMTYsNyBAQCBURVNUKFdlYktpdCwgV0tQREZWaWV3TG9zZXNBcHBsaWNhdGlv
bkZvCiAgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmln
dXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKICAgICAvLyBMb2FkIGEgUERGLCBzbyB3
ZSBpbnN0YWxsIGEgV0tQREZWaWV3LgotICAgIFt3ZWJWaWV3IGxvYWREYXRhOltOU0RhdGEgZGF0
YVdpdGhDb250ZW50c09mVVJMOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6
QCJ0ZXN0IiB3aXRoRXh0ZW5zaW9uOkAicGRmIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJ
LnJlc291cmNlcyJdXSBNSU1FVHlwZTpAImFwcGxpY2F0aW9uL3BkZiIgY2hhcmFjdGVyRW5jb2Rp
bmdOYW1lOkAiIiBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly93d3cuYXBw
bGUuY29tLzAiXV07CisgICAgW3dlYlZpZXcgbG9hZERhdGE6cGRmRGF0YSBNSU1FVHlwZTpAImFw
cGxpY2F0aW9uL3BkZiIgY2hhcmFjdGVyRW5jb2RpbmdOYW1lOkAiIiBiYXNlVVJMOltOU1VSTCBV
UkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly93d3cuYXBwbGUuY29tLzAiXV07CiAgICAgW3dlYlZpZXcg
X3Rlc3Rfd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOwogCiAgICAgLy8gR28gaW50byB0aGUg
YmFja2dyb3VuZCBhbmQgcGFyZW50IHRoZSBXS1dlYlZpZXcuCkBAIC0xMzIsMyArMTQ3LDIwOCBA
QCBURVNUKFdlYktpdCwgV0tQREZWaWV3TG9zZXNBcHBsaWNhdGlvbkZvCiB9CiAKICNlbmRpZgor
CisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKworc3RhdGljIHZvaWQgY2hlY2tGcmFt
ZShOU1JlY3QgZnJhbWUsIENHRmxvYXQgeCwgQ0dGbG9hdCB5LCBDR0Zsb2F0IHdpZHRoLCBDR0Zs
b2F0IGhlaWdodCkKK3sKKyAgICBFWFBFQ1RfRVEoZnJhbWUub3JpZ2luLngsIHgpOworICAgIEVY
UEVDVF9FUShmcmFtZS5vcmlnaW4ueSwgeSk7CisgICAgRVhQRUNUX0VRKGZyYW1lLnNpemUud2lk
dGgsIHdpZHRoKTsKKyAgICBFWFBFQ1RfRVEoZnJhbWUuc2l6ZS5oZWlnaHQsIGhlaWdodCk7Cit9
CisKK1RFU1QoUERGSFVELCBNYWluUmVzb3VyY2VQREYpCit7CisgICAgVGVzdFdLV2ViVmlldyAq
d2ViVmlldyA9IFtbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVj
dCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24g
bmV3XSBhdXRvcmVsZWFzZV1dIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldyBsb2FkRGF0YTpw
ZGZEYXRhKCkgTUlNRVR5cGU6QCJhcHBsaWNhdGlvbi9wZGYiIGNoYXJhY3RlckVuY29kaW5nTmFt
ZTpAIiIgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHBzOi8vd3d3LmFwcGxlLmNv
bS90ZXN0UGF0aCJdXTsKKyAgICBFWFBFQ1RfRVEod2ViVmlldy5fcGRmSFVEcy5jb3VudCwgMHUp
OworICAgIFt3ZWJWaWV3IF90ZXN0X3dhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKKyAgICBF
WFBFQ1RfRVEod2ViVmlldy5fcGRmSFVEcy5jb3VudCwgMXUpOworICAgIGNoZWNrRnJhbWUod2Vi
Vmlldy5fcGRmSFVEcy5hbnlPYmplY3QuZnJhbWUsIDAsIDAsIDgwMCwgNjAwKTsKKyAgICAKKyAg
ICBUZXN0VUlEZWxlZ2F0ZSAqZGVsZWdhdGUgPSBbW1Rlc3RVSURlbGVnYXRlIG5ld10gYXV0b3Jl
bGVhc2VdOworICAgIHdlYlZpZXcuVUlEZWxlZ2F0ZSA9IGRlbGVnYXRlOworICAgIF9fYmxvY2sg
Ym9vbCBzYXZlUmVxdWVzdFJlY2VpdmVkID0gZmFsc2U7CisgICAgZGVsZWdhdGUuc2F2ZURhdGFU
b0ZpbGUgPSBeKFdLV2ViVmlldyAqd2ViVmlld0Zyb21EZWxlZ2F0ZSwgTlNEYXRhICpkYXRhLCBO
U1N0cmluZyAqc3VnZ2VzdGVkRmlsZW5hbWUsIE5TU3RyaW5nICptaW1lVHlwZSwgTlNVUkwgKm9y
aWdpbmF0aW5nVVJMKSB7CisgICAgICAgIEVYUEVDVF9FUSh3ZWJWaWV3LCB3ZWJWaWV3RnJvbURl
bGVnYXRlKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoW2RhdGEgaXNFcXVhbFRvRGF0YTpwZGZEYXRh
KCldKTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKHN1Z2dlc3RlZEZpbGVuYW1lLCAidGVzdFBh
dGgucGRmIik7CisgICAgICAgIEVYUEVDVF9XS19TVFJFUShtaW1lVHlwZSwgImFwcGxpY2F0aW9u
L3BkZiIpOworICAgICAgICBzYXZlUmVxdWVzdFJlY2VpdmVkID0gdHJ1ZTsKKyAgICB9OworICAg
IFtbd2ViVmlldyBfcGRmSFVEc10uYW55T2JqZWN0IHBlcmZvcm1TZWxlY3RvcjpOU1NlbGVjdG9y
RnJvbVN0cmluZyhAIl9wZXJmb3JtQWN0aW9uRm9yQ29udHJvbDoiKSB3aXRoT2JqZWN0OkAiYXJy
b3cuZG93bi5jaXJjbGUiXTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnNhdmVSZXF1
ZXN0UmVjZWl2ZWQpOworCisgICAgRVhQRUNUX0VRKHdlYlZpZXcuX3BkZkhVRHMuY291bnQsIDF1
KTsKKyAgICBbd2ViVmlldyBfa2lsbFdlYkNvbnRlbnRQcm9jZXNzXTsKKyAgICB3aGlsZSAod2Vi
Vmlldy5fcGRmSFVEcy5jb3VudCkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1
bkxvb3AoKTsKK30KKworVEVTVChQREZIVUQsIE1vdmVJRnJhbWUpCit7CisgICAgVGVzdFVSTFNj
aGVtZUhhbmRsZXIgKmhhbmRsZXIgPSBbW1Rlc3RVUkxTY2hlbWVIYW5kbGVyIG5ld10gYXV0b3Jl
bGVhc2VdOworICAgIGhhbmRsZXIuc3RhcnRVUkxTY2hlbWVUYXNrSGFuZGxlciA9IF4oV0tXZWJW
aWV3ICosIGlkPFdLVVJMU2NoZW1lVGFzaz4gdGFzaykgeworICAgICAgICBpZiAoW3Rhc2sucmVx
dWVzdC5VUkwucGF0aCBpc0VxdWFsVG9TdHJpbmc6QCIvbWFpbi5odG1sIl0pIHsKKyAgICAgICAg
ICAgIE5TVVJMUmVzcG9uc2UgKnJlc3BvbnNlID0gW1tbTlNVUkxSZXNwb25zZSBhbGxvY10gaW5p
dFdpdGhVUkw6dGFzay5yZXF1ZXN0LlVSTCBNSU1FVHlwZTpAInRleHQvaHRtbCIgZXhwZWN0ZWRD
b250ZW50TGVuZ3RoOjAgdGV4dEVuY29kaW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNlXTsKKyAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIGh0bWwgPSAiPGJyLz48aWZyYW1lIHNyYz0ndGVzdC5wZGYnIGlk
PSdwZGZmcmFtZSc+PC9pZnJhbWU+IjsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVSZXNw
b25zZTpyZXNwb25zZV07CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpbTlNEYXRh
IGRhdGFXaXRoQnl0ZXM6aHRtbCBsZW5ndGg6c3RybGVuKGh0bWwpXV07CisgICAgICAgICAgICBb
dGFzayBkaWRGaW5pc2hdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgRVhQRUNUX1dL
X1NUUkVRKHRhc2sucmVxdWVzdC5VUkwucGF0aCwgIi90ZXN0LnBkZiIpOworICAgICAgICAgICAg
TlNEYXRhICpkYXRhID0gcGRmRGF0YSgpOworICAgICAgICAgICAgTlNVUkxSZXNwb25zZSAqcmVz
cG9uc2UgPSBbW1tOU1VSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0YXNrLnJlcXVlc3Qu
VVJMIE1JTUVUeXBlOkAiYXBwbGljYXRpb24vcGRmIiBleHBlY3RlZENvbnRlbnRMZW5ndGg6ZGF0
YS5sZW5ndGggdGV4dEVuY29kaW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgICAg
IFt0YXNrIGRpZFJlY2VpdmVSZXNwb25zZTpyZXNwb25zZV07CisgICAgICAgICAgICBbdGFzayBk
aWRSZWNlaXZlRGF0YTpkYXRhXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZEZpbmlzaF07CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlv
biA9IFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBbY29u
ZmlndXJhdGlvbiBzZXRVUkxTY2hlbWVIYW5kbGVyOmhhbmRsZXIgZm9yVVJMU2NoZW1lOkAidGVz
dCJdOworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcgPSBbW1tUZXN0V0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246
Y29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltO
U1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJ0ZXN0Oi8v
L21haW4uaHRtbCJdXV07CisgICAgRVhQRUNUX0VRKHdlYlZpZXcuX3BkZkhVRHMuY291bnQsIDB1
KTsKKyAgICBbd2ViVmlldyBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07CisgICAg
RVhQRUNUX0VRKHdlYlZpZXcuX3BkZkhVRHMuY291bnQsIDF1KTsKKyAgICBjaGVja0ZyYW1lKHdl
YlZpZXcuX3BkZkhVRHMuYW55T2JqZWN0LmZyYW1lLCAxMCwgMjgsIDMwMCwgMTUwKTsKKworICAg
IFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAInBkZmZyYW1lLndpZHRoPTQwMCIgY29tcGxl
dGlvbkhhbmRsZXI6bmlsXTsKKyAgICB3aGlsZSAod2ViVmlldy5fcGRmSFVEcy5hbnlPYmplY3Qu
ZnJhbWUuc2l6ZS53aWR0aCAhPSA0MDApCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNw
aW5SdW5Mb29wKCk7CisgICAgY2hlY2tGcmFtZSh3ZWJWaWV3Ll9wZGZIVURzLmFueU9iamVjdC5m
cmFtZSwgMTAsIDI4LCA0MDAsIDE1MCk7CisKKyAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3Jp
cHQ6QCJ2YXIgZnJhbWVSZWZlcmVuY2UgPSBwZGZmcmFtZTsgZG9jdW1lbnQuYm9keS5yZW1vdmVD
aGlsZChwZGZmcmFtZSkiIGNvbXBsZXRpb25IYW5kbGVyOm5pbF07CisgICAgd2hpbGUgKHdlYlZp
ZXcuX3BkZkhVRHMuY291bnQpCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5M
b29wKCk7CisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5h
cHBlbmRDaGlsZChmcmFtZVJlZmVyZW5jZSkiIGNvbXBsZXRpb25IYW5kbGVyOm5pbF07CisgICAg
d2hpbGUgKCF3ZWJWaWV3Ll9wZGZIVURzLmNvdW50KQorICAgICAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpzcGluUnVuTG9vcCgpOworICAgIEVYUEVDVF9FUSh3ZWJWaWV3Ll9wZGZIVURzLmNvdW50
LCAxdSk7CisgICAgY2hlY2tGcmFtZSh3ZWJWaWV3Ll9wZGZIVURzLmFueU9iamVjdC5mcmFtZSwg
MCwgMCwgMCwgMCk7CisgICAgd2hpbGUgKHdlYlZpZXcuX3BkZkhVRHMuYW55T2JqZWN0LmZyYW1l
LnNpemUud2lkdGggIT0gNDAwKQorICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVu
TG9vcCgpOworICAgIEVYUEVDVF9FUSh3ZWJWaWV3Ll9wZGZIVURzLmNvdW50LCAxdSk7CisgICAg
Y2hlY2tGcmFtZSh3ZWJWaWV3Ll9wZGZIVURzLmFueU9iamVjdC5mcmFtZSwgMTAsIDI4LCA0MDAs
IDE1MCk7CisKKyAgICB3ZWJWaWV3LnBhZ2Vab29tID0gMS40OworICAgIHdoaWxlICh3ZWJWaWV3
Ll9wZGZIVURzLmFueU9iamVjdC5mcmFtZS5zaXplLndpZHRoICE9IDU2MCkKKyAgICAgICAgVGVz
dFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoKTsKKyAgICBFWFBFQ1RfRVEod2ViVmlldy5f
cGRmSFVEcy5jb3VudCwgMXUpOworICAgIGNoZWNrRnJhbWUod2ViVmlldy5fcGRmSFVEcy5hbnlP
YmplY3QuZnJhbWUsIDE0LCA0MCwgNTYwLCAyMTApOworfQorCitURVNUKFBERkhVRCwgTmVzdGVk
SUZyYW1lcykKK3sKKyAgICBUZXN0VVJMU2NoZW1lSGFuZGxlciAqaGFuZGxlciA9IFtbVGVzdFVS
TFNjaGVtZUhhbmRsZXIgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgaGFuZGxlci5zdGFydFVSTFNj
aGVtZVRhc2tIYW5kbGVyID0gXihXS1dlYlZpZXcgKiwgaWQ8V0tVUkxTY2hlbWVUYXNrPiB0YXNr
KSB7CisgICAgICAgIE5TVVJMUmVzcG9uc2UgKmh0bWxSZXNwb25zZSA9IFtbW05TVVJMUmVzcG9u
c2UgYWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVxdWVzdC5VUkwgTUlNRVR5cGU6QCJ0ZXh0L2h0
bWwiIGV4cGVjdGVkQ29udGVudExlbmd0aDowIHRleHRFbmNvZGluZ05hbWU6bmlsXSBhdXRvcmVs
ZWFzZV07CisgICAgICAgIGlmIChbdGFzay5yZXF1ZXN0LlVSTC5wYXRoIGlzRXF1YWxUb1N0cmlu
ZzpAIi9tYWluLmh0bWwiXSkgeworICAgICAgICAgICAgY29uc3QgY2hhciogaHRtbCA9ICI8aWZy
YW1lIHNyYz0nZnJhbWUuaHRtbCcgaWQ9J3BhcmVudGZyYW1lJz48L2lmcmFtZT4iOworICAgICAg
ICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3BvbnNlOmh0bWxSZXNwb25zZV07CisgICAgICAgICAg
ICBbdGFzayBkaWRSZWNlaXZlRGF0YTpbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6aHRtbCBsZW5ndGg6
c3RybGVuKGh0bWwpXV07CisgICAgICAgICAgICBbdGFzayBkaWRGaW5pc2hdOworICAgICAgICB9
IGVsc2UgaWYgKFt0YXNrLnJlcXVlc3QuVVJMLnBhdGggaXNFcXVhbFRvU3RyaW5nOkAiL2ZyYW1l
Lmh0bWwiXSkgeworICAgICAgICAgICAgY29uc3QgY2hhciogaHRtbCA9ICI8aWZyYW1lIHNyYz0n
dGVzdC5wZGYnPjwvaWZyYW1lPiI7CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlUmVzcG9u
c2U6aHRtbFJlc3BvbnNlXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVEYXRhOltOU0Rh
dGEgZGF0YVdpdGhCeXRlczpodG1sIGxlbmd0aDpzdHJsZW4oaHRtbCldXTsKKyAgICAgICAgICAg
IFt0YXNrIGRpZEZpbmlzaF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBFWFBFQ1Rf
V0tfU1RSRVEodGFzay5yZXF1ZXN0LlVSTC5wYXRoLCAiL3Rlc3QucGRmIik7CisgICAgICAgICAg
ICBOU0RhdGEgKmRhdGEgPSBwZGZEYXRhKCk7CisgICAgICAgICAgICBOU1VSTFJlc3BvbnNlICpy
ZXNwb25zZSA9IFtbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVxdWVz
dC5VUkwgTUlNRVR5cGU6QCJhcHBsaWNhdGlvbi9wZGYiIGV4cGVjdGVkQ29udGVudExlbmd0aDpk
YXRhLmxlbmd0aCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0gYXV0b3JlbGVhc2VdOworICAgICAgICAg
ICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3BvbnNlOnJlc3BvbnNlXTsKKyAgICAgICAgICAgIFt0YXNr
IGRpZFJlY2VpdmVEYXRhOmRhdGFdOworICAgICAgICAgICAgW3Rhc2sgZGlkRmluaXNoXTsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICBXS1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0
aW9uID0gW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIG5ld10gYXV0b3JlbGVhc2VdOworICAgIFtj
b25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6aGFuZGxlciBmb3JVUkxTY2hlbWU6QCJ0
ZXN0Il07CisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldyA9IFtbW1Rlc3RXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlv
bjpjb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6
W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAInRlc3Q6
Ly8vbWFpbi5odG1sIl1dXTsKKyAgICBFWFBFQ1RfRVEod2ViVmlldy5fcGRmSFVEcy5jb3VudCwg
MHUpOworICAgIFt3ZWJWaWV3IF90ZXN0X3dhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKKyAg
ICBFWFBFQ1RfRVEod2ViVmlldy5fcGRmSFVEcy5jb3VudCwgMXUpOworICAgIGNoZWNrRnJhbWUo
d2ViVmlldy5fcGRmSFVEcy5hbnlPYmplY3QuZnJhbWUsIDIwLCAyMCwgMzAwLCAxNTApOworICAg
IAorICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkucmVtb3Zl
Q2hpbGQocGFyZW50ZnJhbWUpIiBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOworICAgIHdoaWxlICh3
ZWJWaWV3Ll9wZGZIVURzLmNvdW50KQorICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGlu
UnVuTG9vcCgpOworfQorCitURVNUKFBERkhVRCwgSUZyYW1lM0RUcmFuc2Zvcm0pCit7CisgICAg
VGVzdFVSTFNjaGVtZUhhbmRsZXIgKmhhbmRsZXIgPSBbW1Rlc3RVUkxTY2hlbWVIYW5kbGVyIG5l
d10gYXV0b3JlbGVhc2VdOworICAgIGhhbmRsZXIuc3RhcnRVUkxTY2hlbWVUYXNrSGFuZGxlciA9
IF4oV0tXZWJWaWV3ICosIGlkPFdLVVJMU2NoZW1lVGFzaz4gdGFzaykgeworICAgICAgICBOU1VS
TFJlc3BvbnNlICpodG1sUmVzcG9uc2UgPSBbW1tOU1VSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0
aFVSTDp0YXNrLnJlcXVlc3QuVVJMIE1JTUVUeXBlOkAidGV4dC9odG1sIiBleHBlY3RlZENvbnRl
bnRMZW5ndGg6MCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0gYXV0b3JlbGVhc2VdOworICAgICAgICBp
ZiAoW3Rhc2sucmVxdWVzdC5VUkwucGF0aCBpc0VxdWFsVG9TdHJpbmc6QCIvbWFpbi5odG1sIl0p
IHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGh0bWwgPSAiPGlmcmFtZSBzcmM9J3Rlc3QucGRm
JyBoZWlnaHQ9NTAwIHdpZHRoPTUwMCBzdHlsZT0ndHJhbnNmb3JtOnJvdGF0ZVkoMjM1ZGVnKTsn
PjwvaWZyYW1lPiI7CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6aHRtbFJl
c3BvbnNlXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVEYXRhOltOU0RhdGEgZGF0YVdp
dGhCeXRlczpodG1sIGxlbmd0aDpzdHJsZW4oaHRtbCldXTsKKyAgICAgICAgICAgIFt0YXNrIGRp
ZEZpbmlzaF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBFWFBFQ1RfV0tfU1RSRVEo
dGFzay5yZXF1ZXN0LlVSTC5wYXRoLCAiL3Rlc3QucGRmIik7CisgICAgICAgICAgICBOU0RhdGEg
KmRhdGEgPSBwZGZEYXRhKCk7CisgICAgICAgICAgICBOU1VSTFJlc3BvbnNlICpyZXNwb25zZSA9
IFtbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVxdWVzdC5VUkwgTUlN
RVR5cGU6QCJhcHBsaWNhdGlvbi9wZGYiIGV4cGVjdGVkQ29udGVudExlbmd0aDpkYXRhLmxlbmd0
aCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0gYXV0b3JlbGVhc2VdOworICAgICAgICAgICAgW3Rhc2sg
ZGlkUmVjZWl2ZVJlc3BvbnNlOnJlc3BvbnNlXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2Vp
dmVEYXRhOmRhdGFdOworICAgICAgICAgICAgW3Rhc2sgZGlkRmluaXNoXTsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICBXS1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0gW1tX
S1dlYlZpZXdDb25maWd1cmF0aW9uIG5ld10gYXV0b3JlbGVhc2VdOworICAgIFtjb25maWd1cmF0
aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6aGFuZGxlciBmb3JVUkxTY2hlbWU6QCJ0ZXN0Il07Cisg
ICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldyA9IFtbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1
cmF0aW9uXSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVx
dWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAInRlc3Q6Ly8vbWFpbi5o
dG1sIl1dXTsKKyAgICBFWFBFQ1RfRVEod2ViVmlldy5fcGRmSFVEcy5jb3VudCwgMHUpOworICAg
IFt3ZWJWaWV3IF90ZXN0X3dhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKKyAgICBFWFBFQ1Rf
RVEod2ViVmlldy5fcGRmSFVEcy5jb3VudCwgMXUpOworICAgIGNoZWNrRnJhbWUod2ViVmlldy5f
cGRmSFVEcy5hbnlPYmplY3QuZnJhbWUsIDQwMywgMTAsIDUwMCwgNTAwKTsKK30KKworVEVTVChQ
REZIVUQsIE11bHRpcGxlSUZyYW1lcykKK3sKKyAgICBUZXN0VVJMU2NoZW1lSGFuZGxlciAqaGFu
ZGxlciA9IFtbVGVzdFVSTFNjaGVtZUhhbmRsZXIgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgaGFu
ZGxlci5zdGFydFVSTFNjaGVtZVRhc2tIYW5kbGVyID0gXihXS1dlYlZpZXcgKiwgaWQ8V0tVUkxT
Y2hlbWVUYXNrPiB0YXNrKSB7CisgICAgICAgIE5TVVJMUmVzcG9uc2UgKmh0bWxSZXNwb25zZSA9
IFtbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVxdWVzdC5VUkwgTUlN
RVR5cGU6QCJ0ZXh0L2h0bWwiIGV4cGVjdGVkQ29udGVudExlbmd0aDowIHRleHRFbmNvZGluZ05h
bWU6bmlsXSBhdXRvcmVsZWFzZV07CisgICAgICAgIGlmIChbdGFzay5yZXF1ZXN0LlVSTC5wYXRo
IGlzRXF1YWxUb1N0cmluZzpAIi9tYWluLmh0bWwiXSkgeworICAgICAgICAgICAgY29uc3QgY2hh
ciogaHRtbCA9ICI8aWZyYW1lIHNyYz0ndGVzdC5wZGYnIGhlaWdodD0xMDAgd2lkdGg9MTUwPjwv
aWZyYW1lPjxpZnJhbWUgc3JjPSd0ZXN0LnBkZicgaGVpZ2h0PTEyMyB3aWR0aD0xMzQ+PC9pZnJh
bWU+IjsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVSZXNwb25zZTpodG1sUmVzcG9uc2Vd
OworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZURhdGE6W05TRGF0YSBkYXRhV2l0aEJ5dGVz
Omh0bWwgbGVuZ3RoOnN0cmxlbihodG1sKV1dOworICAgICAgICAgICAgW3Rhc2sgZGlkRmluaXNo
XTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEVYUEVDVF9XS19TVFJFUSh0YXNrLnJl
cXVlc3QuVVJMLnBhdGgsICIvdGVzdC5wZGYiKTsKKyAgICAgICAgICAgIE5TRGF0YSAqZGF0YSA9
IHBkZkRhdGEoKTsKKyAgICAgICAgICAgIE5TVVJMUmVzcG9uc2UgKnJlc3BvbnNlID0gW1tbTlNV
UkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGFzay5yZXF1ZXN0LlVSTCBNSU1FVHlwZTpA
ImFwcGxpY2F0aW9uL3BkZiIgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOmRhdGEubGVuZ3RoIHRleHRF
bmNvZGluZ05hbWU6bmlsXSBhdXRvcmVsZWFzZV07CisgICAgICAgICAgICBbdGFzayBkaWRSZWNl
aXZlUmVzcG9uc2U6cmVzcG9uc2VdOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZURhdGE6
ZGF0YV07CisgICAgICAgICAgICBbdGFzayBkaWRGaW5pc2hdOworICAgICAgICB9CisgICAgfTsK
KworICAgIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbW1dLV2ViVmll
d0NvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07CisgICAgW2NvbmZpZ3VyYXRpb24gc2V0
VVJMU2NoZW1lSGFuZGxlcjpoYW5kbGVyIGZvclVSTFNjaGVtZTpAInRlc3QiXTsKKyAgICBUZXN0
V0tXZWJWaWV3ICp3ZWJWaWV3ID0gW1tbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25d
IGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJl
cXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAidGVzdDovLy9tYWluLmh0bWwiXV1d
OworICAgIEVYUEVDVF9FUSh3ZWJWaWV3Ll9wZGZIVURzLmNvdW50LCAwdSk7CisgICAgW3dlYlZp
ZXcgX3Rlc3Rfd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOworICAgIEVYUEVDVF9FUSh3ZWJW
aWV3Ll9wZGZIVURzLmNvdW50LCAydSk7CisgICAgYm9vbCBoYWRMZWZ0RnJhbWUgPSBmYWxzZTsK
KyAgICBib29sIGhhZFJpZ2h0RnJhbWUgPSBmYWxzZTsKKyAgICBmb3IgKE5TVmlldyAqaHVkIGlu
IHdlYlZpZXcuX3BkZkhVRHMpIHsKKyAgICAgICAgaWYgKGh1ZC5mcmFtZS5vcmlnaW4ueCA9PSAx
MCkgeworICAgICAgICAgICAgY2hlY2tGcmFtZShodWQuZnJhbWUsIDEwLCAzMywgMTUwLCAxMDAp
OworICAgICAgICAgICAgaGFkTGVmdEZyYW1lID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGNoZWNrRnJhbWUoaHVkLmZyYW1lLCAxNjQsIDEwLCAxMzQsIDEyMyk7CisgICAg
ICAgICAgICBoYWRSaWdodEZyYW1lID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBFWFBF
Q1RfVFJVRShoYWRMZWZ0RnJhbWUpOworICAgIEVYUEVDVF9UUlVFKGhhZFJpZ2h0RnJhbWUpOwor
fQorCisjZW5kaWYKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFVJRGVsZWdh
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RVSURlbGVn
YXRlLmgJKHJldmlzaW9uIDI2NjA4MykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVz
dFVJRGVsZWdhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmIFBMQVRG
T1JNKE1BQykKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSB2b2lkICheZ2V0Q29udGV4dE1l
bnVGcm9tUHJvcG9zZWRNZW51KShOU01lbnUgKiwgX1dLQ29udGV4dE1lbnVFbGVtZW50SW5mbyAq
LCBpZCA8TlNTZWN1cmVDb2Rpbmc+LCB2b2lkICheKShOU01lbnUgKikpOwogI2VuZGlmCitAcHJv
cGVydHkgKG5vbmF0b21pYywgY29weSkgdm9pZCAoXnNhdmVEYXRhVG9GaWxlKShXS1dlYlZpZXcg
KiwgTlNEYXRhICosIE5TU3RyaW5nICosIE5TU3RyaW5nICosIE5TVVJMICopOwogCiAtIChOU1N0
cmluZyAqKXdhaXRGb3JBbGVydDsKIApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9U
ZXN0VUlEZWxlZ2F0ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29h
L1Rlc3RVSURlbGVnYXRlLm1tCShyZXZpc2lvbiAyNjYwODMpCisrKyBUb29scy9UZXN0V2ViS2l0
QVBJL2NvY29hL1Rlc3RVSURlbGVnYXRlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCwx
MiBAQCAtICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGdlCiB9CiAjZW5kaWYg
Ly8gUExBVEZPUk0oTUFDKQogCistICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3
IHNhdmVEYXRhVG9GaWxlOihOU0RhdGEgKilkYXRhIHN1Z2dlc3RlZEZpbGVuYW1lOihOU1N0cmlu
ZyAqKXN1Z2dlc3RlZEZpbGVuYW1lIG1pbWVUeXBlOihOU1N0cmluZyAqKW1pbWVUeXBlIG9yaWdp
bmF0aW5nVVJMOihOU1VSTCAqKXVybAoreworICAgIGlmIChfc2F2ZURhdGFUb0ZpbGUpCisgICAg
ICAgIF9zYXZlRGF0YVRvRmlsZSh3ZWJWaWV3LCBkYXRhLCBzdWdnZXN0ZWRGaWxlbmFtZSwgbWlt
ZVR5cGUsIHVybCk7Cit9CisKIC0gKE5TU3RyaW5nICopd2FpdEZvckFsZXJ0CiB7CiAgICAgRVhQ
RUNUX0ZBTFNFKHNlbGYucnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407138</attachid>
            <date>2020-08-24 15:19:31 -0700</date>
            <delta_ts>2020-08-24 15:28:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215780-20200824151931.patch</filename>
            <type>text/plain</type>
            <size>80418</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjYwODYpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA4LTI0ICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBQREYgaGVhZHMtdXAgZGlz
cGxheSB0byBVSSBwcm9jZXNzIG9uIG1hY09TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU3ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU4NzE1
ODQ3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
d3RmL1BsYXRmb3JtSGF2ZS5oOgorCiAyMDIwLTA4LTI0ICBBbGV4IENocmlzdGVuc2VuICA8YWNo
cmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWFrZSBfV0tXZWJzaXRlRGF0YVN0b3Jl
Q29uZmlndXJhdGlvbiBTUEkgZm9yIEhTVFMgc3RvcmFnZSB0byByZXBsYWNlIF9XS1Byb2Nlc3NQ
b29sQ29uZmlndXJhdGlvbi5oc3RzU3RvcmFnZURpcmVjdG9yeQpJbmRleDogU291cmNlL1dURi93
dGYvUGxhdGZvcm1FbmFibGVDb2NvYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1Bs
YXRmb3JtRW5hYmxlQ29jb2EuaAkocmV2aXNpb24gMjY2MDg2KQorKysgU291cmNlL1dURi93dGYv
UGxhdGZvcm1FbmFibGVDb2NvYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNiArMjI4LDEwIEBA
CiAjZGVmaW5lIEVOQUJMRV9HUFVfRFJJVkVSX1BSRVdBUk1JTkcgMQogI2VuZGlmCiAKKyNpZiBQ
TEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMDAw
CisjZGVmaW5lIEVOQUJMRV9VSV9QUk9DRVNTX1BERl9IVUQgMQorI2VuZGlmCisKICNpZiAhZGVm
aW5lZChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkKICNkZWZpbmUgRU5BQkxFX0lOREVYRURfREFU
QUJBU0UgMQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjY2MDg2KQorKysgU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw5NiBAQAorMjAyMC0w
OC0yNCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAg
ICAgIE1vdmUgUERGIGhlYWRzLXVwIGRpc3BsYXkgdG8gVUkgcHJvY2VzcyBvbiBtYWNPUworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1NzgwCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS81ODcxNTg0Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGhhcyBtYW55IGJlbmVmaXRzIGluY2x1ZGluZyB0
aGUgb25lIGluIHRoZSByYWRhciwgdGVzdGFiaWxpdHksIGFuZCBtb3ZpbmcgV2ViS2l0LXNwZWNp
ZmljIGNvZGUgZnJvbSBQREZLaXQgdG8gV2ViS2l0LgorCisgICAgICAgIE5vdyB0aGF0IHRoZSBI
VUQgaXMgZGlzcGxheWVkIGluIHRoZSBVSSBwcm9jZXNzIGluc3RlYWQgb2YgaW4gdGhlIHdlYiBj
b250ZW50LCB6b29taW5nIGluIGtlZXBzIHRoZSBIVUQgdGhlIHNhbWUgc2l6ZS4KKyAgICAgICAg
QSAzZC10cmFuc2Zvcm1lZCBpZnJhbWUgd2l0aCBhIFBERiBpbiBpdCBub3cgc2hvd3MgdGhlIEhV
RCBpbiB0aGUgcGxhY2UgeW91IGNhbiBjbGljayBvbiBpdCwgaW5zdGVhZCBvZiBpbiB0aGUgdHJh
bnNmb3JtZWQgUERGLgorICAgICAgICBBbHNvLCBtb3ZpbmcgdGhlIG1vdXNlIHRvIHRoZSBIVUQg
d2l0aGluIHRoZSBmaXJzdCAzIHNlY29uZHMgcHJldmVudHMgaXQgZnJvbSBoaWRpbmcsIHdoaWNo
IGl0IGRvZXMgd2hlbiB0aGUgbW91c2UgbGVhdmVzIHRoZSBIVUQuCisgICAgICAgIFRoZSByZXN0
IG9mIHRoZSBiZWhhdmlvciBJIHRoaW5rIHNob3VsZCBiZSB0aGUgc2FtZS4gIE1vc3QgdXNlcnMg
c2hvdWxkIG5vdCBub3RpY2UgYW55IGRpZmZlcmVuY2UuCisKKyAgICAgICAgRnVuY3Rpb25hbGl0
eSBjb3ZlcmVkIGJ5IEFQSSB0ZXN0cywgdGhlIGZpcnN0IHRlc3RzIGZvciBQREYgY29udGVudCBp
bnRlcmFjdGlvbiEKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAgICgtW1dLVmlldyBfY3JlYXRl
UERGSFVEOnJlY3Q6XSk6CisgICAgICAgICgtW1dLVmlldyBfcGRmSFVEOmNoYW5nZWRMb2NhdGlv
bjpdKToKKyAgICAgICAgKC1bV0tWaWV3IF9yZW1vdmVQREZIVUQ6XSk6CisgICAgICAgICgtW1dL
VmlldyBfcmVtb3ZlQWxsUERGSFVEc10pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dL
V2ViVmlld01hYy5tbToKKyAgICAgICAgKC1bV0tXZWJWaWV3IG1vdXNlTW92ZWQ6XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBtb3VzZURvd246XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBtb3Vz
ZVVwOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NyZWF0ZVBERkhVRDpyZWN0Ol0pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX3BkZkhVRDpjaGFuZ2VkTG9jYXRpb246XSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfcmVtb3ZlUERGSFVEOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3JlbW92
ZUFsbFBERkhVRHNdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdQcml2
YXRlRm9yVGVzdGluZ01hYy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmll
d1Rlc3RpbmdNYWMubW06CisgICAgICAgICgtW1dLV2ViVmlldyBwZGZIVURzXSk6CisgICAgICAg
ICogVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0Nv
Y29hL1dlYlZpZXdJbXBsLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y3JlYXRl
UERGSFVEKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0ZVBERkhVRExvY2F0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnJlbW92ZVBERkhVRCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZW1vdmVBbGxQREZIVURzKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvUGFnZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFt
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cHJvY2Vzc0RpZFRlcm1pbmF0ZSk6
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XZWJQ
YWdlUHJveHlJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2F2ZVBERlRv
VGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6b3BlblBERkZyb21UZW1wb3JhcnlGb2xkZXJX
aXRoTmF0aXZlQXBwbGljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMv
UGFnZUNsaWVudEltcGxNYWMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJ
bXBsTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlUERGSFVE
KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnVwZGF0ZVBERkhVRExvY2F0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnJlbW92ZVBERkhVRCk6CisgICAg
ICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpyZW1vdmVBbGxQREZIVURzKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5OjpzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxp
Y2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjcmVhdGVQREZIVUQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlbW92ZVBERkhVRCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6dXBkYXRlUERGSFVETG9jYXRpb24pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnBkZlpvb21Jbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6cGRmWm9vbU91dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGRmU2F2
ZVRvUERGKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZGZPcGVuV2l0aFByZXZp
ZXcpOgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGTGF5ZXJDb250cm9sbGVyU1BJLmg6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaDoKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbToKKyAgICAgICAgKC1bV0tQREZMYXllckNv
bnRyb2xsZXJEZWxlZ2F0ZSBvcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uXSk6CisgICAgICAgICgt
W1dLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgc2F2ZVRvUERGXSk6CisgICAgICAgIChXZWJL
aXQ6OlBERlBsdWdpbjo6UERGUGx1Z2luKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjp+
UERGUGx1Z2luKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpmcmFtZUZvckhVRCBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6Y2FsY3VsYXRlU2l6ZXMpOgorICAgICAg
ICAoV2ViS2l0OjpQREZQbHVnaW46OmNvbnZlcnRGcm9tUERGVmlld1RvUm9vdFZpZXcgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnZpc2liaWxpdHlEaWRDaGFuZ2UpOgorICAg
ICAgICAoV2ViS2l0OjpQREZQbHVnaW46Onpvb21Jbik6CisgICAgICAgIChXZWJLaXQ6OlBERlBs
dWdpbjo6em9vbU91dCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6c2F2ZSk6CisgICAg
ICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6b3BlbldpdGhQcmV2aWV3KToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdl
cy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6Onpvb21QREZJbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6Onpvb21QREZPdXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzYXZlUERGKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6b3BlblBERldpdGhQcmV2aWV3KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6Y3JlYXRlUERGSFVEKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6dXBkYXRlUERGSFVETG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpyZW1v
dmVQREZIVUQpOgorCiAyMDIwLTA4LTI0ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2Vu
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWFrZSBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJh
dGlvbiBTUEkgZm9yIEhTVFMgc3RvcmFnZSB0byByZXBsYWNlIF9XS1Byb2Nlc3NQb29sQ29uZmln
dXJhdGlvbi5oc3RzU3RvcmFnZURpcmVjdG9yeQpJbmRleDogU291cmNlL1dlYktpdC9TY3JpcHRz
L3dlYmtpdC9tZXNzYWdlcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NjcmlwdHMv
d2Via2l0L21lc3NhZ2VzLnB5CShyZXZpc2lvbiAyNjYwODYpCisrKyBTb3VyY2UvV2ViS2l0L1Nj
cmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNDMsNiArMjQzLDcg
QEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZQogICAgICAgICAnV2Vi
S2l0OjpNRE5TUmVnaXN0ZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6TWVkaWFQbGF5
ZXJQcml2YXRlUmVtb3RlSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6Ok1lZGlhUmVjb3Jk
ZXJJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllcicsCiAg
ICAgICAgICdXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbkNvbnRleHRJZGVudGlmaWVyJywKICAgICAg
ICAgJ1dlYktpdDo6UGx1Z2luUHJvY2Vzc1R5cGUnLAogICAgICAgICAnV2ViS2l0OjpSZW1vdGVB
dWRpb0Rlc3RpbmF0aW9uSWRlbnRpZmllcicsCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9QYWdlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFn
ZUNsaWVudC5oCShyZXZpc2lvbiAyNjYwODYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Q
YWdlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDEwIEBACiAjaW5jbHVkZSA8
d3RmL1ZhcmlhbnQuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCisjaWYgRU5BQkxFKFVJ
X1BST0NFU1NfUERGX0hVRCkKKyNpbmNsdWRlICJQREZQbHVnaW5JZGVudGlmaWVyLmgiCisjZW5k
aWYKKwogI2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUgIlBsdWdpbkNvbXBsZXhUZXh0SW5w
dXRTdGF0ZS5oIgogI2luY2x1ZGUgIlJlbW90ZUxheWVyVHJlZU5vZGUuaCIKQEAgLTI0Miw2ICsy
NDYsMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsUHJvdmlzaW9uYWxMb2Fk
Rm9yTWFpbkZyYW1lKCkgeyB9OwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRMb2FkRm9yTWFp
bkZyYW1lKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgdXNlQ3VzdG9tQ29udGVudFByb3Zp
ZGVyKSA9IDA7CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIHZpcnR1YWwg
dm9pZCBjcmVhdGVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUERGSFVETG9jYXRpb24oUERGUGx1
Z2luSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlQWxsUERGSFVEcygpID0gMDsKKyNlbmRpZgorICAgIAogICAgIHZpcnR1YWwg
dm9pZCBoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSYpID0gMDsKIAogICAgIHZp
cnR1YWwgYm9vbCBoYW5kbGVSdW5PcGVuUGFuZWwoV2ViUGFnZVByb3h5KiwgV2ViRnJhbWVQcm94
eSosIGNvbnN0IEZyYW1lSW5mb0RhdGEmLCBBUEk6Ok9wZW5QYW5lbFBhcmFtZXRlcnMqLCBXZWJP
cGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5KikgeyByZXR1cm4gZmFsc2U7IH0KSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gMjY2MDg2KQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDc3MiwxNSArNDc3MiwxNCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9h
ZEZvckZyYW1lCiAgICAgICAgICAgICBtX3BsdWdpblNjYWxlRmFjdG9yID0gMTsKICAgICAgICAg
ICAgIG1fbWFpbkZyYW1lUGx1Z2luSGFuZGxlc1BhZ2VTY2FsZUdlc3R1cmUgPSBmYWxzZTsKICAg
ICAgICAgfQotICAgIH0KLQogI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCi0gICAgaWYgKGZyYW1l
LT5pc01haW5GcmFtZSgpKQogICAgICAgICByZXF1ZXN0UG9pbnRlclVubG9jaygpOwogI2VuZGlm
Ci0KLSAgICBpZiAoZnJhbWUtPmlzTWFpbkZyYW1lKCkpCiAgICAgICAgIHBhZ2VDbGllbnQoKS5z
ZXRNb3VzZUV2ZW50UG9saWN5KG1vdXNlRXZlbnRQb2xpY3kpOworI2lmIEVOQUJMRShVSV9QUk9D
RVNTX1BERl9IVUQpCisgICAgICAgIHBhZ2VDbGllbnQoKS5yZW1vdmVBbGxQREZIVURzKCk7Cisj
ZW5kaWYKKyAgICB9CiAKICAgICBtX3BhZ2VMb2FkU3RhdGUuY29tbWl0Q2hhbmdlcygpOwogICAg
IGlmIChtX2xvYWRlckNsaWVudCkKQEAgLTc0NTEsNiArNzQ1MCw5IEBAIHZvaWQgV2ViUGFnZVBy
b3h5Ojpwcm9jZXNzRGlkVGVybWluYXRlKFAKIAogICAgIHJlc2V0U3RhdGVBZnRlclByb2Nlc3NF
eGl0ZWQocmVhc29uKTsKICAgICBzdG9wQWxsVVJMU2NoZW1lVGFza3MobV9wcm9jZXNzLnB0cigp
KTsKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIHBhZ2VDbGllbnQoKS5yZW1v
dmVBbGxQREZIVURzKCk7CisjZW5kaWYKIAogICAgIC8vIEZvciBicmluZ3VwIG9mIHByb2Nlc3Mg
c3dhcHBpbmcsIE5hdmlnYXRpb25Td2FwIHRlcm1pbmF0aW9uIHdpbGwgbm90IGdvIG91dCB0byBj
bGllbnRzLgogICAgIC8vIElmIGl0IGRvZXMgKmR1cmluZyogcHJvY2VzcyBzd2FwcGluZywgYW5k
IHRoZSBjbGllbnQgdHJpZ2dlcnMgYSByZWxvYWQsIHRoYXQgY2F1c2VzIGJpemFycmUgV2ViS2l0
IHJlLWVudHJ5LgpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJl
dmlzaW9uIDI2NjA4NikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNiArMTQwLDEwIEBAIE9CSkNfQ0xBU1MgX1dLUmVtb3Rl
T2JqZWN0UmVnaXN0cnk7CiAjaW5jbHVkZSAiTmF0aXZlV2ViVG91Y2hFdmVudC5oIgogI2VuZGlm
CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorI2luY2x1ZGUgIlBERlBsdWdpbklk
ZW50aWZpZXIuaCIKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSAiRHlu
YW1pY1ZpZXdwb3J0U2l6ZVVwZGF0ZS5oIgogI2luY2x1ZGUgIlJlbW90ZUxheWVyVHJlZU5vZGUu
aCIKQEAgLTEzMTEsMTAgKzEzMTUsMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCBzYXZlRGF0YVRv
RmlsZUluRG93bmxvYWRzRm9sZGVyKFN0cmluZyYmIHN1Z2dlc3RlZEZpbGVuYW1lLCBTdHJpbmcm
JiBtaW1lVHlwZSwgVVJMJiYgb3JpZ2luYXRpbmdVUkwsIEFQSTo6RGF0YSYpOwogICAgIHZvaWQg
c2F2ZVBERlRvRmlsZUluRG93bmxvYWRzRm9sZGVyKFN0cmluZyYmIHN1Z2dlc3RlZEZpbGVuYW1l
LCBVUkwmJiBvcmlnaW5hdGluZ1VSTCwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik7Ci0jaWYg
UExBVEZPUk0oQ09DT0EpCisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCiAgICAgdm9pZCBzYXZl
UERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKGNvbnN0IFN0
cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgSVBDOjpEYXRh
UmVmZXJlbmNlJiwgY29uc3QgU3RyaW5nJiBwZGZVVUlEKTsKKyNpZiAhRU5BQkxFKFVJX1BST0NF
U1NfUERGX0hVRCkKICAgICB2b2lkIG9wZW5QREZGcm9tVGVtcG9yYXJ5Rm9sZGVyV2l0aE5hdGl2
ZUFwcGxpY2F0aW9uKEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgU3RyaW5nJiBwZGZVVUlEKTsKICNl
bmRpZgorI2VuZGlmCiAKICNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKICAgICB2b2lkIHNob3dQ
REZDb250ZXh0TWVudShjb25zdCBXZWJLaXQ6OlBERkNvbnRleHRNZW51JiwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChPcHRpb25hbDxpbnQzMl90PiYmKT4mJik7CkBAIC0xODA2LDYgKzE4MTIsMTYg
QEAgcHVibGljOgogICAgIGJvb2wgY2FuVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKSB7IHJldHVybiBt
X2NhblVzZUNyZWRlbnRpYWxTdG9yYWdlOyB9CiAgICAgdm9pZCBzZXRDYW5Vc2VDcmVkZW50aWFs
U3RvcmFnZShib29sKTsKIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgdm9p
ZCBjcmVhdGVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpOworICAgIHZvaWQgdXBkYXRlUERGSFVETG9jYXRpb24oUERGUGx1Z2luSWRlbnRpZmllciwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgcmVtb3ZlUERGSFVEKFBERlBsdWdp
bklkZW50aWZpZXIpOworICAgIHZvaWQgcGRmWm9vbUluKFBERlBsdWdpbklkZW50aWZpZXIpOwor
ICAgIHZvaWQgcGRmWm9vbU91dChQREZQbHVnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHBkZlNh
dmVUb1BERihQREZQbHVnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHBkZk9wZW5XaXRoUHJldmll
dyhQREZQbHVnaW5JZGVudGlmaWVyKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIFdlYlBhZ2VQ
cm94eShQYWdlQ2xpZW50JiwgV2ViUHJvY2Vzc1Byb3h5JiwgUmVmPEFQSTo6UGFnZUNvbmZpZ3Vy
YXRpb24+JiYpOwogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKCk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lv
biAyNjYwODYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2Fn
ZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTQzMyw5ICs0MzMsOCBAQCBtZXNzYWdlcyAtPiBXZWJQ
YWdlUHJveHkgewogICAgIFNhdmVSZWNlbnRTZWFyY2hlcyhTdHJpbmcgbmFtZSwgVmVjdG9yPFdl
YkNvcmU6OlJlY2VudFNlYXJjaD4gc2VhcmNoSXRlbXMpCiAgICAgTG9hZFJlY2VudFNlYXJjaGVz
KFN0cmluZyBuYW1lKSAtPiAoVmVjdG9yPFdlYkNvcmU6OlJlY2VudFNlYXJjaD4gcmVzdWx0KSBT
eW5jaHJvbm91cwogCisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pICYmICFFTkFCTEUoVUlfUFJP
Q0VTU19QREZfSFVEKQogICAgIFNhdmVQREZUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcihTdHJpbmcg
c3VnZ2VzdGVkRmlsZW5hbWUsIFVSTCBvcmlnaW5hdGluZ1VSTCwgSVBDOjpEYXRhUmVmZXJlbmNl
IGRhdGEpCi0KLSNpZiBQTEFURk9STShDT0NPQSkKICAgICBTYXZlUERGVG9UZW1wb3JhcnlGb2xk
ZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSwg
c3RydWN0IFdlYktpdDo6RnJhbWVJbmZvRGF0YSBzb3VyY2VGcmFtZUluZm8sIElQQzo6RGF0YVJl
ZmVyZW5jZSBkYXRhLCBTdHJpbmcgcGRmVVVJRCkKICAgICBPcGVuUERGRnJvbVRlbXBvcmFyeUZv
bGRlcldpdGhOYXRpdmVBcHBsaWNhdGlvbihzdHJ1Y3QgV2ViS2l0OjpGcmFtZUluZm9EYXRhIHNv
dXJjZUZyYW1lSW5mbywgU3RyaW5nIHBkZlVVSUQpCiAjZW5kaWYKQEAgLTU2Niw2ICs1NjUsMTIg
QEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBTcGVlY2hTeW50aGVzaXNSZXN1bWUo
KSAtPiAoKSBBc3luYwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQor
ICAgIENyZWF0ZVBERkhVRChXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwg
V2ViQ29yZTo6SW50UmVjdCBib3VuZGluZ0JveCkKKyAgICBVcGRhdGVQREZIVURMb2NhdGlvbihX
ZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViQ29yZTo6SW50UmVjdCBi
b3VuZGluZ0JveCkKKyAgICBSZW1vdmVQREZIVUQoV2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVy
IGlkZW50aWZpZXIpCisjZW5kaWYKKwogICAgIENvbmZpZ3VyZUxvZ2dpbmdDaGFubmVsKFN0cmlu
ZyBjaGFubmVsTmFtZSwgZW51bTp1aW50OF90IFdURkxvZ0NoYW5uZWxTdGF0ZSBzdGF0ZSwgZW51
bTp1aW50OF90IFdURkxvZ0xldmVsIGxldmVsKQogCiAjaWYgUExBVEZPUk0oR1RLKQpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0lu
dGVybmFsLmgJKHJldmlzaW9uIDI2NjA4NikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMSArMjMs
MTEgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW1wb3J0
ICJXS1dlYlZpZXdQcml2YXRlLmgiCi0KKyNpbXBvcnQgIlBERlBsdWdpbklkZW50aWZpZXIuaCIK
ICNpbXBvcnQgIlNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlLmgiCiAjaW1wb3J0ICJXS1NoYXJl
U2hlZXQuaCIKICNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb24uaCIKKyNpbXBvcnQgIldL
V2ViVmlld1ByaXZhdGUuaCIKICNpbXBvcnQgIl9XS0F0dGFjaG1lbnRJbnRlcm5hbC5oIgogI2lt
cG9ydCAiX1dLV2ViVmlld1ByaW50Rm9ybWF0dGVySW50ZXJuYWwuaCIKICNpbXBvcnQgPHd0Zi9D
b21wbGV0aW9uSGFuZGxlci5oPgpAQCAtMTMzLDcgKzEzMyw3IEBAIGNsYXNzIFZpZXdHZXN0dXJl
Q29udHJvbGxlcjsKICAgICAvLyBPbmx5IHVzZWQgd2l0aCBVSS1zaWRlIGNvbXBvc2l0aW5nLgog
ICAgIFJldGFpblB0cjxXS1Njcm9sbFZpZXc+IF9zY3JvbGxWaWV3OwogICAgIFJldGFpblB0cjxX
S0NvbnRlbnRWaWV3PiBfY29udGVudFZpZXc7Ci0jZW5kaWYKKyNlbmRpZiAvLyBQTEFURk9STShN
QUMpCiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIFJldGFpblB0cjxXS1Njcm9sbFZp
ZXc+IF9zY3JvbGxWaWV3OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9X
S1dlYlZpZXdQcml2YXRlRm9yVGVzdGluZ01hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3UHJpdmF0ZUZvclRlc3RpbmdNYWMuaAkocmV2
aXNpb24gMjY2MDg2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZp
ZXdQcml2YXRlRm9yVGVzdGluZ01hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBA
IEBpbnRlcmZhY2UgV0tXZWJWaWV3IChXS1Rlc3RpbmdNYWMpCiAKIC0gKHZvaWQpX3NldEhlYWRl
ckJhbm5lckhlaWdodDooaW50KWhlaWdodDsKIC0gKHZvaWQpX3NldEZvb3RlckJhbm5lckhlaWdo
dDooaW50KWhlaWdodDsKKy0gKE5TU2V0PE5TVmlldyAqPiAqKV9wZGZIVURzOwogCiBAZW5kCiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2Vi
Vmlld1Rlc3RpbmdNYWMubW0JKHJldmlzaW9uIDI2NjA4NikKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MTAzLDYgKzEwMywxNSBAQCAtICh2b2lkKV9zZXRGb290ZXJCYW5uZXJIZWlnaHQ6KGludCloZWln
CiAgICAgX3BhZ2UtPnNldEZvb3RlckJhbm5lckhlaWdodEZvclRlc3RpbmcoaGVpZ2h0KTsKIH0K
IAorLSAoTlNTZXQ8TlNWaWV3ICo+ICopX3BkZkhVRHMKK3sKKyNpZiBFTkFCTEUoVUlfUFJPQ0VT
U19QREZfSFVEKQorICAgIHJldHVybiBfaW1wbC0+cGRmSFVEcygpOworI2Vsc2UKKyAgICByZXR1
cm4gbmlsOworI2VuZGlmCit9CisKIC0gKE5TTWVudSAqKV9hY3RpdmVNZW51CiB7CiAgICAgLy8g
RklYTUU6IE9ubHkgdGhlIERPTSBwYXN0ZSBhY2Nlc3MgbWVudSBpcyBzdXBwb3J0ZWQgZm9yIG5v
dy4gSW4gdGhlIGZ1dHVyZSwgaXQgY291bGQgYmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1dlYlZpZXdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaAkocmV2aXNpb24gMjY2MDg2KQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsNyBAQAogCiAjaWYgUExBVEZPUk0oTUFDKQogCisjaW5jbHVkZSAiUERGUGx1Z2luSWRl
bnRpZmllci5oIgogI2luY2x1ZGUgIlBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZS5oIgogI2lu
Y2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIldLTGF5b3V0TW9kZS5oIgpAQCAt
NzYsNiArNzcsMTAgQEAgT0JKQ19DTEFTUyBXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyOwog
T0JKQ19DTEFTUyBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcjsKICNlbmRpZiAvLyBIQVZFKFRP
VUNIX0JBUikKIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCitPQkpDX0NMQVNTIFdL
UERGSFVEVmlldzsKKyNlbmRpZgorCiBuYW1lc3BhY2UgQVBJIHsKIGNsYXNzIEhpdFRlc3RSZXN1
bHQ7CiBjbGFzcyBPYmplY3Q7CkBAIC0xOTAsNiArMTk1LDE0IEBAIHB1YmxpYzoKICAgICB2b2lk
IHZpZXdXaWxsU3RhcnRMaXZlUmVzaXplKCk7CiAgICAgdm9pZCB2aWV3RGlkRW5kTGl2ZVJlc2l6
ZSgpOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICB2b2lkIGNyZWF0ZVBE
RkhVRChQREZQbHVnaW5JZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAg
dm9pZCB1cGRhdGVQREZIVURMb2NhdGlvbihQREZQbHVnaW5JZGVudGlmaWVyLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCByZW1vdmVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmll
cik7CisgICAgdm9pZCByZW1vdmVBbGxQREZIVURzKCk7CisgICAgTlNTZXQgKnBkZkhVRHMoKTsK
KyNlbmRpZgorCiAgICAgdm9pZCByZW5ld0dTdGF0ZSgpOwogICAgIHZvaWQgc2V0RnJhbWVTaXpl
KENHU2l6ZSk7CiAgICAgdm9pZCBkaXNhYmxlRnJhbWVTaXplVXBkYXRlcygpOwpAQCAtNzI5LDcg
Kzc0MiwxMSBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICBSZXRh
aW5QdHI8V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcj4gbV9mdWxsU2NyZWVuV2luZG93Q29u
dHJvbGxlcjsKICNlbmRpZgotICAgIAorCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkK
KyAgICBIYXNoTWFwPFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllciwgUmV0YWluUHRyPFdLUERG
SFVEVmlldz4+IF9wZGZIVURWaWV3czsKKyNlbmRpZgorCiAgICAgUmV0YWluUHRyPFdLU2hhcmVT
aGVldD4gX3NoYXJlU2hlZXQ7CiAKICAgICBSZXRhaW5QdHI8V0tXaW5kb3dWaXNpYmlsaXR5T2Jz
ZXJ2ZXI+IG1fd2luZG93VmlzaWJpbGl0eU9ic2VydmVyOwpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0JKHJldmlzaW9uIDI2NjA4NikKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC02Miw2ICs2Miw3IEBACiAjaW1wb3J0ICJXS0Vycm9ySW50ZXJuYWwuaCIKICNpbXBvcnQg
IldLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaCIKICNpbXBvcnQgIldLSW1tZWRpYXRlQWN0
aW9uQ29udHJvbGxlci5oIgorI2ltcG9ydCAiV0tQREZIVURWaWV3LmgiCiAjaW1wb3J0ICJXS1By
aW50aW5nVmlldy5oIgogI2ltcG9ydCAiV0tTYWZlQnJvd3NpbmdXYXJuaW5nLmgiCiAjaW1wb3J0
ICJXS1NoYXJlU2hlZXQuaCIKQEAgLTE3MTgsNiArMTcxOSw0NSBAQCB2b2lkIFdlYlZpZXdJbXBs
Ojp2aWV3RGlkRW5kTGl2ZVJlc2l6ZSgpCiAgICAgW21fbGF5b3V0U3RyYXRlZ3kgZGlkRW5kTGl2
ZVJlc2l6ZV07CiB9CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCit2b2lkIFdl
YlZpZXdJbXBsOjpjcmVhdGVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIHJlbW92ZVBERkhVRChpZGVudGlm
aWVyKTsKKyAgICBhdXRvIGh1ZCA9IGFkb3B0TlMoW1tXS1BERkhVRFZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6cmVjdCBwbHVnaW5JZGVudGlmaWVyOmlkZW50aWZpZXIgcGFnZTptX3BhZ2UuZ2V0
KCldKTsKKyAgICBbbV92aWV3IGFkZFN1YnZpZXc6aHVkLmdldCgpXTsKKyAgICBfcGRmSFVEVmll
d3MuYWRkKGlkZW50aWZpZXIsIFdURk1vdmUoaHVkKSk7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6
OnVwZGF0ZVBERkhVRExvY2F0aW9uKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoYXV0byBodWQgPSBfcGRmSFVE
Vmlld3MuZ2V0KGlkZW50aWZpZXIpKQorICAgICAgICBbaHVkIHNldEZyYW1lOnJlY3RdOworfQor
Cit2b2lkIFdlYlZpZXdJbXBsOjpyZW1vdmVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllciBpZGVu
dGlmaWVyKQoreworICAgIGlmIChhdXRvIGh1ZCA9IF9wZGZIVURWaWV3cy50YWtlKGlkZW50aWZp
ZXIpKQorICAgICAgICBbaHVkIHJlbW92ZUZyb21TdXBlcnZpZXddOworfQorCit2b2lkIFdlYlZp
ZXdJbXBsOjpyZW1vdmVBbGxQREZIVURzKCkKK3sKKyAgICBmb3IgKGF1dG8mIGh1ZCA6IF9wZGZI
VURWaWV3cy52YWx1ZXMoKSkKKyAgICAgICAgW2h1ZCByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAg
ICBfcGRmSFVEVmlld3MuY2xlYXIoKTsKK30KKworTlNTZXQgKldlYlZpZXdJbXBsOjpwZGZIVURz
KCkKK3sKKyAgICBOU011dGFibGVTZXQ8TlNWaWV3ICo+ICpzZXQgPSBbTlNNdXRhYmxlU2V0IHNl
dFdpdGhDYXBhY2l0eTpfcGRmSFVEVmlld3Muc2l6ZSgpXTsKKyAgICBmb3IgKGF1dG8mIGh1ZCA6
IF9wZGZIVURWaWV3cy52YWx1ZXMoKSkKKyAgICAgICAgW3NldCBhZGRPYmplY3Q6aHVkLmdldCgp
XTsKKyAgICByZXR1cm4gc2V0OworfQorCisjZW5kaWYgLy8gRU5BQkxFKFVJX1BST0NFU1NfUERG
X0hVRCkKKwogdm9pZCBXZWJWaWV3SW1wbDo6cmVuZXdHU3RhdGUoKQogewogICAgIGlmIChtX3Rl
eHRJbmRpY2F0b3JXaW5kb3cpCkBAIC01MzkxLDYgKzU0MzEsMTEgQEAgdm9pZCBXZWJWaWV3SW1w
bDo6bW91c2VNb3ZlZChOU0V2ZW50ICpldgogICAgIGlmIChtX2lnbm9yZXNOb25XaGVlbEV2ZW50
cykKICAgICAgICAgcmV0dXJuOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAg
ICBmb3IgKGF1dG8mIGh1ZCA6IF9wZGZIVURWaWV3cy52YWx1ZXMoKSkKKyAgICAgICAgW2h1ZCBt
b3VzZU1vdmVkOmV2ZW50XTsKKyNlbmRpZgorCiAgICAgLy8gV2hlbiBhIHZpZXcgaXMgZmlyc3Qg
cmVzcG9uZGVyLCBpdCBnZXRzIG1vdXNlIG1vdmVkIGV2ZW50cyBldmVuIHdoZW4gdGhlIG1vdXNl
IGlzIG91dHNpZGUgaXRzIHZpc2libGUgcmVjdC4KICAgICBpZiAobV92aWV3LmdldEF1dG9yZWxl
YXNlZCgpID09IFttX3ZpZXcgd2luZG93XS5maXJzdFJlc3BvbmRlciAmJiAhTlNQb2ludEluUmVj
dChbbV92aWV3IGNvbnZlcnRQb2ludDpbZXZlbnQgbG9jYXRpb25JbldpbmRvd10gZnJvbVZpZXc6
bmlsXSwgW21fdmlldyB2aXNpYmxlUmVjdF0pKQogICAgICAgICByZXR1cm47CkBAIC01NDM5LDYg
KzU0ODQsMTEgQEAgdm9pZCBXZWJWaWV3SW1wbDo6bW91c2VEb3duKE5TRXZlbnQgKmV2ZQogICAg
IGlmIChtX2lnbm9yZXNOb25XaGVlbEV2ZW50cykKICAgICAgICAgcmV0dXJuOwogCisjaWYgRU5B
QkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBmb3IgKGF1dG8mIGh1ZCA6IF9wZGZIVURWaWV3
cy52YWx1ZXMoKSkKKyAgICAgICAgW2h1ZCBtb3VzZURvd246ZXZlbnRdOworI2VuZGlmCisKICAg
ICBzZXRMYXN0TW91c2VEb3duRXZlbnQoZXZlbnQpOwogICAgIHNldElnbm9yZXNNb3VzZURyYWdn
ZWRFdmVudHMoZmFsc2UpOwogCkBAIC01NDUwLDYgKzU1MDAsMTEgQEAgdm9pZCBXZWJWaWV3SW1w
bDo6bW91c2VVcChOU0V2ZW50ICpldmVudAogICAgIGlmIChtX2lnbm9yZXNOb25XaGVlbEV2ZW50
cykKICAgICAgICAgcmV0dXJuOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAg
ICBmb3IgKGF1dG8mIGh1ZCA6IF9wZGZIVURWaWV3cy52YWx1ZXMoKSkKKyAgICAgICAgW2h1ZCBt
b3VzZVVwOmV2ZW50XTsKKyNlbmRpZgorCiAgICAgc2V0TGFzdE1vdXNlRG93bkV2ZW50KG5pbCk7
CiAgICAgbW91c2VVcEludGVybmFsKGV2ZW50KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1BERi9XS1BERkhVRFZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9QREYvV0tQREZIVURWaWV3LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvUERGL1dLUERGSFVEVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKworI2lt
cG9ydCAiUERGUGx1Z2luSWRlbnRpZmllci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNz
IFdlYlBhZ2VQcm94eTsKK30KKworQGludGVyZmFjZSBXS1BERkhVRFZpZXcgOiBOU1ZpZXcKKwor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSBwbHVnaW5JZGVudGlm
aWVyOihXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIpcGx1Z2luSWRlbnRpZmllciBwYWdlOihX
ZWJLaXQ6OldlYlBhZ2VQcm94eSYpcGFnZTsKKy0gKHZvaWQpc2V0RnJhbWU6KE5TUmVjdClmcmFt
ZTsKKy0gKHZvaWQpbW91c2VNb3ZlZDooTlNFdmVudCAqKWV2ZW50OworLSAodm9pZCltb3VzZURv
d246KE5TRXZlbnQgKilldmVudDsKKy0gKHZvaWQpbW91c2VVcDooTlNFdmVudCAqKWV2ZW50Owor
CitAZW5kCisKKyNlbmRpZiAvLyBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvUERGL1dLUERGSFVEVmlldy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QREYvV0tQREZIVURWaWV3Lm1tCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BERi9XS1BERkhVRFZpZXcubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwzNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIldLUERGSFVEVmlldy5oIgorCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hV
RCkKKworI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1wb3J0IDxRdWFydHpDb3JlL0NBVHJh
bnNhY3Rpb24uaD4KKyNpbXBvcnQgPHBhbC9zcGkvY29jb2EvUXVhcnR6Q29yZVNQSS5oPgorI2lt
cG9ydCA8cGFsL3NwaS9tYWMvTlNJbWFnZVNQSS5oPgorI2ltcG9ydCA8d3RmL1dlYWtPYmpDUHRy
Lmg+CisKKy8vICBUaGUgSFVEIGl0ZW1zIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgc3BhY2lu
ZzoKKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisvLyB8ICAgICAgMTIgICAgICAgIDEyICAgICAgMTAgICAgIDEyICAgICAgICAxMiAgICAgIHwK
Ky8vIHwgICAgIC0tLS0gICAgICAtLS0tICAgICB8ICAgICAtLS0tICAgICAgLS0tLSAgICAgfAor
Ly8gfCAxMCB8aWNvbnwgMTAgfGljb258IDEwIHwgMTAgfGljb258IDEwIHxpY29ufCAxMCB8Cisv
LyB8ICAgICAtLS0tICAgICAgLS0tLSAgICAgfCAgICAgLS0tLSAgICAgIC0tLS0gICAgIHwKKy8v
IHwgICAgICAxMiAgICAgICAgMTIgICAgICAxMCAgICAgMTIgICAgICAgIDEyICAgICAgfAorLy8g
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICB3
aGVyZSB0aGUgMTIgcG9pbnQgdmVydGljYWwgc3BhY2luZyBpcyBhbmNob3JlZCB0byB0aGUgc21h
bGxlc3QgaWNvbiBpbWFnZSwKKy8vICBhbmQgYWxsIHN1YnNlcXVlbnQgaWNvbnMgd2l0aCBiZSBj
ZW50ZXJlZCB2ZXJ0aWNhbGx5IHdpdGggdGhlIHNtYWxsZXN0IGljb24uCisKK3N0YXRpYyBjb25z
dCBDR0Zsb2F0IGtMYXllclZlcnRpY2FsT2Zmc2V0ID0gNDA7CitzdGF0aWMgY29uc3QgQ0dGbG9h
dCBrTGF5ZXJDb3JuZXJSYWRpdXMgPSAxMjsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGtMYXllckdy
YXlDb21wb25lbnQgPSAwOworc3RhdGljIGNvbnN0IENHRmxvYXQga0xheWVyQWxwaGEgPSAwLjc1
Oworc3RhdGljIGNvbnN0IENHRmxvYXQga0xheWVySW1hZ2VTY2FsZSA9IDEuNTsKK3N0YXRpYyBj
b25zdCBDR0Zsb2F0IGtMYXllclNlcGVyYXRvckNvbnRyb2xsZXJTaXplID0gMS41Oworc3RhdGlj
IGNvbnN0IENHRmxvYXQga0xheWVyQ29udHJvbGxlckhvcml6b250YWxNYXJnaW4gPSAxMC4wOwor
c3RhdGljIGNvbnN0IENHRmxvYXQga0xheWVySW1hZ2VWZXJ0aWNhbE1hcmdpbiA9IDEyLjA7Citz
dGF0aWMgY29uc3QgQ0dGbG9hdCBrTGF5ZXJTZXBlcmF0b3JWZXJ0aWNhbE1hcmdpbiA9IDEwLjA7
CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrQ29udHJvbExheWVyTm9ybWFsQWxwaGEgPSAwLjc1Owor
c3RhdGljIGNvbnN0IENHRmxvYXQga0NvbnRyb2xMYXllckRvd25BbHBoYSA9IDAuNDU7CisKK3N0
YXRpYyBOU1N0cmluZyAqIGNvbnN0IFBERkhVRFpvb21JbkNvbnRyb2wgPSBAInBsdXMubWFnbmlm
eWluZ2dsYXNzIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFBERkhVRFpvb21PdXRDb250cm9s
ID0gQCJtaW51cy5tYWduaWZ5aW5nZ2xhc3MiOworc3RhdGljIE5TU3RyaW5nICogY29uc3QgUERG
SFVETGF1bmNoUHJldmlld0NvbnRyb2wgPSBAInByZXZpZXciOworc3RhdGljIE5TU3RyaW5nICog
Y29uc3QgUERGSFVEU2F2ZVBERkNvbnRyb2wgPSBAImFycm93LmRvd24uY2lyY2xlIjsKK3N0YXRp
YyBOU1N0cmluZyAqIGNvbnN0IFBERkhVRFNlcGVyYXRvckNvbnRyb2wgPSBAIlBERkhVRFNlcGVy
YXRvckNvbnRyb2wiOworCitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrTGF5ZXJGYWRlSW5UaW1lSW50
ZXJ2YWwgPSAwLjI1Oworc3RhdGljIGNvbnN0IENHRmxvYXQga0xheWVyRmFkZU91dFRpbWVJbnRl
cnZhbCA9IDAuNTsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGtJbml0aWFsSGlkZVRpbWVJbnRlcnZh
bCA9IDMuMDsKKworc3RhdGljIE5TQXJyYXk8TlNTdHJpbmcgKj4gKmNvbnRyb2xBcnJheSgpCit7
CisgICAgcmV0dXJuIEBbCisgICAgICAgIFBERkhVRFpvb21PdXRDb250cm9sLAorICAgICAgICBQ
REZIVURab29tSW5Db250cm9sLAorICAgICAgICBQREZIVURTZXBlcmF0b3JDb250cm9sLAorICAg
ICAgICBQREZIVURMYXVuY2hQcmV2aWV3Q29udHJvbCwKKyAgICAgICAgUERGSFVEU2F2ZVBERkNv
bnRyb2wKKyAgICBdOworfQorCitzdGF0aWMgTlNDb2xvciogUERGQ0dDb2xvckNyZWF0ZUdlbmVy
aWNSR0IoQ0dGbG9hdCByZWQsIENHRmxvYXQgZ3JlZW4sIENHRmxvYXQgYmx1ZSwgQ0dGbG9hdCBh
bHBoYSkKK3sKKyAgICBhdXRvIGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0
ZURldmljZVJHQigpKTsKKyAgICBjb25zdCBDR0Zsb2F0IGNvbXBvbmVudHNbNF0gPSB7IHJlZCwg
Z3JlZW4sIGJsdWUsIGFscGhhIH07CisgICAgYXV0byBjZ0NvbG9yID0gYWRvcHRDRihDR0NvbG9y
Q3JlYXRlKGNvbG9yU3BhY2UuZ2V0KCksIGNvbXBvbmVudHMpKTsKKyAgICByZXR1cm4gW05TQ29s
b3IgY29sb3JXaXRoQ0dDb2xvcjpjZ0NvbG9yLmdldCgpXTsKK30KKworQGltcGxlbWVudGF0aW9u
IFdLUERGSFVEVmlldyB7CitAcHJpdmF0ZQorICAgIFdlYWtQdHI8V2ViS2l0OjpXZWJQYWdlUHJv
eHk+IF9wYWdlOworICAgIFJldGFpblB0cjxOU1N0cmluZz4gX2FjdGl2ZUNvbnRyb2w7CisgICAg
V2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVyIF9wbHVnaW5JZGVudGlmaWVyOworICAgIENHRmxv
YXQgX2RldmljZVNjYWxlRmFjdG9yOworICAgIFJldGFpblB0cjxDQUxheWVyPiBfbGF5ZXI7Cisg
ICAgUmV0YWluUHRyPENBTGF5ZXI+IF9hY3RpdmVMYXllcjsKKyAgICBDR1NpemUgX2ZyYW1lU2l6
ZTsKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeTxOU1N0cmluZyosIE5TSW1hZ2Uq
Pj4gX2NhY2hlZEljb25zOworICAgIEJPT0wgX3Zpc2libGU7CisgICAgYm9vbCBfbW91c2VNb3Zl
ZFRvSFVEOworICAgIGJvb2wgX2luaXRpYWxIaWRlVGltZXJGaXJlZDsKK30KKworLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSBwbHVnaW5JZGVudGlmaWVyOihXZWJL
aXQ6OlBERlBsdWdpbklkZW50aWZpZXIpcGx1Z2luSWRlbnRpZmllciBwYWdlOihXZWJLaXQ6Oldl
YlBhZ2VQcm94eSYpcGFnZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhGcmFt
ZTpmcmFtZV0pKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIHNlbGYud2FudHNMYXll
ciA9IFlFUzsKKyAgICBfY2FjaGVkSWNvbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFy
eSBhbGxvY10gaW5pdF0pOworICAgIF9wbHVnaW5JZGVudGlmaWVyID0gcGx1Z2luSWRlbnRpZmll
cjsKKyAgICBfcGFnZSA9IG1ha2VXZWFrUHRyKHBhZ2UpOworICAgIF9kZXZpY2VTY2FsZUZhY3Rv
ciA9IHBhZ2UuZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBfdmlzaWJsZSA9IFlFUzsKKyAgICBb
c2VsZiBfc2V0dXBMYXllcjpzZWxmLmxheWVyXTsKKyAgICBbc2VsZiBzZXRGcmFtZTpmcmFtZV07
CisKKyAgICBXZWFrT2JqQ1B0cjxXS1BERkhVRFZpZXc+IHdlYWtTZWxmID0gc2VsZjsKKyAgICBk
aXNwYXRjaF9hZnRlcihkaXNwYXRjaF90aW1lKERJU1BBVENIX1RJTUVfTk9XLCAoaW50NjRfdCko
a0luaXRpYWxIaWRlVGltZUludGVydmFsICogTlNFQ19QRVJfU0VDKSksIGRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCksIF57CisgICAgICAgIFt3ZWFrU2VsZiBfaGlkZVRpbWVyRmlyZWRdOworICAg
IH0pOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2xh
eWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0g
KHZvaWQpc2V0RnJhbWU6KE5TUmVjdClyZWN0Cit7CisgICAgW3N1cGVyIHNldEZyYW1lOnJlY3Rd
OworICAgIF9mcmFtZVNpemUgPSByZWN0LnNpemU7CisKKyAgICBbQ0FUcmFuc2FjdGlvbiBiZWdp
bl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKKyAgICBDR1Jl
Y3QgbGF5ZXJCb3VuZHMgPSBbX2xheWVyIGJvdW5kc107CisgICAgW19sYXllciBzZXRGcmFtZTpD
R1JlY3RNYWtlKHJlY3Quc2l6ZS53aWR0aCAvIDIuMCAtIGxheWVyQm91bmRzLnNpemUud2lkdGgg
LyAyLjAsIGtMYXllclZlcnRpY2FsT2Zmc2V0LCBsYXllckJvdW5kcy5zaXplLndpZHRoLCBsYXll
ckJvdW5kcy5zaXplLmhlaWdodCldOworICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Cit9CisK
Ky0gKHZvaWQpX2hpZGVUaW1lckZpcmVkCit7CisgICAgX2luaXRpYWxIaWRlVGltZXJGaXJlZCA9
IHRydWU7CisgICAgaWYgKCFfbW91c2VNb3ZlZFRvSFVEKQorICAgICAgICBbc2VsZiBfc2V0Vmlz
aWJsZTpmYWxzZV07Cit9CisKKy0gKHZvaWQpX3NldFZpc2libGU6KGJvb2wpaXNWaXNpYmxlCit7
CisgICAgaWYgKF92aXNpYmxlID09IGlzVmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOworICAgIF92
aXNpYmxlID0gaXNWaXNpYmxlOworICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICBbQ0FU
cmFuc2FjdGlvbiBzZXRBbmltYXRpb25EdXJhdGlvbjogaXNWaXNpYmxlID8ga0xheWVyRmFkZUlu
VGltZUludGVydmFsIDoga0xheWVyRmFkZU91dFRpbWVJbnRlcnZhbF07CisgICAgW3NlbGYgX3Nl
dExheWVyT3BhY2l0eTppc1Zpc2libGUgPyBrTGF5ZXJBbHBoYSA6IDAuMF07CisgICAgW0NBVHJh
bnNhY3Rpb24gY29tbWl0XTsKK30KKworLSAodm9pZCltb3VzZU1vdmVkOihOU0V2ZW50ICopZXZl
bnQKK3sKKyAgICBpZiAoQ0dSZWN0Q29udGFpbnNQb2ludChbc2VsZiBjb252ZXJ0UmVjdDpDR1Jl
Y3RJbnNldChbX2xheWVyIGZyYW1lXSwgLTE2LjAsIC0xNi4wKSB0b1ZpZXc6bmlsXSwgTlNQb2lu
dFRvQ0dQb2ludChldmVudC5sb2NhdGlvbkluV2luZG93KSkpIHsKKyAgICAgICAgW3NlbGYgX3Nl
dFZpc2libGU6dHJ1ZV07CisgICAgICAgIF9tb3VzZU1vdmVkVG9IVUQgPSB0cnVlOworICAgIH0g
ZWxzZSBpZiAoX2luaXRpYWxIaWRlVGltZXJGaXJlZCkKKyAgICAgICAgW3NlbGYgX3NldFZpc2li
bGU6ZmFsc2VdOworfQorCistICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50Cit7Cisg
ICAgX2FjdGl2ZUNvbnRyb2wgPSBbc2VsZiBfY29udHJvbEZvckV2ZW50OmV2ZW50XTsKKyAgICBp
ZiAoW19hY3RpdmVDb250cm9sIGlzRXF1YWxUb1N0cmluZzpQREZIVURTZXBlcmF0b3JDb250cm9s
XSkKKyAgICAgICAgX2FjdGl2ZUNvbnRyb2wgPSBuaWw7CisgICAgaWYgKF9hY3RpdmVDb250cm9s
KSB7CisgICAgICAgIC8vIFVwZGF0ZSByZW5kZXJpbmcgdG8gaGlnaGxpZ2h0IGl0Li4KKyAgICAg
ICAgX2FjdGl2ZUxheWVyID0gW3NlbGYgX2xheWVyRm9yRXZlbnQ6ZXZlbnRdOworICAgICAgICAK
KyAgICAgICAgLy8gVXBkYXRlIGxheWVyIGltYWdlOyBkbyBub3QgYW5pbWF0ZQorICAgICAgICBb
Q0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVB
Y3Rpb25zOllFU107CisgICAgICAgIAorICAgICAgICBbX2FjdGl2ZUxheWVyIHNldE9wYWNpdHk6
IGtDb250cm9sTGF5ZXJEb3duQWxwaGFdOworICAgICAgICAKKyAgICAgICAgW0NBVHJhbnNhY3Rp
b24gY29tbWl0XTsKKyAgICB9Cit9CisKKy0gKHZvaWQpbW91c2VVcDooTlNFdmVudCAqKWV2ZW50
Cit7CisgICAgaWYgKCFfYWN0aXZlQ29udHJvbCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IE5TU3RyaW5nKiBtb3VzZVVwQ29udHJvbCA9IFtzZWxmIF9jb250cm9sRm9yRXZlbnQ6ZXZlbnRd
OworICAgIGlmIChbX2FjdGl2ZUNvbnRyb2wgaXNFcXVhbFRvU3RyaW5nOm1vdXNlVXBDb250cm9s
XSkKKyAgICAgICAgW3NlbGYgX3BlcmZvcm1BY3Rpb25Gb3JDb250cm9sOl9hY3RpdmVDb250cm9s
LmdldCgpXTsKKyAgICAKKyAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJhbnNh
Y3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKKyAgICBbX2FjdGl2ZUxheWVyIHNldE9wYWNp
dHk6a0NvbnRyb2xMYXllck5vcm1hbEFscGhhXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRd
OworCisgICAgX2FjdGl2ZUxheWVyID0gbmlsOworICAgIF9hY3RpdmVDb250cm9sID0gbmlsOwor
fQorCistIChPcHRpb25hbDxOU1VJbnRlZ2VyPilfY29udHJvbEluZGV4Rm9yRXZlbnQ6KE5TRXZl
bnQgKilldmVudAoreworICAgIENHUG9pbnQgaW5pdGlhbFBvaW50ID0gTlNQb2ludFRvQ0dQb2lu
dChldmVudC5sb2NhdGlvbkluV2luZG93KTsKKyAgICBpbml0aWFsUG9pbnQueCAtPSBbX2xheWVy
IGZyYW1lXS5vcmlnaW4ueDsKKyAgICBpbml0aWFsUG9pbnQueSAtPSBbX2xheWVyIGZyYW1lXS5v
cmlnaW4ueTsKKyAgICBmb3IgKE5TVUludGVnZXIgaW5kZXggPSAwOyBpbmRleCA8IFtfbGF5ZXIg
c3VibGF5ZXJzXS5jb3VudDsgaW5kZXgrKykgeworICAgICAgICBDQUxheWVyICpzdWJMYXllciA9
IFtfbGF5ZXIgc3VibGF5ZXJzXVtpbmRleF07CisgICAgICAgIE5TUmVjdCB3aW5kb3dTcGFjZVJl
Y3QgPSBbc2VsZiBjb252ZXJ0UmVjdDpzdWJMYXllci5mcmFtZSB0b1ZpZXc6bmlsXTsKKyAgICAg
ICAgaWYgKENHUmVjdENvbnRhaW5zUG9pbnQod2luZG93U3BhY2VSZWN0LCBpbml0aWFsUG9pbnQp
KQorICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgIH0KKyAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworfQorCistIChOU1N0cmluZyAqKV9jb250cm9sRm9yRXZlbnQ6KE5TRXZlbnQgKilldmVu
dAoreworICAgIGlmIChhdXRvIGluZGV4ID0gW3NlbGYgX2NvbnRyb2xJbmRleEZvckV2ZW50OmV2
ZW50XSkKKyAgICAgICAgcmV0dXJuIGNvbnRyb2xBcnJheSgpWyppbmRleF07CisgICAgcmV0dXJu
IG5pbDsKK30KKworLSAoQ0FMYXllciAqKV9sYXllckZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQK
K3sKKyAgICBpZiAoYXV0byBpbmRleCA9IFtzZWxmIF9jb250cm9sSW5kZXhGb3JFdmVudDpldmVu
dF0pCisgICAgICAgIHJldHVybiBbX2xheWVyIHN1YmxheWVyc11bKmluZGV4XTsKKyAgICByZXR1
cm4gbmlsOworfQorCistICh2b2lkKV9wZXJmb3JtQWN0aW9uRm9yQ29udHJvbDooTlNTdHJpbmcg
Kiljb250cm9sCit7CisgICAgaWYgKCFfdmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1
dG8qIHBhZ2UgPSBfcGFnZS5nZXQoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAoW2NvbnRyb2wgaXNFcXVhbFRvU3RyaW5nOlBERkhVRFpvb21JbkNvbnRyb2xdKQor
ICAgICAgICBwYWdlLT5wZGZab29tSW4oX3BsdWdpbklkZW50aWZpZXIpOworICAgIGVsc2UgaWYg
KFtjb250cm9sIGlzRXF1YWxUb1N0cmluZzpQREZIVURab29tT3V0Q29udHJvbF0pCisgICAgICAg
IHBhZ2UtPnBkZlpvb21PdXQoX3BsdWdpbklkZW50aWZpZXIpOworICAgIGVsc2UgaWYgKFtjb250
cm9sIGlzRXF1YWxUb1N0cmluZzpQREZIVURTYXZlUERGQ29udHJvbF0pCisgICAgICAgIHBhZ2Ut
PnBkZlNhdmVUb1BERihfcGx1Z2luSWRlbnRpZmllcik7CisgICAgZWxzZSBpZiAoW2NvbnRyb2wg
aXNFcXVhbFRvU3RyaW5nOlBERkhVRExhdW5jaFByZXZpZXdDb250cm9sXSkKKyAgICAgICAgcGFn
ZS0+cGRmT3BlbldpdGhQcmV2aWV3KF9wbHVnaW5JZGVudGlmaWVyKTsKK30KKworLSAodm9pZClf
bG9hZEljb25JbWFnZXMKK3sKKyAgICBmb3IgKE5TU3RyaW5nICpjb250cm9sTmFtZSBpbiBjb250
cm9sQXJyYXkoKSkKKyAgICAgICAgW3NlbGYgX2dldEltYWdlRm9yQ29udHJvbE5hbWU6IGNvbnRy
b2xOYW1lXTsKK30KKworLSAodm9pZClfc2V0dXBMYXllcjooQ0FMYXllciAqKXBhcmVudExheWVy
Cit7CisgICAgX2xheWVyID0gYWRvcHROUyhbW0NBTGF5ZXIgYWxsb2NdIGluaXRdKTsKKyAgICBb
X2xheWVyIHNldENvcm5lclJhZGl1czprTGF5ZXJDb3JuZXJSYWRpdXNdOworICAgIAorICAgIGF1
dG8gY29sb3IgPSBhZG9wdE5TKFBERkNHQ29sb3JDcmVhdGVHZW5lcmljUkdCKGtMYXllckdyYXlD
b21wb25lbnQsIGtMYXllckdyYXlDb21wb25lbnQsIGtMYXllckdyYXlDb21wb25lbnQsIDEuMCkp
OworICAgIFtfbGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOltjb2xvciBDR0NvbG9yXV07CisgICAg
W3NlbGYgX3NldExheWVyT3BhY2l0eTprTGF5ZXJBbHBoYV07CisgICAgCisgICAgW3NlbGYgX2xv
YWRJY29uSW1hZ2VzXTsKKyAgICBDR0Zsb2F0IG1pbkljb25JbWFnZUhlaWdodCA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8Q0dGbG9hdD46Om1heCgpOworICAgIGZvciAoTlNJbWFnZSogaW1hZ2UgaW4g
W19jYWNoZWRJY29ucyBhbGxWYWx1ZXNdKQorICAgICAgICBtaW5JY29uSW1hZ2VIZWlnaHQgPSBz
dGQ6Om1pbihtaW5JY29uSW1hZ2VIZWlnaHQsIChpbWFnZS5zaXplLmhlaWdodCAvIF9kZXZpY2VT
Y2FsZUZhY3RvcikpOworICAgIAorICAgIENHRmxvYXQgZHggPSBrTGF5ZXJDb250cm9sbGVySG9y
aXpvbnRhbE1hcmdpbjsKKyAgICBmb3IgKE5TU3RyaW5nICpjb250cm9sTmFtZSBpbiBjb250cm9s
QXJyYXkoKSkgeworICAgICAgICBhdXRvIGNvbnRyb2xMYXllciA9IGFkb3B0TlMoW1tDQUxheWVy
IGFsbG9jXSBpbml0XSk7CisgICAgICAgIENHRmxvYXQgZHkgPSAwLjA7CisgICAgICAgIENHRmxv
YXQgY29udHJvbGxlcldpZHRoID0gMC4wOworICAgICAgICBDR0Zsb2F0IGNvbnRyb2xsZXJIZWln
aHQgPSAwLjA7CisKKyAgICAgICAgaWYgKFtjb250cm9sTmFtZSBpc0VxdWFsVG9TdHJpbmc6IFBE
RkhVRFNlcGVyYXRvckNvbnRyb2xdKSB7CisgICAgICAgICAgICBkeSA9IGtMYXllclNlcGVyYXRv
clZlcnRpY2FsTWFyZ2luOworICAgICAgICAgICAgY29udHJvbGxlcldpZHRoID0ga0xheWVyU2Vw
ZXJhdG9yQ29udHJvbGxlclNpemU7CisgICAgICAgICAgICBjb250cm9sbGVySGVpZ2h0ID0gbWlu
SWNvbkltYWdlSGVpZ2h0ICsgKDIuMCAqIGtMYXllckltYWdlVmVydGljYWxNYXJnaW4pIC0gKDIu
MCAqIGtMYXllclNlcGVyYXRvclZlcnRpY2FsTWFyZ2luKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgW2NvbnRyb2xMYXllciBzZXRCYWNrZ3JvdW5kQ29sb3I6IFtbTlNDb2xvciBsaWdodEdy
YXlDb2xvcl0gQ0dDb2xvcl1dOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgTlNJbWFn
ZSogY29udHJvbEltYWdlID0gW3NlbGYgX2dldEltYWdlRm9yQ29udHJvbE5hbWU6Y29udHJvbE5h
bWVdOworICAgICAgICAgICAgW2NvbnRyb2xMYXllciBzZXRDb250ZW50czogY29udHJvbEltYWdl
XTsKKyAgICAgICAgICAgIFtjb250cm9sTGF5ZXIgc2V0T3BhY2l0eToga0NvbnRyb2xMYXllck5v
cm1hbEFscGhhXTsKKworICAgICAgICAgICAgZHkgPSBrTGF5ZXJJbWFnZVZlcnRpY2FsTWFyZ2lu
OworICAgICAgICAgICAgY29udHJvbGxlcldpZHRoID0gW2NvbnRyb2xJbWFnZSBzaXplXS53aWR0
aCAvIF9kZXZpY2VTY2FsZUZhY3RvcjsKKyAgICAgICAgICAgIGNvbnRyb2xsZXJIZWlnaHQgPSBb
Y29udHJvbEltYWdlIHNpemVdLmhlaWdodCAvIF9kZXZpY2VTY2FsZUZhY3RvcjsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZHkgLT0gKGNvbnRyb2xsZXJIZWlnaHQgLSBtaW5JY29uSW1hZ2VI
ZWlnaHQpIC8gMi4wOworICAgICAgICAgICAgCisgICAgICAgICAgICBbY29udHJvbExheWVyIHNl
dEZpbHRlcnM6QFtbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyQ29sb3JJbnZlcnRd
XV07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFtjb250cm9sTGF5ZXIgc2V0RnJhbWU6
Q0dSZWN0TWFrZShkeCwgZHksIGNvbnRyb2xsZXJXaWR0aCwgY29udHJvbGxlckhlaWdodCldOwor
ICAgICAgICBbX2xheWVyIGFkZFN1YmxheWVyOmNvbnRyb2xMYXllci5nZXQoKV07CisgICAgICAg
IAorICAgICAgICBkeCArPSBjb250cm9sbGVyV2lkdGggKyBrTGF5ZXJDb250cm9sbGVySG9yaXpv
bnRhbE1hcmdpbjsKKyAgICB9CisgICAgCisgICAgW19sYXllciBzZXRGcmFtZTpDR1JlY3RNYWtl
KDAsIGtMYXllclZlcnRpY2FsT2Zmc2V0LCBkeCwgbWluSWNvbkltYWdlSGVpZ2h0ICsgMi4wICog
a0xheWVySW1hZ2VWZXJ0aWNhbE1hcmdpbildOworICAgIFtwYXJlbnRMYXllciBhZGRTdWJsYXll
cjogX2xheWVyLmdldCgpXTsKK30KKworLSAodm9pZClfcmVkcmF3TGF5ZXIKK3sKKyAgICBbX2Nh
Y2hlZEljb25zIHJlbW92ZUFsbE9iamVjdHNdOworICAgIENBTGF5ZXIgKnBhcmVudExheWVyID0g
W19sYXllciBzdXBlcmxheWVyXTsKKyAgICBbX2xheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsK
KyAgICBbc2VsZiBfc2V0dXBMYXllcjpwYXJlbnRMYXllcl07CisgICAgW3NlbGYgc2V0RnJhbWVT
aXplOl9mcmFtZVNpemVdOworfQorCistIChOU0ltYWdlKilfZ2V0SW1hZ2VGb3JDb250cm9sTmFt
ZTooTlNTdHJpbmcgKiljb250cm9sCit7CisgICAgTlNJbWFnZSogaWNvbkltYWdlID0gX2NhY2hl
ZEljb25zLmdldCgpW2NvbnRyb2xdOworICAgIGlmIChpY29uSW1hZ2UpCisgICAgICAgIHJldHVy
biBpY29uSW1hZ2U7CisKKyAgICBpY29uSW1hZ2UgPSBbTlNJbWFnZSBfaW1hZ2VXaXRoU3lzdGVt
U3ltYm9sTmFtZTogY29udHJvbF07CisgICAgaWYgKCFpY29uSW1hZ2UpCisgICAgICAgIHJldHVy
biBuaWw7CisKKyAgICBpY29uSW1hZ2UgPSBbaWNvbkltYWdlIF9pbWFnZVdpdGhDb25maWd1cmF0
aW9uOkB7CisgICAgICAgIE5TSW1hZ2VBbHRlcm5hdGVDcml0ZXJpb25Gb250IDogW05TRm9udCBw
cmVmZXJyZWRGb250Rm9yVGV4dFN0eWxlOk5TRm9udFRleHRTdHlsZVRpdGxlMiBvcHRpb25zOkB7
IH1dLAorICAgICAgICBOU0ltYWdlQWx0ZXJuYXRlQ3JpdGVyaW9uU3ltYm9sU2NhbGUgOiBAKE5T
SW1hZ2VTeW1ib2xTY2FsZUxhcmdlKQorICAgIH1dOworICAgICAgICAKKyAgICBOU1JlY3QgaWNv
bkltYWdlUmVjdCA9IE5TTWFrZVJlY3QoMCwgMCwgW2ljb25JbWFnZSBzaXplXS53aWR0aCAqIGtM
YXllckltYWdlU2NhbGUgKiBfZGV2aWNlU2NhbGVGYWN0b3IsIFtpY29uSW1hZ2Ugc2l6ZV0uaGVp
Z2h0ICoga0xheWVySW1hZ2VTY2FsZSAqIF9kZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgTlNJbWFn
ZVJlcCogaWNvbkltYWdlUmVwID0gW2ljb25JbWFnZSBiZXN0UmVwcmVzZW50YXRpb25Gb3JSZWN0
Omljb25JbWFnZVJlY3QgY29udGV4dDpuaWwgaGludHM6bmlsXTsKKyAgICBpY29uSW1hZ2UgPSBb
TlNJbWFnZSBpbWFnZVdpdGhJbWFnZVJlcDogaWNvbkltYWdlUmVwXTsKKyAgICAKKyAgICBfY2Fj
aGVkSWNvbnMuZ2V0KClbY29udHJvbF0gPSBpY29uSW1hZ2U7CisgICAgcmV0dXJuIGljb25JbWFn
ZTsKK30KKworLSAodm9pZClfc2V0TGF5ZXJPcGFjaXR5OihDR0Zsb2F0KWFscGhhCit7CisgICAg
W19sYXllciBzZXRPcGFjaXR5OmFscGhhXTsKKyAgICBmb3IgKENBTGF5ZXIgKnN1YkxheWVyIGlu
IFtfbGF5ZXIgc3VibGF5ZXJzXSkKKyAgICAgICAgW3N1YkxheWVyIHNldE9wYWNpdHk6YWxwaGFd
OworfQorCitAZW5kCisKKyNlbmRpZiAvLyBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQpJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCShy
ZXZpc2lvbiAyNjYwODYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVBy
b3h5SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg4LDE2ICsxMDg4LDYgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OmRpZFBlcmZvcm1EaWN0aW9uYXJ5TAogICAgIHBhZ2VDbGllbnQoKS5kaWRQZXJm
b3JtRGljdGlvbmFyeUxvb2t1cChkaWN0aW9uYXJ5UG9wdXBJbmZvKTsKIH0KIAotdm9pZCBXZWJQ
YWdlUHJveHk6OnNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGlj
YXRpb24oY29uc3QgU3RyaW5nJiwgRnJhbWVJbmZvRGF0YSYmLCBjb25zdCBJUEM6OkRhdGFSZWZl
cmVuY2UmLCBjb25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgV2ViUGFnZVByb3h5OjpvcGVuUERGRnJvbVRlbXBvcmFyeUZvbGRlcldpdGhOYXRpdmVBcHBs
aWNhdGlvbihGcmFtZUluZm9EYXRhJiYsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQogdm9pZCBXZWJQYWdlUHJveHk6OnNldFJlbW90ZUxheWVyVHJlZVJvb3RO
b2RlKFJlbW90ZUxheWVyVHJlZU5vZGUqIHJvb3ROb2RlKQogewogICAgIHBhZ2VDbGllbnQoKS5z
ZXRSZW1vdGVMYXllclRyZWVSb290Tm9kZShyb290Tm9kZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMuaAkocmV2aXNpb24gMjY2MDg2
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE5MCw2ICsxOTAsMTMgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcmVn
aXN0ZXJJbnNlcnRpb25VbmRvR3JvdXBpbmcoKSBvdmVycmlkZTsKIAorI2lmIEVOQUJMRShVSV9Q
Uk9DRVNTX1BERl9IVUQpCisgICAgdm9pZCBjcmVhdGVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmll
ciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgdXBkYXRlUERG
SFVETG9jYXRpb24oUERGUGx1Z2luSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
IG92ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIpIG92
ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlQWxsUERGSFVEcygpIG92ZXJyaWRlOworI2VuZGlmCisK
ICAgICAvLyBBdXhpbGlhcnkgQ2xpZW50IENyZWF0aW9uCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5f
QVBJKQogICAgIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGllbnQmIGZ1bGxTY3JlZW5NYW5h
Z2VyUHJveHlDbGllbnQoKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0JKHJldmlzaW9uIDI2NjA4NikKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzQ5LDYgKzM0OSwzMCBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpyZWdpc3Rlcklu
c2VydGlvblVuCiAgICAgcmVnaXN0ZXJJbnNlcnRpb25VbmRvR3JvdXBpbmdXaXRoVW5kb01hbmFn
ZXIoW21fdmlldyB1bmRvTWFuYWdlcl0pOwogfQogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERG
X0hVRCkKKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlUERGSFVEKFBERlBsdWdpbklkZW50
aWZpZXIgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBt
X2ltcGwtPmNyZWF0ZVBERkhVRChpZGVudGlmaWVyLCByZWN0KTsKK30KKwordm9pZCBQYWdlQ2xp
ZW50SW1wbDo6dXBkYXRlUERGSFVETG9jYXRpb24oUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlm
aWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIG1faW1wbC0+dXBkYXRl
UERGSFVETG9jYXRpb24oaWRlbnRpZmllciwgcmVjdCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudElt
cGw6OnJlbW92ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAg
bV9pbXBsLT5yZW1vdmVQREZIVUQoaWRlbnRpZmllcik7Cit9CisKK3ZvaWQgUGFnZUNsaWVudElt
cGw6OnJlbW92ZUFsbFBERkhVRHMoKQoreworICAgIG1faW1wbC0+cmVtb3ZlQWxsUERGSFVEcygp
OworfQorCisjZW5kaWYgLy8gRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKwogdm9pZCBQYWdl
Q2xpZW50SW1wbDo6Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKQogewogICAgIG1faW1wbC0+Y2xlYXJB
bGxFZGl0Q29tbWFuZHMoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQ
YWdlUHJveHlNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFj
L1dlYlBhZ2VQcm94eU1hYy5tbQkocmV2aXNpb24gMjY2MDg2KQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDc1LDgg
KzQ3NSw2IEBAIHN0YXRpYyBOU1N0cmluZyAqcGF0aFRvUERGT25EaXNrKGNvbnN0IFMKIAogdm9p
ZCBXZWJQYWdlUHJveHk6OnNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZl
QXBwbGljYXRpb24oY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgRnJhbWVJbmZvRGF0
YSYmIGZyYW1lSW5mbywgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhLCBjb25zdCBTdHJp
bmcmIHBkZlVVSUQpCiB7Ci0gICAgTUVTU0FHRV9DSEVDSyhUZW1wb3JhcnlQREZGaWxlTWFwOjpp
c1ZhbGlkS2V5KHBkZlVVSUQpKTsKLQogICAgIGlmIChkYXRhLmlzRW1wdHkoKSkgewogICAgICAg
ICBXVEZMb2dBbHdheXMoIkNhbm5vdCBzYXZlIGVtcHR5IFBERiBmaWxlIHRvIHRoZSB0ZW1wb3Jh
cnkgZGlyZWN0b3J5LiIpOwogICAgICAgICByZXR1cm47CkBAIC01MDQsNyArNTAyLDggQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OnNhdmVQREZUb1RlbXBvcmFyeUZvbAogICAgIGF1dG8gb3JpZ2luYXRp
bmdVUkxTdHJpbmcgPSBmcmFtZUluZm8ucmVxdWVzdC51cmwoKS5zdHJpbmcoKTsKICAgICBGaWxl
U3lzdGVtOjpzZXRNZXRhZGF0YVVSTChuc1BhdGguZ2V0KCksIG9yaWdpbmF0aW5nVVJMU3RyaW5n
KTsKIAotICAgIG1fdGVtcG9yYXJ5UERGRmlsZXMuYWRkKHBkZlVVSUQsIG5zUGF0aC5nZXQoKSk7
CisgICAgaWYgKFRlbXBvcmFyeVBERkZpbGVNYXA6OmlzVmFsaWRLZXkocGRmVVVJRCkpCisgICAg
ICAgIG1fdGVtcG9yYXJ5UERGRmlsZXMuYWRkKHBkZlVVSUQsIG5zUGF0aC5nZXQoKSk7CiAKICAg
ICBhdXRvIHBkZkZpbGVVUkwgPSBVUkw6OmZpbGVVUkxXaXRoRmlsZVN5c3RlbVBhdGgoU3RyaW5n
KG5zUGF0aC5nZXQoKSkpOwogICAgIG1fdWlDbGllbnQtPmNvbmZpcm1QREZPcGVuaW5nKCp0aGlz
LCBwZGZGaWxlVVJMLCBXVEZNb3ZlKGZyYW1lSW5mbyksIFtwZGZGaWxlVVJMXSAoYm9vbCBhbGxv
d2VkKSB7CkBAIC01MTQsNiArNTEzLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNhdmVQREZUb1Rl
bXBvcmFyeUZvbAogICAgIH0pOwogfQogCisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pICYmICFF
TkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQogdm9pZCBXZWJQYWdlUHJveHk6Om9wZW5QREZGcm9t
VGVtcG9yYXJ5Rm9sZGVyV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKEZyYW1lSW5mb0RhdGEmJiBmcmFt
ZUluZm8sIGNvbnN0IFN0cmluZyYgcGRmVVVJRCkKIHsKICAgICBNRVNTQUdFX0NIRUNLKFRlbXBv
cmFyeVBERkZpbGVNYXA6OmlzVmFsaWRLZXkocGRmVVVJRCkpOwpAQCAtNTMwLDYgKzUzMCw3IEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpvcGVuUERGRnJvbVRlbXBvcmFyeUYKICAgICAgICAgW1tOU1dv
cmtzcGFjZSBzaGFyZWRXb3Jrc3BhY2VdIG9wZW5VUkw6cGRmRmlsZVVSTF07CiAgICAgfSk7CiB9
CisjZW5kaWYKIAogI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQogdm9pZCBXZWJQYWdlUHJveHk6
OnNob3dQREZDb250ZXh0TWVudShjb25zdCBXZWJLaXQ6OlBERkNvbnRleHRNZW51JiBjb250ZXh0
TWVudSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxpbnQzMl90PiYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTY3Myw2ICs2NzQsNDkgQEAgUGxhdGZvcm1WaWV3KiBXZWJQYWdl
UHJveHk6OnBsYXRmb3JtVmlldwogICAgIHJldHVybiBbcGFnZUNsaWVudCgpLnBsYXRmb3JtV2lu
ZG93KCkgY29udGVudFZpZXddOwogfQogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkK
Kwordm9pZCBXZWJQYWdlUHJveHk6OmNyZWF0ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyIGlk
ZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCit7CisgICAgcGFnZUNsaWVu
dCgpLmNyZWF0ZVBERkhVRChpZGVudGlmaWVyLCByZWN0KTsKK30KKwordm9pZCBXZWJQYWdlUHJv
eHk6OnJlbW92ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAg
cGFnZUNsaWVudCgpLnJlbW92ZVBERkhVRChpZGVudGlmaWVyKTsKK30KKwordm9pZCBXZWJQYWdl
UHJveHk6OnVwZGF0ZVBERkhVRExvY2F0aW9uKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmll
ciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBwYWdlQ2xpZW50KCkudXBk
YXRlUERGSFVETG9jYXRpb24oaWRlbnRpZmllciwgcmVjdCk7Cit9CisKK3ZvaWQgV2ViUGFnZVBy
b3h5OjpwZGZab29tSW4oUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIHNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6Olpvb21QREZJbihpZGVudGlmaWVyKSk7Cit9CisKK3ZvaWQg
V2ViUGFnZVByb3h5OjpwZGZab29tT3V0KFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikK
K3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpab29tUERGT3V0KGlkZW50aWZpZXIpKTsK
K30KKwordm9pZCBXZWJQYWdlUHJveHk6OnBkZlNhdmVUb1BERihQREZQbHVnaW5JZGVudGlmaWVy
IGlkZW50aWZpZXIpCit7CisgICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJQYWdl
OjpTYXZlUERGKGlkZW50aWZpZXIpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpXSAoU3RyaW5nJiYgc3VnZ2VzdGVkRmlsZW5hbWUsIFVSTCYmIG9yaWdpbmF0aW5nVVJMLCBj
b25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGFSZWZlcmVuY2UpIHsKKyAgICAgICAgc2F2ZVBE
RlRvRmlsZUluRG93bmxvYWRzRm9sZGVyKFdURk1vdmUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBXVEZN
b3ZlKG9yaWdpbmF0aW5nVVJMKSwgZGF0YVJlZmVyZW5jZSk7CisgICAgfSk7Cit9CisKK3ZvaWQg
V2ViUGFnZVByb3h5OjpwZGZPcGVuV2l0aFByZXZpZXcoUERGUGx1Z2luSWRlbnRpZmllciBpZGVu
dGlmaWVyKQoreworICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViUGFnZTo6T3Bl
blBERldpdGhQcmV2aWV3KGlkZW50aWZpZXIpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpXSAoU3RyaW5nJiYgc3VnZ2VzdGVkRmlsZW5hbWUsIEZyYW1lSW5mb0RhdGEmJiBm
cmFtZUluZm8sIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YSwgY29uc3QgU3RyaW5nJiBw
ZGZVVUlEKSB7CisgICAgICAgIHNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0
aXZlQXBwbGljYXRpb24oV1RGTW92ZShzdWdnZXN0ZWRGaWxlbmFtZSksIFdURk1vdmUoZnJhbWVJ
bmZvKSwgZGF0YSwgcGRmVVVJRCk7CisgICAgfSk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoVUlf
UFJPQ0VTU19QREZfSFVEKQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMjY2MDg2KQorKysgU291cmNlL1dlYktpdC9XZWJLaXQu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTc5MCw2ICsxNzkw
LDcgQEAKIAkJRDNCOTQ4NDkxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlNlYXJjaFBvcHVwTWVudS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNCOTQ4NDUx
MUZGNEI2NTAwMDMyQjM5IC8qIFdlYlNlYXJjaFBvcHVwTWVudS5oICovOyB9OwogCQlERjQ2MkUw
RjIzRjIyRjU1MDBFRkYzNUYgLyogV0tIVFRQQ29va2llU3RvcmVQcml2YXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERjQ2MkUwRTIzRjIyRjUzMDBF
RkYzNUYgLyogV0tIVFRQQ29va2llU3RvcmVQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREY0NjJFMTIyM0YzMzhCRTAwRUZGMzVGIC8q
IFdLQ29udGVudFdvcmxkUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gREY0NjJFMTEyM0YzMzhBRDAwRUZGMzVGIC8qIFdLQ29udGVudFdvcmxk
UHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCURGODRDRUU0MjQ5QUEyNEQwMDkwOTZGNiAvKiBXS1BERkhVRFZpZXcubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERjg0Q0VFMjI0OUFBMjFGMDA5
MDk2RjYgLyogV0tQREZIVURWaWV3Lm1tICovOyB9OwogCQlFMTA1RkU1NDE4RDdCOURFMDA4RjU3
QTggLyogRWRpdGluZ1JhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMTA1RkU1MzE4RDdCOURFMDA4RjU3QTggLyogRWRpdGluZ1JhbmdlLmggKi87
IH07CiAJCUUxMUQzNUFFMTZCNjNEMUIwMDZEMjNENyAvKiBjb20uYXBwbGUuV2ViUHJvY2Vzcy5z
YiBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE5NjdF
MzcxNTBBQjVFMjAwQzczMTY5IC8qIGNvbS5hcHBsZS5XZWJQcm9jZXNzLnNiICovOyB9OwogCQlF
MTRBOTU0QTE2RTAxNkE0MDA2OERFODIgLyogTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdp
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNEE5
NTQ4MTZFMDE2QTQwMDY4REU4MiAvKiBOZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5o
ICovOyB9OwpAQCAtNTI3NSwxMCArNTI3NiwxMyBAQAogCQlEM0I5NDg0MzExRkY0QjY1MDAwMzJC
MzkgLyogV2ViUG9wdXBNZW51LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YlBvcHVwTWVudS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEM0I5NDg0NDExRkY0
QjY1MDAwMzJCMzkgLyogV2ViU2VhcmNoUG9wdXBNZW51LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlNlYXJjaFBvcHVwTWVudS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUQzQjk0ODQ1MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJTZWFyY2hQb3B1
cE1lbnUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU2VhcmNoUG9wdXBN
ZW51Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURGMkIxM0IxMjQ5RDhGNTQwMDVC
Q0M1MiAvKiBQREZQbHVnaW5JZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IFBERlBsdWdpbklkZW50aWZpZXIuaDsgcGF0aCA9IFBERi9QREZQbHVnaW5JZGVudGlm
aWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURGNDYyRTBFMjNGMjJGNTMwMEVG
RjM1RiAvKiBXS0hUVFBDb29raWVTdG9yZVByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0tIVFRQQ29va2llU3RvcmVQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCURGNDYyRTExMjNGMzM4QUQwMEVGRjM1RiAvKiBXS0NvbnRlbnRXb3JsZFBy
aXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tDb250ZW50V29ybGRQ
cml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURGNThDNjMxMTM3MUFDNTgw
MEY5QTM3QyAvKiBOYXRpdmVXZWJXaGVlbEV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE5hdGl2ZVdlYldoZWVsRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJREY1OEM2MzUxMzcxQUNBMDAwRjlBMzdDIC8qIE5hdGl2ZVdlYldoZWVsRXZlbnRNYWMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBOYXRpdmVXZWJXaGVl
bEV2ZW50TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlERjg0Q0VFMjI0OUFB
MjFGMDA5MDk2RjYgLyogV0tQREZIVURWaWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBuYW1lID0gV0tQREZIVURWaWV3Lm1tOyBwYXRoID0gUERGL1dLUERGSFVEVmlldy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREY4NENFRTMyNDlBQTIxRjAwOTA5NkY2
IC8qIFdLUERGSFVEVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS1BE
RkhVRFZpZXcuaDsgcGF0aCA9IFBERi9XS1BERkhVRFZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTEwNUZFNTMxOEQ3QjlERTAwOEY1N0E4IC8qIEVkaXRpbmdSYW5nZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFZGl0aW5nUmFuZ2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTExNUM3MTUxOTBGOEEyNTAwRUNDNTE2IC8qIGNvbS5hcHBs
ZS5XZWJLaXQuU3RvcmFnZS5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBjb20uYXBwbGUuV2Vi
S2l0LlN0b3JhZ2Uuc2I7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL2NvbS5hcHBsZS5X
ZWJLaXQuU3RvcmFnZS5zYjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJ
RTEzM0ZEODkxNDIzREQ3RjAwRkM3QkZCIC8qIFdlYktpdC5pY25zICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gaW1hZ2UuaWNuczsgbmFtZSA9IFdlYktp
dC5pY25zOyBwYXRoID0gUmVzb3VyY2VzL1dlYktpdC5pY25zOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtODk2Myw2ICs4OTY3LDcgQEAKIAkJCQlDRDQ1NzBEODI0NDRDQTE3MDBBM0RD
RUIgLyogTWVkaWEgKi8sCiAJCQkJNTEwQ0M3RTcxNjEzOEU3MjAwRDAzRUQzIC8qIE5ldHdvcmsg
Ki8sCiAJCQkJMzFBMkVDNDAxNDg5OTczNzAwODEwRDcxIC8qIE5vdGlmaWNhdGlvbnMgKi8sCisJ
CQkJREY4NENFRTEyNDlBQTIwMDAwOTA5NkY2IC8qIFBERiAqLywKIAkJCQkxQUVGQ0MwNTExRDAx
RjM0MDA4MjE5RDMgLyogUGx1Z2lucyAqLywKIAkJCQkyRDE1NTFBOTFGNUE5QjQyMDAwNkUzRkUg
LyogUmVtb3RlTGF5ZXJUcmVlICovLAogCQkJCTFBQUYwODlFMTkyNjgxQUMwMEI2MzkwQyAvKiBV
c2VyQ29udGVudCAqLywKQEAgLTEwNDUxLDYgKzEwNDU2LDE1IEBACiAJCQlwYXRoID0gaW9zOwog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJREY4NENFRTEyNDlBQTIwMDAwOTA5
NkY2IC8qIFBERiAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJ
CQkJREY4NENFRTMyNDlBQTIxRjAwOTA5NkY2IC8qIFdLUERGSFVEVmlldy5oICovLAorCQkJCURG
ODRDRUUyMjQ5QUEyMUYwMDkwOTZGNiAvKiBXS1BERkhVRFZpZXcubW0gKi8sCisJCQkpOworCQkJ
bmFtZSA9IFBERjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCUUxNzA4NzZE
MTZENkNBNzIwMEY5OTIyNiAvKiBGaWxlQVBJICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKQEAgLTEwNDc5LDYgKzEwNDkzLDcgQEAKIAkJCQkyRDJBREYwMzE2MzYy
NDM1MDAxOTdFNDcgLyogUERGUGx1Z2luQW5ub3RhdGlvbi5tbSAqLywKIAkJCQkyRDJBREYwRDE2
MzY0RDgyMDAxOTdFNDcgLyogUERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlvbi5oICovLAogCQkJCTJE
MkFERjBFMTYzNjREODIwMDE5N0U0NyAvKiBQREZQbHVnaW5DaG9pY2VBbm5vdGF0aW9uLm1tICov
LAorCQkJCURGMkIxM0IxMjQ5RDhGNTQwMDVCQ0M1MiAvKiBQREZQbHVnaW5JZGVudGlmaWVyLmgg
Ki8sCiAJCQkJMkQ0MjlCRkExNzIxRTJCQTAwRUM2ODFGIC8qIFBERlBsdWdpblBhc3N3b3JkRmll
bGQuaCAqLywKIAkJCQkyRDQyOUJGQjE3MjFFMkJBMDBFQzY4MUYgLyogUERGUGx1Z2luUGFzc3dv
cmRGaWVsZC5tbSAqLywKIAkJCQkyRDJBREYwNTE2MzYyREM3MDAxOTdFNDcgLyogUERGUGx1Z2lu
VGV4dEFubm90YXRpb24uaCAqLywKQEAgLTEzMTQyLDYgKzEzMTU3LDcgQEAKIAkJCQk2MzcyODFB
MzIxQURDNzQ0MDA5RTBERTYgLyogV0tEb3dubG9hZFByb2dyZXNzLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJNUNFOTEyMEQyMjkzQzIxOTAwNUJFQzc4IC8qIFdLTWFpbi5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTQ2NTdEODhBMjI2NjRBMkYwMDVERTgyMyAvKiBXS09yaWVudGF0aW9uQWNjZXNzQWxl
cnQubW0gaW4gU291cmNlcyAqLywKKwkJCQlERjg0Q0VFNDI0OUFBMjREMDA5MDk2RjYgLyogV0tQ
REZIVURWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNBMjZEODMyMTdBRDFCODAwRjk3QTM1
IC8qIFdLU2FmZUJyb3dzaW5nV2FybmluZy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFEQjAxOTQ0
MjExQ0YwMDUwMDlGQjNFOCAvKiBXS1NoYXJlU2hlZXQubW0gaW4gU291cmNlcyAqLywKIAkJCQk3
QTc4RkYzMzIyNDE5MTlCMDA5NjQ4M0UgLyogV0tTdG9yYWdlQWNjZXNzQWxlcnQubW0gaW4gU291
cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZM
YXllckNvbnRyb2xsZXJTUEkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvUGx1Z2lucy9QREYvUERGTGF5ZXJDb250cm9sbGVyU1BJLmgJKHJldmlzaW9uIDI2NjA4NikK
KysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZMYXllckNvbnRyb2xs
ZXJTUEkuaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsMTIgQEAgdHlwZWRlZiBOU19FTlVN
KE5TSW50ZWdlciwgUERGTGF5ZXJDb250cgogCiAtICh2b2lkKXNuYXBzaG90SW5Db250ZXh0OihD
R0NvbnRleHRSZWYpY29udGV4dDsKIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCist
ICh2b2lkKXNldERpc3BsYXlzUERGSFVEQ29udHJvbGxlcjooQk9PTClkaXNwbGF5c0NvbnRyb2xs
ZXI7CistICh2b2lkKXpvb21JbjooaWQpYXRQb2ludDsKKy0gKHZvaWQpem9vbU91dDooaWQpYXRQ
b2ludDsKKyNlbmRpZgorCiAtICh2b2lkKW1hZ25pZnlXaXRoTWFnbmlmaWNhdGlvbjooQ0dGbG9h
dCltYWduaWZpY2F0aW9uIGF0UG9pbnQ6KENHUG9pbnQpcG9pbnQgaW1tZWRpYXRlbHk6KEJPT0wp
aW1tZWRpYXRlbHk7CiAKIC0gKENHUG9pbnQpc2Nyb2xsUG9zaXRpb247CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCShyZXZpc2lv
biAyNjYwODYpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1
Z2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDEwIEBACiAjaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAorI2lmIEVOQUJMRShVSV9Q
Uk9DRVNTX1BERl9IVUQpCisjaW5jbHVkZSAiUERGUGx1Z2luSWRlbnRpZmllci5oIgorI2VuZGlm
CisKIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTQ29udGV4dCogSlNDb250ZXh0UmVmOwog
dHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNPYmplY3RSZWY7CiB0eXBlZGVmIGNvbnN0
IHN0cnVjdCBPcGFxdWVKU1ZhbHVlKiBKU1ZhbHVlUmVmOwpAQCAtNTAsNiArNTQsNyBAQCB0eXBl
ZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVKU1ZhbHVlKiBKU1ZhCiBPQkpDX0NMQVNTIE5TQXJyYXk7
CiBPQkpDX0NMQVNTIE5TQXR0cmlidXRlZFN0cmluZzsKIE9CSkNfQ0xBU1MgTlNEYXRhOworT0JK
Q19DTEFTUyBOU0V2ZW50OwogT0JKQ19DTEFTUyBOU1N0cmluZzsKIE9CSkNfQ0xBU1MgUERGQW5u
b3RhdGlvbjsKIE9CSkNfQ0xBU1MgUERGTGF5ZXJDb250cm9sbGVyOwpAQCAtNzcsOCArODIsOSBA
QCBjbGFzcyBQREZQbHVnaW5Bbm5vdGF0aW9uOwogY2xhc3MgUERGUGx1Z2luUGFzc3dvcmRGaWVs
ZDsKIGNsYXNzIFBsdWdpblZpZXc7CiBjbGFzcyBXZWJGcmFtZTsKK3N0cnVjdCBGcmFtZUluZm9E
YXRhOwogCi1jbGFzcyBQREZQbHVnaW4gZmluYWwgOiBwdWJsaWMgUGx1Z2luLCBwcml2YXRlIFdl
YkNvcmU6OlNjcm9sbGFibGVBcmVhCitjbGFzcyBQREZQbHVnaW4gZmluYWwgOiBwdWJsaWMgUGx1
Z2luLCBwdWJsaWMgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEKICNpZiBIQVZFKElOQ1JFTUVOVEFM
X1BERl9BUElTKQogICAgICwgcHJpdmF0ZSBXZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxv
YWRlckNsaWVudAogI2VuZGlmCkBAIC0xMDMsOSArMTA5LDE5IEBAIHB1YmxpYzoKICAgICB2b2lk
IG5vdGlmeVNlbGVjdGlvbkNoYW5nZWQoUERGU2VsZWN0aW9uICopOwogICAgIHZvaWQgbm90aWZ5
Q3Vyc29yQ2hhbmdlZCh1aW50NjRfdCAvKiBQREZMYXllckNvbnRyb2xsZXJDdXJzb3JUeXBlICov
KTsKIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgdm9pZCB6b29tSW4oKTsK
KyAgICB2b2lkIHpvb21PdXQoKTsKKyAgICB2b2lkIHNhdmUoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChjb25zdCBTdHJpbmcmLCBjb25zdCBVUkwmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKT4m
Jik7CisgICAgdm9pZCBvcGVuV2l0aFByZXZpZXcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25z
dCBTdHJpbmcmLCBGcmFtZUluZm9EYXRhJiYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYsIGNv
bnN0IFN0cmluZyYpPiYmKTsKKyAgICBQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIoKSBj
b25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKyNlbmRpZgorCiAgICAgdm9pZCBjbGlja2Vk
TGluayhOU1VSTCAqKTsKKyNpZiAhRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKICAgICB2b2lk
IHNhdmVUb1BERigpOwogICAgIHZvaWQgb3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbigpOworI2Vu
ZGlmCiAgICAgdm9pZCB3cml0ZUl0ZW1zVG9QYXN0ZWJvYXJkKE5TU3RyaW5nICpwYXN0ZWJvYXJk
TmFtZSwgTlNBcnJheSAqaXRlbXMsIE5TQXJyYXkgKnR5cGVzKTsKICAgICB2b2lkIHNob3dEZWZp
bml0aW9uRm9yQXR0cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcgKiwgQ0dQb2ludCk7
CiAgICAgdm9pZCBwZXJmb3JtV2ViU2VhcmNoKE5TU3RyaW5nICopOwpAQCAtMTE4LDcgKzEzNCwx
MCBAQCBwdWJsaWM6CiAKICAgICBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydEZyb21QREZWaWV3
VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgY29uc3Q7CiAgICAgV2ViQ29yZTo6
SW50UG9pbnQgY29udmVydEZyb21Sb290Vmlld1RvUERGVmlldyhjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tUERGVmlld1Rv
Um9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKKyAgICBXZWJDb3JlOjpJ
bnRSZWN0IGNvbnZlcnRGcm9tUERGVmlld1RvUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpIGNvbnN0OwogICAgIFdlYkNvcmU6OkludFJlY3QgYm91bmRzT25TY3JlZW4oKSBjb25zdDsK
KyAgICBXZWJDb3JlOjpJbnRSZWN0IGZyYW1lRm9ySFVEKCkgY29uc3Q7CiAKICAgICBib29sIHNo
b3dDb250ZXh0TWVudUF0UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKIApAQCAtMTU5
LDcgKzE3OCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCB3YW50c1doZWVsRXZlbnRzKCkgZmluYWwg
eyByZXR1cm4gdHJ1ZTsgfQogICAgIHZvaWQgZ2VvbWV0cnlEaWRDaGFuZ2UoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgcGx1Z2luU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3Qs
IGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYgcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9y
bSkgZmluYWw7CiAgICAgdm9pZCBjb250ZW50c1NjYWxlRmFjdG9yQ2hhbmdlZChmbG9hdCkgZmlu
YWw7Ci0gICAgdm9pZCB2aXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wpIGZpbmFsIHsgfQorICAgIHZv
aWQgdmlzaWJpbGl0eURpZENoYW5nZShib29sKSBmaW5hbDsKICAgICB2b2lkIGZyYW1lRGlkRmlu
aXNoTG9hZGluZyh1aW50NjRfdCByZXF1ZXN0SUQpIGZpbmFsOwogICAgIHZvaWQgZnJhbWVEaWRG
YWlsKHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCB3YXNDYW5jZWxsZWQpIGZpbmFsOwogICAgIHZv
aWQgZGlkRXZhbHVhdGVKYXZhU2NyaXB0KHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgU3RyaW5n
JiByZXN1bHQpIGZpbmFsOwpAQCAtMjYzLDcgKzI4Miw2IEBAIHByaXZhdGU6CiAgICAgTlNFdmVu
dCAqbnNFdmVudEZvcldlYk1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOwogICAgIFdl
YkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tUGx1Z2luVG9QREZWaWV3KGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JikgY29uc3Q7CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZyb21Sb290
Vmlld1RvUGx1Z2luKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7Ci0gICAgV2ViQ29y
ZTo6SW50UG9pbnQgY29udmVydEZyb21QREZWaWV3VG9Sb290Vmlldyhjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYpIGNvbnN0OwogICAgIAogICAgIGJvb2wgc3VwcG9ydHNGb3JtcygpOwogICAgIGJv
b2wgaXNGdWxsRnJhbWVQbHVnaW4oKSBjb25zdDsKQEAgLTQwMyw2ICs0MjEsOSBAQCBwcml2YXRl
OgogI2VuZGlmCiAKICNlbmRpZiAvLyBIQVZFKElOQ1JFTUVOVEFMX1BERl9BUElTKQorI2lmIEVO
QUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgUERGUGx1Z2luSWRlbnRpZmllciBtX2lkZW50
aWZpZXI7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCShyZXZp
c2lvbiAyNjYwODYpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERG
UGx1Z2luLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MzMsMTIgKzQzMywxNiBAQCAtICh2b2lkKXBl
cmZvcm1TcG90bGlnaHRTZWFyY2g6KE5TU3RyaW5nCiAKIC0gKHZvaWQpb3BlbldpdGhOYXRpdmVB
cHBsaWNhdGlvbgogeworI2lmICFFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQogICAgIF9wZGZQ
bHVnaW4tPm9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oKTsKKyNlbmRpZgogfQogCiAtICh2b2lk
KXNhdmVUb1BERgogeworI2lmICFFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQogICAgIF9wZGZQ
bHVnaW4tPnNhdmVUb1BERigpOworI2VuZGlmCiB9CiAKIC0gKHZvaWQpcGRmTGF5ZXJDb250cm9s
bGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgY2xpY2tlZExpbmtX
aXRoVVJMOihOU1VSTCAqKXVybApAQCAtNjAwLDcgKzYwNCwxMyBAQCBpbmxpbmUgUERGUGx1Z2lu
OjpQREZQbHVnaW4oV2ViRnJhbWUmIGZyCiAjaWYgSEFWRShJTkNSRU1FTlRBTF9QREZfQVBJUykK
ICAgICAsIG1faW5jcmVtZW50YWxQREZMb2FkaW5nRW5hYmxlZChXZWJDb3JlOjpSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmluY3JlbWVudGFsUERGTG9hZGluZ0VuYWJs
ZWQoKSkKICNlbmRpZgorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgLCBtX2lk
ZW50aWZpZXIoUERGUGx1Z2luSWRlbnRpZmllcjo6Z2VuZXJhdGUoKSkKKyNlbmRpZgogeworI2lm
IEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHNl
dERpc3BsYXlzUERGSFVEQ29udHJvbGxlcjpOT107CisjZW5kaWYKICAgICBtX3BkZkxheWVyQ29u
dHJvbGxlci5nZXQoKS5kZWxlZ2F0ZSA9IG1fcGRmTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUuZ2V0
KCk7CiAgICAgbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkucGFyZW50TGF5ZXIgPSBtX2NvbnRl
bnRMYXllci5nZXQoKTsKIApAQCAtNjQwLDYgKzY1MCwxMCBAQCBpbmxpbmUgUERGUGx1Z2luOjpQ
REZQbHVnaW4oV2ViRnJhbWUmIGZyCiAKIFBERlBsdWdpbjo6flBERlBsdWdpbigpCiB7CisjaWYg
RU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBpZiAoYXV0byogcGFnZSA9IG1fZnJhbWUu
cGFnZSgpKQorICAgICAgICBwYWdlLT5yZW1vdmVQREZIVUQoKnRoaXMpOworI2VuZGlmCiB9CiAK
ICNpZiBIQVZFKElOQ1JFTUVOVEFMX1BERl9BUElTKQpAQCAtMTc3Miw2ICsxNzg2LDExIEBAIHZv
aWQgUERGUGx1Z2luOjpjb250ZW50c1NjYWxlRmFjdG9yQ2hhbmcKICAgICB1cGRhdGVQYWdlQW5k
RGV2aWNlU2NhbGVGYWN0b3JzKCk7CiB9CiAKK0ludFJlY3QgUERGUGx1Z2luOjpmcmFtZUZvckhV
RCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnZlcnRGcm9tUERGVmlld1RvUm9vdFZpZXcoSW50
UmVjdChJbnRQb2ludCgpLCBzaXplKCkpKTsKK30KKwogdm9pZCBQREZQbHVnaW46OmNhbGN1bGF0
ZVNpemVzKCkKIHsKICAgICBpZiAoW21fcGRmRG9jdW1lbnQgaXNMb2NrZWRdKSB7CkBAIC0xNzgy
LDYgKzE4MDEsMTAgQEAgdm9pZCBQREZQbHVnaW46OmNhbGN1bGF0ZVNpemVzKCkKIAogICAgIG1f
Zmlyc3RQYWdlSGVpZ2h0ID0gW21fcGRmRG9jdW1lbnQgcGFnZUNvdW50XSA/IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihDR0NlaWxpbmcoW1ttX3BkZkRvY3VtZW50IHBhZ2VBdEluZGV4OjBdIGJvdW5k
c0ZvckJveDprUERGRGlzcGxheUJveENyb3BCb3hdLnNpemUuaGVpZ2h0KSkgOiAwOwogICAgIHNl
dFBERkRvY3VtZW50U2l6ZShJbnRTaXplKFttX3BkZkxheWVyQ29udHJvbGxlciBjb250ZW50U2l6
ZVJlc3BlY3Rpbmdab29tXSkpOworCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAg
ICBtX2ZyYW1lLnBhZ2UoKS0+dXBkYXRlUERGSFVETG9jYXRpb24oKnRoaXMsIGZyYW1lRm9ySFVE
KCkpOworI2VuZGlmCiB9CiAKIGJvb2wgUERGUGx1Z2luOjppbml0aWFsaXplKGNvbnN0IFBhcmFt
ZXRlcnMmIHBhcmFtZXRlcnMpCkBAIC0xOTE2LDcgKzE5MzksMTMgQEAgSW50UG9pbnQgUERGUGx1
Z2luOjpjb252ZXJ0RnJvbVBERlZpZXdUbwogICAgIEludFBvaW50IHBvaW50SW5QbHVnaW5Db29y
ZGluYXRlcyhwb2ludC54KCksIHNpemUoKS5oZWlnaHQoKSAtIHBvaW50LnkoKSk7CiAgICAgcmV0
dXJuIG1fcm9vdFZpZXdUb1BsdWdpblRyYW5zZm9ybS5pbnZlcnNlKCkudmFsdWVPcihBZmZpbmVU
cmFuc2Zvcm0oKSkubWFwUG9pbnQocG9pbnRJblBsdWdpbkNvb3JkaW5hdGVzKTsKIH0KLSAgICAK
KworSW50UmVjdCBQREZQbHVnaW46OmNvbnZlcnRGcm9tUERGVmlld1RvUm9vdFZpZXcoY29uc3Qg
SW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJlY3RJblBsdWdpbkNvb3JkaW5h
dGVzKHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAg
ICByZXR1cm4gbV9yb290Vmlld1RvUGx1Z2luVHJhbnNmb3JtLmludmVyc2UoKS52YWx1ZU9yKEFm
ZmluZVRyYW5zZm9ybSgpKS5tYXBSZWN0KHJlY3RJblBsdWdpbkNvb3JkaW5hdGVzKTsKK30KKwog
SW50UG9pbnQgUERGUGx1Z2luOjpjb252ZXJ0RnJvbVJvb3RWaWV3VG9QREZWaWV3KGNvbnN0IElu
dFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBJbnRQb2ludCBwb2ludEluUGx1Z2luQ29vcmRp
bmF0ZXMgPSBtX3Jvb3RWaWV3VG9QbHVnaW5UcmFuc2Zvcm0ubWFwUG9pbnQocG9pbnQpOwpAQCAt
MTk0Nyw2ICsxOTc2LDE4IEBAIEludFJlY3QgUERGUGx1Z2luOjpib3VuZHNPblNjcmVlbigpIGNv
bnMKICAgICByZXR1cm4gZnJhbWVWaWV3LT5jb250ZW50c1RvU2NyZWVuKGVuY2xvc2luZ0ludFJl
Y3QocmVjdEluUm9vdFZpZXdDb29yZGluYXRlcykpOwogfQogCit2b2lkIFBERlBsdWdpbjo6dmlz
aWJpbGl0eURpZENoYW5nZShib29sIHZpc2libGUpCit7CisjaWYgRU5BQkxFKFVJX1BST0NFU1Nf
UERGX0hVRCkKKyAgICBpZiAodmlzaWJsZSkKKyAgICAgICAgbV9mcmFtZS5wYWdlKCktPmNyZWF0
ZVBERkhVRCgqdGhpcywgZnJhbWVGb3JIVUQoKSk7CisgICAgZWxzZQorICAgICAgICBtX2ZyYW1l
LnBhZ2UoKS0+cmVtb3ZlUERGSFVEKCp0aGlzKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHZp
c2libGUpOworI2VuZGlmCit9CisKIHZvaWQgUERGUGx1Z2luOjpnZW9tZXRyeURpZENoYW5nZShj
b25zdCBJbnRTaXplJiBwbHVnaW5TaXplLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtKQogewogICAgIGlmIChzaXplKCkgPT0g
cGx1Z2luU2l6ZSAmJiBwbHVnaW5WaWV3KCktPnBhZ2VTY2FsZUZhY3RvcigpID09IFttX3BkZkxh
eWVyQ29udHJvbGxlciBjb250ZW50U2NhbGVGYWN0b3JdKQpAQCAtMjM5Miw2ICsyNDMzLDMxIEBA
IGJvb2wgUERGUGx1Z2luOjpwbHVnaW5IYW5kbGVzQ29udGVudE9mZnMKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKK3ZvaWQgUERGUGx1Z2lu
Ojp6b29tSW4oKQoreworICAgIFttX3BkZkxheWVyQ29udHJvbGxlciB6b29tSW46bmlsXTsKK30K
Kwordm9pZCBQREZQbHVnaW46Onpvb21PdXQoKQoreworICAgIFttX3BkZkxheWVyQ29udHJvbGxl
ciB6b29tT3V0Om5pbF07Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpzYXZlKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoY29uc3QgU3RyaW5nJiwgY29uc3QgVVJMJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJl
bmNlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgTlNEYXRhICpkYXRhID0gbGl2ZURh
dGEoKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihtX3N1Z2dlc3RlZEZpbGVuYW1lLCBtX2ZyYW1l
LnVybCgpLCBJUEM6OiBEYXRhUmVmZXJlbmNlKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihk
YXRhLmJ5dGVzKSwgZGF0YS5sZW5ndGgpKTsKK30KKwordm9pZCBQREZQbHVnaW46Om9wZW5XaXRo
UHJldmlldyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYsIEZyYW1lSW5mb0Rh
dGEmJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwgY29uc3QgU3RyaW5nJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCit7CisgICAgTlNEYXRhICpkYXRhID0gbGl2ZURhdGEoKTsKKyAgICBjb21w
bGV0aW9uSGFuZGxlcihtX3N1Z2dlc3RlZEZpbGVuYW1lLCBtX2ZyYW1lLmluZm8oKSwgSVBDOjog
RGF0YVJlZmVyZW5jZSB7IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmJ5dGVzKSwg
ZGF0YS5sZW5ndGggfSwgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpKTsKK30KKworI2Vsc2Ug
Ly8gRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKICAgICAKIHZvaWQgUERGUGx1Z2luOjpzYXZl
VG9QREYoKQogewpAQCAtMjQyNCw2ICsyNDkwLDggQEAgdm9pZCBQREZQbHVnaW46Om9wZW5XaXRo
TmF0aXZlQXBwbGljYXRpbwogICAgIG1fZnJhbWUucGFnZSgpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6Ok9wZW5QREZGcm9tVGVtcG9yYXJ5Rm9sZGVyV2l0aE5hdGl2ZUFwcGxpY2F0aW9u
KG1fZnJhbWUuaW5mbygpLCBtX3RlbXBvcmFyeVBERlVVSUQpKTsKIH0KIAorI2VuZGlmIC8vIEVO
QUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKIHZvaWQgUERGUGx1Z2luOjp3cml0ZUl0ZW1zVG9Q
YXN0ZWJvYXJkKE5TU3RyaW5nICpwYXN0ZWJvYXJkTmFtZSwgTlNBcnJheSAqaXRlbXMsIE5TQXJy
YXkgKnR5cGVzKQogewogICAgIGF1dG8gcGFzdGVib2FyZFR5cGVzID0gbWFrZVZlY3RvcjxTdHJp
bmc+KHR5cGVzKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9Q
REZQbHVnaW5JZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbklkZW50aWZpZXIuaAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luSWRlbnRpZmllci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKK2VudW0gUERGUGx1Z2luSWRl
bnRpZmllclR5cGUgeyB9OwordXNpbmcgUERGUGx1Z2luSWRlbnRpZmllciA9IE9iamVjdElkZW50
aWZpZXI8UERGUGx1Z2luSWRlbnRpZmllclR5cGU+OworI2VuZGlmCisKK30KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAyNjYw
ODYpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b24uaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuaCIK
KyNpbmNsdWRlICJQREZQbHVnSW4uaCIKICNpbmNsdWRlICJQYWdlQmFubmVyLmgiCiAjaW5jbHVk
ZSAiUGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJQbHVnaW5Qcm94eS5oIgpA
QCAtNTEyMywxMiArNTEyNCwxMiBAQCB2b2lkIFdlYlBhZ2U6OmRpZEZpbmlzaFByaW50T3BlcmF0
aW9uKGNvCiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKSAmJiAhRU5BQkxF
KFVJX1BST0NFU1NfUERGX0hVRCkKIHZvaWQgV2ViUGFnZTo6c2F2ZVBERlRvRmlsZUluRG93bmxv
YWRzRm9sZGVyKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIGNvbnN0IFVSTCYgb3Jp
Z2luYXRpbmdVUkwsIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsK
ICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNhdmVQREZUb0ZpbGVJbkRvd25sb2Fk
c0ZvbGRlcihzdWdnZXN0ZWRGaWxlbmFtZSwgb3JpZ2luYXRpbmdVUkwsIElQQzo6RGF0YVJlZmVy
ZW5jZShkYXRhLCBzaXplKSkpOwogfQogCi0jaWYgUExBVEZPUk0oQ09DT0EpCiB2b2lkIFdlYlBh
Z2U6OnNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24o
Y29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5m
bywgY29uc3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplLCBjb25zdCBTdHJpbmcm
IHBkZlVVSUQpCiB7CiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTYXZlUERGVG9U
ZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKHN1Z2dlc3RlZEZpbGVu
YW1lLCBmcmFtZUluZm8sIElQQzo6RGF0YVJlZmVyZW5jZShkYXRhLCBzaXplKSwgcGRmVVVJRCkp
OwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2
aXNpb24gMjY2MDg2KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNiArMTE5LDEwIEBAIHR5cGVkZWYgc3RydWN0IF9B
dGtPYmplY3QgQXRrT2JqZWN0OwogI2luY2x1ZGUgPFdlYkNvcmUvVmlld3BvcnRDb25maWd1cmF0
aW9uLmg+CiAjZW5kaWYKIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisjaW5jbHVk
ZSAiUERGUGx1Z2luSWRlbnRpZmllci5oIgorI2VuZGlmCisKICNpZiBFTkFCTEUoQVBQTElDQVRJ
T05fTUFOSUZFU1QpCiAjaW5jbHVkZSA8V2ViQ29yZS9BcHBsaWNhdGlvbk1hbmlmZXN0Lmg+CiAj
ZW5kaWYKQEAgLTM0NSw2ICszNDksMTYgQEAgcHVibGljOgogCiAgICAgdm9pZCBjZW50ZXJTZWxl
Y3Rpb25JblZpc2libGVBcmVhKCk7CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQor
ICAgIHZvaWQgY3JlYXRlUERGSFVEKFBERlBsdWdpbiYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
KTsKKyAgICB2b2lkIHVwZGF0ZVBERkhVRExvY2F0aW9uKFBERlBsdWdpbiYsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKTsKKyAgICB2b2lkIHJlbW92ZVBERkhVRChQREZQbHVnaW4mKTsKKyAgICB2
b2lkIHpvb21QREZJbihQREZQbHVnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHpvb21QREZPdXQo
UERGUGx1Z2luSWRlbnRpZmllcik7CisgICAgdm9pZCBzYXZlUERGKFBERlBsdWdpbklkZW50aWZp
ZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJiwgY29uc3QgVVJMJiwgY29u
c3QgSVBDOjpEYXRhUmVmZXJlbmNlJik+JiYpOworICAgIHZvaWQgb3BlblBERldpdGhQcmV2aWV3
KFBERlBsdWdpbklkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5n
JiwgRnJhbWVJbmZvRGF0YSYmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBTdHJp
bmcmKT4mJik7CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgd2lsbENv
bW1pdExheWVyVHJlZShSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbiYpOwogICAgIHZvaWQgZGlk
Rmx1c2hMYXllclRyZWVBdFRpbWUoTW9ub3RvbmljVGltZSk7CkBAIC0xMDc0LDkgKzEwODgsOCBA
QCBwdWJsaWM6CiAgICAgTlNEaWN0aW9uYXJ5ICpkYXRhRGV0ZWN0aW9uQ29udGV4dCgpIGNvbnN0
IHsgcmV0dXJuIG1fZGF0YURldGVjdGlvbkNvbnRleHQuZ2V0KCk7IH0KICNlbmRpZgogCisjaWYg
RU5BQkxFKFBERktJVF9QTFVHSU4pICYmICFFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQogICAg
IHZvaWQgc2F2ZVBERlRvRmlsZUluRG93bmxvYWRzRm9sZGVyKGNvbnN0IFN0cmluZyYgc3VnZ2Vz
dGVkRmlsZW5hbWUsIGNvbnN0IFVSTCYgb3JpZ2luYXRpbmdVUkwsIGNvbnN0IHVpbnQ4X3QqIGRh
dGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lk
IHNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oY29u
c3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgRnJhbWVJbmZvRGF0YSYmLCBjb25zdCB1aW50
OF90KiBkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUsIGNvbnN0IFN0cmluZyYgcGRmVVVJRCk7CiAj
ZW5kaWYKIApAQCAtMTc5MSw2ICsxODA0LDEwIEBAIHByaXZhdGU6CiAKICAgICBXZWJDb3JlOjpD
b2xvciBtX3VuZGVybGF5Q29sb3I7CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQor
ICAgIEhhc2hNYXA8UERGUGx1Z2luSWRlbnRpZmllciwgV2Vha1B0cjxQREZQbHVnaW4+PiBtX3Bk
ZlBsdWdJbnNXaXRoSFVEOworI2VuZGlmCisKICAgICBib29sIG1faXNJblJlZG8geyBmYWxzZSB9
OwogICAgIGJvb2wgbV9pc0Nsb3NlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3RhYlRvTGlua3Mg
eyBmYWxzZSB9OwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyNjYwODYpCisrKyBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkp
CkBAIC01NzYsNiArNTc2LDEzIEBAIEdlbmVyYXRlU3ludGhldGljRWRpdGluZ0NvbW1hbmQoZW51
bTp1aW4KIAogICAgIFNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnNMb2FkaW5nKQogCisjaWYg
RU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBab29tUERGSW4oV2ViS2l0OjpQREZQbHVn
aW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCisgICAgWm9vbVBERk91dChXZWJLaXQ6OlBERlBsdWdp
bklkZW50aWZpZXIgaWRlbnRpZmllcikKKyAgICBTYXZlUERGKFdlYktpdDo6UERGUGx1Z2luSWRl
bnRpZmllciBpZGVudGlmaWVyKSAtPiAoU3RyaW5nIGZpbGVuYW1lLCBVUkwgdXJsLCBJUEM6OkRh
dGFSZWZlcmVuY2UgZGF0YSkgQXN5bmMKKyAgICBPcGVuUERGV2l0aFByZXZpZXcoV2ViS2l0OjpQ
REZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpIC0+IChTdHJpbmcgZmlsZW5hbWUsIHN0cnVj
dCBXZWJLaXQ6OkZyYW1lSW5mb0RhdGEgZnJhbWVJbmZvLCBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0
YSwgU3RyaW5nIHV1aWQpIEFzeW5jCisjZW5kaWYKKwogICAgIFVwZGF0ZUN1cnJlbnRNb2RpZmll
clN0YXRlKE9wdGlvblNldDxXZWJDb3JlOjpQbGF0Zm9ybUV2ZW50OjpNb2RpZmllcj4gbW9kaWZp
ZXJzKQogICAgIFNpbXVsYXRlRGV2aWNlT3JpZW50YXRpb25DaGFuZ2UoZG91YmxlIGFscGhhLCBk
b3VibGUgYmV0YSwgZG91YmxlIGdhbW1hKQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQkocmV2aXNpb24gMjY2MDg2KQor
KysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbXBvcnQgIkVkaXRpbmdSYW5nZS5oIgog
I2ltcG9ydCAiRWRpdG9yU3RhdGUuaCIKICNpbXBvcnQgIkZvbnRJbmZvLmgiCisjaW1wb3J0ICJG
cmFtZUluZm9EYXRhLmgiCiAjaW1wb3J0ICJJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQuaCIK
ICNpbXBvcnQgIlBERktpdEltcG9ydHMuaCIKICNpbXBvcnQgIlBERlBsdWdpbi5oIgpAQCAtMTA1
MSw3ICsxMDUyLDYyIEBAIHZvaWQgV2ViUGFnZTo6c2V0QWNjZW50Q29sb3IoV2ViQ29yZTo6Q28K
ICAgICBbTlNBcHAgX3NldEFjY2VudENvbG9yOmNvbG9yLmlzVmFsaWQoKSA/IFdlYkNvcmU6Om5z
Q29sb3IoY29sb3IpIDogbmlsXTsKIH0KIAotI2VuZGlmCisjZW5kaWYgLy8gSEFWRShBUFBfQUND
RU5UX0NPTE9SUykKKworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKK3ZvaWQgV2Vi
UGFnZTo6em9vbVBERkluKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBh
dXRvIHBkZlBsdWdpbiA9IG1fcGRmUGx1Z0luc1dpdGhIVUQuZ2V0KGlkZW50aWZpZXIpOworICAg
IGlmICghcGRmUGx1Z2luKQorICAgICAgICByZXR1cm47CisgICAgcGRmUGx1Z2luLT56b29tSW4o
KTsKK30KKwordm9pZCBXZWJQYWdlOjp6b29tUERGT3V0KFBERlBsdWdpbklkZW50aWZpZXIgaWRl
bnRpZmllcikKK3sKKyAgICBhdXRvIHBkZlBsdWdpbiA9IG1fcGRmUGx1Z0luc1dpdGhIVUQuZ2V0
KGlkZW50aWZpZXIpOworICAgIGlmICghcGRmUGx1Z2luKQorICAgICAgICByZXR1cm47CisgICAg
cGRmUGx1Z2luLT56b29tT3V0KCk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6c2F2ZVBERihQREZQbHVn
aW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3Ry
aW5nJiwgY29uc3QgVVJMJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCit7CisgICAgYXV0byBwZGZQbHVnaW4gPSBtX3BkZlBsdWdJbnNXaXRoSFVELmdl
dChpZGVudGlmaWVyKTsKKyAgICBpZiAoIXBkZlBsdWdpbikKKyAgICAgICAgcmV0dXJuIGNvbXBs
ZXRpb25IYW5kbGVyKHsgfSwgeyB9LCB7IH0pOworICAgIHBkZlBsdWdpbi0+c2F2ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6b3BlblBERldpdGhQcmV2
aWV3KFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChjb25zdCBTdHJpbmcmLCBGcmFtZUluZm9EYXRhJiYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5j
ZSYsIGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGF1dG8gcGRm
UGx1Z2luID0gbV9wZGZQbHVnSW5zV2l0aEhVRC5nZXQoaWRlbnRpZmllcik7CisgICAgaWYgKCFw
ZGZQbHVnaW4pCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0sIHsgfSwgeyB9
LCB7IH0pOworICAgIHBkZlBsdWdpbi0+b3BlbldpdGhQcmV2aWV3KFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKK30KKwordm9pZCBXZWJQYWdlOjpjcmVhdGVQREZIVUQoUERGUGx1Z2luJiBw
bHVnaW4sIGNvbnN0IEludFJlY3QmIGJvdW5kaW5nQm94KQoreworICAgIGF1dG8gYWRkUmVzdWx0
ID0gbV9wZGZQbHVnSW5zV2l0aEhVRC5hZGQocGx1Z2luLmlkZW50aWZpZXIoKSwgbWFrZVdlYWtQ
dHIocGx1Z2luKSk7CisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNyZWF0ZVBERkhVRChwbHVnaW4uaWRlbnRpZmllcigp
LCBib3VuZGluZ0JveCkpOworfQorCit2b2lkIFdlYlBhZ2U6OnVwZGF0ZVBERkhVRExvY2F0aW9u
KFBERlBsdWdpbiYgcGx1Z2luLCBjb25zdCBJbnRSZWN0JiBib3VuZGluZ0JveCkKK3sKKyAgICBp
ZiAobV9wZGZQbHVnSW5zV2l0aEhVRC5jb250YWlucyhwbHVnaW4uaWRlbnRpZmllcigpKSkKKyAg
ICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpVcGRhdGVQREZIVURMb2NhdGlvbihw
bHVnaW4uaWRlbnRpZmllcigpLCBib3VuZGluZ0JveCkpOworfQorCit2b2lkIFdlYlBhZ2U6OnJl
bW92ZVBERkhVRChQREZQbHVnaW4mIHBsdWdpbikKK3sKKyAgICBpZiAobV9wZGZQbHVnSW5zV2l0
aEhVRC5yZW1vdmUocGx1Z2luLmlkZW50aWZpZXIoKSkpCisgICAgICAgIHNlbmQoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6UmVtb3ZlUERGSFVEKHBsdWdpbi5pZGVudGlmaWVyKCkpKTsKK30KKwor
I2VuZGlmIC8vIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdAogCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdl
TG9nCShyZXZpc2lvbiAyNjYwODYpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxOSBAQAorMjAyMC0wOC0yNCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3Rl
bnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgUERGIGhlYWRzLXVwIGRpc3BsYXkgdG8g
VUkgcHJvY2VzcyBvbiBtYWNPUworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE1NzgwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81ODcxNTg0Nz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tQREZWaWV3Lm1tOgorICAgICAgICAocGRmRGF0YSk6
CisgICAgICAgIChURVNUKToKKyAgICAgICAgKGNoZWNrRnJhbWUpOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvY29jb2EvVGVzdFVJRGVsZWdhdGUuaDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L2NvY29hL1Rlc3RVSURlbGVnYXRlLm1tOgorICAgICAgICAoLVtUZXN0VUlEZWxlZ2F0ZSBfd2Vi
VmlldzpzYXZlRGF0YVRvRmlsZTpzdWdnZXN0ZWRGaWxlbmFtZTptaW1lVHlwZTpvcmlnaW5hdGlu
Z1VSTDpdKToKKwogMjAyMC0wOC0yNCAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5j
b20+CiAKICAgICAgICAgW3Jlc3VsdHNkYnB5XSBGaXggcGlwIHBhY2thZ2UKSW5kZXg6IFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tQREZWaWV3Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tQREZWaWV3Lm1tCShy
ZXZpc2lvbiAyNjYwODYpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1dLUERGVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDI2IEBACiAjaW1wb3J0
ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgogI2ltcG9ydCAiVGVzdC5oIgogI2ltcG9ydCAiVGVzdE5h
dmlnYXRpb25EZWxlZ2F0ZS5oIgorI2ltcG9ydCAiVGVzdFVJRGVsZWdhdGUuaCIKKyNpbXBvcnQg
IlRlc3RVUkxTY2hlbWVIYW5kbGVyLmgiCisjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1w
b3J0IDxXZWJLaXQvV0tXZWJWaWV3Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmln
dXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlRm9yVGVz
dGluZy5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCi0jaWYgSEFWRShQREZLSVQpICYm
IFBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCisjaW1wb3J0IDxDYXJib24vQ2FyYm9u
Lmg+CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPUykgfHwgRU5BQkxFKFVJX1BST0NFU1NfUERG
X0hVRCkKK3N0YXRpYyBOU0RhdGEgKnBkZkRhdGEoKQoreworICAgIHJldHVybiBbTlNEYXRhIGRh
dGFXaXRoQ29udGVudHNPZlVSTDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNl
OkAidGVzdCIgd2l0aEV4dGVuc2lvbjpAInBkZiIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQ
SS5yZXNvdXJjZXMiXV07Cit9CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPUykKIAogQGludGVy
ZmFjZSBQREZIb3N0Vmlld0NvbnRyb2xsZXIgOiBVSVZpZXdDb250cm9sbGVyCiArICh2b2lkKWNy
ZWF0ZUhvc3RWaWV3Oih2b2lkKF4pKGlkIGhvc3RWaWV3Q29udHJvbGxlcikpY2FsbGJhY2sgZm9y
RXh0ZW5zaW9uSWRlbnRpZmllcjooTlNTdHJpbmcgKilleHRlbnNpb25JZGVudGlmaWVyOwpAQCAt
MTAxLDcgKzExNiw3IEBAIFRFU1QoV2ViS2l0LCBXS1BERlZpZXdMb3Nlc0FwcGxpY2F0aW9uRm8K
ICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0
aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIAogICAgIC8vIExvYWQgYSBQREYsIHNvIHdlIGlu
c3RhbGwgYSBXS1BERlZpZXcuCi0gICAgW3dlYlZpZXcgbG9hZERhdGE6W05TRGF0YSBkYXRhV2l0
aENvbnRlbnRzT2ZVUkw6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInRl
c3QiIHdpdGhFeHRlbnNpb246QCJwZGYiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVz
b3VyY2VzIl1dIE1JTUVUeXBlOkAiYXBwbGljYXRpb24vcGRmIiBjaGFyYWN0ZXJFbmNvZGluZ05h
bWU6QCIiIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwczovL3d3dy5hcHBsZS5j
b20vMCJdXTsKKyAgICBbd2ViVmlldyBsb2FkRGF0YTpwZGZEYXRhIE1JTUVUeXBlOkAiYXBwbGlj
YXRpb24vcGRmIiBjaGFyYWN0ZXJFbmNvZGluZ05hbWU6QCIiIGJhc2VVUkw6W05TVVJMIFVSTFdp
dGhTdHJpbmc6QCJodHRwczovL3d3dy5hcHBsZS5jb20vMCJdXTsKICAgICBbd2ViVmlldyBfdGVz
dF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07CiAKICAgICAvLyBHbyBpbnRvIHRoZSBiYWNr
Z3JvdW5kIGFuZCBwYXJlbnQgdGhlIFdLV2ViVmlldy4KQEAgLTEzMiwzICsxNDcsMjA4IEBAIFRF
U1QoV2ViS2l0LCBXS1BERlZpZXdMb3Nlc0FwcGxpY2F0aW9uRm8KIH0KIAogI2VuZGlmCisKKyNp
ZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCitzdGF0aWMgdm9pZCBjaGVja0ZyYW1lKE5T
UmVjdCBmcmFtZSwgQ0dGbG9hdCB4LCBDR0Zsb2F0IHksIENHRmxvYXQgd2lkdGgsIENHRmxvYXQg
aGVpZ2h0KQoreworICAgIEVYUEVDVF9FUShmcmFtZS5vcmlnaW4ueCwgeCk7CisgICAgRVhQRUNU
X0VRKGZyYW1lLm9yaWdpbi55LCB5KTsKKyAgICBFWFBFQ1RfRVEoZnJhbWUuc2l6ZS53aWR0aCwg
d2lkdGgpOworICAgIEVYUEVDVF9FUShmcmFtZS5zaXplLmhlaWdodCwgaGVpZ2h0KTsKK30KKwor
VEVTVChQREZIVUQsIE1haW5SZXNvdXJjZVBERikKK3sKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJW
aWV3ID0gW1tbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAs
IDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOltbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBuZXdd
IGF1dG9yZWxlYXNlXV0gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3IGxvYWREYXRhOnBkZkRh
dGEoKSBNSU1FVHlwZTpAImFwcGxpY2F0aW9uL3BkZiIgY2hhcmFjdGVyRW5jb2RpbmdOYW1lOkAi
IiBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly93d3cuYXBwbGUuY29tL3Rl
c3RQYXRoIl1dOworICAgIEVYUEVDVF9FUSh3ZWJWaWV3Ll9wZGZIVURzLmNvdW50LCAwdSk7Cisg
ICAgW3dlYlZpZXcgX3Rlc3Rfd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOworICAgIEVYUEVD
VF9FUSh3ZWJWaWV3Ll9wZGZIVURzLmNvdW50LCAxdSk7CisgICAgY2hlY2tGcmFtZSh3ZWJWaWV3
Ll9wZGZIVURzLmFueU9iamVjdC5mcmFtZSwgMCwgMCwgODAwLCA2MDApOworICAgIAorICAgIFRl
c3RVSURlbGVnYXRlICpkZWxlZ2F0ZSA9IFtbVGVzdFVJRGVsZWdhdGUgbmV3XSBhdXRvcmVsZWFz
ZV07CisgICAgd2ViVmlldy5VSURlbGVnYXRlID0gZGVsZWdhdGU7CisgICAgX19ibG9jayBib29s
IHNhdmVSZXF1ZXN0UmVjZWl2ZWQgPSBmYWxzZTsKKyAgICBkZWxlZ2F0ZS5zYXZlRGF0YVRvRmls
ZSA9IF4oV0tXZWJWaWV3ICp3ZWJWaWV3RnJvbURlbGVnYXRlLCBOU0RhdGEgKmRhdGEsIE5TU3Ry
aW5nICpzdWdnZXN0ZWRGaWxlbmFtZSwgTlNTdHJpbmcgKm1pbWVUeXBlLCBOU1VSTCAqb3JpZ2lu
YXRpbmdVUkwpIHsKKyAgICAgICAgRVhQRUNUX0VRKHdlYlZpZXcsIHdlYlZpZXdGcm9tRGVsZWdh
dGUpOworICAgICAgICBFWFBFQ1RfVFJVRShbZGF0YSBpc0VxdWFsVG9EYXRhOnBkZkRhdGEoKV0p
OworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoc3VnZ2VzdGVkRmlsZW5hbWUsICJ0ZXN0UGF0aC5w
ZGYiKTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKG1pbWVUeXBlLCAiYXBwbGljYXRpb24vcGRm
Iik7CisgICAgICAgIHNhdmVSZXF1ZXN0UmVjZWl2ZWQgPSB0cnVlOworICAgIH07CisgICAgW1t3
ZWJWaWV3IF9wZGZIVURzXS5hbnlPYmplY3QgcGVyZm9ybVNlbGVjdG9yOk5TU2VsZWN0b3JGcm9t
U3RyaW5nKEAiX3BlcmZvcm1BY3Rpb25Gb3JDb250cm9sOiIpIHdpdGhPYmplY3Q6QCJhcnJvdy5k
b3duLmNpcmNsZSJdOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmc2F2ZVJlcXVlc3RS
ZWNlaXZlZCk7CisKKyAgICBFWFBFQ1RfRVEod2ViVmlldy5fcGRmSFVEcy5jb3VudCwgMXUpOwor
ICAgIFt3ZWJWaWV3IF9raWxsV2ViQ29udGVudFByb2Nlc3NdOworICAgIHdoaWxlICh3ZWJWaWV3
Ll9wZGZIVURzLmNvdW50KQorICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9v
cCgpOworfQorCitURVNUKFBERkhVRCwgTW92ZUlGcmFtZSkKK3sKKyAgICBUZXN0VVJMU2NoZW1l
SGFuZGxlciAqaGFuZGxlciA9IFtbVGVzdFVSTFNjaGVtZUhhbmRsZXIgbmV3XSBhdXRvcmVsZWFz
ZV07CisgICAgaGFuZGxlci5zdGFydFVSTFNjaGVtZVRhc2tIYW5kbGVyID0gXihXS1dlYlZpZXcg
KiwgaWQ8V0tVUkxTY2hlbWVUYXNrPiB0YXNrKSB7CisgICAgICAgIGlmIChbdGFzay5yZXF1ZXN0
LlVSTC5wYXRoIGlzRXF1YWxUb1N0cmluZzpAIi9tYWluLmh0bWwiXSkgeworICAgICAgICAgICAg
TlNVUkxSZXNwb25zZSAqcmVzcG9uc2UgPSBbW1tOU1VSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0
aFVSTDp0YXNrLnJlcXVlc3QuVVJMIE1JTUVUeXBlOkAidGV4dC9odG1sIiBleHBlY3RlZENvbnRl
bnRMZW5ndGg6MCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0gYXV0b3JlbGVhc2VdOworICAgICAgICAg
ICAgY29uc3QgY2hhciogaHRtbCA9ICI8YnIvPjxpZnJhbWUgc3JjPSd0ZXN0LnBkZicgaWQ9J3Bk
ZmZyYW1lJz48L2lmcmFtZT4iOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3BvbnNl
OnJlc3BvbnNlXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVEYXRhOltOU0RhdGEgZGF0
YVdpdGhCeXRlczpodG1sIGxlbmd0aDpzdHJsZW4oaHRtbCldXTsKKyAgICAgICAgICAgIFt0YXNr
IGRpZEZpbmlzaF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBFWFBFQ1RfV0tfU1RS
RVEodGFzay5yZXF1ZXN0LlVSTC5wYXRoLCAiL3Rlc3QucGRmIik7CisgICAgICAgICAgICBOU0Rh
dGEgKmRhdGEgPSBwZGZEYXRhKCk7CisgICAgICAgICAgICBOU1VSTFJlc3BvbnNlICpyZXNwb25z
ZSA9IFtbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVxdWVzdC5VUkwg
TUlNRVR5cGU6QCJhcHBsaWNhdGlvbi9wZGYiIGV4cGVjdGVkQ29udGVudExlbmd0aDpkYXRhLmxl
bmd0aCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0gYXV0b3JlbGVhc2VdOworICAgICAgICAgICAgW3Rh
c2sgZGlkUmVjZWl2ZVJlc3BvbnNlOnJlc3BvbnNlXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJl
Y2VpdmVEYXRhOmRhdGFdOworICAgICAgICAgICAgW3Rhc2sgZGlkRmluaXNoXTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICBXS1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0g
W1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIG5ld10gYXV0b3JlbGVhc2VdOworICAgIFtjb25maWd1
cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6aGFuZGxlciBmb3JVUkxTY2hlbWU6QCJ0ZXN0Il07
CisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldyA9IFtbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25m
aWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJM
UmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAInRlc3Q6Ly8vbWFp
bi5odG1sIl1dXTsKKyAgICBFWFBFQ1RfRVEod2ViVmlldy5fcGRmSFVEcy5jb3VudCwgMHUpOwor
ICAgIFt3ZWJWaWV3IF90ZXN0X3dhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKKyAgICBFWFBF
Q1RfRVEod2ViVmlldy5fcGRmSFVEcy5jb3VudCwgMXUpOworICAgIGNoZWNrRnJhbWUod2ViVmll
dy5fcGRmSFVEcy5hbnlPYmplY3QuZnJhbWUsIDEwLCAyOCwgMzAwLCAxNTApOworCisgICAgW3dl
YlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAicGRmZnJhbWUud2lkdGg9NDAwIiBjb21wbGV0aW9u
SGFuZGxlcjpuaWxdOworICAgIHdoaWxlICh3ZWJWaWV3Ll9wZGZIVURzLmFueU9iamVjdC5mcmFt
ZS5zaXplLndpZHRoICE9IDQwMCkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1
bkxvb3AoKTsKKyAgICBjaGVja0ZyYW1lKHdlYlZpZXcuX3BkZkhVRHMuYW55T2JqZWN0LmZyYW1l
LCAxMCwgMjgsIDQwMCwgMTUwKTsKKworICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpA
InZhciBmcmFtZVJlZmVyZW5jZSA9IHBkZmZyYW1lOyBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxk
KHBkZmZyYW1lKSIgY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKKyAgICB3aGlsZSAod2ViVmlldy5f
cGRmSFVEcy5jb3VudCkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3Ao
KTsKKyAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5LmFwcGVu
ZENoaWxkKGZyYW1lUmVmZXJlbmNlKSIgY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKKyAgICB3aGls
ZSAoIXdlYlZpZXcuX3BkZkhVRHMuY291bnQpCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnNwaW5SdW5Mb29wKCk7CisgICAgRVhQRUNUX0VRKHdlYlZpZXcuX3BkZkhVRHMuY291bnQsIDF1
KTsKKyAgICBjaGVja0ZyYW1lKHdlYlZpZXcuX3BkZkhVRHMuYW55T2JqZWN0LmZyYW1lLCAwLCAw
LCAwLCAwKTsKKyAgICB3aGlsZSAod2ViVmlldy5fcGRmSFVEcy5hbnlPYmplY3QuZnJhbWUuc2l6
ZS53aWR0aCAhPSA0MDApCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29w
KCk7CisgICAgRVhQRUNUX0VRKHdlYlZpZXcuX3BkZkhVRHMuY291bnQsIDF1KTsKKyAgICBjaGVj
a0ZyYW1lKHdlYlZpZXcuX3BkZkhVRHMuYW55T2JqZWN0LmZyYW1lLCAxMCwgMjgsIDQwMCwgMTUw
KTsKKworICAgIHdlYlZpZXcucGFnZVpvb20gPSAxLjQ7CisgICAgd2hpbGUgKHdlYlZpZXcuX3Bk
ZkhVRHMuYW55T2JqZWN0LmZyYW1lLnNpemUud2lkdGggIT0gNTYwKQorICAgICAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgpOworICAgIEVYUEVDVF9FUSh3ZWJWaWV3Ll9wZGZI
VURzLmNvdW50LCAxdSk7CisgICAgY2hlY2tGcmFtZSh3ZWJWaWV3Ll9wZGZIVURzLmFueU9iamVj
dC5mcmFtZSwgMTQsIDQwLCA1NjAsIDIxMCk7Cit9CisKK1RFU1QoUERGSFVELCBOZXN0ZWRJRnJh
bWVzKQoreworICAgIFRlc3RVUkxTY2hlbWVIYW5kbGVyICpoYW5kbGVyID0gW1tUZXN0VVJMU2No
ZW1lSGFuZGxlciBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBoYW5kbGVyLnN0YXJ0VVJMU2NoZW1l
VGFza0hhbmRsZXIgPSBeKFdLV2ViVmlldyAqLCBpZDxXS1VSTFNjaGVtZVRhc2s+IHRhc2spIHsK
KyAgICAgICAgTlNVUkxSZXNwb25zZSAqaHRtbFJlc3BvbnNlID0gW1tbTlNVUkxSZXNwb25zZSBh
bGxvY10gaW5pdFdpdGhVUkw6dGFzay5yZXF1ZXN0LlVSTCBNSU1FVHlwZTpAInRleHQvaHRtbCIg
ZXhwZWN0ZWRDb250ZW50TGVuZ3RoOjAgdGV4dEVuY29kaW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNl
XTsKKyAgICAgICAgaWYgKFt0YXNrLnJlcXVlc3QuVVJMLnBhdGggaXNFcXVhbFRvU3RyaW5nOkAi
L21haW4uaHRtbCJdKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBodG1sID0gIjxpZnJhbWUg
c3JjPSdmcmFtZS5odG1sJyBpZD0ncGFyZW50ZnJhbWUnPjwvaWZyYW1lPiI7CisgICAgICAgICAg
ICBbdGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6aHRtbFJlc3BvbnNlXTsKKyAgICAgICAgICAgIFt0
YXNrIGRpZFJlY2VpdmVEYXRhOltOU0RhdGEgZGF0YVdpdGhCeXRlczpodG1sIGxlbmd0aDpzdHJs
ZW4oaHRtbCldXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZEZpbmlzaF07CisgICAgICAgIH0gZWxz
ZSBpZiAoW3Rhc2sucmVxdWVzdC5VUkwucGF0aCBpc0VxdWFsVG9TdHJpbmc6QCIvZnJhbWUuaHRt
bCJdKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBodG1sID0gIjxpZnJhbWUgc3JjPSd0ZXN0
LnBkZic+PC9pZnJhbWU+IjsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVSZXNwb25zZTpo
dG1sUmVzcG9uc2VdOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZURhdGE6W05TRGF0YSBk
YXRhV2l0aEJ5dGVzOmh0bWwgbGVuZ3RoOnN0cmxlbihodG1sKV1dOworICAgICAgICAgICAgW3Rh
c2sgZGlkRmluaXNoXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEVYUEVDVF9XS19T
VFJFUSh0YXNrLnJlcXVlc3QuVVJMLnBhdGgsICIvdGVzdC5wZGYiKTsKKyAgICAgICAgICAgIE5T
RGF0YSAqZGF0YSA9IHBkZkRhdGEoKTsKKyAgICAgICAgICAgIE5TVVJMUmVzcG9uc2UgKnJlc3Bv
bnNlID0gW1tbTlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGFzay5yZXF1ZXN0LlVS
TCBNSU1FVHlwZTpAImFwcGxpY2F0aW9uL3BkZiIgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOmRhdGEu
bGVuZ3RoIHRleHRFbmNvZGluZ05hbWU6bmlsXSBhdXRvcmVsZWFzZV07CisgICAgICAgICAgICBb
dGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6cmVzcG9uc2VdOworICAgICAgICAgICAgW3Rhc2sgZGlk
UmVjZWl2ZURhdGE6ZGF0YV07CisgICAgICAgICAgICBbdGFzayBkaWRGaW5pc2hdOworICAgICAg
ICB9CisgICAgfTsKKworICAgIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24g
PSBbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07CisgICAgW2NvbmZp
Z3VyYXRpb24gc2V0VVJMU2NoZW1lSGFuZGxlcjpoYW5kbGVyIGZvclVSTFNjaGVtZTpAInRlc3Qi
XTsKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3ID0gW1tbVGVzdFdLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNv
bmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNV
UkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAidGVzdDovLy9t
YWluLmh0bWwiXV1dOworICAgIEVYUEVDVF9FUSh3ZWJWaWV3Ll9wZGZIVURzLmNvdW50LCAwdSk7
CisgICAgW3dlYlZpZXcgX3Rlc3Rfd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOworICAgIEVY
UEVDVF9FUSh3ZWJWaWV3Ll9wZGZIVURzLmNvdW50LCAxdSk7CisgICAgY2hlY2tGcmFtZSh3ZWJW
aWV3Ll9wZGZIVURzLmFueU9iamVjdC5mcmFtZSwgMjAsIDIwLCAzMDAsIDE1MCk7CisgICAgCisg
ICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5yZW1vdmVDaGls
ZChwYXJlbnRmcmFtZSkiIGNvbXBsZXRpb25IYW5kbGVyOm5pbF07CisgICAgd2hpbGUgKHdlYlZp
ZXcuX3BkZkhVRHMuY291bnQpCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5M
b29wKCk7Cit9CisKK1RFU1QoUERGSFVELCBJRnJhbWUzRFRyYW5zZm9ybSkKK3sKKyAgICBUZXN0
VVJMU2NoZW1lSGFuZGxlciAqaGFuZGxlciA9IFtbVGVzdFVSTFNjaGVtZUhhbmRsZXIgbmV3XSBh
dXRvcmVsZWFzZV07CisgICAgaGFuZGxlci5zdGFydFVSTFNjaGVtZVRhc2tIYW5kbGVyID0gXihX
S1dlYlZpZXcgKiwgaWQ8V0tVUkxTY2hlbWVUYXNrPiB0YXNrKSB7CisgICAgICAgIE5TVVJMUmVz
cG9uc2UgKmh0bWxSZXNwb25zZSA9IFtbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJM
OnRhc2sucmVxdWVzdC5VUkwgTUlNRVR5cGU6QCJ0ZXh0L2h0bWwiIGV4cGVjdGVkQ29udGVudExl
bmd0aDowIHRleHRFbmNvZGluZ05hbWU6bmlsXSBhdXRvcmVsZWFzZV07CisgICAgICAgIGlmIChb
dGFzay5yZXF1ZXN0LlVSTC5wYXRoIGlzRXF1YWxUb1N0cmluZzpAIi9tYWluLmh0bWwiXSkgewor
ICAgICAgICAgICAgY29uc3QgY2hhciogaHRtbCA9ICI8aWZyYW1lIHNyYz0ndGVzdC5wZGYnIGhl
aWdodD01MDAgd2lkdGg9NTAwIHN0eWxlPSd0cmFuc2Zvcm06cm90YXRlWSgyMzVkZWcpOyc+PC9p
ZnJhbWU+IjsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVSZXNwb25zZTpodG1sUmVzcG9u
c2VdOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZURhdGE6W05TRGF0YSBkYXRhV2l0aEJ5
dGVzOmh0bWwgbGVuZ3RoOnN0cmxlbihodG1sKV1dOworICAgICAgICAgICAgW3Rhc2sgZGlkRmlu
aXNoXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEVYUEVDVF9XS19TVFJFUSh0YXNr
LnJlcXVlc3QuVVJMLnBhdGgsICIvdGVzdC5wZGYiKTsKKyAgICAgICAgICAgIE5TRGF0YSAqZGF0
YSA9IHBkZkRhdGEoKTsKKyAgICAgICAgICAgIE5TVVJMUmVzcG9uc2UgKnJlc3BvbnNlID0gW1tb
TlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGFzay5yZXF1ZXN0LlVSTCBNSU1FVHlw
ZTpAImFwcGxpY2F0aW9uL3BkZiIgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOmRhdGEubGVuZ3RoIHRl
eHRFbmNvZGluZ05hbWU6bmlsXSBhdXRvcmVsZWFzZV07CisgICAgICAgICAgICBbdGFzayBkaWRS
ZWNlaXZlUmVzcG9uc2U6cmVzcG9uc2VdOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZURh
dGE6ZGF0YV07CisgICAgICAgICAgICBbdGFzayBkaWRGaW5pc2hdOworICAgICAgICB9CisgICAg
fTsKKworICAgIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbW1dLV2Vi
Vmlld0NvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07CisgICAgW2NvbmZpZ3VyYXRpb24g
c2V0VVJMU2NoZW1lSGFuZGxlcjpoYW5kbGVyIGZvclVSTFNjaGVtZTpAInRlc3QiXTsKKyAgICBU
ZXN0V0tXZWJWaWV3ICp3ZWJWaWV3ID0gW1tbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRp
b25dIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0
IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAidGVzdDovLy9tYWluLmh0bWwi
XV1dOworICAgIEVYUEVDVF9FUSh3ZWJWaWV3Ll9wZGZIVURzLmNvdW50LCAwdSk7CisgICAgW3dl
YlZpZXcgX3Rlc3Rfd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOworICAgIEVYUEVDVF9FUSh3
ZWJWaWV3Ll9wZGZIVURzLmNvdW50LCAxdSk7CisgICAgY2hlY2tGcmFtZSh3ZWJWaWV3Ll9wZGZI
VURzLmFueU9iamVjdC5mcmFtZSwgNDAzLCAxMCwgNTAwLCA1MDApOworfQorCitURVNUKFBERkhV
RCwgTXVsdGlwbGVJRnJhbWVzKQoreworICAgIFRlc3RVUkxTY2hlbWVIYW5kbGVyICpoYW5kbGVy
ID0gW1tUZXN0VVJMU2NoZW1lSGFuZGxlciBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBoYW5kbGVy
LnN0YXJ0VVJMU2NoZW1lVGFza0hhbmRsZXIgPSBeKFdLV2ViVmlldyAqLCBpZDxXS1VSTFNjaGVt
ZVRhc2s+IHRhc2spIHsKKyAgICAgICAgTlNVUkxSZXNwb25zZSAqaHRtbFJlc3BvbnNlID0gW1tb
TlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGFzay5yZXF1ZXN0LlVSTCBNSU1FVHlw
ZTpAInRleHQvaHRtbCIgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOjAgdGV4dEVuY29kaW5nTmFtZTpu
aWxdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgaWYgKFt0YXNrLnJlcXVlc3QuVVJMLnBhdGggaXNF
cXVhbFRvU3RyaW5nOkAiL21haW4uaHRtbCJdKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBo
dG1sID0gIjxpZnJhbWUgc3JjPSd0ZXN0LnBkZicgaGVpZ2h0PTEwMCB3aWR0aD0xNTA+PC9pZnJh
bWU+PGlmcmFtZSBzcmM9J3Rlc3QucGRmJyBoZWlnaHQ9MTIzIHdpZHRoPTEzND48L2lmcmFtZT4i
OworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3BvbnNlOmh0bWxSZXNwb25zZV07Cisg
ICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6aHRt
bCBsZW5ndGg6c3RybGVuKGh0bWwpXV07CisgICAgICAgICAgICBbdGFzayBkaWRGaW5pc2hdOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgRVhQRUNUX1dLX1NUUkVRKHRhc2sucmVxdWVz
dC5VUkwucGF0aCwgIi90ZXN0LnBkZiIpOworICAgICAgICAgICAgTlNEYXRhICpkYXRhID0gcGRm
RGF0YSgpOworICAgICAgICAgICAgTlNVUkxSZXNwb25zZSAqcmVzcG9uc2UgPSBbW1tOU1VSTFJl
c3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0YXNrLnJlcXVlc3QuVVJMIE1JTUVUeXBlOkAiYXBw
bGljYXRpb24vcGRmIiBleHBlY3RlZENvbnRlbnRMZW5ndGg6ZGF0YS5sZW5ndGggdGV4dEVuY29k
aW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVS
ZXNwb25zZTpyZXNwb25zZV07CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpkYXRh
XTsKKyAgICAgICAgICAgIFt0YXNrIGRpZEZpbmlzaF07CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IFtbV0tXZWJWaWV3Q29u
ZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRVUkxT
Y2hlbWVIYW5kbGVyOmhhbmRsZXIgZm9yVVJMU2NoZW1lOkAidGVzdCJdOworICAgIFRlc3RXS1dl
YlZpZXcgKndlYlZpZXcgPSBbW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5T
TWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbl0gYXV0
b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVz
dFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJ0ZXN0Oi8vL21haW4uaHRtbCJdXV07Cisg
ICAgRVhQRUNUX0VRKHdlYlZpZXcuX3BkZkhVRHMuY291bnQsIDB1KTsKKyAgICBbd2ViVmlldyBf
dGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07CisgICAgRVhQRUNUX0VRKHdlYlZpZXcu
X3BkZkhVRHMuY291bnQsIDJ1KTsKKyAgICBib29sIGhhZExlZnRGcmFtZSA9IGZhbHNlOworICAg
IGJvb2wgaGFkUmlnaHRGcmFtZSA9IGZhbHNlOworICAgIGZvciAoTlNWaWV3ICpodWQgaW4gd2Vi
Vmlldy5fcGRmSFVEcykgeworICAgICAgICBpZiAoaHVkLmZyYW1lLm9yaWdpbi54ID09IDEwKSB7
CisgICAgICAgICAgICBjaGVja0ZyYW1lKGh1ZC5mcmFtZSwgMTAsIDMzLCAxNTAsIDEwMCk7Cisg
ICAgICAgICAgICBoYWRMZWZ0RnJhbWUgPSB0cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgY2hlY2tGcmFtZShodWQuZnJhbWUsIDE2NCwgMTAsIDEzNCwgMTIzKTsKKyAgICAgICAg
ICAgIGhhZFJpZ2h0RnJhbWUgPSB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIEVYUEVDVF9U
UlVFKGhhZExlZnRGcmFtZSk7CisgICAgRVhQRUNUX1RSVUUoaGFkUmlnaHRGcmFtZSk7Cit9CisK
KyNlbmRpZgpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0VUlEZWxlZ2F0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFVJRGVsZWdhdGUu
aAkocmV2aXNpb24gMjY2MDg2KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0VUlE
ZWxlZ2F0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaWYgUExBVEZPUk0o
TUFDKQogQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIHZvaWQgKF5nZXRDb250ZXh0TWVudUZy
b21Qcm9wb3NlZE1lbnUpKE5TTWVudSAqLCBfV0tDb250ZXh0TWVudUVsZW1lbnRJbmZvICosIGlk
IDxOU1NlY3VyZUNvZGluZz4sIHZvaWQgKF4pKE5TTWVudSAqKSk7CiAjZW5kaWYKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljLCBjb3B5KSB2b2lkIChec2F2ZURhdGFUb0ZpbGUpKFdLV2ViVmlldyAqLCBO
U0RhdGEgKiwgTlNTdHJpbmcgKiwgTlNTdHJpbmcgKiwgTlNVUkwgKik7CiAKIC0gKE5TU3RyaW5n
ICopd2FpdEZvckFsZXJ0OwogCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RV
SURlbGVnYXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVz
dFVJRGVsZWdhdGUubW0JKHJldmlzaW9uIDI2NjA4NikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
Y29jb2EvVGVzdFVJRGVsZWdhdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDEyIEBA
IC0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZ2UKIH0KICNlbmRpZiAvLyBQ
TEFURk9STShNQUMpCiAKKy0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgc2F2
ZURhdGFUb0ZpbGU6KE5TRGF0YSAqKWRhdGEgc3VnZ2VzdGVkRmlsZW5hbWU6KE5TU3RyaW5nICop
c3VnZ2VzdGVkRmlsZW5hbWUgbWltZVR5cGU6KE5TU3RyaW5nICopbWltZVR5cGUgb3JpZ2luYXRp
bmdVUkw6KE5TVVJMICopdXJsCit7CisgICAgaWYgKF9zYXZlRGF0YVRvRmlsZSkKKyAgICAgICAg
X3NhdmVEYXRhVG9GaWxlKHdlYlZpZXcsIGRhdGEsIHN1Z2dlc3RlZEZpbGVuYW1lLCBtaW1lVHlw
ZSwgdXJsKTsKK30KKwogLSAoTlNTdHJpbmcgKil3YWl0Rm9yQWxlcnQKIHsKICAgICBFWFBFQ1Rf
RkFMU0Uoc2VsZi5ydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407142</attachid>
            <date>2020-08-24 15:28:22 -0700</date>
            <delta_ts>2020-08-24 15:34:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215780-20200824152821.patch</filename>
            <type>text/plain</type>
            <size>79251</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjYwODYpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA4LTI0ICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBQREYgaGVhZHMtdXAgZGlz
cGxheSB0byBVSSBwcm9jZXNzIG9uIG1hY09TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU3ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU4NzE1
ODQ3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
d3RmL1BsYXRmb3JtSGF2ZS5oOgorCiAyMDIwLTA4LTI0ICBBbGV4IENocmlzdGVuc2VuICA8YWNo
cmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWFrZSBfV0tXZWJzaXRlRGF0YVN0b3Jl
Q29uZmlndXJhdGlvbiBTUEkgZm9yIEhTVFMgc3RvcmFnZSB0byByZXBsYWNlIF9XS1Byb2Nlc3NQ
b29sQ29uZmlndXJhdGlvbi5oc3RzU3RvcmFnZURpcmVjdG9yeQpJbmRleDogU291cmNlL1dURi93
dGYvUGxhdGZvcm1FbmFibGVDb2NvYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1Bs
YXRmb3JtRW5hYmxlQ29jb2EuaAkocmV2aXNpb24gMjY2MDg2KQorKysgU291cmNlL1dURi93dGYv
UGxhdGZvcm1FbmFibGVDb2NvYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNiArMjI4LDEwIEBA
CiAjZGVmaW5lIEVOQUJMRV9HUFVfRFJJVkVSX1BSRVdBUk1JTkcgMQogI2VuZGlmCiAKKyNpZiBQ
TEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMDAw
CisjZGVmaW5lIEVOQUJMRV9VSV9QUk9DRVNTX1BERl9IVUQgMQorI2VuZGlmCisKICNpZiAhZGVm
aW5lZChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkKICNkZWZpbmUgRU5BQkxFX0lOREVYRURfREFU
QUJBU0UgMQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjY2MDg2KQorKysgU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw5NiBAQAorMjAyMC0w
OC0yNCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAg
ICAgIE1vdmUgUERGIGhlYWRzLXVwIGRpc3BsYXkgdG8gVUkgcHJvY2VzcyBvbiBtYWNPUworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1NzgwCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS81ODcxNTg0Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGhhcyBtYW55IGJlbmVmaXRzIGluY2x1ZGluZyB0
aGUgb25lIGluIHRoZSByYWRhciwgdGVzdGFiaWxpdHksIGFuZCBtb3ZpbmcgV2ViS2l0LXNwZWNp
ZmljIGNvZGUgZnJvbSBQREZLaXQgdG8gV2ViS2l0LgorCisgICAgICAgIE5vdyB0aGF0IHRoZSBI
VUQgaXMgZGlzcGxheWVkIGluIHRoZSBVSSBwcm9jZXNzIGluc3RlYWQgb2YgaW4gdGhlIHdlYiBj
b250ZW50LCB6b29taW5nIGluIGtlZXBzIHRoZSBIVUQgdGhlIHNhbWUgc2l6ZS4KKyAgICAgICAg
QSAzZC10cmFuc2Zvcm1lZCBpZnJhbWUgd2l0aCBhIFBERiBpbiBpdCBub3cgc2hvd3MgdGhlIEhV
RCBpbiB0aGUgcGxhY2UgeW91IGNhbiBjbGljayBvbiBpdCwgaW5zdGVhZCBvZiBpbiB0aGUgdHJh
bnNmb3JtZWQgUERGLgorICAgICAgICBBbHNvLCBtb3ZpbmcgdGhlIG1vdXNlIHRvIHRoZSBIVUQg
d2l0aGluIHRoZSBmaXJzdCAzIHNlY29uZHMgcHJldmVudHMgaXQgZnJvbSBoaWRpbmcsIHdoaWNo
IGl0IGRvZXMgd2hlbiB0aGUgbW91c2UgbGVhdmVzIHRoZSBIVUQuCisgICAgICAgIFRoZSByZXN0
IG9mIHRoZSBiZWhhdmlvciBJIHRoaW5rIHNob3VsZCBiZSB0aGUgc2FtZS4gIE1vc3QgdXNlcnMg
c2hvdWxkIG5vdCBub3RpY2UgYW55IGRpZmZlcmVuY2UuCisKKyAgICAgICAgRnVuY3Rpb25hbGl0
eSBjb3ZlcmVkIGJ5IEFQSSB0ZXN0cywgdGhlIGZpcnN0IHRlc3RzIGZvciBQREYgY29udGVudCBp
bnRlcmFjdGlvbiEKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAgICgtW1dLVmlldyBfY3JlYXRl
UERGSFVEOnJlY3Q6XSk6CisgICAgICAgICgtW1dLVmlldyBfcGRmSFVEOmNoYW5nZWRMb2NhdGlv
bjpdKToKKyAgICAgICAgKC1bV0tWaWV3IF9yZW1vdmVQREZIVUQ6XSk6CisgICAgICAgICgtW1dL
VmlldyBfcmVtb3ZlQWxsUERGSFVEc10pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dL
V2ViVmlld01hYy5tbToKKyAgICAgICAgKC1bV0tXZWJWaWV3IG1vdXNlTW92ZWQ6XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBtb3VzZURvd246XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBtb3Vz
ZVVwOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NyZWF0ZVBERkhVRDpyZWN0Ol0pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX3BkZkhVRDpjaGFuZ2VkTG9jYXRpb246XSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfcmVtb3ZlUERGSFVEOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3JlbW92
ZUFsbFBERkhVRHNdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdQcml2
YXRlRm9yVGVzdGluZ01hYy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmll
d1Rlc3RpbmdNYWMubW06CisgICAgICAgICgtW1dLV2ViVmlldyBwZGZIVURzXSk6CisgICAgICAg
ICogVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0Nv
Y29hL1dlYlZpZXdJbXBsLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y3JlYXRl
UERGSFVEKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0ZVBERkhVRExvY2F0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnJlbW92ZVBERkhVRCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZW1vdmVBbGxQREZIVURzKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvUGFnZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFt
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cHJvY2Vzc0RpZFRlcm1pbmF0ZSk6
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XZWJQ
YWdlUHJveHlJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2F2ZVBERlRv
VGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6b3BlblBERkZyb21UZW1wb3JhcnlGb2xkZXJX
aXRoTmF0aXZlQXBwbGljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMv
UGFnZUNsaWVudEltcGxNYWMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJ
bXBsTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlUERGSFVE
KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnVwZGF0ZVBERkhVRExvY2F0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnJlbW92ZVBERkhVRCk6CisgICAg
ICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpyZW1vdmVBbGxQREZIVURzKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5OjpzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxp
Y2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjcmVhdGVQREZIVUQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlbW92ZVBERkhVRCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6dXBkYXRlUERGSFVETG9jYXRpb24pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnBkZlpvb21Jbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6cGRmWm9vbU91dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGRmU2F2
ZVRvUERGKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZGZPcGVuV2l0aFByZXZp
ZXcpOgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGTGF5ZXJDb250cm9sbGVyU1BJLmg6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaDoKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbToKKyAgICAgICAgKC1bV0tQREZMYXllckNv
bnRyb2xsZXJEZWxlZ2F0ZSBvcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uXSk6CisgICAgICAgICgt
W1dLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgc2F2ZVRvUERGXSk6CisgICAgICAgIChXZWJL
aXQ6OlBERlBsdWdpbjo6UERGUGx1Z2luKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjp+
UERGUGx1Z2luKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpmcmFtZUZvckhVRCBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6Y2FsY3VsYXRlU2l6ZXMpOgorICAgICAg
ICAoV2ViS2l0OjpQREZQbHVnaW46OmNvbnZlcnRGcm9tUERGVmlld1RvUm9vdFZpZXcgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnZpc2liaWxpdHlEaWRDaGFuZ2UpOgorICAg
ICAgICAoV2ViS2l0OjpQREZQbHVnaW46Onpvb21Jbik6CisgICAgICAgIChXZWJLaXQ6OlBERlBs
dWdpbjo6em9vbU91dCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6c2F2ZSk6CisgICAg
ICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6b3BlbldpdGhQcmV2aWV3KToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdl
cy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6Onpvb21QREZJbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6Onpvb21QREZPdXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzYXZlUERGKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6b3BlblBERldpdGhQcmV2aWV3KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6Y3JlYXRlUERGSFVEKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6dXBkYXRlUERGSFVETG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpyZW1v
dmVQREZIVUQpOgorCiAyMDIwLTA4LTI0ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2Vu
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWFrZSBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJh
dGlvbiBTUEkgZm9yIEhTVFMgc3RvcmFnZSB0byByZXBsYWNlIF9XS1Byb2Nlc3NQb29sQ29uZmln
dXJhdGlvbi5oc3RzU3RvcmFnZURpcmVjdG9yeQpJbmRleDogU291cmNlL1dlYktpdC9TY3JpcHRz
L3dlYmtpdC9tZXNzYWdlcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NjcmlwdHMv
d2Via2l0L21lc3NhZ2VzLnB5CShyZXZpc2lvbiAyNjYwODYpCisrKyBTb3VyY2UvV2ViS2l0L1Nj
cmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNDMsNiArMjQzLDcg
QEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZQogICAgICAgICAnV2Vi
S2l0OjpNRE5TUmVnaXN0ZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6TWVkaWFQbGF5
ZXJQcml2YXRlUmVtb3RlSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6Ok1lZGlhUmVjb3Jk
ZXJJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllcicsCiAg
ICAgICAgICdXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbkNvbnRleHRJZGVudGlmaWVyJywKICAgICAg
ICAgJ1dlYktpdDo6UGx1Z2luUHJvY2Vzc1R5cGUnLAogICAgICAgICAnV2ViS2l0OjpSZW1vdGVB
dWRpb0Rlc3RpbmF0aW9uSWRlbnRpZmllcicsCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9QYWdlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFn
ZUNsaWVudC5oCShyZXZpc2lvbiAyNjYwODYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Q
YWdlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgorI2luY2x1ZGUgIlBERlBsdWdpbklk
ZW50aWZpZXIuaCIKICNpbmNsdWRlICJTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZS5oIgogI2lu
Y2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIldlYkNvbG9yUGlja2VyLmgiCkBA
IC0yNDIsNiArMjQzLDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbFByb3Zp
c2lvbmFsTG9hZEZvck1haW5GcmFtZSgpIHsgfTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0
TG9hZEZvck1haW5GcmFtZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIHVzZUN1c3RvbUNv
bnRlbnRQcm92aWRlcikgPSAwOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVBERkhVRExvY2F0
aW9uKFBERlBsdWdpbklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZUFsbFBERkhVRHMoKSA9IDA7CisjZW5kaWYKKyAgICAKICAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkmKSA9IDA7
CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlUnVuT3BlblBhbmVsKFdlYlBhZ2VQcm94eSosIFdl
YkZyYW1lUHJveHkqLCBjb25zdCBGcmFtZUluZm9EYXRhJiwgQVBJOjpPcGVuUGFuZWxQYXJhbWV0
ZXJzKiwgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eSopIHsgcmV0dXJuIGZhbHNlOyB9
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9u
IDI2NjA4NikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ3NzIsMTUgKzQ3NzIsMTQgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRp
ZENvbW1pdExvYWRGb3JGcmFtZQogICAgICAgICAgICAgbV9wbHVnaW5TY2FsZUZhY3RvciA9IDE7
CiAgICAgICAgICAgICBtX21haW5GcmFtZVBsdWdpbkhhbmRsZXNQYWdlU2NhbGVHZXN0dXJlID0g
ZmFsc2U7CiAgICAgICAgIH0KLSAgICB9Ci0KICNpZiBFTkFCTEUoUE9JTlRFUl9MT0NLKQotICAg
IGlmIChmcmFtZS0+aXNNYWluRnJhbWUoKSkKICAgICAgICAgcmVxdWVzdFBvaW50ZXJVbmxvY2so
KTsKICNlbmRpZgotCi0gICAgaWYgKGZyYW1lLT5pc01haW5GcmFtZSgpKQogICAgICAgICBwYWdl
Q2xpZW50KCkuc2V0TW91c2VFdmVudFBvbGljeShtb3VzZUV2ZW50UG9saWN5KTsKKyNpZiBFTkFC
TEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgICAgICBwYWdlQ2xpZW50KCkucmVtb3ZlQWxsUERG
SFVEcygpOworI2VuZGlmCisgICAgfQogCiAgICAgbV9wYWdlTG9hZFN0YXRlLmNvbW1pdENoYW5n
ZXMoKTsKICAgICBpZiAobV9sb2FkZXJDbGllbnQpCkBAIC03NDUxLDYgKzc0NTAsOSBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6cHJvY2Vzc0RpZFRlcm1pbmF0ZShQCiAKICAgICByZXNldFN0YXRlQWZ0
ZXJQcm9jZXNzRXhpdGVkKHJlYXNvbik7CiAgICAgc3RvcEFsbFVSTFNjaGVtZVRhc2tzKG1fcHJv
Y2Vzcy5wdHIoKSk7CisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBwYWdlQ2xp
ZW50KCkucmVtb3ZlQWxsUERGSFVEcygpOworI2VuZGlmCiAKICAgICAvLyBGb3IgYnJpbmd1cCBv
ZiBwcm9jZXNzIHN3YXBwaW5nLCBOYXZpZ2F0aW9uU3dhcCB0ZXJtaW5hdGlvbiB3aWxsIG5vdCBn
byBvdXQgdG8gY2xpZW50cy4KICAgICAvLyBJZiBpdCBkb2VzICpkdXJpbmcqIHByb2Nlc3Mgc3dh
cHBpbmcsIGFuZCB0aGUgY2xpZW50IHRyaWdnZXJzIGEgcmVsb2FkLCB0aGF0IGNhdXNlcyBiaXph
cnJlIFdlYktpdCByZS1lbnRyeS4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oCShyZXZpc2lvbiAyNjYwODYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkxh
eWVyVHJlZUNvbnRleHQuaCIKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCiAjaW5jbHVkZSAi
Tm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuaCIKKyNpbmNsdWRlICJQ
REZQbHVnSW5JZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiUGFnZUxvYWRTdGF0ZS5oIgogI2luY2x1
ZGUgIlBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiUG9saWN5RGVjaXNpb24u
aCIKQEAgLTEzMTEsMTAgKzEzMTIsMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCBzYXZlRGF0YVRv
RmlsZUluRG93bmxvYWRzRm9sZGVyKFN0cmluZyYmIHN1Z2dlc3RlZEZpbGVuYW1lLCBTdHJpbmcm
JiBtaW1lVHlwZSwgVVJMJiYgb3JpZ2luYXRpbmdVUkwsIEFQSTo6RGF0YSYpOwogICAgIHZvaWQg
c2F2ZVBERlRvRmlsZUluRG93bmxvYWRzRm9sZGVyKFN0cmluZyYmIHN1Z2dlc3RlZEZpbGVuYW1l
LCBVUkwmJiBvcmlnaW5hdGluZ1VSTCwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik7Ci0jaWYg
UExBVEZPUk0oQ09DT0EpCisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCiAgICAgdm9pZCBzYXZl
UERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKGNvbnN0IFN0
cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgSVBDOjpEYXRh
UmVmZXJlbmNlJiwgY29uc3QgU3RyaW5nJiBwZGZVVUlEKTsKKyNpZiAhRU5BQkxFKFVJX1BST0NF
U1NfUERGX0hVRCkKICAgICB2b2lkIG9wZW5QREZGcm9tVGVtcG9yYXJ5Rm9sZGVyV2l0aE5hdGl2
ZUFwcGxpY2F0aW9uKEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgU3RyaW5nJiBwZGZVVUlEKTsKICNl
bmRpZgorI2VuZGlmCiAKICNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKICAgICB2b2lkIHNob3dQ
REZDb250ZXh0TWVudShjb25zdCBXZWJLaXQ6OlBERkNvbnRleHRNZW51JiwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChPcHRpb25hbDxpbnQzMl90PiYmKT4mJik7CkBAIC0xODA2LDYgKzE4MDksMTYg
QEAgcHVibGljOgogICAgIGJvb2wgY2FuVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKSB7IHJldHVybiBt
X2NhblVzZUNyZWRlbnRpYWxTdG9yYWdlOyB9CiAgICAgdm9pZCBzZXRDYW5Vc2VDcmVkZW50aWFs
U3RvcmFnZShib29sKTsKIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgdm9p
ZCBjcmVhdGVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpOworICAgIHZvaWQgdXBkYXRlUERGSFVETG9jYXRpb24oUERGUGx1Z2luSWRlbnRpZmllciwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgcmVtb3ZlUERGSFVEKFBERlBsdWdp
bklkZW50aWZpZXIpOworICAgIHZvaWQgcGRmWm9vbUluKFBERlBsdWdpbklkZW50aWZpZXIpOwor
ICAgIHZvaWQgcGRmWm9vbU91dChQREZQbHVnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHBkZlNh
dmVUb1BERihQREZQbHVnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHBkZk9wZW5XaXRoUHJldmll
dyhQREZQbHVnaW5JZGVudGlmaWVyKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIFdlYlBhZ2VQ
cm94eShQYWdlQ2xpZW50JiwgV2ViUHJvY2Vzc1Byb3h5JiwgUmVmPEFQSTo6UGFnZUNvbmZpZ3Vy
YXRpb24+JiYpOwogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKCk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lv
biAyNjYwODYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2Fn
ZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTQzMyw5ICs0MzMsOCBAQCBtZXNzYWdlcyAtPiBXZWJQ
YWdlUHJveHkgewogICAgIFNhdmVSZWNlbnRTZWFyY2hlcyhTdHJpbmcgbmFtZSwgVmVjdG9yPFdl
YkNvcmU6OlJlY2VudFNlYXJjaD4gc2VhcmNoSXRlbXMpCiAgICAgTG9hZFJlY2VudFNlYXJjaGVz
KFN0cmluZyBuYW1lKSAtPiAoVmVjdG9yPFdlYkNvcmU6OlJlY2VudFNlYXJjaD4gcmVzdWx0KSBT
eW5jaHJvbm91cwogCisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pICYmICFFTkFCTEUoVUlfUFJP
Q0VTU19QREZfSFVEKQogICAgIFNhdmVQREZUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcihTdHJpbmcg
c3VnZ2VzdGVkRmlsZW5hbWUsIFVSTCBvcmlnaW5hdGluZ1VSTCwgSVBDOjpEYXRhUmVmZXJlbmNl
IGRhdGEpCi0KLSNpZiBQTEFURk9STShDT0NPQSkKICAgICBTYXZlUERGVG9UZW1wb3JhcnlGb2xk
ZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSwg
c3RydWN0IFdlYktpdDo6RnJhbWVJbmZvRGF0YSBzb3VyY2VGcmFtZUluZm8sIElQQzo6RGF0YVJl
ZmVyZW5jZSBkYXRhLCBTdHJpbmcgcGRmVVVJRCkKICAgICBPcGVuUERGRnJvbVRlbXBvcmFyeUZv
bGRlcldpdGhOYXRpdmVBcHBsaWNhdGlvbihzdHJ1Y3QgV2ViS2l0OjpGcmFtZUluZm9EYXRhIHNv
dXJjZUZyYW1lSW5mbywgU3RyaW5nIHBkZlVVSUQpCiAjZW5kaWYKQEAgLTU2Niw2ICs1NjUsMTIg
QEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBTcGVlY2hTeW50aGVzaXNSZXN1bWUo
KSAtPiAoKSBBc3luYwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQor
ICAgIENyZWF0ZVBERkhVRChXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwg
V2ViQ29yZTo6SW50UmVjdCBib3VuZGluZ0JveCkKKyAgICBVcGRhdGVQREZIVURMb2NhdGlvbihX
ZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViQ29yZTo6SW50UmVjdCBi
b3VuZGluZ0JveCkKKyAgICBSZW1vdmVQREZIVUQoV2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVy
IGlkZW50aWZpZXIpCisjZW5kaWYKKwogICAgIENvbmZpZ3VyZUxvZ2dpbmdDaGFubmVsKFN0cmlu
ZyBjaGFubmVsTmFtZSwgZW51bTp1aW50OF90IFdURkxvZ0NoYW5uZWxTdGF0ZSBzdGF0ZSwgZW51
bTp1aW50OF90IFdURkxvZ0xldmVsIGxldmVsKQogCiAjaWYgUExBVEZPUk0oR1RLKQpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0lu
dGVybmFsLmgJKHJldmlzaW9uIDI2NjA4NikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMSArMjMs
MTEgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW1wb3J0
ICJXS1dlYlZpZXdQcml2YXRlLmgiCi0KKyNpbXBvcnQgIlBERlBsdWdpbklkZW50aWZpZXIuaCIK
ICNpbXBvcnQgIlNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlLmgiCiAjaW1wb3J0ICJXS1NoYXJl
U2hlZXQuaCIKICNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb24uaCIKKyNpbXBvcnQgIldL
V2ViVmlld1ByaXZhdGUuaCIKICNpbXBvcnQgIl9XS0F0dGFjaG1lbnRJbnRlcm5hbC5oIgogI2lt
cG9ydCAiX1dLV2ViVmlld1ByaW50Rm9ybWF0dGVySW50ZXJuYWwuaCIKICNpbXBvcnQgPHd0Zi9D
b21wbGV0aW9uSGFuZGxlci5oPgpAQCAtMTMzLDcgKzEzMyw3IEBAIGNsYXNzIFZpZXdHZXN0dXJl
Q29udHJvbGxlcjsKICAgICAvLyBPbmx5IHVzZWQgd2l0aCBVSS1zaWRlIGNvbXBvc2l0aW5nLgog
ICAgIFJldGFpblB0cjxXS1Njcm9sbFZpZXc+IF9zY3JvbGxWaWV3OwogICAgIFJldGFpblB0cjxX
S0NvbnRlbnRWaWV3PiBfY29udGVudFZpZXc7Ci0jZW5kaWYKKyNlbmRpZiAvLyBQTEFURk9STShN
QUMpCiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIFJldGFpblB0cjxXS1Njcm9sbFZp
ZXc+IF9zY3JvbGxWaWV3OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9X
S1dlYlZpZXdQcml2YXRlRm9yVGVzdGluZ01hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3UHJpdmF0ZUZvclRlc3RpbmdNYWMuaAkocmV2
aXNpb24gMjY2MDg2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZp
ZXdQcml2YXRlRm9yVGVzdGluZ01hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBA
IEBpbnRlcmZhY2UgV0tXZWJWaWV3IChXS1Rlc3RpbmdNYWMpCiAKIC0gKHZvaWQpX3NldEhlYWRl
ckJhbm5lckhlaWdodDooaW50KWhlaWdodDsKIC0gKHZvaWQpX3NldEZvb3RlckJhbm5lckhlaWdo
dDooaW50KWhlaWdodDsKKy0gKE5TU2V0PE5TVmlldyAqPiAqKV9wZGZIVURzOwogCiBAZW5kCiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2Vi
Vmlld1Rlc3RpbmdNYWMubW0JKHJldmlzaW9uIDI2NjA4NikKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MTAzLDYgKzEwMywxNSBAQCAtICh2b2lkKV9zZXRGb290ZXJCYW5uZXJIZWlnaHQ6KGludCloZWln
CiAgICAgX3BhZ2UtPnNldEZvb3RlckJhbm5lckhlaWdodEZvclRlc3RpbmcoaGVpZ2h0KTsKIH0K
IAorLSAoTlNTZXQ8TlNWaWV3ICo+ICopX3BkZkhVRHMKK3sKKyNpZiBFTkFCTEUoVUlfUFJPQ0VT
U19QREZfSFVEKQorICAgIHJldHVybiBfaW1wbC0+cGRmSFVEcygpOworI2Vsc2UKKyAgICByZXR1
cm4gbmlsOworI2VuZGlmCit9CisKIC0gKE5TTWVudSAqKV9hY3RpdmVNZW51CiB7CiAgICAgLy8g
RklYTUU6IE9ubHkgdGhlIERPTSBwYXN0ZSBhY2Nlc3MgbWVudSBpcyBzdXBwb3J0ZWQgZm9yIG5v
dy4gSW4gdGhlIGZ1dHVyZSwgaXQgY291bGQgYmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1dlYlZpZXdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaAkocmV2aXNpb24gMjY2MDg2KQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsNyBAQAogCiAjaWYgUExBVEZPUk0oTUFDKQogCisjaW5jbHVkZSAiUERGUGx1Z2luSWRl
bnRpZmllci5oIgogI2luY2x1ZGUgIlBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZS5oIgogI2lu
Y2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIldLTGF5b3V0TW9kZS5oIgpAQCAt
NzYsNiArNzcsMTAgQEAgT0JKQ19DTEFTUyBXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyOwog
T0JKQ19DTEFTUyBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcjsKICNlbmRpZiAvLyBIQVZFKFRP
VUNIX0JBUikKIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCitPQkpDX0NMQVNTIFdL
UERGSFVEVmlldzsKKyNlbmRpZgorCiBuYW1lc3BhY2UgQVBJIHsKIGNsYXNzIEhpdFRlc3RSZXN1
bHQ7CiBjbGFzcyBPYmplY3Q7CkBAIC0xOTAsNiArMTk1LDE0IEBAIHB1YmxpYzoKICAgICB2b2lk
IHZpZXdXaWxsU3RhcnRMaXZlUmVzaXplKCk7CiAgICAgdm9pZCB2aWV3RGlkRW5kTGl2ZVJlc2l6
ZSgpOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICB2b2lkIGNyZWF0ZVBE
RkhVRChQREZQbHVnaW5JZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAg
dm9pZCB1cGRhdGVQREZIVURMb2NhdGlvbihQREZQbHVnaW5JZGVudGlmaWVyLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCByZW1vdmVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmll
cik7CisgICAgdm9pZCByZW1vdmVBbGxQREZIVURzKCk7CisgICAgTlNTZXQgKnBkZkhVRHMoKTsK
KyNlbmRpZgorCiAgICAgdm9pZCByZW5ld0dTdGF0ZSgpOwogICAgIHZvaWQgc2V0RnJhbWVTaXpl
KENHU2l6ZSk7CiAgICAgdm9pZCBkaXNhYmxlRnJhbWVTaXplVXBkYXRlcygpOwpAQCAtNzI5LDcg
Kzc0MiwxMSBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICBSZXRh
aW5QdHI8V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcj4gbV9mdWxsU2NyZWVuV2luZG93Q29u
dHJvbGxlcjsKICNlbmRpZgotICAgIAorCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkK
KyAgICBIYXNoTWFwPFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllciwgUmV0YWluUHRyPFdLUERG
SFVEVmlldz4+IF9wZGZIVURWaWV3czsKKyNlbmRpZgorCiAgICAgUmV0YWluUHRyPFdLU2hhcmVT
aGVldD4gX3NoYXJlU2hlZXQ7CiAKICAgICBSZXRhaW5QdHI8V0tXaW5kb3dWaXNpYmlsaXR5T2Jz
ZXJ2ZXI+IG1fd2luZG93VmlzaWJpbGl0eU9ic2VydmVyOwpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0JKHJldmlzaW9uIDI2NjA4NikKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC02Miw2ICs2Miw3IEBACiAjaW1wb3J0ICJXS0Vycm9ySW50ZXJuYWwuaCIKICNpbXBvcnQg
IldLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaCIKICNpbXBvcnQgIldLSW1tZWRpYXRlQWN0
aW9uQ29udHJvbGxlci5oIgorI2ltcG9ydCAiV0tQREZIVURWaWV3LmgiCiAjaW1wb3J0ICJXS1By
aW50aW5nVmlldy5oIgogI2ltcG9ydCAiV0tTYWZlQnJvd3NpbmdXYXJuaW5nLmgiCiAjaW1wb3J0
ICJXS1NoYXJlU2hlZXQuaCIKQEAgLTE3MTgsNiArMTcxOSw0NSBAQCB2b2lkIFdlYlZpZXdJbXBs
Ojp2aWV3RGlkRW5kTGl2ZVJlc2l6ZSgpCiAgICAgW21fbGF5b3V0U3RyYXRlZ3kgZGlkRW5kTGl2
ZVJlc2l6ZV07CiB9CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCit2b2lkIFdl
YlZpZXdJbXBsOjpjcmVhdGVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIHJlbW92ZVBERkhVRChpZGVudGlm
aWVyKTsKKyAgICBhdXRvIGh1ZCA9IGFkb3B0TlMoW1tXS1BERkhVRFZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6cmVjdCBwbHVnaW5JZGVudGlmaWVyOmlkZW50aWZpZXIgcGFnZTptX3BhZ2UuZ2V0
KCldKTsKKyAgICBbbV92aWV3IGFkZFN1YnZpZXc6aHVkLmdldCgpXTsKKyAgICBfcGRmSFVEVmll
d3MuYWRkKGlkZW50aWZpZXIsIFdURk1vdmUoaHVkKSk7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6
OnVwZGF0ZVBERkhVRExvY2F0aW9uKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoYXV0byBodWQgPSBfcGRmSFVE
Vmlld3MuZ2V0KGlkZW50aWZpZXIpKQorICAgICAgICBbaHVkIHNldEZyYW1lOnJlY3RdOworfQor
Cit2b2lkIFdlYlZpZXdJbXBsOjpyZW1vdmVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllciBpZGVu
dGlmaWVyKQoreworICAgIGlmIChhdXRvIGh1ZCA9IF9wZGZIVURWaWV3cy50YWtlKGlkZW50aWZp
ZXIpKQorICAgICAgICBbaHVkIHJlbW92ZUZyb21TdXBlcnZpZXddOworfQorCit2b2lkIFdlYlZp
ZXdJbXBsOjpyZW1vdmVBbGxQREZIVURzKCkKK3sKKyAgICBmb3IgKGF1dG8mIGh1ZCA6IF9wZGZI
VURWaWV3cy52YWx1ZXMoKSkKKyAgICAgICAgW2h1ZCByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAg
ICBfcGRmSFVEVmlld3MuY2xlYXIoKTsKK30KKworTlNTZXQgKldlYlZpZXdJbXBsOjpwZGZIVURz
KCkKK3sKKyAgICBOU011dGFibGVTZXQ8TlNWaWV3ICo+ICpzZXQgPSBbTlNNdXRhYmxlU2V0IHNl
dFdpdGhDYXBhY2l0eTpfcGRmSFVEVmlld3Muc2l6ZSgpXTsKKyAgICBmb3IgKGF1dG8mIGh1ZCA6
IF9wZGZIVURWaWV3cy52YWx1ZXMoKSkKKyAgICAgICAgW3NldCBhZGRPYmplY3Q6aHVkLmdldCgp
XTsKKyAgICByZXR1cm4gc2V0OworfQorCisjZW5kaWYgLy8gRU5BQkxFKFVJX1BST0NFU1NfUERG
X0hVRCkKKwogdm9pZCBXZWJWaWV3SW1wbDo6cmVuZXdHU3RhdGUoKQogewogICAgIGlmIChtX3Rl
eHRJbmRpY2F0b3JXaW5kb3cpCkBAIC01MzkxLDYgKzU0MzEsMTEgQEAgdm9pZCBXZWJWaWV3SW1w
bDo6bW91c2VNb3ZlZChOU0V2ZW50ICpldgogICAgIGlmIChtX2lnbm9yZXNOb25XaGVlbEV2ZW50
cykKICAgICAgICAgcmV0dXJuOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAg
ICBmb3IgKGF1dG8mIGh1ZCA6IF9wZGZIVURWaWV3cy52YWx1ZXMoKSkKKyAgICAgICAgW2h1ZCBt
b3VzZU1vdmVkOmV2ZW50XTsKKyNlbmRpZgorCiAgICAgLy8gV2hlbiBhIHZpZXcgaXMgZmlyc3Qg
cmVzcG9uZGVyLCBpdCBnZXRzIG1vdXNlIG1vdmVkIGV2ZW50cyBldmVuIHdoZW4gdGhlIG1vdXNl
IGlzIG91dHNpZGUgaXRzIHZpc2libGUgcmVjdC4KICAgICBpZiAobV92aWV3LmdldEF1dG9yZWxl
YXNlZCgpID09IFttX3ZpZXcgd2luZG93XS5maXJzdFJlc3BvbmRlciAmJiAhTlNQb2ludEluUmVj
dChbbV92aWV3IGNvbnZlcnRQb2ludDpbZXZlbnQgbG9jYXRpb25JbldpbmRvd10gZnJvbVZpZXc6
bmlsXSwgW21fdmlldyB2aXNpYmxlUmVjdF0pKQogICAgICAgICByZXR1cm47CkBAIC01NDM5LDYg
KzU0ODQsMTEgQEAgdm9pZCBXZWJWaWV3SW1wbDo6bW91c2VEb3duKE5TRXZlbnQgKmV2ZQogICAg
IGlmIChtX2lnbm9yZXNOb25XaGVlbEV2ZW50cykKICAgICAgICAgcmV0dXJuOwogCisjaWYgRU5B
QkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBmb3IgKGF1dG8mIGh1ZCA6IF9wZGZIVURWaWV3
cy52YWx1ZXMoKSkKKyAgICAgICAgW2h1ZCBtb3VzZURvd246ZXZlbnRdOworI2VuZGlmCisKICAg
ICBzZXRMYXN0TW91c2VEb3duRXZlbnQoZXZlbnQpOwogICAgIHNldElnbm9yZXNNb3VzZURyYWdn
ZWRFdmVudHMoZmFsc2UpOwogCkBAIC01NDUwLDYgKzU1MDAsMTEgQEAgdm9pZCBXZWJWaWV3SW1w
bDo6bW91c2VVcChOU0V2ZW50ICpldmVudAogICAgIGlmIChtX2lnbm9yZXNOb25XaGVlbEV2ZW50
cykKICAgICAgICAgcmV0dXJuOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAg
ICBmb3IgKGF1dG8mIGh1ZCA6IF9wZGZIVURWaWV3cy52YWx1ZXMoKSkKKyAgICAgICAgW2h1ZCBt
b3VzZVVwOmV2ZW50XTsKKyNlbmRpZgorCiAgICAgc2V0TGFzdE1vdXNlRG93bkV2ZW50KG5pbCk7
CiAgICAgbW91c2VVcEludGVybmFsKGV2ZW50KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1BERi9XS1BERkhVRFZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9QREYvV0tQREZIVURWaWV3LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvUERGL1dLUERGSFVEVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKworI2lt
cG9ydCAiUERGUGx1Z2luSWRlbnRpZmllci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNz
IFdlYlBhZ2VQcm94eTsKK30KKworQGludGVyZmFjZSBXS1BERkhVRFZpZXcgOiBOU1ZpZXcKKwor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSBwbHVnaW5JZGVudGlm
aWVyOihXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIpcGx1Z2luSWRlbnRpZmllciBwYWdlOihX
ZWJLaXQ6OldlYlBhZ2VQcm94eSYpcGFnZTsKKy0gKHZvaWQpc2V0RnJhbWU6KE5TUmVjdClmcmFt
ZTsKKy0gKHZvaWQpbW91c2VNb3ZlZDooTlNFdmVudCAqKWV2ZW50OworLSAodm9pZCltb3VzZURv
d246KE5TRXZlbnQgKilldmVudDsKKy0gKHZvaWQpbW91c2VVcDooTlNFdmVudCAqKWV2ZW50Owor
CitAZW5kCisKKyNlbmRpZiAvLyBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvUERGL1dLUERGSFVEVmlldy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QREYvV0tQREZIVURWaWV3Lm1tCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BERi9XS1BERkhVRFZpZXcubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwzNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIldLUERGSFVEVmlldy5oIgorCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hV
RCkKKworI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1wb3J0IDxRdWFydHpDb3JlL0NBVHJh
bnNhY3Rpb24uaD4KKyNpbXBvcnQgPHBhbC9zcGkvY29jb2EvUXVhcnR6Q29yZVNQSS5oPgorI2lt
cG9ydCA8cGFsL3NwaS9tYWMvTlNJbWFnZVNQSS5oPgorI2ltcG9ydCA8d3RmL1dlYWtPYmpDUHRy
Lmg+CisKKy8vICBUaGUgSFVEIGl0ZW1zIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgc3BhY2lu
ZzoKKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisvLyB8ICAgICAgMTIgICAgICAgIDEyICAgICAgMTAgICAgIDEyICAgICAgICAxMiAgICAgIHwK
Ky8vIHwgICAgIC0tLS0gICAgICAtLS0tICAgICB8ICAgICAtLS0tICAgICAgLS0tLSAgICAgfAor
Ly8gfCAxMCB8aWNvbnwgMTAgfGljb258IDEwIHwgMTAgfGljb258IDEwIHxpY29ufCAxMCB8Cisv
LyB8ICAgICAtLS0tICAgICAgLS0tLSAgICAgfCAgICAgLS0tLSAgICAgIC0tLS0gICAgIHwKKy8v
IHwgICAgICAxMiAgICAgICAgMTIgICAgICAxMCAgICAgMTIgICAgICAgIDEyICAgICAgfAorLy8g
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICB3
aGVyZSB0aGUgMTIgcG9pbnQgdmVydGljYWwgc3BhY2luZyBpcyBhbmNob3JlZCB0byB0aGUgc21h
bGxlc3QgaWNvbiBpbWFnZSwKKy8vICBhbmQgYWxsIHN1YnNlcXVlbnQgaWNvbnMgd2l0aCBiZSBj
ZW50ZXJlZCB2ZXJ0aWNhbGx5IHdpdGggdGhlIHNtYWxsZXN0IGljb24uCisKK3N0YXRpYyBjb25z
dCBDR0Zsb2F0IGtMYXllclZlcnRpY2FsT2Zmc2V0ID0gNDA7CitzdGF0aWMgY29uc3QgQ0dGbG9h
dCBrTGF5ZXJDb3JuZXJSYWRpdXMgPSAxMjsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGtMYXllckdy
YXlDb21wb25lbnQgPSAwOworc3RhdGljIGNvbnN0IENHRmxvYXQga0xheWVyQWxwaGEgPSAwLjc1
Oworc3RhdGljIGNvbnN0IENHRmxvYXQga0xheWVySW1hZ2VTY2FsZSA9IDEuNTsKK3N0YXRpYyBj
b25zdCBDR0Zsb2F0IGtMYXllclNlcGVyYXRvckNvbnRyb2xsZXJTaXplID0gMS41Oworc3RhdGlj
IGNvbnN0IENHRmxvYXQga0xheWVyQ29udHJvbGxlckhvcml6b250YWxNYXJnaW4gPSAxMC4wOwor
c3RhdGljIGNvbnN0IENHRmxvYXQga0xheWVySW1hZ2VWZXJ0aWNhbE1hcmdpbiA9IDEyLjA7Citz
dGF0aWMgY29uc3QgQ0dGbG9hdCBrTGF5ZXJTZXBlcmF0b3JWZXJ0aWNhbE1hcmdpbiA9IDEwLjA7
CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrQ29udHJvbExheWVyTm9ybWFsQWxwaGEgPSAwLjc1Owor
c3RhdGljIGNvbnN0IENHRmxvYXQga0NvbnRyb2xMYXllckRvd25BbHBoYSA9IDAuNDU7CisKK3N0
YXRpYyBOU1N0cmluZyAqIGNvbnN0IFBERkhVRFpvb21JbkNvbnRyb2wgPSBAInBsdXMubWFnbmlm
eWluZ2dsYXNzIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFBERkhVRFpvb21PdXRDb250cm9s
ID0gQCJtaW51cy5tYWduaWZ5aW5nZ2xhc3MiOworc3RhdGljIE5TU3RyaW5nICogY29uc3QgUERG
SFVETGF1bmNoUHJldmlld0NvbnRyb2wgPSBAInByZXZpZXciOworc3RhdGljIE5TU3RyaW5nICog
Y29uc3QgUERGSFVEU2F2ZVBERkNvbnRyb2wgPSBAImFycm93LmRvd24uY2lyY2xlIjsKK3N0YXRp
YyBOU1N0cmluZyAqIGNvbnN0IFBERkhVRFNlcGVyYXRvckNvbnRyb2wgPSBAIlBERkhVRFNlcGVy
YXRvckNvbnRyb2wiOworCitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrTGF5ZXJGYWRlSW5UaW1lSW50
ZXJ2YWwgPSAwLjI1Oworc3RhdGljIGNvbnN0IENHRmxvYXQga0xheWVyRmFkZU91dFRpbWVJbnRl
cnZhbCA9IDAuNTsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGtJbml0aWFsSGlkZVRpbWVJbnRlcnZh
bCA9IDMuMDsKKworc3RhdGljIE5TQXJyYXk8TlNTdHJpbmcgKj4gKmNvbnRyb2xBcnJheSgpCit7
CisgICAgcmV0dXJuIEBbCisgICAgICAgIFBERkhVRFpvb21PdXRDb250cm9sLAorICAgICAgICBQ
REZIVURab29tSW5Db250cm9sLAorICAgICAgICBQREZIVURTZXBlcmF0b3JDb250cm9sLAorICAg
ICAgICBQREZIVURMYXVuY2hQcmV2aWV3Q29udHJvbCwKKyAgICAgICAgUERGSFVEU2F2ZVBERkNv
bnRyb2wKKyAgICBdOworfQorCitzdGF0aWMgTlNDb2xvciogUERGQ0dDb2xvckNyZWF0ZUdlbmVy
aWNSR0IoQ0dGbG9hdCByZWQsIENHRmxvYXQgZ3JlZW4sIENHRmxvYXQgYmx1ZSwgQ0dGbG9hdCBh
bHBoYSkKK3sKKyAgICBhdXRvIGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0
ZURldmljZVJHQigpKTsKKyAgICBjb25zdCBDR0Zsb2F0IGNvbXBvbmVudHNbNF0gPSB7IHJlZCwg
Z3JlZW4sIGJsdWUsIGFscGhhIH07CisgICAgYXV0byBjZ0NvbG9yID0gYWRvcHRDRihDR0NvbG9y
Q3JlYXRlKGNvbG9yU3BhY2UuZ2V0KCksIGNvbXBvbmVudHMpKTsKKyAgICByZXR1cm4gW05TQ29s
b3IgY29sb3JXaXRoQ0dDb2xvcjpjZ0NvbG9yLmdldCgpXTsKK30KKworQGltcGxlbWVudGF0aW9u
IFdLUERGSFVEVmlldyB7CitAcHJpdmF0ZQorICAgIFdlYWtQdHI8V2ViS2l0OjpXZWJQYWdlUHJv
eHk+IF9wYWdlOworICAgIFJldGFpblB0cjxOU1N0cmluZz4gX2FjdGl2ZUNvbnRyb2w7CisgICAg
V2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVyIF9wbHVnaW5JZGVudGlmaWVyOworICAgIENHRmxv
YXQgX2RldmljZVNjYWxlRmFjdG9yOworICAgIFJldGFpblB0cjxDQUxheWVyPiBfbGF5ZXI7Cisg
ICAgUmV0YWluUHRyPENBTGF5ZXI+IF9hY3RpdmVMYXllcjsKKyAgICBDR1NpemUgX2ZyYW1lU2l6
ZTsKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeTxOU1N0cmluZyosIE5TSW1hZ2Uq
Pj4gX2NhY2hlZEljb25zOworICAgIEJPT0wgX3Zpc2libGU7CisgICAgYm9vbCBfbW91c2VNb3Zl
ZFRvSFVEOworICAgIGJvb2wgX2luaXRpYWxIaWRlVGltZXJGaXJlZDsKK30KKworLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSBwbHVnaW5JZGVudGlmaWVyOihXZWJL
aXQ6OlBERlBsdWdpbklkZW50aWZpZXIpcGx1Z2luSWRlbnRpZmllciBwYWdlOihXZWJLaXQ6Oldl
YlBhZ2VQcm94eSYpcGFnZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhGcmFt
ZTpmcmFtZV0pKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIHNlbGYud2FudHNMYXll
ciA9IFlFUzsKKyAgICBfY2FjaGVkSWNvbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFy
eSBhbGxvY10gaW5pdF0pOworICAgIF9wbHVnaW5JZGVudGlmaWVyID0gcGx1Z2luSWRlbnRpZmll
cjsKKyAgICBfcGFnZSA9IG1ha2VXZWFrUHRyKHBhZ2UpOworICAgIF9kZXZpY2VTY2FsZUZhY3Rv
ciA9IHBhZ2UuZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBfdmlzaWJsZSA9IFlFUzsKKyAgICBb
c2VsZiBfc2V0dXBMYXllcjpzZWxmLmxheWVyXTsKKyAgICBbc2VsZiBzZXRGcmFtZTpmcmFtZV07
CisKKyAgICBXZWFrT2JqQ1B0cjxXS1BERkhVRFZpZXc+IHdlYWtTZWxmID0gc2VsZjsKKyAgICBk
aXNwYXRjaF9hZnRlcihkaXNwYXRjaF90aW1lKERJU1BBVENIX1RJTUVfTk9XLCAoaW50NjRfdCko
a0luaXRpYWxIaWRlVGltZUludGVydmFsICogTlNFQ19QRVJfU0VDKSksIGRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCksIF57CisgICAgICAgIFt3ZWFrU2VsZiBfaGlkZVRpbWVyRmlyZWRdOworICAg
IH0pOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2xh
eWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0g
KHZvaWQpc2V0RnJhbWU6KE5TUmVjdClyZWN0Cit7CisgICAgW3N1cGVyIHNldEZyYW1lOnJlY3Rd
OworICAgIF9mcmFtZVNpemUgPSByZWN0LnNpemU7CisKKyAgICBbQ0FUcmFuc2FjdGlvbiBiZWdp
bl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKKyAgICBDR1Jl
Y3QgbGF5ZXJCb3VuZHMgPSBbX2xheWVyIGJvdW5kc107CisgICAgW19sYXllciBzZXRGcmFtZTpD
R1JlY3RNYWtlKHJlY3Quc2l6ZS53aWR0aCAvIDIuMCAtIGxheWVyQm91bmRzLnNpemUud2lkdGgg
LyAyLjAsIGtMYXllclZlcnRpY2FsT2Zmc2V0LCBsYXllckJvdW5kcy5zaXplLndpZHRoLCBsYXll
ckJvdW5kcy5zaXplLmhlaWdodCldOworICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Cit9CisK
Ky0gKHZvaWQpX2hpZGVUaW1lckZpcmVkCit7CisgICAgX2luaXRpYWxIaWRlVGltZXJGaXJlZCA9
IHRydWU7CisgICAgaWYgKCFfbW91c2VNb3ZlZFRvSFVEKQorICAgICAgICBbc2VsZiBfc2V0Vmlz
aWJsZTpmYWxzZV07Cit9CisKKy0gKHZvaWQpX3NldFZpc2libGU6KGJvb2wpaXNWaXNpYmxlCit7
CisgICAgaWYgKF92aXNpYmxlID09IGlzVmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOworICAgIF92
aXNpYmxlID0gaXNWaXNpYmxlOworICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICBbQ0FU
cmFuc2FjdGlvbiBzZXRBbmltYXRpb25EdXJhdGlvbjogaXNWaXNpYmxlID8ga0xheWVyRmFkZUlu
VGltZUludGVydmFsIDoga0xheWVyRmFkZU91dFRpbWVJbnRlcnZhbF07CisgICAgW3NlbGYgX3Nl
dExheWVyT3BhY2l0eTppc1Zpc2libGUgPyBrTGF5ZXJBbHBoYSA6IDAuMF07CisgICAgW0NBVHJh
bnNhY3Rpb24gY29tbWl0XTsKK30KKworLSAodm9pZCltb3VzZU1vdmVkOihOU0V2ZW50ICopZXZl
bnQKK3sKKyAgICBpZiAoQ0dSZWN0Q29udGFpbnNQb2ludChbc2VsZiBjb252ZXJ0UmVjdDpDR1Jl
Y3RJbnNldChbX2xheWVyIGZyYW1lXSwgLTE2LjAsIC0xNi4wKSB0b1ZpZXc6bmlsXSwgTlNQb2lu
dFRvQ0dQb2ludChldmVudC5sb2NhdGlvbkluV2luZG93KSkpIHsKKyAgICAgICAgW3NlbGYgX3Nl
dFZpc2libGU6dHJ1ZV07CisgICAgICAgIF9tb3VzZU1vdmVkVG9IVUQgPSB0cnVlOworICAgIH0g
ZWxzZSBpZiAoX2luaXRpYWxIaWRlVGltZXJGaXJlZCkKKyAgICAgICAgW3NlbGYgX3NldFZpc2li
bGU6ZmFsc2VdOworfQorCistICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50Cit7Cisg
ICAgX2FjdGl2ZUNvbnRyb2wgPSBbc2VsZiBfY29udHJvbEZvckV2ZW50OmV2ZW50XTsKKyAgICBp
ZiAoW19hY3RpdmVDb250cm9sIGlzRXF1YWxUb1N0cmluZzpQREZIVURTZXBlcmF0b3JDb250cm9s
XSkKKyAgICAgICAgX2FjdGl2ZUNvbnRyb2wgPSBuaWw7CisgICAgaWYgKF9hY3RpdmVDb250cm9s
KSB7CisgICAgICAgIC8vIFVwZGF0ZSByZW5kZXJpbmcgdG8gaGlnaGxpZ2h0IGl0Li4KKyAgICAg
ICAgX2FjdGl2ZUxheWVyID0gW3NlbGYgX2xheWVyRm9yRXZlbnQ6ZXZlbnRdOworICAgICAgICAK
KyAgICAgICAgLy8gVXBkYXRlIGxheWVyIGltYWdlOyBkbyBub3QgYW5pbWF0ZQorICAgICAgICBb
Q0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVB
Y3Rpb25zOllFU107CisgICAgICAgIAorICAgICAgICBbX2FjdGl2ZUxheWVyIHNldE9wYWNpdHk6
IGtDb250cm9sTGF5ZXJEb3duQWxwaGFdOworICAgICAgICAKKyAgICAgICAgW0NBVHJhbnNhY3Rp
b24gY29tbWl0XTsKKyAgICB9Cit9CisKKy0gKHZvaWQpbW91c2VVcDooTlNFdmVudCAqKWV2ZW50
Cit7CisgICAgaWYgKCFfYWN0aXZlQ29udHJvbCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IE5TU3RyaW5nKiBtb3VzZVVwQ29udHJvbCA9IFtzZWxmIF9jb250cm9sRm9yRXZlbnQ6ZXZlbnRd
OworICAgIGlmIChbX2FjdGl2ZUNvbnRyb2wgaXNFcXVhbFRvU3RyaW5nOm1vdXNlVXBDb250cm9s
XSkKKyAgICAgICAgW3NlbGYgX3BlcmZvcm1BY3Rpb25Gb3JDb250cm9sOl9hY3RpdmVDb250cm9s
LmdldCgpXTsKKyAgICAKKyAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJhbnNh
Y3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKKyAgICBbX2FjdGl2ZUxheWVyIHNldE9wYWNp
dHk6a0NvbnRyb2xMYXllck5vcm1hbEFscGhhXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRd
OworCisgICAgX2FjdGl2ZUxheWVyID0gbmlsOworICAgIF9hY3RpdmVDb250cm9sID0gbmlsOwor
fQorCistIChPcHRpb25hbDxOU1VJbnRlZ2VyPilfY29udHJvbEluZGV4Rm9yRXZlbnQ6KE5TRXZl
bnQgKilldmVudAoreworICAgIENHUG9pbnQgaW5pdGlhbFBvaW50ID0gTlNQb2ludFRvQ0dQb2lu
dChldmVudC5sb2NhdGlvbkluV2luZG93KTsKKyAgICBpbml0aWFsUG9pbnQueCAtPSBbX2xheWVy
IGZyYW1lXS5vcmlnaW4ueDsKKyAgICBpbml0aWFsUG9pbnQueSAtPSBbX2xheWVyIGZyYW1lXS5v
cmlnaW4ueTsKKyAgICBmb3IgKE5TVUludGVnZXIgaW5kZXggPSAwOyBpbmRleCA8IFtfbGF5ZXIg
c3VibGF5ZXJzXS5jb3VudDsgaW5kZXgrKykgeworICAgICAgICBDQUxheWVyICpzdWJMYXllciA9
IFtfbGF5ZXIgc3VibGF5ZXJzXVtpbmRleF07CisgICAgICAgIE5TUmVjdCB3aW5kb3dTcGFjZVJl
Y3QgPSBbc2VsZiBjb252ZXJ0UmVjdDpzdWJMYXllci5mcmFtZSB0b1ZpZXc6bmlsXTsKKyAgICAg
ICAgaWYgKENHUmVjdENvbnRhaW5zUG9pbnQod2luZG93U3BhY2VSZWN0LCBpbml0aWFsUG9pbnQp
KQorICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgIH0KKyAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworfQorCistIChOU1N0cmluZyAqKV9jb250cm9sRm9yRXZlbnQ6KE5TRXZlbnQgKilldmVu
dAoreworICAgIGlmIChhdXRvIGluZGV4ID0gW3NlbGYgX2NvbnRyb2xJbmRleEZvckV2ZW50OmV2
ZW50XSkKKyAgICAgICAgcmV0dXJuIGNvbnRyb2xBcnJheSgpWyppbmRleF07CisgICAgcmV0dXJu
IG5pbDsKK30KKworLSAoQ0FMYXllciAqKV9sYXllckZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQK
K3sKKyAgICBpZiAoYXV0byBpbmRleCA9IFtzZWxmIF9jb250cm9sSW5kZXhGb3JFdmVudDpldmVu
dF0pCisgICAgICAgIHJldHVybiBbX2xheWVyIHN1YmxheWVyc11bKmluZGV4XTsKKyAgICByZXR1
cm4gbmlsOworfQorCistICh2b2lkKV9wZXJmb3JtQWN0aW9uRm9yQ29udHJvbDooTlNTdHJpbmcg
Kiljb250cm9sCit7CisgICAgaWYgKCFfdmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1
dG8qIHBhZ2UgPSBfcGFnZS5nZXQoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAoW2NvbnRyb2wgaXNFcXVhbFRvU3RyaW5nOlBERkhVRFpvb21JbkNvbnRyb2xdKQor
ICAgICAgICBwYWdlLT5wZGZab29tSW4oX3BsdWdpbklkZW50aWZpZXIpOworICAgIGVsc2UgaWYg
KFtjb250cm9sIGlzRXF1YWxUb1N0cmluZzpQREZIVURab29tT3V0Q29udHJvbF0pCisgICAgICAg
IHBhZ2UtPnBkZlpvb21PdXQoX3BsdWdpbklkZW50aWZpZXIpOworICAgIGVsc2UgaWYgKFtjb250
cm9sIGlzRXF1YWxUb1N0cmluZzpQREZIVURTYXZlUERGQ29udHJvbF0pCisgICAgICAgIHBhZ2Ut
PnBkZlNhdmVUb1BERihfcGx1Z2luSWRlbnRpZmllcik7CisgICAgZWxzZSBpZiAoW2NvbnRyb2wg
aXNFcXVhbFRvU3RyaW5nOlBERkhVRExhdW5jaFByZXZpZXdDb250cm9sXSkKKyAgICAgICAgcGFn
ZS0+cGRmT3BlbldpdGhQcmV2aWV3KF9wbHVnaW5JZGVudGlmaWVyKTsKK30KKworLSAodm9pZClf
bG9hZEljb25JbWFnZXMKK3sKKyAgICBmb3IgKE5TU3RyaW5nICpjb250cm9sTmFtZSBpbiBjb250
cm9sQXJyYXkoKSkKKyAgICAgICAgW3NlbGYgX2dldEltYWdlRm9yQ29udHJvbE5hbWU6IGNvbnRy
b2xOYW1lXTsKK30KKworLSAodm9pZClfc2V0dXBMYXllcjooQ0FMYXllciAqKXBhcmVudExheWVy
Cit7CisgICAgX2xheWVyID0gYWRvcHROUyhbW0NBTGF5ZXIgYWxsb2NdIGluaXRdKTsKKyAgICBb
X2xheWVyIHNldENvcm5lclJhZGl1czprTGF5ZXJDb3JuZXJSYWRpdXNdOworICAgIAorICAgIGF1
dG8gY29sb3IgPSBhZG9wdE5TKFBERkNHQ29sb3JDcmVhdGVHZW5lcmljUkdCKGtMYXllckdyYXlD
b21wb25lbnQsIGtMYXllckdyYXlDb21wb25lbnQsIGtMYXllckdyYXlDb21wb25lbnQsIDEuMCkp
OworICAgIFtfbGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOltjb2xvciBDR0NvbG9yXV07CisgICAg
W3NlbGYgX3NldExheWVyT3BhY2l0eTprTGF5ZXJBbHBoYV07CisgICAgCisgICAgW3NlbGYgX2xv
YWRJY29uSW1hZ2VzXTsKKyAgICBDR0Zsb2F0IG1pbkljb25JbWFnZUhlaWdodCA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8Q0dGbG9hdD46Om1heCgpOworICAgIGZvciAoTlNJbWFnZSogaW1hZ2UgaW4g
W19jYWNoZWRJY29ucyBhbGxWYWx1ZXNdKQorICAgICAgICBtaW5JY29uSW1hZ2VIZWlnaHQgPSBz
dGQ6Om1pbihtaW5JY29uSW1hZ2VIZWlnaHQsIChpbWFnZS5zaXplLmhlaWdodCAvIF9kZXZpY2VT
Y2FsZUZhY3RvcikpOworICAgIAorICAgIENHRmxvYXQgZHggPSBrTGF5ZXJDb250cm9sbGVySG9y
aXpvbnRhbE1hcmdpbjsKKyAgICBmb3IgKE5TU3RyaW5nICpjb250cm9sTmFtZSBpbiBjb250cm9s
QXJyYXkoKSkgeworICAgICAgICBhdXRvIGNvbnRyb2xMYXllciA9IGFkb3B0TlMoW1tDQUxheWVy
IGFsbG9jXSBpbml0XSk7CisgICAgICAgIENHRmxvYXQgZHkgPSAwLjA7CisgICAgICAgIENHRmxv
YXQgY29udHJvbGxlcldpZHRoID0gMC4wOworICAgICAgICBDR0Zsb2F0IGNvbnRyb2xsZXJIZWln
aHQgPSAwLjA7CisKKyAgICAgICAgaWYgKFtjb250cm9sTmFtZSBpc0VxdWFsVG9TdHJpbmc6IFBE
RkhVRFNlcGVyYXRvckNvbnRyb2xdKSB7CisgICAgICAgICAgICBkeSA9IGtMYXllclNlcGVyYXRv
clZlcnRpY2FsTWFyZ2luOworICAgICAgICAgICAgY29udHJvbGxlcldpZHRoID0ga0xheWVyU2Vw
ZXJhdG9yQ29udHJvbGxlclNpemU7CisgICAgICAgICAgICBjb250cm9sbGVySGVpZ2h0ID0gbWlu
SWNvbkltYWdlSGVpZ2h0ICsgKDIuMCAqIGtMYXllckltYWdlVmVydGljYWxNYXJnaW4pIC0gKDIu
MCAqIGtMYXllclNlcGVyYXRvclZlcnRpY2FsTWFyZ2luKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgW2NvbnRyb2xMYXllciBzZXRCYWNrZ3JvdW5kQ29sb3I6IFtbTlNDb2xvciBsaWdodEdy
YXlDb2xvcl0gQ0dDb2xvcl1dOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgTlNJbWFn
ZSogY29udHJvbEltYWdlID0gW3NlbGYgX2dldEltYWdlRm9yQ29udHJvbE5hbWU6Y29udHJvbE5h
bWVdOworICAgICAgICAgICAgW2NvbnRyb2xMYXllciBzZXRDb250ZW50czogY29udHJvbEltYWdl
XTsKKyAgICAgICAgICAgIFtjb250cm9sTGF5ZXIgc2V0T3BhY2l0eToga0NvbnRyb2xMYXllck5v
cm1hbEFscGhhXTsKKworICAgICAgICAgICAgZHkgPSBrTGF5ZXJJbWFnZVZlcnRpY2FsTWFyZ2lu
OworICAgICAgICAgICAgY29udHJvbGxlcldpZHRoID0gW2NvbnRyb2xJbWFnZSBzaXplXS53aWR0
aCAvIF9kZXZpY2VTY2FsZUZhY3RvcjsKKyAgICAgICAgICAgIGNvbnRyb2xsZXJIZWlnaHQgPSBb
Y29udHJvbEltYWdlIHNpemVdLmhlaWdodCAvIF9kZXZpY2VTY2FsZUZhY3RvcjsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZHkgLT0gKGNvbnRyb2xsZXJIZWlnaHQgLSBtaW5JY29uSW1hZ2VI
ZWlnaHQpIC8gMi4wOworICAgICAgICAgICAgCisgICAgICAgICAgICBbY29udHJvbExheWVyIHNl
dEZpbHRlcnM6QFtbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyQ29sb3JJbnZlcnRd
XV07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFtjb250cm9sTGF5ZXIgc2V0RnJhbWU6
Q0dSZWN0TWFrZShkeCwgZHksIGNvbnRyb2xsZXJXaWR0aCwgY29udHJvbGxlckhlaWdodCldOwor
ICAgICAgICBbX2xheWVyIGFkZFN1YmxheWVyOmNvbnRyb2xMYXllci5nZXQoKV07CisgICAgICAg
IAorICAgICAgICBkeCArPSBjb250cm9sbGVyV2lkdGggKyBrTGF5ZXJDb250cm9sbGVySG9yaXpv
bnRhbE1hcmdpbjsKKyAgICB9CisgICAgCisgICAgW19sYXllciBzZXRGcmFtZTpDR1JlY3RNYWtl
KDAsIGtMYXllclZlcnRpY2FsT2Zmc2V0LCBkeCwgbWluSWNvbkltYWdlSGVpZ2h0ICsgMi4wICog
a0xheWVySW1hZ2VWZXJ0aWNhbE1hcmdpbildOworICAgIFtwYXJlbnRMYXllciBhZGRTdWJsYXll
cjogX2xheWVyLmdldCgpXTsKK30KKworLSAodm9pZClfcmVkcmF3TGF5ZXIKK3sKKyAgICBbX2Nh
Y2hlZEljb25zIHJlbW92ZUFsbE9iamVjdHNdOworICAgIENBTGF5ZXIgKnBhcmVudExheWVyID0g
W19sYXllciBzdXBlcmxheWVyXTsKKyAgICBbX2xheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsK
KyAgICBbc2VsZiBfc2V0dXBMYXllcjpwYXJlbnRMYXllcl07CisgICAgW3NlbGYgc2V0RnJhbWVT
aXplOl9mcmFtZVNpemVdOworfQorCistIChOU0ltYWdlKilfZ2V0SW1hZ2VGb3JDb250cm9sTmFt
ZTooTlNTdHJpbmcgKiljb250cm9sCit7CisgICAgTlNJbWFnZSogaWNvbkltYWdlID0gX2NhY2hl
ZEljb25zLmdldCgpW2NvbnRyb2xdOworICAgIGlmIChpY29uSW1hZ2UpCisgICAgICAgIHJldHVy
biBpY29uSW1hZ2U7CisKKyAgICBpY29uSW1hZ2UgPSBbTlNJbWFnZSBfaW1hZ2VXaXRoU3lzdGVt
U3ltYm9sTmFtZTogY29udHJvbF07CisgICAgaWYgKCFpY29uSW1hZ2UpCisgICAgICAgIHJldHVy
biBuaWw7CisKKyAgICBpY29uSW1hZ2UgPSBbaWNvbkltYWdlIF9pbWFnZVdpdGhDb25maWd1cmF0
aW9uOkB7CisgICAgICAgIE5TSW1hZ2VBbHRlcm5hdGVDcml0ZXJpb25Gb250IDogW05TRm9udCBw
cmVmZXJyZWRGb250Rm9yVGV4dFN0eWxlOk5TRm9udFRleHRTdHlsZVRpdGxlMiBvcHRpb25zOkB7
IH1dLAorICAgICAgICBOU0ltYWdlQWx0ZXJuYXRlQ3JpdGVyaW9uU3ltYm9sU2NhbGUgOiBAKE5T
SW1hZ2VTeW1ib2xTY2FsZUxhcmdlKQorICAgIH1dOworICAgICAgICAKKyAgICBOU1JlY3QgaWNv
bkltYWdlUmVjdCA9IE5TTWFrZVJlY3QoMCwgMCwgW2ljb25JbWFnZSBzaXplXS53aWR0aCAqIGtM
YXllckltYWdlU2NhbGUgKiBfZGV2aWNlU2NhbGVGYWN0b3IsIFtpY29uSW1hZ2Ugc2l6ZV0uaGVp
Z2h0ICoga0xheWVySW1hZ2VTY2FsZSAqIF9kZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgTlNJbWFn
ZVJlcCogaWNvbkltYWdlUmVwID0gW2ljb25JbWFnZSBiZXN0UmVwcmVzZW50YXRpb25Gb3JSZWN0
Omljb25JbWFnZVJlY3QgY29udGV4dDpuaWwgaGludHM6bmlsXTsKKyAgICBpY29uSW1hZ2UgPSBb
TlNJbWFnZSBpbWFnZVdpdGhJbWFnZVJlcDogaWNvbkltYWdlUmVwXTsKKyAgICAKKyAgICBfY2Fj
aGVkSWNvbnMuZ2V0KClbY29udHJvbF0gPSBpY29uSW1hZ2U7CisgICAgcmV0dXJuIGljb25JbWFn
ZTsKK30KKworLSAodm9pZClfc2V0TGF5ZXJPcGFjaXR5OihDR0Zsb2F0KWFscGhhCit7CisgICAg
W19sYXllciBzZXRPcGFjaXR5OmFscGhhXTsKKyAgICBmb3IgKENBTGF5ZXIgKnN1YkxheWVyIGlu
IFtfbGF5ZXIgc3VibGF5ZXJzXSkKKyAgICAgICAgW3N1YkxheWVyIHNldE9wYWNpdHk6YWxwaGFd
OworfQorCitAZW5kCisKKyNlbmRpZiAvLyBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQpJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCShy
ZXZpc2lvbiAyNjYwODYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVBy
b3h5SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg4LDE2ICsxMDg4LDYgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OmRpZFBlcmZvcm1EaWN0aW9uYXJ5TAogICAgIHBhZ2VDbGllbnQoKS5kaWRQZXJm
b3JtRGljdGlvbmFyeUxvb2t1cChkaWN0aW9uYXJ5UG9wdXBJbmZvKTsKIH0KIAotdm9pZCBXZWJQ
YWdlUHJveHk6OnNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGlj
YXRpb24oY29uc3QgU3RyaW5nJiwgRnJhbWVJbmZvRGF0YSYmLCBjb25zdCBJUEM6OkRhdGFSZWZl
cmVuY2UmLCBjb25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgV2ViUGFnZVByb3h5OjpvcGVuUERGRnJvbVRlbXBvcmFyeUZvbGRlcldpdGhOYXRpdmVBcHBs
aWNhdGlvbihGcmFtZUluZm9EYXRhJiYsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQogdm9pZCBXZWJQYWdlUHJveHk6OnNldFJlbW90ZUxheWVyVHJlZVJvb3RO
b2RlKFJlbW90ZUxheWVyVHJlZU5vZGUqIHJvb3ROb2RlKQogewogICAgIHBhZ2VDbGllbnQoKS5z
ZXRSZW1vdGVMYXllclRyZWVSb290Tm9kZShyb290Tm9kZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMuaAkocmV2aXNpb24gMjY2MDg2
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE5MCw2ICsxOTAsMTMgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcmVn
aXN0ZXJJbnNlcnRpb25VbmRvR3JvdXBpbmcoKSBvdmVycmlkZTsKIAorI2lmIEVOQUJMRShVSV9Q
Uk9DRVNTX1BERl9IVUQpCisgICAgdm9pZCBjcmVhdGVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmll
ciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgdXBkYXRlUERG
SFVETG9jYXRpb24oUERGUGx1Z2luSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
IG92ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIpIG92
ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlQWxsUERGSFVEcygpIG92ZXJyaWRlOworI2VuZGlmCisK
ICAgICAvLyBBdXhpbGlhcnkgQ2xpZW50IENyZWF0aW9uCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5f
QVBJKQogICAgIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGllbnQmIGZ1bGxTY3JlZW5NYW5h
Z2VyUHJveHlDbGllbnQoKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0JKHJldmlzaW9uIDI2NjA4NikKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzQ5LDYgKzM0OSwzMCBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpyZWdpc3Rlcklu
c2VydGlvblVuCiAgICAgcmVnaXN0ZXJJbnNlcnRpb25VbmRvR3JvdXBpbmdXaXRoVW5kb01hbmFn
ZXIoW21fdmlldyB1bmRvTWFuYWdlcl0pOwogfQogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERG
X0hVRCkKKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlUERGSFVEKFBERlBsdWdpbklkZW50
aWZpZXIgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBt
X2ltcGwtPmNyZWF0ZVBERkhVRChpZGVudGlmaWVyLCByZWN0KTsKK30KKwordm9pZCBQYWdlQ2xp
ZW50SW1wbDo6dXBkYXRlUERGSFVETG9jYXRpb24oUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlm
aWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIG1faW1wbC0+dXBkYXRl
UERGSFVETG9jYXRpb24oaWRlbnRpZmllciwgcmVjdCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudElt
cGw6OnJlbW92ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAg
bV9pbXBsLT5yZW1vdmVQREZIVUQoaWRlbnRpZmllcik7Cit9CisKK3ZvaWQgUGFnZUNsaWVudElt
cGw6OnJlbW92ZUFsbFBERkhVRHMoKQoreworICAgIG1faW1wbC0+cmVtb3ZlQWxsUERGSFVEcygp
OworfQorCisjZW5kaWYgLy8gRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKwogdm9pZCBQYWdl
Q2xpZW50SW1wbDo6Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKQogewogICAgIG1faW1wbC0+Y2xlYXJB
bGxFZGl0Q29tbWFuZHMoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQ
YWdlUHJveHlNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFj
L1dlYlBhZ2VQcm94eU1hYy5tbQkocmV2aXNpb24gMjY2MDg2KQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDc1LDgg
KzQ3NSw2IEBAIHN0YXRpYyBOU1N0cmluZyAqcGF0aFRvUERGT25EaXNrKGNvbnN0IFMKIAogdm9p
ZCBXZWJQYWdlUHJveHk6OnNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZl
QXBwbGljYXRpb24oY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgRnJhbWVJbmZvRGF0
YSYmIGZyYW1lSW5mbywgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhLCBjb25zdCBTdHJp
bmcmIHBkZlVVSUQpCiB7Ci0gICAgTUVTU0FHRV9DSEVDSyhUZW1wb3JhcnlQREZGaWxlTWFwOjpp
c1ZhbGlkS2V5KHBkZlVVSUQpKTsKLQogICAgIGlmIChkYXRhLmlzRW1wdHkoKSkgewogICAgICAg
ICBXVEZMb2dBbHdheXMoIkNhbm5vdCBzYXZlIGVtcHR5IFBERiBmaWxlIHRvIHRoZSB0ZW1wb3Jh
cnkgZGlyZWN0b3J5LiIpOwogICAgICAgICByZXR1cm47CkBAIC01MDQsNyArNTAyLDggQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OnNhdmVQREZUb1RlbXBvcmFyeUZvbAogICAgIGF1dG8gb3JpZ2luYXRp
bmdVUkxTdHJpbmcgPSBmcmFtZUluZm8ucmVxdWVzdC51cmwoKS5zdHJpbmcoKTsKICAgICBGaWxl
U3lzdGVtOjpzZXRNZXRhZGF0YVVSTChuc1BhdGguZ2V0KCksIG9yaWdpbmF0aW5nVVJMU3RyaW5n
KTsKIAotICAgIG1fdGVtcG9yYXJ5UERGRmlsZXMuYWRkKHBkZlVVSUQsIG5zUGF0aC5nZXQoKSk7
CisgICAgaWYgKFRlbXBvcmFyeVBERkZpbGVNYXA6OmlzVmFsaWRLZXkocGRmVVVJRCkpCisgICAg
ICAgIG1fdGVtcG9yYXJ5UERGRmlsZXMuYWRkKHBkZlVVSUQsIG5zUGF0aC5nZXQoKSk7CiAKICAg
ICBhdXRvIHBkZkZpbGVVUkwgPSBVUkw6OmZpbGVVUkxXaXRoRmlsZVN5c3RlbVBhdGgoU3RyaW5n
KG5zUGF0aC5nZXQoKSkpOwogICAgIG1fdWlDbGllbnQtPmNvbmZpcm1QREZPcGVuaW5nKCp0aGlz
LCBwZGZGaWxlVVJMLCBXVEZNb3ZlKGZyYW1lSW5mbyksIFtwZGZGaWxlVVJMXSAoYm9vbCBhbGxv
d2VkKSB7CkBAIC01MTQsNiArNTEzLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNhdmVQREZUb1Rl
bXBvcmFyeUZvbAogICAgIH0pOwogfQogCisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pICYmICFF
TkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQogdm9pZCBXZWJQYWdlUHJveHk6Om9wZW5QREZGcm9t
VGVtcG9yYXJ5Rm9sZGVyV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKEZyYW1lSW5mb0RhdGEmJiBmcmFt
ZUluZm8sIGNvbnN0IFN0cmluZyYgcGRmVVVJRCkKIHsKICAgICBNRVNTQUdFX0NIRUNLKFRlbXBv
cmFyeVBERkZpbGVNYXA6OmlzVmFsaWRLZXkocGRmVVVJRCkpOwpAQCAtNTMwLDYgKzUzMCw3IEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpvcGVuUERGRnJvbVRlbXBvcmFyeUYKICAgICAgICAgW1tOU1dv
cmtzcGFjZSBzaGFyZWRXb3Jrc3BhY2VdIG9wZW5VUkw6cGRmRmlsZVVSTF07CiAgICAgfSk7CiB9
CisjZW5kaWYKIAogI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQogdm9pZCBXZWJQYWdlUHJveHk6
OnNob3dQREZDb250ZXh0TWVudShjb25zdCBXZWJLaXQ6OlBERkNvbnRleHRNZW51JiBjb250ZXh0
TWVudSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxpbnQzMl90PiYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTY3Myw2ICs2NzQsNDkgQEAgUGxhdGZvcm1WaWV3KiBXZWJQYWdl
UHJveHk6OnBsYXRmb3JtVmlldwogICAgIHJldHVybiBbcGFnZUNsaWVudCgpLnBsYXRmb3JtV2lu
ZG93KCkgY29udGVudFZpZXddOwogfQogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkK
Kwordm9pZCBXZWJQYWdlUHJveHk6OmNyZWF0ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyIGlk
ZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCit7CisgICAgcGFnZUNsaWVu
dCgpLmNyZWF0ZVBERkhVRChpZGVudGlmaWVyLCByZWN0KTsKK30KKwordm9pZCBXZWJQYWdlUHJv
eHk6OnJlbW92ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAg
cGFnZUNsaWVudCgpLnJlbW92ZVBERkhVRChpZGVudGlmaWVyKTsKK30KKwordm9pZCBXZWJQYWdl
UHJveHk6OnVwZGF0ZVBERkhVRExvY2F0aW9uKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmll
ciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBwYWdlQ2xpZW50KCkudXBk
YXRlUERGSFVETG9jYXRpb24oaWRlbnRpZmllciwgcmVjdCk7Cit9CisKK3ZvaWQgV2ViUGFnZVBy
b3h5OjpwZGZab29tSW4oUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIHNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6Olpvb21QREZJbihpZGVudGlmaWVyKSk7Cit9CisKK3ZvaWQg
V2ViUGFnZVByb3h5OjpwZGZab29tT3V0KFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikK
K3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpab29tUERGT3V0KGlkZW50aWZpZXIpKTsK
K30KKwordm9pZCBXZWJQYWdlUHJveHk6OnBkZlNhdmVUb1BERihQREZQbHVnaW5JZGVudGlmaWVy
IGlkZW50aWZpZXIpCit7CisgICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJQYWdl
OjpTYXZlUERGKGlkZW50aWZpZXIpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpXSAoU3RyaW5nJiYgc3VnZ2VzdGVkRmlsZW5hbWUsIFVSTCYmIG9yaWdpbmF0aW5nVVJMLCBj
b25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGFSZWZlcmVuY2UpIHsKKyAgICAgICAgc2F2ZVBE
RlRvRmlsZUluRG93bmxvYWRzRm9sZGVyKFdURk1vdmUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBXVEZN
b3ZlKG9yaWdpbmF0aW5nVVJMKSwgZGF0YVJlZmVyZW5jZSk7CisgICAgfSk7Cit9CisKK3ZvaWQg
V2ViUGFnZVByb3h5OjpwZGZPcGVuV2l0aFByZXZpZXcoUERGUGx1Z2luSWRlbnRpZmllciBpZGVu
dGlmaWVyKQoreworICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViUGFnZTo6T3Bl
blBERldpdGhQcmV2aWV3KGlkZW50aWZpZXIpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpXSAoU3RyaW5nJiYgc3VnZ2VzdGVkRmlsZW5hbWUsIEZyYW1lSW5mb0RhdGEmJiBm
cmFtZUluZm8sIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YSwgY29uc3QgU3RyaW5nJiBw
ZGZVVUlEKSB7CisgICAgICAgIHNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0
aXZlQXBwbGljYXRpb24oV1RGTW92ZShzdWdnZXN0ZWRGaWxlbmFtZSksIFdURk1vdmUoZnJhbWVJ
bmZvKSwgZGF0YSwgcGRmVVVJRCk7CisgICAgfSk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoVUlf
UFJPQ0VTU19QREZfSFVEKQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMjY2MDg2KQorKysgU291cmNlL1dlYktpdC9XZWJLaXQu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTc5MCw2ICsxNzkw
LDcgQEAKIAkJRDNCOTQ4NDkxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlNlYXJjaFBvcHVwTWVudS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNCOTQ4NDUx
MUZGNEI2NTAwMDMyQjM5IC8qIFdlYlNlYXJjaFBvcHVwTWVudS5oICovOyB9OwogCQlERjQ2MkUw
RjIzRjIyRjU1MDBFRkYzNUYgLyogV0tIVFRQQ29va2llU3RvcmVQcml2YXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERjQ2MkUwRTIzRjIyRjUzMDBF
RkYzNUYgLyogV0tIVFRQQ29va2llU3RvcmVQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREY0NjJFMTIyM0YzMzhCRTAwRUZGMzVGIC8q
IFdLQ29udGVudFdvcmxkUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gREY0NjJFMTEyM0YzMzhBRDAwRUZGMzVGIC8qIFdLQ29udGVudFdvcmxk
UHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCURGODRDRUU0MjQ5QUEyNEQwMDkwOTZGNiAvKiBXS1BERkhVRFZpZXcubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERjg0Q0VFMjI0OUFBMjFGMDA5
MDk2RjYgLyogV0tQREZIVURWaWV3Lm1tICovOyB9OwogCQlFMTA1RkU1NDE4RDdCOURFMDA4RjU3
QTggLyogRWRpdGluZ1JhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMTA1RkU1MzE4RDdCOURFMDA4RjU3QTggLyogRWRpdGluZ1JhbmdlLmggKi87
IH07CiAJCUUxMUQzNUFFMTZCNjNEMUIwMDZEMjNENyAvKiBjb20uYXBwbGUuV2ViUHJvY2Vzcy5z
YiBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE5NjdF
MzcxNTBBQjVFMjAwQzczMTY5IC8qIGNvbS5hcHBsZS5XZWJQcm9jZXNzLnNiICovOyB9OwogCQlF
MTRBOTU0QTE2RTAxNkE0MDA2OERFODIgLyogTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdp
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNEE5
NTQ4MTZFMDE2QTQwMDY4REU4MiAvKiBOZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5o
ICovOyB9OwpAQCAtNTI3OSw2ICs1MjgwLDkgQEAKIAkJREY0NjJFMTEyM0YzMzhBRDAwRUZGMzVG
IC8qIFdLQ29udGVudFdvcmxkUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXS0NvbnRlbnRXb3JsZFByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJREY1OEM2MzExMzcxQUM1ODAwRjlBMzdDIC8qIE5hdGl2ZVdlYldoZWVsRXZlbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmF0aXZlV2ViV2hlZWxFdmVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERjU4QzYzNTEzNzFBQ0EwMDBGOUEzN0MgLyogTmF0
aXZlV2ViV2hlZWxFdmVudE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IE5hdGl2ZVdlYldoZWVsRXZlbnRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCURGNzQyNzVBMjRGNDc1REEwMEY4QUJFOSAvKiBQREZQbHVnaW5JZGVudGlmaWVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBERlBsdWdpbklkZW50aWZpZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREY4NENFRTIyNDlBQTIxRjAwOTA5NkY2IC8q
IFdLUERGSFVEVmlldy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9
IFdLUERGSFVEVmlldy5tbTsgcGF0aCA9IFBERi9XS1BERkhVRFZpZXcubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCURGODRDRUUzMjQ5QUEyMUYwMDkwOTZGNiAvKiBXS1BERkhVRFZp
ZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tQREZIVURWaWV3Lmg7IHBh
dGggPSBQREYvV0tQREZIVURWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUx
MDVGRTUzMThEN0I5REUwMDhGNTdBOCAvKiBFZGl0aW5nUmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRWRpdGluZ1JhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUUxMTVDNzE1MTkwRjhBMjUwMEVDQzUxNiAvKiBjb20uYXBwbGUuV2ViS2l0LlN0b3Jh
Z2Uuc2IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gY29tLmFwcGxlLldlYktpdC5TdG9yYWdlLnNi
OyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9jb20uYXBwbGUuV2ViS2l0LlN0b3JhZ2Uu
c2I7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUUxMzNGRDg5MTQyM0RE
N0YwMEZDN0JGQiAvKiBXZWJLaXQuaWNucyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IGltYWdlLmljbnM7IG5hbWUgPSBXZWJLaXQuaWNuczsgcGF0aCA9
IFJlc291cmNlcy9XZWJLaXQuaWNuczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU5
MDAsNiArNTkwNCw3IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQkxQTZGQjkwODExRTY2RkIxMDBE
QjEzNzEgLyogTmV0c2NhcGUgKi8sCiAJCQkJRTE5OTg3NUIxNDJCRjlDRjAwQkIyREU3IC8qIFBE
RiAqLywKKwkJCQlERjc0Mjc1QTI0RjQ3NURBMDBGOEFCRTkgLyogUERGUGx1Z2luSWRlbnRpZmll
ci5oICovLAogCQkJCTFBNkZCN0QwMTFFNjUxRTIwMERCMTM3MSAvKiBQbHVnaW4uY3BwICovLAog
CQkJCTFBNkZCN0QxMTFFNjUxRTIwMERCMTM3MSAvKiBQbHVnaW4uaCAqLywKIAkJCQkxQUE1NkYy
ODExRTkyQkM4MDA2MUI4ODIgLyogUGx1Z2luQ29udHJvbGxlci5oICovLApAQCAtODk2Myw2ICs4
OTY4LDcgQEAKIAkJCQlDRDQ1NzBEODI0NDRDQTE3MDBBM0RDRUIgLyogTWVkaWEgKi8sCiAJCQkJ
NTEwQ0M3RTcxNjEzOEU3MjAwRDAzRUQzIC8qIE5ldHdvcmsgKi8sCiAJCQkJMzFBMkVDNDAxNDg5
OTczNzAwODEwRDcxIC8qIE5vdGlmaWNhdGlvbnMgKi8sCisJCQkJREY4NENFRTEyNDlBQTIwMDAw
OTA5NkY2IC8qIFBERiAqLywKIAkJCQkxQUVGQ0MwNTExRDAxRjM0MDA4MjE5RDMgLyogUGx1Z2lu
cyAqLywKIAkJCQkyRDE1NTFBOTFGNUE5QjQyMDAwNkUzRkUgLyogUmVtb3RlTGF5ZXJUcmVlICov
LAogCQkJCTFBQUYwODlFMTkyNjgxQUMwMEI2MzkwQyAvKiBVc2VyQ29udGVudCAqLywKQEAgLTEw
NDUxLDYgKzEwNDU3LDE1IEBACiAJCQlwYXRoID0gaW9zOwogCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKIAkJfTsKKwkJREY4NENFRTEyNDlBQTIwMDAwOTA5NkY2IC8qIFBERiAqLyA9IHsKKwkJ
CWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJREY4NENFRTMyNDlBQTIxRjAw
OTA5NkY2IC8qIFdLUERGSFVEVmlldy5oICovLAorCQkJCURGODRDRUUyMjQ5QUEyMUYwMDkwOTZG
NiAvKiBXS1BERkhVRFZpZXcubW0gKi8sCisJCQkpOworCQkJbmFtZSA9IFBERjsKKwkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCUUxNzA4NzZEMTZENkNBNzIwMEY5OTIyNiAvKiBG
aWxlQVBJICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTEz
MTQyLDYgKzEzMTU3LDcgQEAKIAkJCQk2MzcyODFBMzIxQURDNzQ0MDA5RTBERTYgLyogV0tEb3du
bG9hZFByb2dyZXNzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNFOTEyMEQyMjkzQzIxOTAwNUJF
Qzc4IC8qIFdLTWFpbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTQ2NTdEODhBMjI2NjRBMkYwMDVE
RTgyMyAvKiBXS09yaWVudGF0aW9uQWNjZXNzQWxlcnQubW0gaW4gU291cmNlcyAqLywKKwkJCQlE
Rjg0Q0VFNDI0OUFBMjREMDA5MDk2RjYgLyogV0tQREZIVURWaWV3Lm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJNUNBMjZEODMyMTdBRDFCODAwRjk3QTM1IC8qIFdLU2FmZUJyb3dzaW5nV2FybmluZy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTFEQjAxOTQ0MjExQ0YwMDUwMDlGQjNFOCAvKiBXS1NoYXJl
U2hlZXQubW0gaW4gU291cmNlcyAqLywKIAkJCQk3QTc4RkYzMzIyNDE5MTlCMDA5NjQ4M0UgLyog
V0tTdG9yYWdlQWNjZXNzQWxlcnQubW0gaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERlBsdWdpbklkZW50aWZpZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREZQbHVnaW5JZGVudGlmaWVyLmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGUGx1
Z2luSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKK2Vu
dW0gUERGUGx1Z2luSWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcgUERGUGx1Z2luSWRlbnRpZmll
ciA9IE9iamVjdElkZW50aWZpZXI8UERGUGx1Z2luSWRlbnRpZmllclR5cGU+OworI2VuZGlmCisK
K30KSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZMYXllckNv
bnRyb2xsZXJTUEkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1
Z2lucy9QREYvUERGTGF5ZXJDb250cm9sbGVyU1BJLmgJKHJldmlzaW9uIDI2NjA4NikKKysrIFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZMYXllckNvbnRyb2xsZXJTUEku
aAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsMTIgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50
ZWdlciwgUERGTGF5ZXJDb250cgogCiAtICh2b2lkKXNuYXBzaG90SW5Db250ZXh0OihDR0NvbnRl
eHRSZWYpY29udGV4dDsKIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCistICh2b2lk
KXNldERpc3BsYXlzUERGSFVEQ29udHJvbGxlcjooQk9PTClkaXNwbGF5c0NvbnRyb2xsZXI7Cist
ICh2b2lkKXpvb21JbjooaWQpYXRQb2ludDsKKy0gKHZvaWQpem9vbU91dDooaWQpYXRQb2ludDsK
KyNlbmRpZgorCiAtICh2b2lkKW1hZ25pZnlXaXRoTWFnbmlmaWNhdGlvbjooQ0dGbG9hdCltYWdu
aWZpY2F0aW9uIGF0UG9pbnQ6KENHUG9pbnQpcG9pbnQgaW1tZWRpYXRlbHk6KEJPT0wpaW1tZWRp
YXRlbHk7CiAKIC0gKENHUG9pbnQpc2Nyb2xsUG9zaXRpb247CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCShyZXZpc2lvbiAyNjYw
ODYpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoUERGS0lUX1BMVUdJ
TikKIAogI2luY2x1ZGUgIlBERktpdEltcG9ydHMuaCIKKyNpbmNsdWRlICJQREZQbHVnaW5JZGVu
dGlmaWVyLmgiCiAjaW5jbHVkZSAiUGx1Z2luLmgiCiAjaW5jbHVkZSAiV2ViRXZlbnQuaCIKICNp
bmNsdWRlICJXZWJIaXRUZXN0UmVzdWx0RGF0YS5oIgpAQCAtNTAsNiArNTEsNyBAQCB0eXBlZGVm
IGNvbnN0IHN0cnVjdCBPcGFxdWVKU1ZhbHVlKiBKU1ZhCiBPQkpDX0NMQVNTIE5TQXJyYXk7CiBP
QkpDX0NMQVNTIE5TQXR0cmlidXRlZFN0cmluZzsKIE9CSkNfQ0xBU1MgTlNEYXRhOworT0JKQ19D
TEFTUyBOU0V2ZW50OwogT0JKQ19DTEFTUyBOU1N0cmluZzsKIE9CSkNfQ0xBU1MgUERGQW5ub3Rh
dGlvbjsKIE9CSkNfQ0xBU1MgUERGTGF5ZXJDb250cm9sbGVyOwpAQCAtNzcsOCArNzksOSBAQCBj
bGFzcyBQREZQbHVnaW5Bbm5vdGF0aW9uOwogY2xhc3MgUERGUGx1Z2luUGFzc3dvcmRGaWVsZDsK
IGNsYXNzIFBsdWdpblZpZXc7CiBjbGFzcyBXZWJGcmFtZTsKK3N0cnVjdCBGcmFtZUluZm9EYXRh
OwogCi1jbGFzcyBQREZQbHVnaW4gZmluYWwgOiBwdWJsaWMgUGx1Z2luLCBwcml2YXRlIFdlYkNv
cmU6OlNjcm9sbGFibGVBcmVhCitjbGFzcyBQREZQbHVnaW4gZmluYWwgOiBwdWJsaWMgUGx1Z2lu
LCBwdWJsaWMgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEKICNpZiBIQVZFKElOQ1JFTUVOVEFMX1BE
Rl9BUElTKQogICAgICwgcHJpdmF0ZSBXZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRl
ckNsaWVudAogI2VuZGlmCkBAIC0xMDMsOSArMTA2LDE5IEBAIHB1YmxpYzoKICAgICB2b2lkIG5v
dGlmeVNlbGVjdGlvbkNoYW5nZWQoUERGU2VsZWN0aW9uICopOwogICAgIHZvaWQgbm90aWZ5Q3Vy
c29yQ2hhbmdlZCh1aW50NjRfdCAvKiBQREZMYXllckNvbnRyb2xsZXJDdXJzb3JUeXBlICovKTsK
IAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgdm9pZCB6b29tSW4oKTsKKyAg
ICB2b2lkIHpvb21PdXQoKTsKKyAgICB2b2lkIHNhdmUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChj
b25zdCBTdHJpbmcmLCBjb25zdCBVUkwmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKT4mJik7
CisgICAgdm9pZCBvcGVuV2l0aFByZXZpZXcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBT
dHJpbmcmLCBGcmFtZUluZm9EYXRhJiYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYsIGNvbnN0
IFN0cmluZyYpPiYmKTsKKyAgICBQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25z
dCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKyNlbmRpZgorCiAgICAgdm9pZCBjbGlja2VkTGlu
ayhOU1VSTCAqKTsKKyNpZiAhRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKICAgICB2b2lkIHNh
dmVUb1BERigpOwogICAgIHZvaWQgb3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbigpOworI2VuZGlm
CiAgICAgdm9pZCB3cml0ZUl0ZW1zVG9QYXN0ZWJvYXJkKE5TU3RyaW5nICpwYXN0ZWJvYXJkTmFt
ZSwgTlNBcnJheSAqaXRlbXMsIE5TQXJyYXkgKnR5cGVzKTsKICAgICB2b2lkIHNob3dEZWZpbml0
aW9uRm9yQXR0cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcgKiwgQ0dQb2ludCk7CiAg
ICAgdm9pZCBwZXJmb3JtV2ViU2VhcmNoKE5TU3RyaW5nICopOwpAQCAtMTE4LDcgKzEzMSwxMCBA
QCBwdWJsaWM6CiAKICAgICBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydEZyb21QREZWaWV3VG9T
Y3JlZW4oY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgY29uc3Q7CiAgICAgV2ViQ29yZTo6SW50
UG9pbnQgY29udmVydEZyb21Sb290Vmlld1RvUERGVmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tUERGVmlld1RvUm9v
dFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKKyAgICBXZWJDb3JlOjpJbnRS
ZWN0IGNvbnZlcnRGcm9tUERGVmlld1RvUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
IGNvbnN0OwogICAgIFdlYkNvcmU6OkludFJlY3QgYm91bmRzT25TY3JlZW4oKSBjb25zdDsKKyAg
ICBXZWJDb3JlOjpJbnRSZWN0IGZyYW1lRm9ySFVEKCkgY29uc3Q7CiAKICAgICBib29sIHNob3dD
b250ZXh0TWVudUF0UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKIApAQCAtMTU5LDcg
KzE3NSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCB3YW50c1doZWVsRXZlbnRzKCkgZmluYWwgeyBy
ZXR1cm4gdHJ1ZTsgfQogICAgIHZvaWQgZ2VvbWV0cnlEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgcGx1Z2luU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QsIGNv
bnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYgcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybSkg
ZmluYWw7CiAgICAgdm9pZCBjb250ZW50c1NjYWxlRmFjdG9yQ2hhbmdlZChmbG9hdCkgZmluYWw7
Ci0gICAgdm9pZCB2aXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wpIGZpbmFsIHsgfQorICAgIHZvaWQg
dmlzaWJpbGl0eURpZENoYW5nZShib29sKSBmaW5hbDsKICAgICB2b2lkIGZyYW1lRGlkRmluaXNo
TG9hZGluZyh1aW50NjRfdCByZXF1ZXN0SUQpIGZpbmFsOwogICAgIHZvaWQgZnJhbWVEaWRGYWls
KHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCB3YXNDYW5jZWxsZWQpIGZpbmFsOwogICAgIHZvaWQg
ZGlkRXZhbHVhdGVKYXZhU2NyaXB0KHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgU3RyaW5nJiBy
ZXN1bHQpIGZpbmFsOwpAQCAtMjYzLDcgKzI3OSw2IEBAIHByaXZhdGU6CiAgICAgTlNFdmVudCAq
bnNFdmVudEZvcldlYk1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOwogICAgIFdlYkNv
cmU6OkludFBvaW50IGNvbnZlcnRGcm9tUGx1Z2luVG9QREZWaWV3KGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JikgY29uc3Q7CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZyb21Sb290Vmll
d1RvUGx1Z2luKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7Ci0gICAgV2ViQ29yZTo6
SW50UG9pbnQgY29udmVydEZyb21QREZWaWV3VG9Sb290Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYpIGNvbnN0OwogICAgIAogICAgIGJvb2wgc3VwcG9ydHNGb3JtcygpOwogICAgIGJvb2wg
aXNGdWxsRnJhbWVQbHVnaW4oKSBjb25zdDsKQEAgLTQwMyw2ICs0MTgsOSBAQCBwcml2YXRlOgog
I2VuZGlmCiAKICNlbmRpZiAvLyBIQVZFKElOQ1JFTUVOVEFMX1BERl9BUElTKQorI2lmIEVOQUJM
RShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgUERGUGx1Z2luSWRlbnRpZmllciBtX2lkZW50aWZp
ZXI7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCShyZXZpc2lv
biAyNjYwODYpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1
Z2luLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MzMsMTIgKzQzMywxNiBAQCAtICh2b2lkKXBlcmZv
cm1TcG90bGlnaHRTZWFyY2g6KE5TU3RyaW5nCiAKIC0gKHZvaWQpb3BlbldpdGhOYXRpdmVBcHBs
aWNhdGlvbgogeworI2lmICFFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQogICAgIF9wZGZQbHVn
aW4tPm9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oKTsKKyNlbmRpZgogfQogCiAtICh2b2lkKXNh
dmVUb1BERgogeworI2lmICFFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQogICAgIF9wZGZQbHVn
aW4tPnNhdmVUb1BERigpOworI2VuZGlmCiB9CiAKIC0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVy
OihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgY2xpY2tlZExpbmtXaXRo
VVJMOihOU1VSTCAqKXVybApAQCAtNjAwLDcgKzYwNCwxMyBAQCBpbmxpbmUgUERGUGx1Z2luOjpQ
REZQbHVnaW4oV2ViRnJhbWUmIGZyCiAjaWYgSEFWRShJTkNSRU1FTlRBTF9QREZfQVBJUykKICAg
ICAsIG1faW5jcmVtZW50YWxQREZMb2FkaW5nRW5hYmxlZChXZWJDb3JlOjpSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmluY3JlbWVudGFsUERGTG9hZGluZ0VuYWJsZWQo
KSkKICNlbmRpZgorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgLCBtX2lkZW50
aWZpZXIoUERGUGx1Z2luSWRlbnRpZmllcjo6Z2VuZXJhdGUoKSkKKyNlbmRpZgogeworI2lmIEVO
QUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHNldERp
c3BsYXlzUERGSFVEQ29udHJvbGxlcjpOT107CisjZW5kaWYKICAgICBtX3BkZkxheWVyQ29udHJv
bGxlci5nZXQoKS5kZWxlZ2F0ZSA9IG1fcGRmTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUuZ2V0KCk7
CiAgICAgbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkucGFyZW50TGF5ZXIgPSBtX2NvbnRlbnRM
YXllci5nZXQoKTsKIApAQCAtNjQwLDYgKzY1MCwxMCBAQCBpbmxpbmUgUERGUGx1Z2luOjpQREZQ
bHVnaW4oV2ViRnJhbWUmIGZyCiAKIFBERlBsdWdpbjo6flBERlBsdWdpbigpCiB7CisjaWYgRU5B
QkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBpZiAoYXV0byogcGFnZSA9IG1fZnJhbWUucGFn
ZSgpKQorICAgICAgICBwYWdlLT5yZW1vdmVQREZIVUQoKnRoaXMpOworI2VuZGlmCiB9CiAKICNp
ZiBIQVZFKElOQ1JFTUVOVEFMX1BERl9BUElTKQpAQCAtMTc3Miw2ICsxNzg2LDExIEBAIHZvaWQg
UERGUGx1Z2luOjpjb250ZW50c1NjYWxlRmFjdG9yQ2hhbmcKICAgICB1cGRhdGVQYWdlQW5kRGV2
aWNlU2NhbGVGYWN0b3JzKCk7CiB9CiAKK0ludFJlY3QgUERGUGx1Z2luOjpmcmFtZUZvckhVRCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnZlcnRGcm9tUERGVmlld1RvUm9vdFZpZXcoSW50UmVj
dChJbnRQb2ludCgpLCBzaXplKCkpKTsKK30KKwogdm9pZCBQREZQbHVnaW46OmNhbGN1bGF0ZVNp
emVzKCkKIHsKICAgICBpZiAoW21fcGRmRG9jdW1lbnQgaXNMb2NrZWRdKSB7CkBAIC0xNzgyLDYg
KzE4MDEsMTAgQEAgdm9pZCBQREZQbHVnaW46OmNhbGN1bGF0ZVNpemVzKCkKIAogICAgIG1fZmly
c3RQYWdlSGVpZ2h0ID0gW21fcGRmRG9jdW1lbnQgcGFnZUNvdW50XSA/IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihDR0NlaWxpbmcoW1ttX3BkZkRvY3VtZW50IHBhZ2VBdEluZGV4OjBdIGJvdW5kc0Zv
ckJveDprUERGRGlzcGxheUJveENyb3BCb3hdLnNpemUuaGVpZ2h0KSkgOiAwOwogICAgIHNldFBE
RkRvY3VtZW50U2l6ZShJbnRTaXplKFttX3BkZkxheWVyQ29udHJvbGxlciBjb250ZW50U2l6ZVJl
c3BlY3Rpbmdab29tXSkpOworCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBt
X2ZyYW1lLnBhZ2UoKS0+dXBkYXRlUERGSFVETG9jYXRpb24oKnRoaXMsIGZyYW1lRm9ySFVEKCkp
OworI2VuZGlmCiB9CiAKIGJvb2wgUERGUGx1Z2luOjppbml0aWFsaXplKGNvbnN0IFBhcmFtZXRl
cnMmIHBhcmFtZXRlcnMpCkBAIC0xOTE2LDcgKzE5MzksMTMgQEAgSW50UG9pbnQgUERGUGx1Z2lu
Ojpjb252ZXJ0RnJvbVBERlZpZXdUbwogICAgIEludFBvaW50IHBvaW50SW5QbHVnaW5Db29yZGlu
YXRlcyhwb2ludC54KCksIHNpemUoKS5oZWlnaHQoKSAtIHBvaW50LnkoKSk7CiAgICAgcmV0dXJu
IG1fcm9vdFZpZXdUb1BsdWdpblRyYW5zZm9ybS5pbnZlcnNlKCkudmFsdWVPcihBZmZpbmVUcmFu
c2Zvcm0oKSkubWFwUG9pbnQocG9pbnRJblBsdWdpbkNvb3JkaW5hdGVzKTsKIH0KLSAgICAKKwor
SW50UmVjdCBQREZQbHVnaW46OmNvbnZlcnRGcm9tUERGVmlld1RvUm9vdFZpZXcoY29uc3QgSW50
UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJlY3RJblBsdWdpbkNvb3JkaW5hdGVz
KHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBy
ZXR1cm4gbV9yb290Vmlld1RvUGx1Z2luVHJhbnNmb3JtLmludmVyc2UoKS52YWx1ZU9yKEFmZmlu
ZVRyYW5zZm9ybSgpKS5tYXBSZWN0KHJlY3RJblBsdWdpbkNvb3JkaW5hdGVzKTsKK30KKwogSW50
UG9pbnQgUERGUGx1Z2luOjpjb252ZXJ0RnJvbVJvb3RWaWV3VG9QREZWaWV3KGNvbnN0IEludFBv
aW50JiBwb2ludCkgY29uc3QKIHsKICAgICBJbnRQb2ludCBwb2ludEluUGx1Z2luQ29vcmRpbmF0
ZXMgPSBtX3Jvb3RWaWV3VG9QbHVnaW5UcmFuc2Zvcm0ubWFwUG9pbnQocG9pbnQpOwpAQCAtMTk0
Nyw2ICsxOTc2LDE4IEBAIEludFJlY3QgUERGUGx1Z2luOjpib3VuZHNPblNjcmVlbigpIGNvbnMK
ICAgICByZXR1cm4gZnJhbWVWaWV3LT5jb250ZW50c1RvU2NyZWVuKGVuY2xvc2luZ0ludFJlY3Qo
cmVjdEluUm9vdFZpZXdDb29yZGluYXRlcykpOwogfQogCit2b2lkIFBERlBsdWdpbjo6dmlzaWJp
bGl0eURpZENoYW5nZShib29sIHZpc2libGUpCit7CisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERG
X0hVRCkKKyAgICBpZiAodmlzaWJsZSkKKyAgICAgICAgbV9mcmFtZS5wYWdlKCktPmNyZWF0ZVBE
RkhVRCgqdGhpcywgZnJhbWVGb3JIVUQoKSk7CisgICAgZWxzZQorICAgICAgICBtX2ZyYW1lLnBh
Z2UoKS0+cmVtb3ZlUERGSFVEKCp0aGlzKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHZpc2li
bGUpOworI2VuZGlmCit9CisKIHZvaWQgUERGUGx1Z2luOjpnZW9tZXRyeURpZENoYW5nZShjb25z
dCBJbnRTaXplJiBwbHVnaW5TaXplLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtKQogewogICAgIGlmIChzaXplKCkgPT0gcGx1
Z2luU2l6ZSAmJiBwbHVnaW5WaWV3KCktPnBhZ2VTY2FsZUZhY3RvcigpID09IFttX3BkZkxheWVy
Q29udHJvbGxlciBjb250ZW50U2NhbGVGYWN0b3JdKQpAQCAtMjM5Miw2ICsyNDMzLDMxIEBAIGJv
b2wgUERGUGx1Z2luOjpwbHVnaW5IYW5kbGVzQ29udGVudE9mZnMKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKK3ZvaWQgUERGUGx1Z2luOjp6
b29tSW4oKQoreworICAgIFttX3BkZkxheWVyQ29udHJvbGxlciB6b29tSW46bmlsXTsKK30KKwor
dm9pZCBQREZQbHVnaW46Onpvb21PdXQoKQoreworICAgIFttX3BkZkxheWVyQ29udHJvbGxlciB6
b29tT3V0Om5pbF07Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpzYXZlKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoY29uc3QgU3RyaW5nJiwgY29uc3QgVVJMJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNl
Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgTlNEYXRhICpkYXRhID0gbGl2ZURhdGEo
KTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihtX3N1Z2dlc3RlZEZpbGVuYW1lLCBtX2ZyYW1lLnVy
bCgpLCBJUEM6OiBEYXRhUmVmZXJlbmNlKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRh
LmJ5dGVzKSwgZGF0YS5sZW5ndGgpKTsKK30KKwordm9pZCBQREZQbHVnaW46Om9wZW5XaXRoUHJl
dmlldyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYsIEZyYW1lSW5mb0RhdGEm
JiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwgY29uc3QgU3RyaW5nJik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCit7CisgICAgTlNEYXRhICpkYXRhID0gbGl2ZURhdGEoKTsKKyAgICBjb21wbGV0
aW9uSGFuZGxlcihtX3N1Z2dlc3RlZEZpbGVuYW1lLCBtX2ZyYW1lLmluZm8oKSwgSVBDOjogRGF0
YVJlZmVyZW5jZSB7IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmJ5dGVzKSwgZGF0
YS5sZW5ndGggfSwgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpKTsKK30KKworI2Vsc2UgLy8g
RU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKICAgICAKIHZvaWQgUERGUGx1Z2luOjpzYXZlVG9Q
REYoKQogewpAQCAtMjQyNCw2ICsyNDkwLDggQEAgdm9pZCBQREZQbHVnaW46Om9wZW5XaXRoTmF0
aXZlQXBwbGljYXRpbwogICAgIG1fZnJhbWUucGFnZSgpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6Ok9wZW5QREZGcm9tVGVtcG9yYXJ5Rm9sZGVyV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKG1f
ZnJhbWUuaW5mbygpLCBtX3RlbXBvcmFyeVBERlVVSUQpKTsKIH0KIAorI2VuZGlmIC8vIEVOQUJM
RShVSV9QUk9DRVNTX1BERl9IVUQpCisKIHZvaWQgUERGUGx1Z2luOjp3cml0ZUl0ZW1zVG9QYXN0
ZWJvYXJkKE5TU3RyaW5nICpwYXN0ZWJvYXJkTmFtZSwgTlNBcnJheSAqaXRlbXMsIE5TQXJyYXkg
KnR5cGVzKQogewogICAgIGF1dG8gcGFzdGVib2FyZFR5cGVzID0gbWFrZVZlY3RvcjxTdHJpbmc+
KHR5cGVzKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCShyZXZpc2lvbiAyNjYwODYpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1
ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QZXJtaXNz
aW9uUmVxdWVzdE1hbmFnZXIuaCIKKyNpbmNsdWRlICJQREZQbHVnSW4uaCIKICNpbmNsdWRlICJQ
YWdlQmFubmVyLmgiCiAjaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMuaCIKICNpbmNs
dWRlICJQbHVnaW5Qcm94eS5oIgpAQCAtNTEyMywxMiArNTEyNCwxMiBAQCB2b2lkIFdlYlBhZ2U6
OmRpZEZpbmlzaFByaW50T3BlcmF0aW9uKGNvCiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShQREZL
SVRfUExVR0lOKSAmJiAhRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKIHZvaWQgV2ViUGFnZTo6
c2F2ZVBERlRvRmlsZUluRG93bmxvYWRzRm9sZGVyKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmls
ZW5hbWUsIGNvbnN0IFVSTCYgb3JpZ2luYXRpbmdVUkwsIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHVu
c2lnbmVkIGxvbmcgc2l6ZSkKIHsKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNh
dmVQREZUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcihzdWdnZXN0ZWRGaWxlbmFtZSwgb3JpZ2luYXRp
bmdVUkwsIElQQzo6RGF0YVJlZmVyZW5jZShkYXRhLCBzaXplKSkpOwogfQogCi0jaWYgUExBVEZP
Uk0oQ09DT0EpCiB2b2lkIFdlYlBhZ2U6OnNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5X
aXRoTmF0aXZlQXBwbGljYXRpb24oY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgRnJh
bWVJbmZvRGF0YSYmIGZyYW1lSW5mbywgY29uc3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgbG9u
ZyBzaXplLCBjb25zdCBTdHJpbmcmIHBkZlVVSUQpCiB7CiAgICAgc2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpTYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxp
Y2F0aW9uKHN1Z2dlc3RlZEZpbGVuYW1lLCBmcmFtZUluZm8sIElQQzo6RGF0YVJlZmVyZW5jZShk
YXRhLCBzaXplKSwgcGRmVVVJRCkpOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNpb24gMjY2MDg2KQorKysgU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBA
CiAjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5o
IgogI2luY2x1ZGUgIk9wdGlvbmFsQ2FsbGJhY2tJRC5oIgorI2luY2x1ZGUgIlBERlBsdWdpbklk
ZW50aWZpZXIuaCIKICNpbmNsdWRlICJQbHVnaW4uaCIKICNpbmNsdWRlICJQb2xpY3lEZWNpc2lv
bi5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKQEAgLTM0NSw2ICszNDYsMTYgQEAg
cHVibGljOgogCiAgICAgdm9pZCBjZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhKCk7CiAKKyNp
ZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIHZvaWQgY3JlYXRlUERGSFVEKFBERlBs
dWdpbiYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIHVwZGF0ZVBERkhVRExv
Y2F0aW9uKFBERlBsdWdpbiYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIHJl
bW92ZVBERkhVRChQREZQbHVnaW4mKTsKKyAgICB2b2lkIHpvb21QREZJbihQREZQbHVnaW5JZGVu
dGlmaWVyKTsKKyAgICB2b2lkIHpvb21QREZPdXQoUERGUGx1Z2luSWRlbnRpZmllcik7CisgICAg
dm9pZCBzYXZlUERGKFBERlBsdWdpbklkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Y29uc3QgU3RyaW5nJiwgY29uc3QgVVJMJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik+JiYp
OworICAgIHZvaWQgb3BlblBERldpdGhQcmV2aWV3KFBERlBsdWdpbklkZW50aWZpZXIsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJiwgRnJhbWVJbmZvRGF0YSYmLCBjb25zdCBJ
UEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmKT4mJik7CisjZW5kaWYKKwogI2lmIFBM
QVRGT1JNKENPQ09BKQogICAgIHZvaWQgd2lsbENvbW1pdExheWVyVHJlZShSZW1vdGVMYXllclRy
ZWVUcmFuc2FjdGlvbiYpOwogICAgIHZvaWQgZGlkRmx1c2hMYXllclRyZWVBdFRpbWUoTW9ub3Rv
bmljVGltZSk7CkBAIC0xMDc0LDkgKzEwODUsOCBAQCBwdWJsaWM6CiAgICAgTlNEaWN0aW9uYXJ5
ICpkYXRhRGV0ZWN0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YURldGVjdGlvbkNv
bnRleHQuZ2V0KCk7IH0KICNlbmRpZgogCisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pICYmICFF
TkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQogICAgIHZvaWQgc2F2ZVBERlRvRmlsZUluRG93bmxv
YWRzRm9sZGVyKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIGNvbnN0IFVSTCYgb3Jp
Z2luYXRpbmdVUkwsIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci0K
LSNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIHNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFu
ZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFt
ZSwgRnJhbWVJbmZvRGF0YSYmLCBjb25zdCB1aW50OF90KiBkYXRhLCB1bnNpZ25lZCBsb25nIHNp
emUsIGNvbnN0IFN0cmluZyYgcGRmVVVJRCk7CiAjZW5kaWYKIApAQCAtMTc5MSw2ICsxODAxLDEw
IEBAIHByaXZhdGU6CiAKICAgICBXZWJDb3JlOjpDb2xvciBtX3VuZGVybGF5Q29sb3I7CiAKKyNp
ZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIEhhc2hNYXA8UERGUGx1Z2luSWRlbnRp
ZmllciwgV2Vha1B0cjxQREZQbHVnaW4+PiBtX3BkZlBsdWdJbnNXaXRoSFVEOworI2VuZGlmCisK
ICAgICBib29sIG1faXNJblJlZG8geyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc0Nsb3NlZCB7IGZh
bHNlIH07CiAgICAgYm9vbCBtX3RhYlRvTGlua3MgeyBmYWxzZSB9OwpJbmRleDogU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCShy
ZXZpc2lvbiAyNjYwODYpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC01NzYsNiArNTc2LDEzIEBAIEdlbmVy
YXRlU3ludGhldGljRWRpdGluZ0NvbW1hbmQoZW51bTp1aW4KIAogICAgIFNldERlZmVyc0xvYWRp
bmcoYm9vbCBkZWZlcnNMb2FkaW5nKQogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkK
KyAgICBab29tUERGSW4oV2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCisg
ICAgWm9vbVBERk91dChXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikKKyAg
ICBTYXZlUERGKFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKSAtPiAoU3Ry
aW5nIGZpbGVuYW1lLCBVUkwgdXJsLCBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YSkgQXN5bmMKKyAg
ICBPcGVuUERGV2l0aFByZXZpZXcoV2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZp
ZXIpIC0+IChTdHJpbmcgZmlsZW5hbWUsIHN0cnVjdCBXZWJLaXQ6OkZyYW1lSW5mb0RhdGEgZnJh
bWVJbmZvLCBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YSwgU3RyaW5nIHV1aWQpIEFzeW5jCisjZW5k
aWYKKwogICAgIFVwZGF0ZUN1cnJlbnRNb2RpZmllclN0YXRlKE9wdGlvblNldDxXZWJDb3JlOjpQ
bGF0Zm9ybUV2ZW50OjpNb2RpZmllcj4gbW9kaWZpZXJzKQogICAgIFNpbXVsYXRlRGV2aWNlT3Jp
ZW50YXRpb25DaGFuZ2UoZG91YmxlIGFscGhhLCBkb3VibGUgYmV0YSwgZG91YmxlIGdhbW1hKQog
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2Vi
UGFnZU1hYy5tbQkocmV2aXNpb24gMjY2MDg2KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcg
QEAKICNpbXBvcnQgIkVkaXRpbmdSYW5nZS5oIgogI2ltcG9ydCAiRWRpdG9yU3RhdGUuaCIKICNp
bXBvcnQgIkZvbnRJbmZvLmgiCisjaW1wb3J0ICJGcmFtZUluZm9EYXRhLmgiCiAjaW1wb3J0ICJJ
bmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQuaCIKICNpbXBvcnQgIlBERktpdEltcG9ydHMuaCIK
ICNpbXBvcnQgIlBERlBsdWdpbi5oIgpAQCAtMTA1MSw3ICsxMDUyLDYyIEBAIHZvaWQgV2ViUGFn
ZTo6c2V0QWNjZW50Q29sb3IoV2ViQ29yZTo6Q28KICAgICBbTlNBcHAgX3NldEFjY2VudENvbG9y
OmNvbG9yLmlzVmFsaWQoKSA/IFdlYkNvcmU6Om5zQ29sb3IoY29sb3IpIDogbmlsXTsKIH0KIAot
I2VuZGlmCisjZW5kaWYgLy8gSEFWRShBUFBfQUNDRU5UX0NPTE9SUykKKworI2lmIEVOQUJMRShV
SV9QUk9DRVNTX1BERl9IVUQpCisKK3ZvaWQgV2ViUGFnZTo6em9vbVBERkluKFBERlBsdWdpbklk
ZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBhdXRvIHBkZlBsdWdpbiA9IG1fcGRmUGx1Z0lu
c1dpdGhIVUQuZ2V0KGlkZW50aWZpZXIpOworICAgIGlmICghcGRmUGx1Z2luKQorICAgICAgICBy
ZXR1cm47CisgICAgcGRmUGx1Z2luLT56b29tSW4oKTsKK30KKwordm9pZCBXZWJQYWdlOjp6b29t
UERGT3V0KFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBhdXRvIHBkZlBs
dWdpbiA9IG1fcGRmUGx1Z0luc1dpdGhIVUQuZ2V0KGlkZW50aWZpZXIpOworICAgIGlmICghcGRm
UGx1Z2luKQorICAgICAgICByZXR1cm47CisgICAgcGRmUGx1Z2luLT56b29tT3V0KCk7Cit9CisK
K3ZvaWQgV2ViUGFnZTo6c2F2ZVBERihQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJiwgY29uc3QgVVJMJiwgY29uc3QgSVBD
OjpEYXRhUmVmZXJlbmNlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgYXV0byBwZGZQ
bHVnaW4gPSBtX3BkZlBsdWdJbnNXaXRoSFVELmdldChpZGVudGlmaWVyKTsKKyAgICBpZiAoIXBk
ZlBsdWdpbikKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSwgeyB9LCB7IH0p
OworICAgIHBkZlBsdWdpbi0+c2F2ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisK
K3ZvaWQgV2ViUGFnZTo6b3BlblBERldpdGhQcmV2aWV3KFBERlBsdWdpbklkZW50aWZpZXIgaWRl
bnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmLCBGcmFtZUluZm9E
YXRhJiYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYsIGNvbnN0IFN0cmluZyYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQoreworICAgIGF1dG8gcGRmUGx1Z2luID0gbV9wZGZQbHVnSW5zV2l0aEhV
RC5nZXQoaWRlbnRpZmllcik7CisgICAgaWYgKCFwZGZQbHVnaW4pCisgICAgICAgIHJldHVybiBj
b21wbGV0aW9uSGFuZGxlcih7IH0sIHsgfSwgeyB9LCB7IH0pOworICAgIHBkZlBsdWdpbi0+b3Bl
bldpdGhQcmV2aWV3KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBXZWJQ
YWdlOjpjcmVhdGVQREZIVUQoUERGUGx1Z2luJiBwbHVnaW4sIGNvbnN0IEludFJlY3QmIGJvdW5k
aW5nQm94KQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9wZGZQbHVnSW5zV2l0aEhVRC5hZGQo
cGx1Z2luLmlkZW50aWZpZXIoKSwgbWFrZVdlYWtQdHIocGx1Z2luKSk7CisgICAgaWYgKGFkZFJl
c3VsdC5pc05ld0VudHJ5KQorICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNy
ZWF0ZVBERkhVRChwbHVnaW4uaWRlbnRpZmllcigpLCBib3VuZGluZ0JveCkpOworfQorCit2b2lk
IFdlYlBhZ2U6OnVwZGF0ZVBERkhVRExvY2F0aW9uKFBERlBsdWdpbiYgcGx1Z2luLCBjb25zdCBJ
bnRSZWN0JiBib3VuZGluZ0JveCkKK3sKKyAgICBpZiAobV9wZGZQbHVnSW5zV2l0aEhVRC5jb250
YWlucyhwbHVnaW4uaWRlbnRpZmllcigpKSkKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpVcGRhdGVQREZIVURMb2NhdGlvbihwbHVnaW4uaWRlbnRpZmllcigpLCBib3VuZGlu
Z0JveCkpOworfQorCit2b2lkIFdlYlBhZ2U6OnJlbW92ZVBERkhVRChQREZQbHVnaW4mIHBsdWdp
bikKK3sKKyAgICBpZiAobV9wZGZQbHVnSW5zV2l0aEhVRC5yZW1vdmUocGx1Z2luLmlkZW50aWZp
ZXIoKSkpCisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UmVtb3ZlUERGSFVE
KHBsdWdpbi5pZGVudGlmaWVyKCkpKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShVSV9QUk9DRVNT
X1BERl9IVUQpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCkluZGV4OiBUb29scy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjYwODYpCisrKyBU
b29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAyMC0wOC0y
NCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAg
IE1vdmUgUERGIGhlYWRzLXVwIGRpc3BsYXkgdG8gVUkgcHJvY2VzcyBvbiBtYWNPUworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1NzgwCisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS81ODcxNTg0Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tQ
REZWaWV3Lm1tOgorICAgICAgICAocGRmRGF0YSk6CisgICAgICAgIChURVNUKToKKyAgICAgICAg
KGNoZWNrRnJhbWUpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFVJRGVsZWdh
dGUuaDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RVSURlbGVnYXRlLm1tOgor
ICAgICAgICAoLVtUZXN0VUlEZWxlZ2F0ZSBfd2ViVmlldzpzYXZlRGF0YVRvRmlsZTpzdWdnZXN0
ZWRGaWxlbmFtZTptaW1lVHlwZTpvcmlnaW5hdGluZ1VSTDpdKToKKwogMjAyMC0wOC0yNCAgSm9u
YXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgW3Jlc3VsdHNkYnB5
XSBGaXggcGlwIHBhY2thZ2UKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvV0tQREZWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvV0tQREZWaWV3Lm1tCShyZXZpc2lvbiAyNjYwODYpCisrKyBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLUERGVmlldy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMzAsMTEgKzMwLDI2IEBACiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgogI2lt
cG9ydCAiVGVzdC5oIgogI2ltcG9ydCAiVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZS5oIgorI2ltcG9y
dCAiVGVzdFVJRGVsZWdhdGUuaCIKKyNpbXBvcnQgIlRlc3RVUkxTY2hlbWVIYW5kbGVyLmgiCisj
aW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Lmg+CiAj
aW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQg
PFdlYktpdC9XS1dlYlZpZXdQcml2YXRlRm9yVGVzdGluZy5oPgogI2ltcG9ydCA8d3RmL1JldGFp
blB0ci5oPgogCi0jaWYgSEFWRShQREZLSVQpICYmIFBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9S
TShNQUMpCisjaW1wb3J0IDxDYXJib24vQ2FyYm9uLmg+CisjZW5kaWYKKworI2lmIFBMQVRGT1JN
KElPUykgfHwgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKK3N0YXRpYyBOU0RhdGEgKnBkZkRh
dGEoKQoreworICAgIHJldHVybiBbTlNEYXRhIGRhdGFXaXRoQ29udGVudHNPZlVSTDpbW05TQnVu
ZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAidGVzdCIgd2l0aEV4dGVuc2lvbjpAInBk
ZiIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXV07Cit9CisjZW5kaWYK
KworI2lmIFBMQVRGT1JNKElPUykKIAogQGludGVyZmFjZSBQREZIb3N0Vmlld0NvbnRyb2xsZXIg
OiBVSVZpZXdDb250cm9sbGVyCiArICh2b2lkKWNyZWF0ZUhvc3RWaWV3Oih2b2lkKF4pKGlkIGhv
c3RWaWV3Q29udHJvbGxlcikpY2FsbGJhY2sgZm9yRXh0ZW5zaW9uSWRlbnRpZmllcjooTlNTdHJp
bmcgKilleHRlbnNpb25JZGVudGlmaWVyOwpAQCAtMTAxLDcgKzExNiw3IEBAIFRFU1QoV2ViS2l0
LCBXS1BERlZpZXdMb3Nlc0FwcGxpY2F0aW9uRm8KICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiB3
ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VS
ZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsK
IAogICAgIC8vIExvYWQgYSBQREYsIHNvIHdlIGluc3RhbGwgYSBXS1BERlZpZXcuCi0gICAgW3dl
YlZpZXcgbG9hZERhdGE6W05TRGF0YSBkYXRhV2l0aENvbnRlbnRzT2ZVUkw6W1tOU0J1bmRsZSBt
YWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInRlc3QiIHdpdGhFeHRlbnNpb246QCJwZGYiIHN1
YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dIE1JTUVUeXBlOkAiYXBwbGlj
YXRpb24vcGRmIiBjaGFyYWN0ZXJFbmNvZGluZ05hbWU6QCIiIGJhc2VVUkw6W05TVVJMIFVSTFdp
dGhTdHJpbmc6QCJodHRwczovL3d3dy5hcHBsZS5jb20vMCJdXTsKKyAgICBbd2ViVmlldyBsb2Fk
RGF0YTpwZGZEYXRhIE1JTUVUeXBlOkAiYXBwbGljYXRpb24vcGRmIiBjaGFyYWN0ZXJFbmNvZGlu
Z05hbWU6QCIiIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwczovL3d3dy5hcHBs
ZS5jb20vMCJdXTsKICAgICBbd2ViVmlldyBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlv
bl07CiAKICAgICAvLyBHbyBpbnRvIHRoZSBiYWNrZ3JvdW5kIGFuZCBwYXJlbnQgdGhlIFdLV2Vi
Vmlldy4KQEAgLTEzMiwzICsxNDcsMjA4IEBAIFRFU1QoV2ViS2l0LCBXS1BERlZpZXdMb3Nlc0Fw
cGxpY2F0aW9uRm8KIH0KIAogI2VuZGlmCisKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVE
KQorCitzdGF0aWMgdm9pZCBjaGVja0ZyYW1lKE5TUmVjdCBmcmFtZSwgQ0dGbG9hdCB4LCBDR0Zs
b2F0IHksIENHRmxvYXQgd2lkdGgsIENHRmxvYXQgaGVpZ2h0KQoreworICAgIEVYUEVDVF9FUShm
cmFtZS5vcmlnaW4ueCwgeCk7CisgICAgRVhQRUNUX0VRKGZyYW1lLm9yaWdpbi55LCB5KTsKKyAg
ICBFWFBFQ1RfRVEoZnJhbWUuc2l6ZS53aWR0aCwgd2lkdGgpOworICAgIEVYUEVDVF9FUShmcmFt
ZS5zaXplLmhlaWdodCwgaGVpZ2h0KTsKK30KKworVEVTVChQREZIVUQsIE1haW5SZXNvdXJjZVBE
RikKK3sKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3ID0gW1tbVGVzdFdLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9u
OltbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXV0gYXV0b3JlbGVhc2Vd
OworICAgIFt3ZWJWaWV3IGxvYWREYXRhOnBkZkRhdGEoKSBNSU1FVHlwZTpAImFwcGxpY2F0aW9u
L3BkZiIgY2hhcmFjdGVyRW5jb2RpbmdOYW1lOkAiIiBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3Ry
aW5nOkAiaHR0cHM6Ly93d3cuYXBwbGUuY29tL3Rlc3RQYXRoIl1dOworICAgIEVYUEVDVF9FUSh3
ZWJWaWV3Ll9wZGZIVURzLmNvdW50LCAwdSk7CisgICAgW3dlYlZpZXcgX3Rlc3Rfd2FpdEZvckRp
ZEZpbmlzaE5hdmlnYXRpb25dOworICAgIEVYUEVDVF9FUSh3ZWJWaWV3Ll9wZGZIVURzLmNvdW50
LCAxdSk7CisgICAgY2hlY2tGcmFtZSh3ZWJWaWV3Ll9wZGZIVURzLmFueU9iamVjdC5mcmFtZSwg
MCwgMCwgODAwLCA2MDApOworICAgIAorICAgIFRlc3RVSURlbGVnYXRlICpkZWxlZ2F0ZSA9IFtb
VGVzdFVJRGVsZWdhdGUgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgd2ViVmlldy5VSURlbGVnYXRl
ID0gZGVsZWdhdGU7CisgICAgX19ibG9jayBib29sIHNhdmVSZXF1ZXN0UmVjZWl2ZWQgPSBmYWxz
ZTsKKyAgICBkZWxlZ2F0ZS5zYXZlRGF0YVRvRmlsZSA9IF4oV0tXZWJWaWV3ICp3ZWJWaWV3RnJv
bURlbGVnYXRlLCBOU0RhdGEgKmRhdGEsIE5TU3RyaW5nICpzdWdnZXN0ZWRGaWxlbmFtZSwgTlNT
dHJpbmcgKm1pbWVUeXBlLCBOU1VSTCAqb3JpZ2luYXRpbmdVUkwpIHsKKyAgICAgICAgRVhQRUNU
X0VRKHdlYlZpZXcsIHdlYlZpZXdGcm9tRGVsZWdhdGUpOworICAgICAgICBFWFBFQ1RfVFJVRShb
ZGF0YSBpc0VxdWFsVG9EYXRhOnBkZkRhdGEoKV0pOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEo
c3VnZ2VzdGVkRmlsZW5hbWUsICJ0ZXN0UGF0aC5wZGYiKTsKKyAgICAgICAgRVhQRUNUX1dLX1NU
UkVRKG1pbWVUeXBlLCAiYXBwbGljYXRpb24vcGRmIik7CisgICAgICAgIHNhdmVSZXF1ZXN0UmVj
ZWl2ZWQgPSB0cnVlOworICAgIH07CisgICAgW1t3ZWJWaWV3IF9wZGZIVURzXS5hbnlPYmplY3Qg
cGVyZm9ybVNlbGVjdG9yOk5TU2VsZWN0b3JGcm9tU3RyaW5nKEAiX3BlcmZvcm1BY3Rpb25Gb3JD
b250cm9sOiIpIHdpdGhPYmplY3Q6QCJhcnJvdy5kb3duLmNpcmNsZSJdOworICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmc2F2ZVJlcXVlc3RSZWNlaXZlZCk7CisKKyAgICBFWFBFQ1RfRVEo
d2ViVmlldy5fcGRmSFVEcy5jb3VudCwgMXUpOworICAgIFt3ZWJWaWV3IF9raWxsV2ViQ29udGVu
dFByb2Nlc3NdOworICAgIHdoaWxlICh3ZWJWaWV3Ll9wZGZIVURzLmNvdW50KQorICAgICAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgpOworfQorCitURVNUKFBERkhVRCwgTW92
ZUlGcmFtZSkKK3sKKyAgICBUZXN0VVJMU2NoZW1lSGFuZGxlciAqaGFuZGxlciA9IFtbVGVzdFVS
TFNjaGVtZUhhbmRsZXIgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgaGFuZGxlci5zdGFydFVSTFNj
aGVtZVRhc2tIYW5kbGVyID0gXihXS1dlYlZpZXcgKiwgaWQ8V0tVUkxTY2hlbWVUYXNrPiB0YXNr
KSB7CisgICAgICAgIGlmIChbdGFzay5yZXF1ZXN0LlVSTC5wYXRoIGlzRXF1YWxUb1N0cmluZzpA
Ii9tYWluLmh0bWwiXSkgeworICAgICAgICAgICAgTlNVUkxSZXNwb25zZSAqcmVzcG9uc2UgPSBb
W1tOU1VSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0YXNrLnJlcXVlc3QuVVJMIE1JTUVU
eXBlOkAidGV4dC9odG1sIiBleHBlY3RlZENvbnRlbnRMZW5ndGg6MCB0ZXh0RW5jb2RpbmdOYW1l
Om5pbF0gYXV0b3JlbGVhc2VdOworICAgICAgICAgICAgY29uc3QgY2hhciogaHRtbCA9ICI8YnIv
PjxpZnJhbWUgc3JjPSd0ZXN0LnBkZicgaWQ9J3BkZmZyYW1lJz48L2lmcmFtZT4iOworICAgICAg
ICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3BvbnNlOnJlc3BvbnNlXTsKKyAgICAgICAgICAgIFt0
YXNrIGRpZFJlY2VpdmVEYXRhOltOU0RhdGEgZGF0YVdpdGhCeXRlczpodG1sIGxlbmd0aDpzdHJs
ZW4oaHRtbCldXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZEZpbmlzaF07CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBFWFBFQ1RfV0tfU1RSRVEodGFzay5yZXF1ZXN0LlVSTC5wYXRoLCAi
L3Rlc3QucGRmIik7CisgICAgICAgICAgICBOU0RhdGEgKmRhdGEgPSBwZGZEYXRhKCk7CisgICAg
ICAgICAgICBOU1VSTFJlc3BvbnNlICpyZXNwb25zZSA9IFtbW05TVVJMUmVzcG9uc2UgYWxsb2Nd
IGluaXRXaXRoVVJMOnRhc2sucmVxdWVzdC5VUkwgTUlNRVR5cGU6QCJhcHBsaWNhdGlvbi9wZGYi
IGV4cGVjdGVkQ29udGVudExlbmd0aDpkYXRhLmxlbmd0aCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0g
YXV0b3JlbGVhc2VdOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3BvbnNlOnJlc3Bv
bnNlXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVEYXRhOmRhdGFdOworICAgICAgICAg
ICAgW3Rhc2sgZGlkRmluaXNoXTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBXS1dlYlZpZXdD
b25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0gW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIG5l
d10gYXV0b3JlbGVhc2VdOworICAgIFtjb25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6
aGFuZGxlciBmb3JVUkxTY2hlbWU6QCJ0ZXN0Il07CisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmll
dyA9IFtbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAw
LCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07Cisg
ICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNV
UkwgVVJMV2l0aFN0cmluZzpAInRlc3Q6Ly8vbWFpbi5odG1sIl1dXTsKKyAgICBFWFBFQ1RfRVEo
d2ViVmlldy5fcGRmSFVEcy5jb3VudCwgMHUpOworICAgIFt3ZWJWaWV3IF90ZXN0X3dhaXRGb3JE
aWRGaW5pc2hOYXZpZ2F0aW9uXTsKKyAgICBFWFBFQ1RfRVEod2ViVmlldy5fcGRmSFVEcy5jb3Vu
dCwgMXUpOworICAgIGNoZWNrRnJhbWUod2ViVmlldy5fcGRmSFVEcy5hbnlPYmplY3QuZnJhbWUs
IDEwLCAyOCwgMzAwLCAxNTApOworCisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAi
cGRmZnJhbWUud2lkdGg9NDAwIiBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOworICAgIHdoaWxlICh3
ZWJWaWV3Ll9wZGZIVURzLmFueU9iamVjdC5mcmFtZS5zaXplLndpZHRoICE9IDQwMCkKKyAgICAg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoKTsKKyAgICBjaGVja0ZyYW1lKHdl
YlZpZXcuX3BkZkhVRHMuYW55T2JqZWN0LmZyYW1lLCAxMCwgMjgsIDQwMCwgMTUwKTsKKworICAg
IFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAInZhciBmcmFtZVJlZmVyZW5jZSA9IHBkZmZy
YW1lOyBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHBkZmZyYW1lKSIgY29tcGxldGlvbkhhbmRs
ZXI6bmlsXTsKKyAgICB3aGlsZSAod2ViVmlldy5fcGRmSFVEcy5jb3VudCkKKyAgICAgICAgVGVz
dFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoKTsKKyAgICBbd2ViVmlldyBldmFsdWF0ZUph
dmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGZyYW1lUmVmZXJlbmNlKSIgY29t
cGxldGlvbkhhbmRsZXI6bmlsXTsKKyAgICB3aGlsZSAoIXdlYlZpZXcuX3BkZkhVRHMuY291bnQp
CisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisgICAgRVhQRUNU
X0VRKHdlYlZpZXcuX3BkZkhVRHMuY291bnQsIDF1KTsKKyAgICBjaGVja0ZyYW1lKHdlYlZpZXcu
X3BkZkhVRHMuYW55T2JqZWN0LmZyYW1lLCAwLCAwLCAwLCAwKTsKKyAgICB3aGlsZSAod2ViVmll
dy5fcGRmSFVEcy5hbnlPYmplY3QuZnJhbWUuc2l6ZS53aWR0aCAhPSA0MDApCisgICAgICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisgICAgRVhQRUNUX0VRKHdlYlZpZXcu
X3BkZkhVRHMuY291bnQsIDF1KTsKKyAgICBjaGVja0ZyYW1lKHdlYlZpZXcuX3BkZkhVRHMuYW55
T2JqZWN0LmZyYW1lLCAxMCwgMjgsIDQwMCwgMTUwKTsKKworICAgIHdlYlZpZXcucGFnZVpvb20g
PSAxLjQ7CisgICAgd2hpbGUgKHdlYlZpZXcuX3BkZkhVRHMuYW55T2JqZWN0LmZyYW1lLnNpemUu
d2lkdGggIT0gNTYwKQorICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgp
OworICAgIEVYUEVDVF9FUSh3ZWJWaWV3Ll9wZGZIVURzLmNvdW50LCAxdSk7CisgICAgY2hlY2tG
cmFtZSh3ZWJWaWV3Ll9wZGZIVURzLmFueU9iamVjdC5mcmFtZSwgMTQsIDQwLCA1NjAsIDIxMCk7
Cit9CisKK1RFU1QoUERGSFVELCBOZXN0ZWRJRnJhbWVzKQoreworICAgIFRlc3RVUkxTY2hlbWVI
YW5kbGVyICpoYW5kbGVyID0gW1tUZXN0VVJMU2NoZW1lSGFuZGxlciBuZXddIGF1dG9yZWxlYXNl
XTsKKyAgICBoYW5kbGVyLnN0YXJ0VVJMU2NoZW1lVGFza0hhbmRsZXIgPSBeKFdLV2ViVmlldyAq
LCBpZDxXS1VSTFNjaGVtZVRhc2s+IHRhc2spIHsKKyAgICAgICAgTlNVUkxSZXNwb25zZSAqaHRt
bFJlc3BvbnNlID0gW1tbTlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGFzay5yZXF1
ZXN0LlVSTCBNSU1FVHlwZTpAInRleHQvaHRtbCIgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOjAgdGV4
dEVuY29kaW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgaWYgKFt0YXNrLnJlcXVl
c3QuVVJMLnBhdGggaXNFcXVhbFRvU3RyaW5nOkAiL21haW4uaHRtbCJdKSB7CisgICAgICAgICAg
ICBjb25zdCBjaGFyKiBodG1sID0gIjxpZnJhbWUgc3JjPSdmcmFtZS5odG1sJyBpZD0ncGFyZW50
ZnJhbWUnPjwvaWZyYW1lPiI7CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6
aHRtbFJlc3BvbnNlXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVEYXRhOltOU0RhdGEg
ZGF0YVdpdGhCeXRlczpodG1sIGxlbmd0aDpzdHJsZW4oaHRtbCldXTsKKyAgICAgICAgICAgIFt0
YXNrIGRpZEZpbmlzaF07CisgICAgICAgIH0gZWxzZSBpZiAoW3Rhc2sucmVxdWVzdC5VUkwucGF0
aCBpc0VxdWFsVG9TdHJpbmc6QCIvZnJhbWUuaHRtbCJdKSB7CisgICAgICAgICAgICBjb25zdCBj
aGFyKiBodG1sID0gIjxpZnJhbWUgc3JjPSd0ZXN0LnBkZic+PC9pZnJhbWU+IjsKKyAgICAgICAg
ICAgIFt0YXNrIGRpZFJlY2VpdmVSZXNwb25zZTpodG1sUmVzcG9uc2VdOworICAgICAgICAgICAg
W3Rhc2sgZGlkUmVjZWl2ZURhdGE6W05TRGF0YSBkYXRhV2l0aEJ5dGVzOmh0bWwgbGVuZ3RoOnN0
cmxlbihodG1sKV1dOworICAgICAgICAgICAgW3Rhc2sgZGlkRmluaXNoXTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIEVYUEVDVF9XS19TVFJFUSh0YXNrLnJlcXVlc3QuVVJMLnBhdGgs
ICIvdGVzdC5wZGYiKTsKKyAgICAgICAgICAgIE5TRGF0YSAqZGF0YSA9IHBkZkRhdGEoKTsKKyAg
ICAgICAgICAgIE5TVVJMUmVzcG9uc2UgKnJlc3BvbnNlID0gW1tbTlNVUkxSZXNwb25zZSBhbGxv
Y10gaW5pdFdpdGhVUkw6dGFzay5yZXF1ZXN0LlVSTCBNSU1FVHlwZTpAImFwcGxpY2F0aW9uL3Bk
ZiIgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOmRhdGEubGVuZ3RoIHRleHRFbmNvZGluZ05hbWU6bmls
XSBhdXRvcmVsZWFzZV07CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6cmVz
cG9uc2VdOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZURhdGE6ZGF0YV07CisgICAgICAg
ICAgICBbdGFzayBkaWRGaW5pc2hdOworICAgICAgICB9CisgICAgfTsKKworICAgIFdLV2ViVmll
d0NvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24g
bmV3XSBhdXRvcmVsZWFzZV07CisgICAgW2NvbmZpZ3VyYXRpb24gc2V0VVJMU2NoZW1lSGFuZGxl
cjpoYW5kbGVyIGZvclVSTFNjaGVtZTpAInRlc3QiXTsKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJW
aWV3ID0gW1tbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAs
IDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXTsK
KyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltO
U1VSTCBVUkxXaXRoU3RyaW5nOkAidGVzdDovLy9tYWluLmh0bWwiXV1dOworICAgIEVYUEVDVF9F
USh3ZWJWaWV3Ll9wZGZIVURzLmNvdW50LCAwdSk7CisgICAgW3dlYlZpZXcgX3Rlc3Rfd2FpdEZv
ckRpZEZpbmlzaE5hdmlnYXRpb25dOworICAgIEVYUEVDVF9FUSh3ZWJWaWV3Ll9wZGZIVURzLmNv
dW50LCAxdSk7CisgICAgY2hlY2tGcmFtZSh3ZWJWaWV3Ll9wZGZIVURzLmFueU9iamVjdC5mcmFt
ZSwgMjAsIDIwLCAzMDAsIDE1MCk7CisgICAgCisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2Ny
aXB0OkAiZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChwYXJlbnRmcmFtZSkiIGNvbXBsZXRpb25I
YW5kbGVyOm5pbF07CisgICAgd2hpbGUgKHdlYlZpZXcuX3BkZkhVRHMuY291bnQpCisgICAgICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7Cit9CisKK1RFU1QoUERGSFVELCBJ
RnJhbWUzRFRyYW5zZm9ybSkKK3sKKyAgICBUZXN0VVJMU2NoZW1lSGFuZGxlciAqaGFuZGxlciA9
IFtbVGVzdFVSTFNjaGVtZUhhbmRsZXIgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgaGFuZGxlci5z
dGFydFVSTFNjaGVtZVRhc2tIYW5kbGVyID0gXihXS1dlYlZpZXcgKiwgaWQ8V0tVUkxTY2hlbWVU
YXNrPiB0YXNrKSB7CisgICAgICAgIE5TVVJMUmVzcG9uc2UgKmh0bWxSZXNwb25zZSA9IFtbW05T
VVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVxdWVzdC5VUkwgTUlNRVR5cGU6
QCJ0ZXh0L2h0bWwiIGV4cGVjdGVkQ29udGVudExlbmd0aDowIHRleHRFbmNvZGluZ05hbWU6bmls
XSBhdXRvcmVsZWFzZV07CisgICAgICAgIGlmIChbdGFzay5yZXF1ZXN0LlVSTC5wYXRoIGlzRXF1
YWxUb1N0cmluZzpAIi9tYWluLmh0bWwiXSkgeworICAgICAgICAgICAgY29uc3QgY2hhciogaHRt
bCA9ICI8aWZyYW1lIHNyYz0ndGVzdC5wZGYnIGhlaWdodD01MDAgd2lkdGg9NTAwIHN0eWxlPSd0
cmFuc2Zvcm06cm90YXRlWSgyMzVkZWcpOyc+PC9pZnJhbWU+IjsKKyAgICAgICAgICAgIFt0YXNr
IGRpZFJlY2VpdmVSZXNwb25zZTpodG1sUmVzcG9uc2VdOworICAgICAgICAgICAgW3Rhc2sgZGlk
UmVjZWl2ZURhdGE6W05TRGF0YSBkYXRhV2l0aEJ5dGVzOmh0bWwgbGVuZ3RoOnN0cmxlbihodG1s
KV1dOworICAgICAgICAgICAgW3Rhc2sgZGlkRmluaXNoXTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIEVYUEVDVF9XS19TVFJFUSh0YXNrLnJlcXVlc3QuVVJMLnBhdGgsICIvdGVzdC5w
ZGYiKTsKKyAgICAgICAgICAgIE5TRGF0YSAqZGF0YSA9IHBkZkRhdGEoKTsKKyAgICAgICAgICAg
IE5TVVJMUmVzcG9uc2UgKnJlc3BvbnNlID0gW1tbTlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdp
dGhVUkw6dGFzay5yZXF1ZXN0LlVSTCBNSU1FVHlwZTpAImFwcGxpY2F0aW9uL3BkZiIgZXhwZWN0
ZWRDb250ZW50TGVuZ3RoOmRhdGEubGVuZ3RoIHRleHRFbmNvZGluZ05hbWU6bmlsXSBhdXRvcmVs
ZWFzZV07CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6cmVzcG9uc2VdOwor
ICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZURhdGE6ZGF0YV07CisgICAgICAgICAgICBbdGFz
ayBkaWRGaW5pc2hdOworICAgICAgICB9CisgICAgfTsKKworICAgIFdLV2ViVmlld0NvbmZpZ3Vy
YXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gbmV3XSBhdXRv
cmVsZWFzZV07CisgICAgW2NvbmZpZ3VyYXRpb24gc2V0VVJMU2NoZW1lSGFuZGxlcjpoYW5kbGVy
IGZvclVSTFNjaGVtZTpAInRlc3QiXTsKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3ID0gW1tb
VGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwg
NjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXTsKKyAgICBbd2Vi
VmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxX
aXRoU3RyaW5nOkAidGVzdDovLy9tYWluLmh0bWwiXV1dOworICAgIEVYUEVDVF9FUSh3ZWJWaWV3
Ll9wZGZIVURzLmNvdW50LCAwdSk7CisgICAgW3dlYlZpZXcgX3Rlc3Rfd2FpdEZvckRpZEZpbmlz
aE5hdmlnYXRpb25dOworICAgIEVYUEVDVF9FUSh3ZWJWaWV3Ll9wZGZIVURzLmNvdW50LCAxdSk7
CisgICAgY2hlY2tGcmFtZSh3ZWJWaWV3Ll9wZGZIVURzLmFueU9iamVjdC5mcmFtZSwgNDAzLCAx
MCwgNTAwLCA1MDApOworfQorCitURVNUKFBERkhVRCwgTXVsdGlwbGVJRnJhbWVzKQoreworICAg
IFRlc3RVUkxTY2hlbWVIYW5kbGVyICpoYW5kbGVyID0gW1tUZXN0VVJMU2NoZW1lSGFuZGxlciBu
ZXddIGF1dG9yZWxlYXNlXTsKKyAgICBoYW5kbGVyLnN0YXJ0VVJMU2NoZW1lVGFza0hhbmRsZXIg
PSBeKFdLV2ViVmlldyAqLCBpZDxXS1VSTFNjaGVtZVRhc2s+IHRhc2spIHsKKyAgICAgICAgTlNV
UkxSZXNwb25zZSAqaHRtbFJlc3BvbnNlID0gW1tbTlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdp
dGhVUkw6dGFzay5yZXF1ZXN0LlVSTCBNSU1FVHlwZTpAInRleHQvaHRtbCIgZXhwZWN0ZWRDb250
ZW50TGVuZ3RoOjAgdGV4dEVuY29kaW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAg
aWYgKFt0YXNrLnJlcXVlc3QuVVJMLnBhdGggaXNFcXVhbFRvU3RyaW5nOkAiL21haW4uaHRtbCJd
KSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBodG1sID0gIjxpZnJhbWUgc3JjPSd0ZXN0LnBk
ZicgaGVpZ2h0PTEwMCB3aWR0aD0xNTA+PC9pZnJhbWU+PGlmcmFtZSBzcmM9J3Rlc3QucGRmJyBo
ZWlnaHQ9MTIzIHdpZHRoPTEzND48L2lmcmFtZT4iOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVj
ZWl2ZVJlc3BvbnNlOmh0bWxSZXNwb25zZV07CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZl
RGF0YTpbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6aHRtbCBsZW5ndGg6c3RybGVuKGh0bWwpXV07Cisg
ICAgICAgICAgICBbdGFzayBkaWRGaW5pc2hdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgRVhQRUNUX1dLX1NUUkVRKHRhc2sucmVxdWVzdC5VUkwucGF0aCwgIi90ZXN0LnBkZiIpOwor
ICAgICAgICAgICAgTlNEYXRhICpkYXRhID0gcGRmRGF0YSgpOworICAgICAgICAgICAgTlNVUkxS
ZXNwb25zZSAqcmVzcG9uc2UgPSBbW1tOU1VSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0
YXNrLnJlcXVlc3QuVVJMIE1JTUVUeXBlOkAiYXBwbGljYXRpb24vcGRmIiBleHBlY3RlZENvbnRl
bnRMZW5ndGg6ZGF0YS5sZW5ndGggdGV4dEVuY29kaW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNlXTsK
KyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVSZXNwb25zZTpyZXNwb25zZV07CisgICAgICAg
ICAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpkYXRhXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZEZp
bmlzaF07CisgICAgICAgIH0KKyAgICB9OworCisgICAgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAq
Y29uZmlndXJhdGlvbiA9IFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNl
XTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRVUkxTY2hlbWVIYW5kbGVyOmhhbmRsZXIgZm9yVVJM
U2NoZW1lOkAidGVzdCJdOworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcgPSBbW1tUZXN0V0tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNv
bmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3IGxv
YWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJp
bmc6QCJ0ZXN0Oi8vL21haW4uaHRtbCJdXV07CisgICAgRVhQRUNUX0VRKHdlYlZpZXcuX3BkZkhV
RHMuY291bnQsIDB1KTsKKyAgICBbd2ViVmlldyBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdh
dGlvbl07CisgICAgRVhQRUNUX0VRKHdlYlZpZXcuX3BkZkhVRHMuY291bnQsIDJ1KTsKKyAgICBi
b29sIGhhZExlZnRGcmFtZSA9IGZhbHNlOworICAgIGJvb2wgaGFkUmlnaHRGcmFtZSA9IGZhbHNl
OworICAgIGZvciAoTlNWaWV3ICpodWQgaW4gd2ViVmlldy5fcGRmSFVEcykgeworICAgICAgICBp
ZiAoaHVkLmZyYW1lLm9yaWdpbi54ID09IDEwKSB7CisgICAgICAgICAgICBjaGVja0ZyYW1lKGh1
ZC5mcmFtZSwgMTAsIDMzLCAxNTAsIDEwMCk7CisgICAgICAgICAgICBoYWRMZWZ0RnJhbWUgPSB0
cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY2hlY2tGcmFtZShodWQuZnJhbWUs
IDE2NCwgMTAsIDEzNCwgMTIzKTsKKyAgICAgICAgICAgIGhhZFJpZ2h0RnJhbWUgPSB0cnVlOwor
ICAgICAgICB9CisgICAgfQorICAgIEVYUEVDVF9UUlVFKGhhZExlZnRGcmFtZSk7CisgICAgRVhQ
RUNUX1RSVUUoaGFkUmlnaHRGcmFtZSk7Cit9CisKKyNlbmRpZgpJbmRleDogVG9vbHMvVGVzdFdl
YktpdEFQSS9jb2NvYS9UZXN0VUlEZWxlZ2F0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvY29jb2EvVGVzdFVJRGVsZWdhdGUuaAkocmV2aXNpb24gMjY2MDg2KQorKysgVG9v
bHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0VUlEZWxlZ2F0ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw2ICszMSw3IEBACiAjaWYgUExBVEZPUk0oTUFDKQogQHByb3BlcnR5IChub25hdG9taWMs
IGNvcHkpIHZvaWQgKF5nZXRDb250ZXh0TWVudUZyb21Qcm9wb3NlZE1lbnUpKE5TTWVudSAqLCBf
V0tDb250ZXh0TWVudUVsZW1lbnRJbmZvICosIGlkIDxOU1NlY3VyZUNvZGluZz4sIHZvaWQgKF4p
KE5TTWVudSAqKSk7CiAjZW5kaWYKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSB2b2lkIChe
c2F2ZURhdGFUb0ZpbGUpKFdLV2ViVmlldyAqLCBOU0RhdGEgKiwgTlNTdHJpbmcgKiwgTlNTdHJp
bmcgKiwgTlNVUkwgKik7CiAKIC0gKE5TU3RyaW5nICopd2FpdEZvckFsZXJ0OwogCkluZGV4OiBU
b29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RVSURlbGVnYXRlLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFVJRGVsZWdhdGUubW0JKHJldmlzaW9uIDI2
NjA4NikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFVJRGVsZWdhdGUubW0JKHdv
cmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDEyIEBAIC0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmll
dyAqKXdlYlZpZXcgZ2UKIH0KICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKKy0gKHZvaWQpX3dl
YlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgc2F2ZURhdGFUb0ZpbGU6KE5TRGF0YSAqKWRhdGEg
c3VnZ2VzdGVkRmlsZW5hbWU6KE5TU3RyaW5nICopc3VnZ2VzdGVkRmlsZW5hbWUgbWltZVR5cGU6
KE5TU3RyaW5nICopbWltZVR5cGUgb3JpZ2luYXRpbmdVUkw6KE5TVVJMICopdXJsCit7CisgICAg
aWYgKF9zYXZlRGF0YVRvRmlsZSkKKyAgICAgICAgX3NhdmVEYXRhVG9GaWxlKHdlYlZpZXcsIGRh
dGEsIHN1Z2dlc3RlZEZpbGVuYW1lLCBtaW1lVHlwZSwgdXJsKTsKK30KKwogLSAoTlNTdHJpbmcg
Kil3YWl0Rm9yQWxlcnQKIHsKICAgICBFWFBFQ1RfRkFMU0Uoc2VsZi5ydW5KYXZhU2NyaXB0QWxl
cnRQYW5lbFdpdGhNZXNzYWdlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407143</attachid>
            <date>2020-08-24 15:34:31 -0700</date>
            <delta_ts>2020-08-24 17:41:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215780-20200824153431.patch</filename>
            <type>text/plain</type>
            <size>64205</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjYwODYpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA4LTI0ICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBQREYgaGVhZHMtdXAgZGlz
cGxheSB0byBVSSBwcm9jZXNzIG9uIG1hY09TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU3ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU4NzE1
ODQ3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
d3RmL1BsYXRmb3JtSGF2ZS5oOgorCiAyMDIwLTA4LTI0ICBBbGV4IENocmlzdGVuc2VuICA8YWNo
cmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWFrZSBfV0tXZWJzaXRlRGF0YVN0b3Jl
Q29uZmlndXJhdGlvbiBTUEkgZm9yIEhTVFMgc3RvcmFnZSB0byByZXBsYWNlIF9XS1Byb2Nlc3NQ
b29sQ29uZmlndXJhdGlvbi5oc3RzU3RvcmFnZURpcmVjdG9yeQpJbmRleDogU291cmNlL1dURi93
dGYvUGxhdGZvcm1FbmFibGVDb2NvYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1Bs
YXRmb3JtRW5hYmxlQ29jb2EuaAkocmV2aXNpb24gMjY2MDg2KQorKysgU291cmNlL1dURi93dGYv
UGxhdGZvcm1FbmFibGVDb2NvYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNiArMjI4LDEwIEBA
CiAjZGVmaW5lIEVOQUJMRV9HUFVfRFJJVkVSX1BSRVdBUk1JTkcgMQogI2VuZGlmCiAKKyNpZiBQ
TEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMDAw
CisjZGVmaW5lIEVOQUJMRV9VSV9QUk9DRVNTX1BERl9IVUQgMQorI2VuZGlmCisKICNpZiAhZGVm
aW5lZChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkKICNkZWZpbmUgRU5BQkxFX0lOREVYRURfREFU
QUJBU0UgMQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjY2MDg2KQorKysgU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw5NiBAQAorMjAyMC0w
OC0yNCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAg
ICAgIE1vdmUgUERGIGhlYWRzLXVwIGRpc3BsYXkgdG8gVUkgcHJvY2VzcyBvbiBtYWNPUworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1NzgwCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS81ODcxNTg0Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGhhcyBtYW55IGJlbmVmaXRzIGluY2x1ZGluZyB0
aGUgb25lIGluIHRoZSByYWRhciwgdGVzdGFiaWxpdHksIGFuZCBtb3ZpbmcgV2ViS2l0LXNwZWNp
ZmljIGNvZGUgZnJvbSBQREZLaXQgdG8gV2ViS2l0LgorCisgICAgICAgIE5vdyB0aGF0IHRoZSBI
VUQgaXMgZGlzcGxheWVkIGluIHRoZSBVSSBwcm9jZXNzIGluc3RlYWQgb2YgaW4gdGhlIHdlYiBj
b250ZW50LCB6b29taW5nIGluIGtlZXBzIHRoZSBIVUQgdGhlIHNhbWUgc2l6ZS4KKyAgICAgICAg
QSAzZC10cmFuc2Zvcm1lZCBpZnJhbWUgd2l0aCBhIFBERiBpbiBpdCBub3cgc2hvd3MgdGhlIEhV
RCBpbiB0aGUgcGxhY2UgeW91IGNhbiBjbGljayBvbiBpdCwgaW5zdGVhZCBvZiBpbiB0aGUgdHJh
bnNmb3JtZWQgUERGLgorICAgICAgICBBbHNvLCBtb3ZpbmcgdGhlIG1vdXNlIHRvIHRoZSBIVUQg
d2l0aGluIHRoZSBmaXJzdCAzIHNlY29uZHMgcHJldmVudHMgaXQgZnJvbSBoaWRpbmcsIHdoaWNo
IGl0IGRvZXMgd2hlbiB0aGUgbW91c2UgbGVhdmVzIHRoZSBIVUQuCisgICAgICAgIFRoZSByZXN0
IG9mIHRoZSBiZWhhdmlvciBJIHRoaW5rIHNob3VsZCBiZSB0aGUgc2FtZS4gIE1vc3QgdXNlcnMg
c2hvdWxkIG5vdCBub3RpY2UgYW55IGRpZmZlcmVuY2UuCisKKyAgICAgICAgRnVuY3Rpb25hbGl0
eSBjb3ZlcmVkIGJ5IEFQSSB0ZXN0cywgdGhlIGZpcnN0IHRlc3RzIGZvciBQREYgY29udGVudCBp
bnRlcmFjdGlvbiEKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAgICgtW1dLVmlldyBfY3JlYXRl
UERGSFVEOnJlY3Q6XSk6CisgICAgICAgICgtW1dLVmlldyBfcGRmSFVEOmNoYW5nZWRMb2NhdGlv
bjpdKToKKyAgICAgICAgKC1bV0tWaWV3IF9yZW1vdmVQREZIVUQ6XSk6CisgICAgICAgICgtW1dL
VmlldyBfcmVtb3ZlQWxsUERGSFVEc10pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dL
V2ViVmlld01hYy5tbToKKyAgICAgICAgKC1bV0tXZWJWaWV3IG1vdXNlTW92ZWQ6XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBtb3VzZURvd246XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBtb3Vz
ZVVwOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NyZWF0ZVBERkhVRDpyZWN0Ol0pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX3BkZkhVRDpjaGFuZ2VkTG9jYXRpb246XSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfcmVtb3ZlUERGSFVEOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3JlbW92
ZUFsbFBERkhVRHNdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdQcml2
YXRlRm9yVGVzdGluZ01hYy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmll
d1Rlc3RpbmdNYWMubW06CisgICAgICAgICgtW1dLV2ViVmlldyBwZGZIVURzXSk6CisgICAgICAg
ICogVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0Nv
Y29hL1dlYlZpZXdJbXBsLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y3JlYXRl
UERGSFVEKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0ZVBERkhVRExvY2F0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnJlbW92ZVBERkhVRCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZW1vdmVBbGxQREZIVURzKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvUGFnZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFt
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cHJvY2Vzc0RpZFRlcm1pbmF0ZSk6
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XZWJQ
YWdlUHJveHlJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2F2ZVBERlRv
VGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6b3BlblBERkZyb21UZW1wb3JhcnlGb2xkZXJX
aXRoTmF0aXZlQXBwbGljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMv
UGFnZUNsaWVudEltcGxNYWMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJ
bXBsTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlUERGSFVE
KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnVwZGF0ZVBERkhVRExvY2F0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnJlbW92ZVBERkhVRCk6CisgICAg
ICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpyZW1vdmVBbGxQREZIVURzKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5OjpzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxp
Y2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjcmVhdGVQREZIVUQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlbW92ZVBERkhVRCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6dXBkYXRlUERGSFVETG9jYXRpb24pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnBkZlpvb21Jbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6cGRmWm9vbU91dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGRmU2F2
ZVRvUERGKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZGZPcGVuV2l0aFByZXZp
ZXcpOgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGTGF5ZXJDb250cm9sbGVyU1BJLmg6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaDoKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbToKKyAgICAgICAgKC1bV0tQREZMYXllckNv
bnRyb2xsZXJEZWxlZ2F0ZSBvcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uXSk6CisgICAgICAgICgt
W1dLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgc2F2ZVRvUERGXSk6CisgICAgICAgIChXZWJL
aXQ6OlBERlBsdWdpbjo6UERGUGx1Z2luKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjp+
UERGUGx1Z2luKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpmcmFtZUZvckhVRCBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6Y2FsY3VsYXRlU2l6ZXMpOgorICAgICAg
ICAoV2ViS2l0OjpQREZQbHVnaW46OmNvbnZlcnRGcm9tUERGVmlld1RvUm9vdFZpZXcgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnZpc2liaWxpdHlEaWRDaGFuZ2UpOgorICAg
ICAgICAoV2ViS2l0OjpQREZQbHVnaW46Onpvb21Jbik6CisgICAgICAgIChXZWJLaXQ6OlBERlBs
dWdpbjo6em9vbU91dCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6c2F2ZSk6CisgICAg
ICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6b3BlbldpdGhQcmV2aWV3KToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdl
cy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6Onpvb21QREZJbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6Onpvb21QREZPdXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzYXZlUERGKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6b3BlblBERldpdGhQcmV2aWV3KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6Y3JlYXRlUERGSFVEKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6dXBkYXRlUERGSFVETG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpyZW1v
dmVQREZIVUQpOgorCiAyMDIwLTA4LTI0ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2Vu
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWFrZSBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJh
dGlvbiBTUEkgZm9yIEhTVFMgc3RvcmFnZSB0byByZXBsYWNlIF9XS1Byb2Nlc3NQb29sQ29uZmln
dXJhdGlvbi5oc3RzU3RvcmFnZURpcmVjdG9yeQpJbmRleDogU291cmNlL1dlYktpdC9TY3JpcHRz
L3dlYmtpdC9tZXNzYWdlcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NjcmlwdHMv
d2Via2l0L21lc3NhZ2VzLnB5CShyZXZpc2lvbiAyNjYwODYpCisrKyBTb3VyY2UvV2ViS2l0L1Nj
cmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNDMsNiArMjQzLDcg
QEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZQogICAgICAgICAnV2Vi
S2l0OjpNRE5TUmVnaXN0ZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6TWVkaWFQbGF5
ZXJQcml2YXRlUmVtb3RlSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6Ok1lZGlhUmVjb3Jk
ZXJJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllcicsCiAg
ICAgICAgICdXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbkNvbnRleHRJZGVudGlmaWVyJywKICAgICAg
ICAgJ1dlYktpdDo6UGx1Z2luUHJvY2Vzc1R5cGUnLAogICAgICAgICAnV2ViS2l0OjpSZW1vdGVB
dWRpb0Rlc3RpbmF0aW9uSWRlbnRpZmllcicsCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9QYWdlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFn
ZUNsaWVudC5oCShyZXZpc2lvbiAyNjYwODYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Q
YWdlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgorI2luY2x1ZGUgIlBERlBsdWdpbklk
ZW50aWZpZXIuaCIKICNpbmNsdWRlICJTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZS5oIgogI2lu
Y2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIldlYkNvbG9yUGlja2VyLmgiCkBA
IC0yNDIsNiArMjQzLDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbFByb3Zp
c2lvbmFsTG9hZEZvck1haW5GcmFtZSgpIHsgfTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0
TG9hZEZvck1haW5GcmFtZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIHVzZUN1c3RvbUNv
bnRlbnRQcm92aWRlcikgPSAwOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVBERkhVRExvY2F0
aW9uKFBERlBsdWdpbklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZUFsbFBERkhVRHMoKSA9IDA7CisjZW5kaWYKKyAgICAKICAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkmKSA9IDA7
CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlUnVuT3BlblBhbmVsKFdlYlBhZ2VQcm94eSosIFdl
YkZyYW1lUHJveHkqLCBjb25zdCBGcmFtZUluZm9EYXRhJiwgQVBJOjpPcGVuUGFuZWxQYXJhbWV0
ZXJzKiwgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eSopIHsgcmV0dXJuIGZhbHNlOyB9
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9u
IDI2NjA4NikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ3NzIsMTUgKzQ3NzIsMTQgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRp
ZENvbW1pdExvYWRGb3JGcmFtZQogICAgICAgICAgICAgbV9wbHVnaW5TY2FsZUZhY3RvciA9IDE7
CiAgICAgICAgICAgICBtX21haW5GcmFtZVBsdWdpbkhhbmRsZXNQYWdlU2NhbGVHZXN0dXJlID0g
ZmFsc2U7CiAgICAgICAgIH0KLSAgICB9Ci0KICNpZiBFTkFCTEUoUE9JTlRFUl9MT0NLKQotICAg
IGlmIChmcmFtZS0+aXNNYWluRnJhbWUoKSkKICAgICAgICAgcmVxdWVzdFBvaW50ZXJVbmxvY2so
KTsKICNlbmRpZgotCi0gICAgaWYgKGZyYW1lLT5pc01haW5GcmFtZSgpKQogICAgICAgICBwYWdl
Q2xpZW50KCkuc2V0TW91c2VFdmVudFBvbGljeShtb3VzZUV2ZW50UG9saWN5KTsKKyNpZiBFTkFC
TEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgICAgICBwYWdlQ2xpZW50KCkucmVtb3ZlQWxsUERG
SFVEcygpOworI2VuZGlmCisgICAgfQogCiAgICAgbV9wYWdlTG9hZFN0YXRlLmNvbW1pdENoYW5n
ZXMoKTsKICAgICBpZiAobV9sb2FkZXJDbGllbnQpCkBAIC03NDUxLDYgKzc0NTAsOSBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6cHJvY2Vzc0RpZFRlcm1pbmF0ZShQCiAKICAgICByZXNldFN0YXRlQWZ0
ZXJQcm9jZXNzRXhpdGVkKHJlYXNvbik7CiAgICAgc3RvcEFsbFVSTFNjaGVtZVRhc2tzKG1fcHJv
Y2Vzcy5wdHIoKSk7CisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBwYWdlQ2xp
ZW50KCkucmVtb3ZlQWxsUERGSFVEcygpOworI2VuZGlmCiAKICAgICAvLyBGb3IgYnJpbmd1cCBv
ZiBwcm9jZXNzIHN3YXBwaW5nLCBOYXZpZ2F0aW9uU3dhcCB0ZXJtaW5hdGlvbiB3aWxsIG5vdCBn
byBvdXQgdG8gY2xpZW50cy4KICAgICAvLyBJZiBpdCBkb2VzICpkdXJpbmcqIHByb2Nlc3Mgc3dh
cHBpbmcsIGFuZCB0aGUgY2xpZW50IHRyaWdnZXJzIGEgcmVsb2FkLCB0aGF0IGNhdXNlcyBiaXph
cnJlIFdlYktpdCByZS1lbnRyeS4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oCShyZXZpc2lvbiAyNjYwODYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkxh
eWVyVHJlZUNvbnRleHQuaCIKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCiAjaW5jbHVkZSAi
Tm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuaCIKKyNpbmNsdWRlICJQ
REZQbHVnSW5JZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiUGFnZUxvYWRTdGF0ZS5oIgogI2luY2x1
ZGUgIlBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiUG9saWN5RGVjaXNpb24u
aCIKQEAgLTEzMTEsMTAgKzEzMTIsMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCBzYXZlRGF0YVRv
RmlsZUluRG93bmxvYWRzRm9sZGVyKFN0cmluZyYmIHN1Z2dlc3RlZEZpbGVuYW1lLCBTdHJpbmcm
JiBtaW1lVHlwZSwgVVJMJiYgb3JpZ2luYXRpbmdVUkwsIEFQSTo6RGF0YSYpOwogICAgIHZvaWQg
c2F2ZVBERlRvRmlsZUluRG93bmxvYWRzRm9sZGVyKFN0cmluZyYmIHN1Z2dlc3RlZEZpbGVuYW1l
LCBVUkwmJiBvcmlnaW5hdGluZ1VSTCwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik7Ci0jaWYg
UExBVEZPUk0oQ09DT0EpCisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCiAgICAgdm9pZCBzYXZl
UERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKGNvbnN0IFN0
cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgSVBDOjpEYXRh
UmVmZXJlbmNlJiwgY29uc3QgU3RyaW5nJiBwZGZVVUlEKTsKKyNpZiAhRU5BQkxFKFVJX1BST0NF
U1NfUERGX0hVRCkKICAgICB2b2lkIG9wZW5QREZGcm9tVGVtcG9yYXJ5Rm9sZGVyV2l0aE5hdGl2
ZUFwcGxpY2F0aW9uKEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgU3RyaW5nJiBwZGZVVUlEKTsKICNl
bmRpZgorI2VuZGlmCiAKICNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKICAgICB2b2lkIHNob3dQ
REZDb250ZXh0TWVudShjb25zdCBXZWJLaXQ6OlBERkNvbnRleHRNZW51JiwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChPcHRpb25hbDxpbnQzMl90PiYmKT4mJik7CkBAIC0xODA2LDYgKzE4MDksMTYg
QEAgcHVibGljOgogICAgIGJvb2wgY2FuVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKSB7IHJldHVybiBt
X2NhblVzZUNyZWRlbnRpYWxTdG9yYWdlOyB9CiAgICAgdm9pZCBzZXRDYW5Vc2VDcmVkZW50aWFs
U3RvcmFnZShib29sKTsKIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgdm9p
ZCBjcmVhdGVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpOworICAgIHZvaWQgdXBkYXRlUERGSFVETG9jYXRpb24oUERGUGx1Z2luSWRlbnRpZmllciwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgcmVtb3ZlUERGSFVEKFBERlBsdWdp
bklkZW50aWZpZXIpOworICAgIHZvaWQgcGRmWm9vbUluKFBERlBsdWdpbklkZW50aWZpZXIpOwor
ICAgIHZvaWQgcGRmWm9vbU91dChQREZQbHVnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHBkZlNh
dmVUb1BERihQREZQbHVnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHBkZk9wZW5XaXRoUHJldmll
dyhQREZQbHVnaW5JZGVudGlmaWVyKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIFdlYlBhZ2VQ
cm94eShQYWdlQ2xpZW50JiwgV2ViUHJvY2Vzc1Byb3h5JiwgUmVmPEFQSTo6UGFnZUNvbmZpZ3Vy
YXRpb24+JiYpOwogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKCk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lv
biAyNjYwODYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2Fn
ZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTQzMyw5ICs0MzMsOCBAQCBtZXNzYWdlcyAtPiBXZWJQ
YWdlUHJveHkgewogICAgIFNhdmVSZWNlbnRTZWFyY2hlcyhTdHJpbmcgbmFtZSwgVmVjdG9yPFdl
YkNvcmU6OlJlY2VudFNlYXJjaD4gc2VhcmNoSXRlbXMpCiAgICAgTG9hZFJlY2VudFNlYXJjaGVz
KFN0cmluZyBuYW1lKSAtPiAoVmVjdG9yPFdlYkNvcmU6OlJlY2VudFNlYXJjaD4gcmVzdWx0KSBT
eW5jaHJvbm91cwogCisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pICYmICFFTkFCTEUoVUlfUFJP
Q0VTU19QREZfSFVEKQogICAgIFNhdmVQREZUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcihTdHJpbmcg
c3VnZ2VzdGVkRmlsZW5hbWUsIFVSTCBvcmlnaW5hdGluZ1VSTCwgSVBDOjpEYXRhUmVmZXJlbmNl
IGRhdGEpCi0KLSNpZiBQTEFURk9STShDT0NPQSkKICAgICBTYXZlUERGVG9UZW1wb3JhcnlGb2xk
ZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSwg
c3RydWN0IFdlYktpdDo6RnJhbWVJbmZvRGF0YSBzb3VyY2VGcmFtZUluZm8sIElQQzo6RGF0YVJl
ZmVyZW5jZSBkYXRhLCBTdHJpbmcgcGRmVVVJRCkKICAgICBPcGVuUERGRnJvbVRlbXBvcmFyeUZv
bGRlcldpdGhOYXRpdmVBcHBsaWNhdGlvbihzdHJ1Y3QgV2ViS2l0OjpGcmFtZUluZm9EYXRhIHNv
dXJjZUZyYW1lSW5mbywgU3RyaW5nIHBkZlVVSUQpCiAjZW5kaWYKQEAgLTU2Niw2ICs1NjUsMTIg
QEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBTcGVlY2hTeW50aGVzaXNSZXN1bWUo
KSAtPiAoKSBBc3luYwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQor
ICAgIENyZWF0ZVBERkhVRChXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwg
V2ViQ29yZTo6SW50UmVjdCBib3VuZGluZ0JveCkKKyAgICBVcGRhdGVQREZIVURMb2NhdGlvbihX
ZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViQ29yZTo6SW50UmVjdCBi
b3VuZGluZ0JveCkKKyAgICBSZW1vdmVQREZIVUQoV2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVy
IGlkZW50aWZpZXIpCisjZW5kaWYKKwogICAgIENvbmZpZ3VyZUxvZ2dpbmdDaGFubmVsKFN0cmlu
ZyBjaGFubmVsTmFtZSwgZW51bTp1aW50OF90IFdURkxvZ0NoYW5uZWxTdGF0ZSBzdGF0ZSwgZW51
bTp1aW50OF90IFdURkxvZ0xldmVsIGxldmVsKQogCiAjaWYgUExBVEZPUk0oR1RLKQpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0lu
dGVybmFsLmgJKHJldmlzaW9uIDI2NjA4NikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMSArMjMs
MTEgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW1wb3J0
ICJXS1dlYlZpZXdQcml2YXRlLmgiCi0KKyNpbXBvcnQgIlBERlBsdWdpbklkZW50aWZpZXIuaCIK
ICNpbXBvcnQgIlNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlLmgiCiAjaW1wb3J0ICJXS1NoYXJl
U2hlZXQuaCIKICNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb24uaCIKKyNpbXBvcnQgIldL
V2ViVmlld1ByaXZhdGUuaCIKICNpbXBvcnQgIl9XS0F0dGFjaG1lbnRJbnRlcm5hbC5oIgogI2lt
cG9ydCAiX1dLV2ViVmlld1ByaW50Rm9ybWF0dGVySW50ZXJuYWwuaCIKICNpbXBvcnQgPHd0Zi9D
b21wbGV0aW9uSGFuZGxlci5oPgpAQCAtMTMzLDcgKzEzMyw3IEBAIGNsYXNzIFZpZXdHZXN0dXJl
Q29udHJvbGxlcjsKICAgICAvLyBPbmx5IHVzZWQgd2l0aCBVSS1zaWRlIGNvbXBvc2l0aW5nLgog
ICAgIFJldGFpblB0cjxXS1Njcm9sbFZpZXc+IF9zY3JvbGxWaWV3OwogICAgIFJldGFpblB0cjxX
S0NvbnRlbnRWaWV3PiBfY29udGVudFZpZXc7Ci0jZW5kaWYKKyNlbmRpZiAvLyBQTEFURk9STShN
QUMpCiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIFJldGFpblB0cjxXS1Njcm9sbFZp
ZXc+IF9zY3JvbGxWaWV3OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9X
S1dlYlZpZXdQcml2YXRlRm9yVGVzdGluZ01hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3UHJpdmF0ZUZvclRlc3RpbmdNYWMuaAkocmV2
aXNpb24gMjY2MDg2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZp
ZXdQcml2YXRlRm9yVGVzdGluZ01hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBA
IEBpbnRlcmZhY2UgV0tXZWJWaWV3IChXS1Rlc3RpbmdNYWMpCiAKIC0gKHZvaWQpX3NldEhlYWRl
ckJhbm5lckhlaWdodDooaW50KWhlaWdodDsKIC0gKHZvaWQpX3NldEZvb3RlckJhbm5lckhlaWdo
dDooaW50KWhlaWdodDsKKy0gKE5TU2V0PE5TVmlldyAqPiAqKV9wZGZIVURzOwogCiBAZW5kCiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2Vi
Vmlld1Rlc3RpbmdNYWMubW0JKHJldmlzaW9uIDI2NjA4NikKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MTAzLDYgKzEwMywxNSBAQCAtICh2b2lkKV9zZXRGb290ZXJCYW5uZXJIZWlnaHQ6KGludCloZWln
CiAgICAgX3BhZ2UtPnNldEZvb3RlckJhbm5lckhlaWdodEZvclRlc3RpbmcoaGVpZ2h0KTsKIH0K
IAorLSAoTlNTZXQ8TlNWaWV3ICo+ICopX3BkZkhVRHMKK3sKKyNpZiBFTkFCTEUoVUlfUFJPQ0VT
U19QREZfSFVEKQorICAgIHJldHVybiBfaW1wbC0+cGRmSFVEcygpOworI2Vsc2UKKyAgICByZXR1
cm4gbmlsOworI2VuZGlmCit9CisKIC0gKE5TTWVudSAqKV9hY3RpdmVNZW51CiB7CiAgICAgLy8g
RklYTUU6IE9ubHkgdGhlIERPTSBwYXN0ZSBhY2Nlc3MgbWVudSBpcyBzdXBwb3J0ZWQgZm9yIG5v
dy4gSW4gdGhlIGZ1dHVyZSwgaXQgY291bGQgYmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1dlYlZpZXdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaAkocmV2aXNpb24gMjY2MDg2KQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsNyBAQAogCiAjaWYgUExBVEZPUk0oTUFDKQogCisjaW5jbHVkZSAiUERGUGx1Z2luSWRl
bnRpZmllci5oIgogI2luY2x1ZGUgIlBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZS5oIgogI2lu
Y2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIldLTGF5b3V0TW9kZS5oIgpAQCAt
NzYsNiArNzcsMTAgQEAgT0JKQ19DTEFTUyBXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyOwog
T0JKQ19DTEFTUyBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcjsKICNlbmRpZiAvLyBIQVZFKFRP
VUNIX0JBUikKIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCitPQkpDX0NMQVNTIFdL
UERGSFVEVmlldzsKKyNlbmRpZgorCiBuYW1lc3BhY2UgQVBJIHsKIGNsYXNzIEhpdFRlc3RSZXN1
bHQ7CiBjbGFzcyBPYmplY3Q7CkBAIC0xOTAsNiArMTk1LDE0IEBAIHB1YmxpYzoKICAgICB2b2lk
IHZpZXdXaWxsU3RhcnRMaXZlUmVzaXplKCk7CiAgICAgdm9pZCB2aWV3RGlkRW5kTGl2ZVJlc2l6
ZSgpOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICB2b2lkIGNyZWF0ZVBE
RkhVRChQREZQbHVnaW5JZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAg
dm9pZCB1cGRhdGVQREZIVURMb2NhdGlvbihQREZQbHVnaW5JZGVudGlmaWVyLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCByZW1vdmVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmll
cik7CisgICAgdm9pZCByZW1vdmVBbGxQREZIVURzKCk7CisgICAgTlNTZXQgKnBkZkhVRHMoKTsK
KyNlbmRpZgorCiAgICAgdm9pZCByZW5ld0dTdGF0ZSgpOwogICAgIHZvaWQgc2V0RnJhbWVTaXpl
KENHU2l6ZSk7CiAgICAgdm9pZCBkaXNhYmxlRnJhbWVTaXplVXBkYXRlcygpOwpAQCAtNzI5LDcg
Kzc0MiwxMSBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICBSZXRh
aW5QdHI8V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcj4gbV9mdWxsU2NyZWVuV2luZG93Q29u
dHJvbGxlcjsKICNlbmRpZgotICAgIAorCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkK
KyAgICBIYXNoTWFwPFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllciwgUmV0YWluUHRyPFdLUERG
SFVEVmlldz4+IF9wZGZIVURWaWV3czsKKyNlbmRpZgorCiAgICAgUmV0YWluUHRyPFdLU2hhcmVT
aGVldD4gX3NoYXJlU2hlZXQ7CiAKICAgICBSZXRhaW5QdHI8V0tXaW5kb3dWaXNpYmlsaXR5T2Jz
ZXJ2ZXI+IG1fd2luZG93VmlzaWJpbGl0eU9ic2VydmVyOwpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0JKHJldmlzaW9uIDI2NjA4NikKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC02Miw2ICs2Miw3IEBACiAjaW1wb3J0ICJXS0Vycm9ySW50ZXJuYWwuaCIKICNpbXBvcnQg
IldLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaCIKICNpbXBvcnQgIldLSW1tZWRpYXRlQWN0
aW9uQ29udHJvbGxlci5oIgorI2ltcG9ydCAiV0tQREZIVURWaWV3LmgiCiAjaW1wb3J0ICJXS1By
aW50aW5nVmlldy5oIgogI2ltcG9ydCAiV0tTYWZlQnJvd3NpbmdXYXJuaW5nLmgiCiAjaW1wb3J0
ICJXS1NoYXJlU2hlZXQuaCIKQEAgLTE3MTgsNiArMTcxOSw0NSBAQCB2b2lkIFdlYlZpZXdJbXBs
Ojp2aWV3RGlkRW5kTGl2ZVJlc2l6ZSgpCiAgICAgW21fbGF5b3V0U3RyYXRlZ3kgZGlkRW5kTGl2
ZVJlc2l6ZV07CiB9CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCit2b2lkIFdl
YlZpZXdJbXBsOjpjcmVhdGVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIHJlbW92ZVBERkhVRChpZGVudGlm
aWVyKTsKKyAgICBhdXRvIGh1ZCA9IGFkb3B0TlMoW1tXS1BERkhVRFZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6cmVjdCBwbHVnaW5JZGVudGlmaWVyOmlkZW50aWZpZXIgcGFnZTptX3BhZ2UuZ2V0
KCldKTsKKyAgICBbbV92aWV3IGFkZFN1YnZpZXc6aHVkLmdldCgpXTsKKyAgICBfcGRmSFVEVmll
d3MuYWRkKGlkZW50aWZpZXIsIFdURk1vdmUoaHVkKSk7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6
OnVwZGF0ZVBERkhVRExvY2F0aW9uKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoYXV0byBodWQgPSBfcGRmSFVE
Vmlld3MuZ2V0KGlkZW50aWZpZXIpKQorICAgICAgICBbaHVkIHNldEZyYW1lOnJlY3RdOworfQor
Cit2b2lkIFdlYlZpZXdJbXBsOjpyZW1vdmVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllciBpZGVu
dGlmaWVyKQoreworICAgIGlmIChhdXRvIGh1ZCA9IF9wZGZIVURWaWV3cy50YWtlKGlkZW50aWZp
ZXIpKQorICAgICAgICBbaHVkIHJlbW92ZUZyb21TdXBlcnZpZXddOworfQorCit2b2lkIFdlYlZp
ZXdJbXBsOjpyZW1vdmVBbGxQREZIVURzKCkKK3sKKyAgICBmb3IgKGF1dG8mIGh1ZCA6IF9wZGZI
VURWaWV3cy52YWx1ZXMoKSkKKyAgICAgICAgW2h1ZCByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAg
ICBfcGRmSFVEVmlld3MuY2xlYXIoKTsKK30KKworTlNTZXQgKldlYlZpZXdJbXBsOjpwZGZIVURz
KCkKK3sKKyAgICBOU011dGFibGVTZXQ8TlNWaWV3ICo+ICpzZXQgPSBbTlNNdXRhYmxlU2V0IHNl
dFdpdGhDYXBhY2l0eTpfcGRmSFVEVmlld3Muc2l6ZSgpXTsKKyAgICBmb3IgKGF1dG8mIGh1ZCA6
IF9wZGZIVURWaWV3cy52YWx1ZXMoKSkKKyAgICAgICAgW3NldCBhZGRPYmplY3Q6aHVkLmdldCgp
XTsKKyAgICByZXR1cm4gc2V0OworfQorCisjZW5kaWYgLy8gRU5BQkxFKFVJX1BST0NFU1NfUERG
X0hVRCkKKwogdm9pZCBXZWJWaWV3SW1wbDo6cmVuZXdHU3RhdGUoKQogewogICAgIGlmIChtX3Rl
eHRJbmRpY2F0b3JXaW5kb3cpCkBAIC01MzkxLDYgKzU0MzEsMTEgQEAgdm9pZCBXZWJWaWV3SW1w
bDo6bW91c2VNb3ZlZChOU0V2ZW50ICpldgogICAgIGlmIChtX2lnbm9yZXNOb25XaGVlbEV2ZW50
cykKICAgICAgICAgcmV0dXJuOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAg
ICBmb3IgKGF1dG8mIGh1ZCA6IF9wZGZIVURWaWV3cy52YWx1ZXMoKSkKKyAgICAgICAgW2h1ZCBt
b3VzZU1vdmVkOmV2ZW50XTsKKyNlbmRpZgorCiAgICAgLy8gV2hlbiBhIHZpZXcgaXMgZmlyc3Qg
cmVzcG9uZGVyLCBpdCBnZXRzIG1vdXNlIG1vdmVkIGV2ZW50cyBldmVuIHdoZW4gdGhlIG1vdXNl
IGlzIG91dHNpZGUgaXRzIHZpc2libGUgcmVjdC4KICAgICBpZiAobV92aWV3LmdldEF1dG9yZWxl
YXNlZCgpID09IFttX3ZpZXcgd2luZG93XS5maXJzdFJlc3BvbmRlciAmJiAhTlNQb2ludEluUmVj
dChbbV92aWV3IGNvbnZlcnRQb2ludDpbZXZlbnQgbG9jYXRpb25JbldpbmRvd10gZnJvbVZpZXc6
bmlsXSwgW21fdmlldyB2aXNpYmxlUmVjdF0pKQogICAgICAgICByZXR1cm47CkBAIC01NDM5LDYg
KzU0ODQsMTEgQEAgdm9pZCBXZWJWaWV3SW1wbDo6bW91c2VEb3duKE5TRXZlbnQgKmV2ZQogICAg
IGlmIChtX2lnbm9yZXNOb25XaGVlbEV2ZW50cykKICAgICAgICAgcmV0dXJuOwogCisjaWYgRU5B
QkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBmb3IgKGF1dG8mIGh1ZCA6IF9wZGZIVURWaWV3
cy52YWx1ZXMoKSkKKyAgICAgICAgW2h1ZCBtb3VzZURvd246ZXZlbnRdOworI2VuZGlmCisKICAg
ICBzZXRMYXN0TW91c2VEb3duRXZlbnQoZXZlbnQpOwogICAgIHNldElnbm9yZXNNb3VzZURyYWdn
ZWRFdmVudHMoZmFsc2UpOwogCkBAIC01NDUwLDYgKzU1MDAsMTEgQEAgdm9pZCBXZWJWaWV3SW1w
bDo6bW91c2VVcChOU0V2ZW50ICpldmVudAogICAgIGlmIChtX2lnbm9yZXNOb25XaGVlbEV2ZW50
cykKICAgICAgICAgcmV0dXJuOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAg
ICBmb3IgKGF1dG8mIGh1ZCA6IF9wZGZIVURWaWV3cy52YWx1ZXMoKSkKKyAgICAgICAgW2h1ZCBt
b3VzZVVwOmV2ZW50XTsKKyNlbmRpZgorCiAgICAgc2V0TGFzdE1vdXNlRG93bkV2ZW50KG5pbCk7
CiAgICAgbW91c2VVcEludGVybmFsKGV2ZW50KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1BERi9XS1BERkhVRFZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9QREYvV0tQREZIVURWaWV3LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvUERGL1dLUERGSFVEVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKworI2lt
cG9ydCAiUERGUGx1Z2luSWRlbnRpZmllci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNz
IFdlYlBhZ2VQcm94eTsKK30KKworQGludGVyZmFjZSBXS1BERkhVRFZpZXcgOiBOU1ZpZXcKKwor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSBwbHVnaW5JZGVudGlm
aWVyOihXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIpcGx1Z2luSWRlbnRpZmllciBwYWdlOihX
ZWJLaXQ6OldlYlBhZ2VQcm94eSYpcGFnZTsKKy0gKHZvaWQpc2V0RnJhbWU6KE5TUmVjdClmcmFt
ZTsKKy0gKHZvaWQpbW91c2VNb3ZlZDooTlNFdmVudCAqKWV2ZW50OworLSAodm9pZCltb3VzZURv
d246KE5TRXZlbnQgKilldmVudDsKKy0gKHZvaWQpbW91c2VVcDooTlNFdmVudCAqKWV2ZW50Owor
CitAZW5kCisKKyNlbmRpZiAvLyBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvUERGL1dLUERGSFVEVmlldy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QREYvV0tQREZIVURWaWV3Lm1tCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BERi9XS1BERkhVRFZpZXcubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwzNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIldLUERGSFVEVmlldy5oIgorCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hV
RCkKKworI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1wb3J0IDxRdWFydHpDb3JlL0NBVHJh
bnNhY3Rpb24uaD4KKyNpbXBvcnQgPHBhbC9zcGkvY29jb2EvUXVhcnR6Q29yZVNQSS5oPgorI2lt
cG9ydCA8cGFsL3NwaS9tYWMvTlNJbWFnZVNQSS5oPgorI2ltcG9ydCA8d3RmL1dlYWtPYmpDUHRy
Lmg+CisKKy8vICBUaGUgSFVEIGl0ZW1zIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgc3BhY2lu
ZzoKKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisvLyB8ICAgICAgMTIgICAgICAgIDEyICAgICAgMTAgICAgIDEyICAgICAgICAxMiAgICAgIHwK
Ky8vIHwgICAgIC0tLS0gICAgICAtLS0tICAgICB8ICAgICAtLS0tICAgICAgLS0tLSAgICAgfAor
Ly8gfCAxMCB8aWNvbnwgMTAgfGljb258IDEwIHwgMTAgfGljb258IDEwIHxpY29ufCAxMCB8Cisv
LyB8ICAgICAtLS0tICAgICAgLS0tLSAgICAgfCAgICAgLS0tLSAgICAgIC0tLS0gICAgIHwKKy8v
IHwgICAgICAxMiAgICAgICAgMTIgICAgICAxMCAgICAgMTIgICAgICAgIDEyICAgICAgfAorLy8g
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICB3
aGVyZSB0aGUgMTIgcG9pbnQgdmVydGljYWwgc3BhY2luZyBpcyBhbmNob3JlZCB0byB0aGUgc21h
bGxlc3QgaWNvbiBpbWFnZSwKKy8vICBhbmQgYWxsIHN1YnNlcXVlbnQgaWNvbnMgd2l0aCBiZSBj
ZW50ZXJlZCB2ZXJ0aWNhbGx5IHdpdGggdGhlIHNtYWxsZXN0IGljb24uCisKK3N0YXRpYyBjb25z
dCBDR0Zsb2F0IGtMYXllclZlcnRpY2FsT2Zmc2V0ID0gNDA7CitzdGF0aWMgY29uc3QgQ0dGbG9h
dCBrTGF5ZXJDb3JuZXJSYWRpdXMgPSAxMjsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGtMYXllckdy
YXlDb21wb25lbnQgPSAwOworc3RhdGljIGNvbnN0IENHRmxvYXQga0xheWVyQWxwaGEgPSAwLjc1
Oworc3RhdGljIGNvbnN0IENHRmxvYXQga0xheWVySW1hZ2VTY2FsZSA9IDEuNTsKK3N0YXRpYyBj
b25zdCBDR0Zsb2F0IGtMYXllclNlcGVyYXRvckNvbnRyb2xsZXJTaXplID0gMS41Oworc3RhdGlj
IGNvbnN0IENHRmxvYXQga0xheWVyQ29udHJvbGxlckhvcml6b250YWxNYXJnaW4gPSAxMC4wOwor
c3RhdGljIGNvbnN0IENHRmxvYXQga0xheWVySW1hZ2VWZXJ0aWNhbE1hcmdpbiA9IDEyLjA7Citz
dGF0aWMgY29uc3QgQ0dGbG9hdCBrTGF5ZXJTZXBlcmF0b3JWZXJ0aWNhbE1hcmdpbiA9IDEwLjA7
CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrQ29udHJvbExheWVyTm9ybWFsQWxwaGEgPSAwLjc1Owor
c3RhdGljIGNvbnN0IENHRmxvYXQga0NvbnRyb2xMYXllckRvd25BbHBoYSA9IDAuNDU7CisKK3N0
YXRpYyBOU1N0cmluZyAqIGNvbnN0IFBERkhVRFpvb21JbkNvbnRyb2wgPSBAInBsdXMubWFnbmlm
eWluZ2dsYXNzIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFBERkhVRFpvb21PdXRDb250cm9s
ID0gQCJtaW51cy5tYWduaWZ5aW5nZ2xhc3MiOworc3RhdGljIE5TU3RyaW5nICogY29uc3QgUERG
SFVETGF1bmNoUHJldmlld0NvbnRyb2wgPSBAInByZXZpZXciOworc3RhdGljIE5TU3RyaW5nICog
Y29uc3QgUERGSFVEU2F2ZVBERkNvbnRyb2wgPSBAImFycm93LmRvd24uY2lyY2xlIjsKK3N0YXRp
YyBOU1N0cmluZyAqIGNvbnN0IFBERkhVRFNlcGVyYXRvckNvbnRyb2wgPSBAIlBERkhVRFNlcGVy
YXRvckNvbnRyb2wiOworCitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrTGF5ZXJGYWRlSW5UaW1lSW50
ZXJ2YWwgPSAwLjI1Oworc3RhdGljIGNvbnN0IENHRmxvYXQga0xheWVyRmFkZU91dFRpbWVJbnRl
cnZhbCA9IDAuNTsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGtJbml0aWFsSGlkZVRpbWVJbnRlcnZh
bCA9IDMuMDsKKworc3RhdGljIE5TQXJyYXk8TlNTdHJpbmcgKj4gKmNvbnRyb2xBcnJheSgpCit7
CisgICAgcmV0dXJuIEBbCisgICAgICAgIFBERkhVRFpvb21PdXRDb250cm9sLAorICAgICAgICBQ
REZIVURab29tSW5Db250cm9sLAorICAgICAgICBQREZIVURTZXBlcmF0b3JDb250cm9sLAorICAg
ICAgICBQREZIVURMYXVuY2hQcmV2aWV3Q29udHJvbCwKKyAgICAgICAgUERGSFVEU2F2ZVBERkNv
bnRyb2wKKyAgICBdOworfQorCitzdGF0aWMgTlNDb2xvciogUERGQ0dDb2xvckNyZWF0ZUdlbmVy
aWNSR0IoQ0dGbG9hdCByZWQsIENHRmxvYXQgZ3JlZW4sIENHRmxvYXQgYmx1ZSwgQ0dGbG9hdCBh
bHBoYSkKK3sKKyAgICBhdXRvIGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0
ZURldmljZVJHQigpKTsKKyAgICBjb25zdCBDR0Zsb2F0IGNvbXBvbmVudHNbNF0gPSB7IHJlZCwg
Z3JlZW4sIGJsdWUsIGFscGhhIH07CisgICAgYXV0byBjZ0NvbG9yID0gYWRvcHRDRihDR0NvbG9y
Q3JlYXRlKGNvbG9yU3BhY2UuZ2V0KCksIGNvbXBvbmVudHMpKTsKKyAgICByZXR1cm4gW05TQ29s
b3IgY29sb3JXaXRoQ0dDb2xvcjpjZ0NvbG9yLmdldCgpXTsKK30KKworQGltcGxlbWVudGF0aW9u
IFdLUERGSFVEVmlldyB7CitAcHJpdmF0ZQorICAgIFdlYWtQdHI8V2ViS2l0OjpXZWJQYWdlUHJv
eHk+IF9wYWdlOworICAgIFJldGFpblB0cjxOU1N0cmluZz4gX2FjdGl2ZUNvbnRyb2w7CisgICAg
V2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVyIF9wbHVnaW5JZGVudGlmaWVyOworICAgIENHRmxv
YXQgX2RldmljZVNjYWxlRmFjdG9yOworICAgIFJldGFpblB0cjxDQUxheWVyPiBfbGF5ZXI7Cisg
ICAgUmV0YWluUHRyPENBTGF5ZXI+IF9hY3RpdmVMYXllcjsKKyAgICBDR1NpemUgX2ZyYW1lU2l6
ZTsKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeTxOU1N0cmluZyosIE5TSW1hZ2Uq
Pj4gX2NhY2hlZEljb25zOworICAgIEJPT0wgX3Zpc2libGU7CisgICAgYm9vbCBfbW91c2VNb3Zl
ZFRvSFVEOworICAgIGJvb2wgX2luaXRpYWxIaWRlVGltZXJGaXJlZDsKK30KKworLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSBwbHVnaW5JZGVudGlmaWVyOihXZWJL
aXQ6OlBERlBsdWdpbklkZW50aWZpZXIpcGx1Z2luSWRlbnRpZmllciBwYWdlOihXZWJLaXQ6Oldl
YlBhZ2VQcm94eSYpcGFnZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhGcmFt
ZTpmcmFtZV0pKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIHNlbGYud2FudHNMYXll
ciA9IFlFUzsKKyAgICBfY2FjaGVkSWNvbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFy
eSBhbGxvY10gaW5pdF0pOworICAgIF9wbHVnaW5JZGVudGlmaWVyID0gcGx1Z2luSWRlbnRpZmll
cjsKKyAgICBfcGFnZSA9IG1ha2VXZWFrUHRyKHBhZ2UpOworICAgIF9kZXZpY2VTY2FsZUZhY3Rv
ciA9IHBhZ2UuZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBfdmlzaWJsZSA9IFlFUzsKKyAgICBb
c2VsZiBfc2V0dXBMYXllcjpzZWxmLmxheWVyXTsKKyAgICBbc2VsZiBzZXRGcmFtZTpmcmFtZV07
CisKKyAgICBXZWFrT2JqQ1B0cjxXS1BERkhVRFZpZXc+IHdlYWtTZWxmID0gc2VsZjsKKyAgICBk
aXNwYXRjaF9hZnRlcihkaXNwYXRjaF90aW1lKERJU1BBVENIX1RJTUVfTk9XLCAoaW50NjRfdCko
a0luaXRpYWxIaWRlVGltZUludGVydmFsICogTlNFQ19QRVJfU0VDKSksIGRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCksIF57CisgICAgICAgIFt3ZWFrU2VsZiBfaGlkZVRpbWVyRmlyZWRdOworICAg
IH0pOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2xh
eWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0g
KHZvaWQpc2V0RnJhbWU6KE5TUmVjdClyZWN0Cit7CisgICAgW3N1cGVyIHNldEZyYW1lOnJlY3Rd
OworICAgIF9mcmFtZVNpemUgPSByZWN0LnNpemU7CisKKyAgICBbQ0FUcmFuc2FjdGlvbiBiZWdp
bl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKKyAgICBDR1Jl
Y3QgbGF5ZXJCb3VuZHMgPSBbX2xheWVyIGJvdW5kc107CisgICAgW19sYXllciBzZXRGcmFtZTpD
R1JlY3RNYWtlKHJlY3Quc2l6ZS53aWR0aCAvIDIuMCAtIGxheWVyQm91bmRzLnNpemUud2lkdGgg
LyAyLjAsIGtMYXllclZlcnRpY2FsT2Zmc2V0LCBsYXllckJvdW5kcy5zaXplLndpZHRoLCBsYXll
ckJvdW5kcy5zaXplLmhlaWdodCldOworICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Cit9CisK
Ky0gKHZvaWQpX2hpZGVUaW1lckZpcmVkCit7CisgICAgX2luaXRpYWxIaWRlVGltZXJGaXJlZCA9
IHRydWU7CisgICAgaWYgKCFfbW91c2VNb3ZlZFRvSFVEKQorICAgICAgICBbc2VsZiBfc2V0Vmlz
aWJsZTpmYWxzZV07Cit9CisKKy0gKHZvaWQpX3NldFZpc2libGU6KGJvb2wpaXNWaXNpYmxlCit7
CisgICAgaWYgKF92aXNpYmxlID09IGlzVmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOworICAgIF92
aXNpYmxlID0gaXNWaXNpYmxlOworICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICBbQ0FU
cmFuc2FjdGlvbiBzZXRBbmltYXRpb25EdXJhdGlvbjogaXNWaXNpYmxlID8ga0xheWVyRmFkZUlu
VGltZUludGVydmFsIDoga0xheWVyRmFkZU91dFRpbWVJbnRlcnZhbF07CisgICAgW3NlbGYgX3Nl
dExheWVyT3BhY2l0eTppc1Zpc2libGUgPyBrTGF5ZXJBbHBoYSA6IDAuMF07CisgICAgW0NBVHJh
bnNhY3Rpb24gY29tbWl0XTsKK30KKworLSAodm9pZCltb3VzZU1vdmVkOihOU0V2ZW50ICopZXZl
bnQKK3sKKyAgICBpZiAoQ0dSZWN0Q29udGFpbnNQb2ludChbc2VsZiBjb252ZXJ0UmVjdDpDR1Jl
Y3RJbnNldChbX2xheWVyIGZyYW1lXSwgLTE2LjAsIC0xNi4wKSB0b1ZpZXc6bmlsXSwgTlNQb2lu
dFRvQ0dQb2ludChldmVudC5sb2NhdGlvbkluV2luZG93KSkpIHsKKyAgICAgICAgW3NlbGYgX3Nl
dFZpc2libGU6dHJ1ZV07CisgICAgICAgIF9tb3VzZU1vdmVkVG9IVUQgPSB0cnVlOworICAgIH0g
ZWxzZSBpZiAoX2luaXRpYWxIaWRlVGltZXJGaXJlZCkKKyAgICAgICAgW3NlbGYgX3NldFZpc2li
bGU6ZmFsc2VdOworfQorCistICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50Cit7Cisg
ICAgX2FjdGl2ZUNvbnRyb2wgPSBbc2VsZiBfY29udHJvbEZvckV2ZW50OmV2ZW50XTsKKyAgICBp
ZiAoW19hY3RpdmVDb250cm9sIGlzRXF1YWxUb1N0cmluZzpQREZIVURTZXBlcmF0b3JDb250cm9s
XSkKKyAgICAgICAgX2FjdGl2ZUNvbnRyb2wgPSBuaWw7CisgICAgaWYgKF9hY3RpdmVDb250cm9s
KSB7CisgICAgICAgIC8vIFVwZGF0ZSByZW5kZXJpbmcgdG8gaGlnaGxpZ2h0IGl0Li4KKyAgICAg
ICAgX2FjdGl2ZUxheWVyID0gW3NlbGYgX2xheWVyRm9yRXZlbnQ6ZXZlbnRdOworICAgICAgICAK
KyAgICAgICAgLy8gVXBkYXRlIGxheWVyIGltYWdlOyBkbyBub3QgYW5pbWF0ZQorICAgICAgICBb
Q0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVB
Y3Rpb25zOllFU107CisgICAgICAgIAorICAgICAgICBbX2FjdGl2ZUxheWVyIHNldE9wYWNpdHk6
IGtDb250cm9sTGF5ZXJEb3duQWxwaGFdOworICAgICAgICAKKyAgICAgICAgW0NBVHJhbnNhY3Rp
b24gY29tbWl0XTsKKyAgICB9Cit9CisKKy0gKHZvaWQpbW91c2VVcDooTlNFdmVudCAqKWV2ZW50
Cit7CisgICAgaWYgKCFfYWN0aXZlQ29udHJvbCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IE5TU3RyaW5nKiBtb3VzZVVwQ29udHJvbCA9IFtzZWxmIF9jb250cm9sRm9yRXZlbnQ6ZXZlbnRd
OworICAgIGlmIChbX2FjdGl2ZUNvbnRyb2wgaXNFcXVhbFRvU3RyaW5nOm1vdXNlVXBDb250cm9s
XSkKKyAgICAgICAgW3NlbGYgX3BlcmZvcm1BY3Rpb25Gb3JDb250cm9sOl9hY3RpdmVDb250cm9s
LmdldCgpXTsKKyAgICAKKyAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJhbnNh
Y3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKKyAgICBbX2FjdGl2ZUxheWVyIHNldE9wYWNp
dHk6a0NvbnRyb2xMYXllck5vcm1hbEFscGhhXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRd
OworCisgICAgX2FjdGl2ZUxheWVyID0gbmlsOworICAgIF9hY3RpdmVDb250cm9sID0gbmlsOwor
fQorCistIChPcHRpb25hbDxOU1VJbnRlZ2VyPilfY29udHJvbEluZGV4Rm9yRXZlbnQ6KE5TRXZl
bnQgKilldmVudAoreworICAgIENHUG9pbnQgaW5pdGlhbFBvaW50ID0gTlNQb2ludFRvQ0dQb2lu
dChldmVudC5sb2NhdGlvbkluV2luZG93KTsKKyAgICBpbml0aWFsUG9pbnQueCAtPSBbX2xheWVy
IGZyYW1lXS5vcmlnaW4ueDsKKyAgICBpbml0aWFsUG9pbnQueSAtPSBbX2xheWVyIGZyYW1lXS5v
cmlnaW4ueTsKKyAgICBmb3IgKE5TVUludGVnZXIgaW5kZXggPSAwOyBpbmRleCA8IFtfbGF5ZXIg
c3VibGF5ZXJzXS5jb3VudDsgaW5kZXgrKykgeworICAgICAgICBDQUxheWVyICpzdWJMYXllciA9
IFtfbGF5ZXIgc3VibGF5ZXJzXVtpbmRleF07CisgICAgICAgIE5TUmVjdCB3aW5kb3dTcGFjZVJl
Y3QgPSBbc2VsZiBjb252ZXJ0UmVjdDpzdWJMYXllci5mcmFtZSB0b1ZpZXc6bmlsXTsKKyAgICAg
ICAgaWYgKENHUmVjdENvbnRhaW5zUG9pbnQod2luZG93U3BhY2VSZWN0LCBpbml0aWFsUG9pbnQp
KQorICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgIH0KKyAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworfQorCistIChOU1N0cmluZyAqKV9jb250cm9sRm9yRXZlbnQ6KE5TRXZlbnQgKilldmVu
dAoreworICAgIGlmIChhdXRvIGluZGV4ID0gW3NlbGYgX2NvbnRyb2xJbmRleEZvckV2ZW50OmV2
ZW50XSkKKyAgICAgICAgcmV0dXJuIGNvbnRyb2xBcnJheSgpWyppbmRleF07CisgICAgcmV0dXJu
IG5pbDsKK30KKworLSAoQ0FMYXllciAqKV9sYXllckZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQK
K3sKKyAgICBpZiAoYXV0byBpbmRleCA9IFtzZWxmIF9jb250cm9sSW5kZXhGb3JFdmVudDpldmVu
dF0pCisgICAgICAgIHJldHVybiBbX2xheWVyIHN1YmxheWVyc11bKmluZGV4XTsKKyAgICByZXR1
cm4gbmlsOworfQorCistICh2b2lkKV9wZXJmb3JtQWN0aW9uRm9yQ29udHJvbDooTlNTdHJpbmcg
Kiljb250cm9sCit7CisgICAgaWYgKCFfdmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1
dG8qIHBhZ2UgPSBfcGFnZS5nZXQoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAoW2NvbnRyb2wgaXNFcXVhbFRvU3RyaW5nOlBERkhVRFpvb21JbkNvbnRyb2xdKQor
ICAgICAgICBwYWdlLT5wZGZab29tSW4oX3BsdWdpbklkZW50aWZpZXIpOworICAgIGVsc2UgaWYg
KFtjb250cm9sIGlzRXF1YWxUb1N0cmluZzpQREZIVURab29tT3V0Q29udHJvbF0pCisgICAgICAg
IHBhZ2UtPnBkZlpvb21PdXQoX3BsdWdpbklkZW50aWZpZXIpOworICAgIGVsc2UgaWYgKFtjb250
cm9sIGlzRXF1YWxUb1N0cmluZzpQREZIVURTYXZlUERGQ29udHJvbF0pCisgICAgICAgIHBhZ2Ut
PnBkZlNhdmVUb1BERihfcGx1Z2luSWRlbnRpZmllcik7CisgICAgZWxzZSBpZiAoW2NvbnRyb2wg
aXNFcXVhbFRvU3RyaW5nOlBERkhVRExhdW5jaFByZXZpZXdDb250cm9sXSkKKyAgICAgICAgcGFn
ZS0+cGRmT3BlbldpdGhQcmV2aWV3KF9wbHVnaW5JZGVudGlmaWVyKTsKK30KKworLSAodm9pZClf
bG9hZEljb25JbWFnZXMKK3sKKyAgICBmb3IgKE5TU3RyaW5nICpjb250cm9sTmFtZSBpbiBjb250
cm9sQXJyYXkoKSkKKyAgICAgICAgW3NlbGYgX2dldEltYWdlRm9yQ29udHJvbE5hbWU6IGNvbnRy
b2xOYW1lXTsKK30KKworLSAodm9pZClfc2V0dXBMYXllcjooQ0FMYXllciAqKXBhcmVudExheWVy
Cit7CisgICAgX2xheWVyID0gYWRvcHROUyhbW0NBTGF5ZXIgYWxsb2NdIGluaXRdKTsKKyAgICBb
X2xheWVyIHNldENvcm5lclJhZGl1czprTGF5ZXJDb3JuZXJSYWRpdXNdOworICAgIAorICAgIGF1
dG8gY29sb3IgPSBhZG9wdE5TKFBERkNHQ29sb3JDcmVhdGVHZW5lcmljUkdCKGtMYXllckdyYXlD
b21wb25lbnQsIGtMYXllckdyYXlDb21wb25lbnQsIGtMYXllckdyYXlDb21wb25lbnQsIDEuMCkp
OworICAgIFtfbGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOltjb2xvciBDR0NvbG9yXV07CisgICAg
W3NlbGYgX3NldExheWVyT3BhY2l0eTprTGF5ZXJBbHBoYV07CisgICAgCisgICAgW3NlbGYgX2xv
YWRJY29uSW1hZ2VzXTsKKyAgICBDR0Zsb2F0IG1pbkljb25JbWFnZUhlaWdodCA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8Q0dGbG9hdD46Om1heCgpOworICAgIGZvciAoTlNJbWFnZSogaW1hZ2UgaW4g
W19jYWNoZWRJY29ucyBhbGxWYWx1ZXNdKQorICAgICAgICBtaW5JY29uSW1hZ2VIZWlnaHQgPSBz
dGQ6Om1pbihtaW5JY29uSW1hZ2VIZWlnaHQsIChpbWFnZS5zaXplLmhlaWdodCAvIF9kZXZpY2VT
Y2FsZUZhY3RvcikpOworICAgIAorICAgIENHRmxvYXQgZHggPSBrTGF5ZXJDb250cm9sbGVySG9y
aXpvbnRhbE1hcmdpbjsKKyAgICBmb3IgKE5TU3RyaW5nICpjb250cm9sTmFtZSBpbiBjb250cm9s
QXJyYXkoKSkgeworICAgICAgICBhdXRvIGNvbnRyb2xMYXllciA9IGFkb3B0TlMoW1tDQUxheWVy
IGFsbG9jXSBpbml0XSk7CisgICAgICAgIENHRmxvYXQgZHkgPSAwLjA7CisgICAgICAgIENHRmxv
YXQgY29udHJvbGxlcldpZHRoID0gMC4wOworICAgICAgICBDR0Zsb2F0IGNvbnRyb2xsZXJIZWln
aHQgPSAwLjA7CisKKyAgICAgICAgaWYgKFtjb250cm9sTmFtZSBpc0VxdWFsVG9TdHJpbmc6IFBE
RkhVRFNlcGVyYXRvckNvbnRyb2xdKSB7CisgICAgICAgICAgICBkeSA9IGtMYXllclNlcGVyYXRv
clZlcnRpY2FsTWFyZ2luOworICAgICAgICAgICAgY29udHJvbGxlcldpZHRoID0ga0xheWVyU2Vw
ZXJhdG9yQ29udHJvbGxlclNpemU7CisgICAgICAgICAgICBjb250cm9sbGVySGVpZ2h0ID0gbWlu
SWNvbkltYWdlSGVpZ2h0ICsgKDIuMCAqIGtMYXllckltYWdlVmVydGljYWxNYXJnaW4pIC0gKDIu
MCAqIGtMYXllclNlcGVyYXRvclZlcnRpY2FsTWFyZ2luKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgW2NvbnRyb2xMYXllciBzZXRCYWNrZ3JvdW5kQ29sb3I6IFtbTlNDb2xvciBsaWdodEdy
YXlDb2xvcl0gQ0dDb2xvcl1dOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgTlNJbWFn
ZSogY29udHJvbEltYWdlID0gW3NlbGYgX2dldEltYWdlRm9yQ29udHJvbE5hbWU6Y29udHJvbE5h
bWVdOworICAgICAgICAgICAgW2NvbnRyb2xMYXllciBzZXRDb250ZW50czogY29udHJvbEltYWdl
XTsKKyAgICAgICAgICAgIFtjb250cm9sTGF5ZXIgc2V0T3BhY2l0eToga0NvbnRyb2xMYXllck5v
cm1hbEFscGhhXTsKKworICAgICAgICAgICAgZHkgPSBrTGF5ZXJJbWFnZVZlcnRpY2FsTWFyZ2lu
OworICAgICAgICAgICAgY29udHJvbGxlcldpZHRoID0gW2NvbnRyb2xJbWFnZSBzaXplXS53aWR0
aCAvIF9kZXZpY2VTY2FsZUZhY3RvcjsKKyAgICAgICAgICAgIGNvbnRyb2xsZXJIZWlnaHQgPSBb
Y29udHJvbEltYWdlIHNpemVdLmhlaWdodCAvIF9kZXZpY2VTY2FsZUZhY3RvcjsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZHkgLT0gKGNvbnRyb2xsZXJIZWlnaHQgLSBtaW5JY29uSW1hZ2VI
ZWlnaHQpIC8gMi4wOworICAgICAgICAgICAgCisgICAgICAgICAgICBbY29udHJvbExheWVyIHNl
dEZpbHRlcnM6QFtbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyQ29sb3JJbnZlcnRd
XV07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFtjb250cm9sTGF5ZXIgc2V0RnJhbWU6
Q0dSZWN0TWFrZShkeCwgZHksIGNvbnRyb2xsZXJXaWR0aCwgY29udHJvbGxlckhlaWdodCldOwor
ICAgICAgICBbX2xheWVyIGFkZFN1YmxheWVyOmNvbnRyb2xMYXllci5nZXQoKV07CisgICAgICAg
IAorICAgICAgICBkeCArPSBjb250cm9sbGVyV2lkdGggKyBrTGF5ZXJDb250cm9sbGVySG9yaXpv
bnRhbE1hcmdpbjsKKyAgICB9CisgICAgCisgICAgW19sYXllciBzZXRGcmFtZTpDR1JlY3RNYWtl
KDAsIGtMYXllclZlcnRpY2FsT2Zmc2V0LCBkeCwgbWluSWNvbkltYWdlSGVpZ2h0ICsgMi4wICog
a0xheWVySW1hZ2VWZXJ0aWNhbE1hcmdpbildOworICAgIFtwYXJlbnRMYXllciBhZGRTdWJsYXll
cjogX2xheWVyLmdldCgpXTsKK30KKworLSAodm9pZClfcmVkcmF3TGF5ZXIKK3sKKyAgICBbX2Nh
Y2hlZEljb25zIHJlbW92ZUFsbE9iamVjdHNdOworICAgIENBTGF5ZXIgKnBhcmVudExheWVyID0g
W19sYXllciBzdXBlcmxheWVyXTsKKyAgICBbX2xheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsK
KyAgICBbc2VsZiBfc2V0dXBMYXllcjpwYXJlbnRMYXllcl07CisgICAgW3NlbGYgc2V0RnJhbWVT
aXplOl9mcmFtZVNpemVdOworfQorCistIChOU0ltYWdlKilfZ2V0SW1hZ2VGb3JDb250cm9sTmFt
ZTooTlNTdHJpbmcgKiljb250cm9sCit7CisgICAgTlNJbWFnZSogaWNvbkltYWdlID0gX2NhY2hl
ZEljb25zLmdldCgpW2NvbnRyb2xdOworICAgIGlmIChpY29uSW1hZ2UpCisgICAgICAgIHJldHVy
biBpY29uSW1hZ2U7CisKKyAgICBpY29uSW1hZ2UgPSBbTlNJbWFnZSBfaW1hZ2VXaXRoU3lzdGVt
U3ltYm9sTmFtZTogY29udHJvbF07CisgICAgaWYgKCFpY29uSW1hZ2UpCisgICAgICAgIHJldHVy
biBuaWw7CisKKyAgICBpY29uSW1hZ2UgPSBbaWNvbkltYWdlIF9pbWFnZVdpdGhDb25maWd1cmF0
aW9uOkB7CisgICAgICAgIE5TSW1hZ2VBbHRlcm5hdGVDcml0ZXJpb25Gb250IDogW05TRm9udCBw
cmVmZXJyZWRGb250Rm9yVGV4dFN0eWxlOk5TRm9udFRleHRTdHlsZVRpdGxlMiBvcHRpb25zOkB7
IH1dLAorICAgICAgICBOU0ltYWdlQWx0ZXJuYXRlQ3JpdGVyaW9uU3ltYm9sU2NhbGUgOiBAKE5T
SW1hZ2VTeW1ib2xTY2FsZUxhcmdlKQorICAgIH1dOworICAgICAgICAKKyAgICBOU1JlY3QgaWNv
bkltYWdlUmVjdCA9IE5TTWFrZVJlY3QoMCwgMCwgW2ljb25JbWFnZSBzaXplXS53aWR0aCAqIGtM
YXllckltYWdlU2NhbGUgKiBfZGV2aWNlU2NhbGVGYWN0b3IsIFtpY29uSW1hZ2Ugc2l6ZV0uaGVp
Z2h0ICoga0xheWVySW1hZ2VTY2FsZSAqIF9kZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgTlNJbWFn
ZVJlcCogaWNvbkltYWdlUmVwID0gW2ljb25JbWFnZSBiZXN0UmVwcmVzZW50YXRpb25Gb3JSZWN0
Omljb25JbWFnZVJlY3QgY29udGV4dDpuaWwgaGludHM6bmlsXTsKKyAgICBpY29uSW1hZ2UgPSBb
TlNJbWFnZSBpbWFnZVdpdGhJbWFnZVJlcDogaWNvbkltYWdlUmVwXTsKKyAgICAKKyAgICBfY2Fj
aGVkSWNvbnMuZ2V0KClbY29udHJvbF0gPSBpY29uSW1hZ2U7CisgICAgcmV0dXJuIGljb25JbWFn
ZTsKK30KKworLSAodm9pZClfc2V0TGF5ZXJPcGFjaXR5OihDR0Zsb2F0KWFscGhhCit7CisgICAg
W19sYXllciBzZXRPcGFjaXR5OmFscGhhXTsKKyAgICBmb3IgKENBTGF5ZXIgKnN1YkxheWVyIGlu
IFtfbGF5ZXIgc3VibGF5ZXJzXSkKKyAgICAgICAgW3N1YkxheWVyIHNldE9wYWNpdHk6YWxwaGFd
OworfQorCitAZW5kCisKKyNlbmRpZiAvLyBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQpJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCShy
ZXZpc2lvbiAyNjYwODYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVBy
b3h5SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg4LDE2ICsxMDg4LDYgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OmRpZFBlcmZvcm1EaWN0aW9uYXJ5TAogICAgIHBhZ2VDbGllbnQoKS5kaWRQZXJm
b3JtRGljdGlvbmFyeUxvb2t1cChkaWN0aW9uYXJ5UG9wdXBJbmZvKTsKIH0KIAotdm9pZCBXZWJQ
YWdlUHJveHk6OnNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGlj
YXRpb24oY29uc3QgU3RyaW5nJiwgRnJhbWVJbmZvRGF0YSYmLCBjb25zdCBJUEM6OkRhdGFSZWZl
cmVuY2UmLCBjb25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgV2ViUGFnZVByb3h5OjpvcGVuUERGRnJvbVRlbXBvcmFyeUZvbGRlcldpdGhOYXRpdmVBcHBs
aWNhdGlvbihGcmFtZUluZm9EYXRhJiYsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQogdm9pZCBXZWJQYWdlUHJveHk6OnNldFJlbW90ZUxheWVyVHJlZVJvb3RO
b2RlKFJlbW90ZUxheWVyVHJlZU5vZGUqIHJvb3ROb2RlKQogewogICAgIHBhZ2VDbGllbnQoKS5z
ZXRSZW1vdGVMYXllclRyZWVSb290Tm9kZShyb290Tm9kZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMuaAkocmV2aXNpb24gMjY2MDg2
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE5MCw2ICsxOTAsMTMgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcmVn
aXN0ZXJJbnNlcnRpb25VbmRvR3JvdXBpbmcoKSBvdmVycmlkZTsKIAorI2lmIEVOQUJMRShVSV9Q
Uk9DRVNTX1BERl9IVUQpCisgICAgdm9pZCBjcmVhdGVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmll
ciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgdXBkYXRlUERG
SFVETG9jYXRpb24oUERGUGx1Z2luSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
IG92ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIpIG92
ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlQWxsUERGSFVEcygpIG92ZXJyaWRlOworI2VuZGlmCisK
ICAgICAvLyBBdXhpbGlhcnkgQ2xpZW50IENyZWF0aW9uCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5f
QVBJKQogICAgIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGllbnQmIGZ1bGxTY3JlZW5NYW5h
Z2VyUHJveHlDbGllbnQoKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0JKHJldmlzaW9uIDI2NjA4NikKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzQ5LDYgKzM0OSwzMCBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpyZWdpc3Rlcklu
c2VydGlvblVuCiAgICAgcmVnaXN0ZXJJbnNlcnRpb25VbmRvR3JvdXBpbmdXaXRoVW5kb01hbmFn
ZXIoW21fdmlldyB1bmRvTWFuYWdlcl0pOwogfQogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERG
X0hVRCkKKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlUERGSFVEKFBERlBsdWdpbklkZW50
aWZpZXIgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBt
X2ltcGwtPmNyZWF0ZVBERkhVRChpZGVudGlmaWVyLCByZWN0KTsKK30KKwordm9pZCBQYWdlQ2xp
ZW50SW1wbDo6dXBkYXRlUERGSFVETG9jYXRpb24oUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlm
aWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIG1faW1wbC0+dXBkYXRl
UERGSFVETG9jYXRpb24oaWRlbnRpZmllciwgcmVjdCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudElt
cGw6OnJlbW92ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAg
bV9pbXBsLT5yZW1vdmVQREZIVUQoaWRlbnRpZmllcik7Cit9CisKK3ZvaWQgUGFnZUNsaWVudElt
cGw6OnJlbW92ZUFsbFBERkhVRHMoKQoreworICAgIG1faW1wbC0+cmVtb3ZlQWxsUERGSFVEcygp
OworfQorCisjZW5kaWYgLy8gRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKwogdm9pZCBQYWdl
Q2xpZW50SW1wbDo6Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKQogewogICAgIG1faW1wbC0+Y2xlYXJB
bGxFZGl0Q29tbWFuZHMoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQ
YWdlUHJveHlNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFj
L1dlYlBhZ2VQcm94eU1hYy5tbQkocmV2aXNpb24gMjY2MDg2KQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDc1LDgg
KzQ3NSw2IEBAIHN0YXRpYyBOU1N0cmluZyAqcGF0aFRvUERGT25EaXNrKGNvbnN0IFMKIAogdm9p
ZCBXZWJQYWdlUHJveHk6OnNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZl
QXBwbGljYXRpb24oY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgRnJhbWVJbmZvRGF0
YSYmIGZyYW1lSW5mbywgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhLCBjb25zdCBTdHJp
bmcmIHBkZlVVSUQpCiB7Ci0gICAgTUVTU0FHRV9DSEVDSyhUZW1wb3JhcnlQREZGaWxlTWFwOjpp
c1ZhbGlkS2V5KHBkZlVVSUQpKTsKLQogICAgIGlmIChkYXRhLmlzRW1wdHkoKSkgewogICAgICAg
ICBXVEZMb2dBbHdheXMoIkNhbm5vdCBzYXZlIGVtcHR5IFBERiBmaWxlIHRvIHRoZSB0ZW1wb3Jh
cnkgZGlyZWN0b3J5LiIpOwogICAgICAgICByZXR1cm47CkBAIC01MDQsNyArNTAyLDggQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OnNhdmVQREZUb1RlbXBvcmFyeUZvbAogICAgIGF1dG8gb3JpZ2luYXRp
bmdVUkxTdHJpbmcgPSBmcmFtZUluZm8ucmVxdWVzdC51cmwoKS5zdHJpbmcoKTsKICAgICBGaWxl
U3lzdGVtOjpzZXRNZXRhZGF0YVVSTChuc1BhdGguZ2V0KCksIG9yaWdpbmF0aW5nVVJMU3RyaW5n
KTsKIAotICAgIG1fdGVtcG9yYXJ5UERGRmlsZXMuYWRkKHBkZlVVSUQsIG5zUGF0aC5nZXQoKSk7
CisgICAgaWYgKFRlbXBvcmFyeVBERkZpbGVNYXA6OmlzVmFsaWRLZXkocGRmVVVJRCkpCisgICAg
ICAgIG1fdGVtcG9yYXJ5UERGRmlsZXMuYWRkKHBkZlVVSUQsIG5zUGF0aC5nZXQoKSk7CiAKICAg
ICBhdXRvIHBkZkZpbGVVUkwgPSBVUkw6OmZpbGVVUkxXaXRoRmlsZVN5c3RlbVBhdGgoU3RyaW5n
KG5zUGF0aC5nZXQoKSkpOwogICAgIG1fdWlDbGllbnQtPmNvbmZpcm1QREZPcGVuaW5nKCp0aGlz
LCBwZGZGaWxlVVJMLCBXVEZNb3ZlKGZyYW1lSW5mbyksIFtwZGZGaWxlVVJMXSAoYm9vbCBhbGxv
d2VkKSB7CkBAIC01MTQsNiArNTEzLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNhdmVQREZUb1Rl
bXBvcmFyeUZvbAogICAgIH0pOwogfQogCisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pICYmICFF
TkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQogdm9pZCBXZWJQYWdlUHJveHk6Om9wZW5QREZGcm9t
VGVtcG9yYXJ5Rm9sZGVyV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKEZyYW1lSW5mb0RhdGEmJiBmcmFt
ZUluZm8sIGNvbnN0IFN0cmluZyYgcGRmVVVJRCkKIHsKICAgICBNRVNTQUdFX0NIRUNLKFRlbXBv
cmFyeVBERkZpbGVNYXA6OmlzVmFsaWRLZXkocGRmVVVJRCkpOwpAQCAtNTMwLDYgKzUzMCw3IEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpvcGVuUERGRnJvbVRlbXBvcmFyeUYKICAgICAgICAgW1tOU1dv
cmtzcGFjZSBzaGFyZWRXb3Jrc3BhY2VdIG9wZW5VUkw6cGRmRmlsZVVSTF07CiAgICAgfSk7CiB9
CisjZW5kaWYKIAogI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQogdm9pZCBXZWJQYWdlUHJveHk6
OnNob3dQREZDb250ZXh0TWVudShjb25zdCBXZWJLaXQ6OlBERkNvbnRleHRNZW51JiBjb250ZXh0
TWVudSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxpbnQzMl90PiYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTY3Myw2ICs2NzQsNDkgQEAgUGxhdGZvcm1WaWV3KiBXZWJQYWdl
UHJveHk6OnBsYXRmb3JtVmlldwogICAgIHJldHVybiBbcGFnZUNsaWVudCgpLnBsYXRmb3JtV2lu
ZG93KCkgY29udGVudFZpZXddOwogfQogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkK
Kwordm9pZCBXZWJQYWdlUHJveHk6OmNyZWF0ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyIGlk
ZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCit7CisgICAgcGFnZUNsaWVu
dCgpLmNyZWF0ZVBERkhVRChpZGVudGlmaWVyLCByZWN0KTsKK30KKwordm9pZCBXZWJQYWdlUHJv
eHk6OnJlbW92ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAg
cGFnZUNsaWVudCgpLnJlbW92ZVBERkhVRChpZGVudGlmaWVyKTsKK30KKwordm9pZCBXZWJQYWdl
UHJveHk6OnVwZGF0ZVBERkhVRExvY2F0aW9uKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmll
ciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBwYWdlQ2xpZW50KCkudXBk
YXRlUERGSFVETG9jYXRpb24oaWRlbnRpZmllciwgcmVjdCk7Cit9CisKK3ZvaWQgV2ViUGFnZVBy
b3h5OjpwZGZab29tSW4oUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIHNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6Olpvb21QREZJbihpZGVudGlmaWVyKSk7Cit9CisKK3ZvaWQg
V2ViUGFnZVByb3h5OjpwZGZab29tT3V0KFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikK
K3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpab29tUERGT3V0KGlkZW50aWZpZXIpKTsK
K30KKwordm9pZCBXZWJQYWdlUHJveHk6OnBkZlNhdmVUb1BERihQREZQbHVnaW5JZGVudGlmaWVy
IGlkZW50aWZpZXIpCit7CisgICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJQYWdl
OjpTYXZlUERGKGlkZW50aWZpZXIpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpXSAoU3RyaW5nJiYgc3VnZ2VzdGVkRmlsZW5hbWUsIFVSTCYmIG9yaWdpbmF0aW5nVVJMLCBj
b25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGFSZWZlcmVuY2UpIHsKKyAgICAgICAgc2F2ZVBE
RlRvRmlsZUluRG93bmxvYWRzRm9sZGVyKFdURk1vdmUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBXVEZN
b3ZlKG9yaWdpbmF0aW5nVVJMKSwgZGF0YVJlZmVyZW5jZSk7CisgICAgfSk7Cit9CisKK3ZvaWQg
V2ViUGFnZVByb3h5OjpwZGZPcGVuV2l0aFByZXZpZXcoUERGUGx1Z2luSWRlbnRpZmllciBpZGVu
dGlmaWVyKQoreworICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViUGFnZTo6T3Bl
blBERldpdGhQcmV2aWV3KGlkZW50aWZpZXIpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpXSAoU3RyaW5nJiYgc3VnZ2VzdGVkRmlsZW5hbWUsIEZyYW1lSW5mb0RhdGEmJiBm
cmFtZUluZm8sIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YSwgY29uc3QgU3RyaW5nJiBw
ZGZVVUlEKSB7CisgICAgICAgIHNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0
aXZlQXBwbGljYXRpb24oV1RGTW92ZShzdWdnZXN0ZWRGaWxlbmFtZSksIFdURk1vdmUoZnJhbWVJ
bmZvKSwgZGF0YSwgcGRmVVVJRCk7CisgICAgfSk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoVUlf
UFJPQ0VTU19QREZfSFVEKQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMjY2MDg2KQorKysgU291cmNlL1dlYktpdC9XZWJLaXQu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTc5MCw2ICsxNzkw
LDcgQEAKIAkJRDNCOTQ4NDkxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlNlYXJjaFBvcHVwTWVudS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNCOTQ4NDUx
MUZGNEI2NTAwMDMyQjM5IC8qIFdlYlNlYXJjaFBvcHVwTWVudS5oICovOyB9OwogCQlERjQ2MkUw
RjIzRjIyRjU1MDBFRkYzNUYgLyogV0tIVFRQQ29va2llU3RvcmVQcml2YXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERjQ2MkUwRTIzRjIyRjUzMDBF
RkYzNUYgLyogV0tIVFRQQ29va2llU3RvcmVQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREY0NjJFMTIyM0YzMzhCRTAwRUZGMzVGIC8q
IFdLQ29udGVudFdvcmxkUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gREY0NjJFMTEyM0YzMzhBRDAwRUZGMzVGIC8qIFdLQ29udGVudFdvcmxk
UHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCURGODRDRUU0MjQ5QUEyNEQwMDkwOTZGNiAvKiBXS1BERkhVRFZpZXcubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERjg0Q0VFMjI0OUFBMjFGMDA5
MDk2RjYgLyogV0tQREZIVURWaWV3Lm1tICovOyB9OwogCQlFMTA1RkU1NDE4RDdCOURFMDA4RjU3
QTggLyogRWRpdGluZ1JhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMTA1RkU1MzE4RDdCOURFMDA4RjU3QTggLyogRWRpdGluZ1JhbmdlLmggKi87
IH07CiAJCUUxMUQzNUFFMTZCNjNEMUIwMDZEMjNENyAvKiBjb20uYXBwbGUuV2ViUHJvY2Vzcy5z
YiBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE5NjdF
MzcxNTBBQjVFMjAwQzczMTY5IC8qIGNvbS5hcHBsZS5XZWJQcm9jZXNzLnNiICovOyB9OwogCQlF
MTRBOTU0QTE2RTAxNkE0MDA2OERFODIgLyogTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdp
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNEE5
NTQ4MTZFMDE2QTQwMDY4REU4MiAvKiBOZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5o
ICovOyB9OwpAQCAtNTI3OSw2ICs1MjgwLDkgQEAKIAkJREY0NjJFMTEyM0YzMzhBRDAwRUZGMzVG
IC8qIFdLQ29udGVudFdvcmxkUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXS0NvbnRlbnRXb3JsZFByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJREY1OEM2MzExMzcxQUM1ODAwRjlBMzdDIC8qIE5hdGl2ZVdlYldoZWVsRXZlbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmF0aXZlV2ViV2hlZWxFdmVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERjU4QzYzNTEzNzFBQ0EwMDBGOUEzN0MgLyogTmF0
aXZlV2ViV2hlZWxFdmVudE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IE5hdGl2ZVdlYldoZWVsRXZlbnRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCURGNzQyNzVCMjRGNDc3Q0UwMEY4QUJFOSAvKiBQREZQbHVnaW5JZGVudGlmaWVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBERlBsdWdpbklkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJREY4NENFRTIyNDlBQTIxRjAwOTA5NkY2IC8qIFdLUERGSFVEVmlldy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLUERGSFVEVmlldy5tbTsg
cGF0aCA9IFBERi9XS1BERkhVRFZpZXcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CURGODRDRUUzMjQ5QUEyMUYwMDkwOTZGNiAvKiBXS1BERkhVRFZpZXcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gV0tQREZIVURWaWV3Lmg7IHBhdGggPSBQREYvV0tQREZIVURW
aWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMDVGRTUzMThEN0I5REUwMDhG
NTdBOCAvKiBFZGl0aW5nUmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RWRpdGluZ1JhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMTVDNzE1MTkw
RjhBMjUwMEVDQzUxNiAvKiBjb20uYXBwbGUuV2ViS2l0LlN0b3JhZ2Uuc2IgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBuYW1lID0gY29tLmFwcGxlLldlYktpdC5TdG9yYWdlLnNiOyBwYXRoID0gRGVyaXZlZFNv
dXJjZXMvV2ViS2l0Mi9jb20uYXBwbGUuV2ViS2l0LlN0b3JhZ2Uuc2I7IHNvdXJjZVRyZWUgPSBC
VUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUUxMzNGRDg5MTQyM0REN0YwMEZDN0JGQiAvKiBXZWJL
aXQuaWNucyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IGltYWdlLmljbnM7IG5hbWUgPSBXZWJLaXQuaWNuczsgcGF0aCA9IFJlc291cmNlcy9XZWJLaXQu
aWNuczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg5MDUsNiArODkwOSw3IEBACiAJ
CQkJMUE5MEMxRjIxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRDb250cm9sbGVyLmggKi8sCiAJCQkJ
N0MzODc0MzMxNzJGNTYxNTAwMUJEODhBIC8qIFBhZ2VCYW5uZXIuY3BwICovLAogCQkJCTdDRjQ3
RkY5MTcyNzVDNTcwMDhBQ0I5MSAvKiBQYWdlQmFubmVyLmggKi8sCisJCQkJREY3NDI3NUIyNEY0
NzdDRTAwRjhBQkU5IC8qIFBERlBsdWdpbklkZW50aWZpZXIuaCAqLywKIAkJCQkyRDgxOUI5OTE4
NjI3NUIzMDAxRjAzRDEgLyogVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5jcHAgKi8sCiAJ
CQkJMkQ4MTlCOUExODYyNzVCMzAwMUYwM0QxIC8qIFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0
b3IuaCAqLywKIAkJCQkyRDgxOUI5QjE4NjI3NUIzMDAxRjAzRDEgLyogVmlld0dlc3R1cmVHZW9t
ZXRyeUNvbGxlY3Rvci5tZXNzYWdlcy5pbiAqLywKQEAgLTg5NjMsNiArODk2OCw3IEBACiAJCQkJ
Q0Q0NTcwRDgyNDQ0Q0ExNzAwQTNEQ0VCIC8qIE1lZGlhICovLAogCQkJCTUxMENDN0U3MTYxMzhF
NzIwMEQwM0VEMyAvKiBOZXR3b3JrICovLAogCQkJCTMxQTJFQzQwMTQ4OTk3MzcwMDgxMEQ3MSAv
KiBOb3RpZmljYXRpb25zICovLAorCQkJCURGODRDRUUxMjQ5QUEyMDAwMDkwOTZGNiAvKiBQREYg
Ki8sCiAJCQkJMUFFRkNDMDUxMUQwMUYzNDAwODIxOUQzIC8qIFBsdWdpbnMgKi8sCiAJCQkJMkQx
NTUxQTkxRjVBOUI0MjAwMDZFM0ZFIC8qIFJlbW90ZUxheWVyVHJlZSAqLywKIAkJCQkxQUFGMDg5
RTE5MjY4MUFDMDBCNjM5MEMgLyogVXNlckNvbnRlbnQgKi8sCkBAIC0xMDQ1MSw2ICsxMDQ1Nywx
NSBAQAogCQkJcGF0aCA9IGlvczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJ
CURGODRDRUUxMjQ5QUEyMDAwMDkwOTZGNiAvKiBQREYgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91
cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCURGODRDRUUzMjQ5QUEyMUYwMDkwOTZGNiAvKiBXS1BE
RkhVRFZpZXcuaCAqLywKKwkJCQlERjg0Q0VFMjI0OUFBMjFGMDA5MDk2RjYgLyogV0tQREZIVURW
aWV3Lm1tICovLAorCQkJKTsKKwkJCW5hbWUgPSBQREY7CisJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOworCQl9OwogCQlFMTcwODc2RDE2RDZDQTcyMDBGOTkyMjYgLyogRmlsZUFQSSAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0xMzE0Miw2ICsxMzE1Nyw3
IEBACiAJCQkJNjM3MjgxQTMyMUFEQzc0NDAwOUUwREU2IC8qIFdLRG93bmxvYWRQcm9ncmVzcy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTVDRTkxMjBEMjI5M0MyMTkwMDVCRUM3OCAvKiBXS01haW4u
bW0gaW4gU291cmNlcyAqLywKIAkJCQk0NjU3RDg4QTIyNjY0QTJGMDA1REU4MjMgLyogV0tPcmll
bnRhdGlvbkFjY2Vzc0FsZXJ0Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJREY4NENFRTQyNDlBQTI0
RDAwOTA5NkY2IC8qIFdLUERGSFVEVmlldy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTVDQTI2RDgz
MjE3QUQxQjgwMEY5N0EzNSAvKiBXS1NhZmVCcm93c2luZ1dhcm5pbmcubW0gaW4gU291cmNlcyAq
LywKIAkJCQkxREIwMTk0NDIxMUNGMDA1MDA5RkIzRTggLyogV0tTaGFyZVNoZWV0Lm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0E3OEZGMzMyMjQxOTE5QjAwOTY0ODNFIC8qIFdLU3RvcmFnZUFjY2Vz
c0FsZXJ0Lm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
UGx1Z2lucy9QREYvUERGTGF5ZXJDb250cm9sbGVyU1BJLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERkxheWVyQ29udHJvbGxlclNQSS5oCShy
ZXZpc2lvbiAyNjYwODYpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYv
UERGTGF5ZXJDb250cm9sbGVyU1BJLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDEyIEBA
IHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFBERkxheWVyQ29udHIKIAogLSAodm9pZClzbmFw
c2hvdEluQ29udGV4dDooQ0dDb250ZXh0UmVmKWNvbnRleHQ7CiAKKyNpZiBFTkFCTEUoVUlfUFJP
Q0VTU19QREZfSFVEKQorLSAodm9pZClzZXREaXNwbGF5c1BERkhVRENvbnRyb2xsZXI6KEJPT0wp
ZGlzcGxheXNDb250cm9sbGVyOworLSAodm9pZCl6b29tSW46KGlkKWF0UG9pbnQ7CistICh2b2lk
KXpvb21PdXQ6KGlkKWF0UG9pbnQ7CisjZW5kaWYKKwogLSAodm9pZCltYWduaWZ5V2l0aE1hZ25p
ZmljYXRpb246KENHRmxvYXQpbWFnbmlmaWNhdGlvbiBhdFBvaW50OihDR1BvaW50KXBvaW50IGlt
bWVkaWF0ZWx5OihCT09MKWltbWVkaWF0ZWx5OwogCiAtIChDR1BvaW50KXNjcm9sbFBvc2l0aW9u
OwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQ
bHVnaW4uaAkocmV2aXNpb24gMjY2MDg2KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1Bs
dWdpbnMvUERGL1BERlBsdWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAj
aWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCiAKICNpbmNsdWRlICJQREZLaXRJbXBvcnRzLmgiCisj
aW5jbHVkZSAiUERGUGx1Z2luSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlBsdWdpbi5oIgogI2lu
Y2x1ZGUgIldlYkV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViSGl0VGVzdFJlc3VsdERhdGEuaCIKQEAg
LTUwLDYgKzUxLDcgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNWYQog
T0JKQ19DTEFTUyBOU0FycmF5OwogT0JKQ19DTEFTUyBOU0F0dHJpYnV0ZWRTdHJpbmc7CiBPQkpD
X0NMQVNTIE5TRGF0YTsKK09CSkNfQ0xBU1MgTlNFdmVudDsKIE9CSkNfQ0xBU1MgTlNTdHJpbmc7
CiBPQkpDX0NMQVNTIFBERkFubm90YXRpb247CiBPQkpDX0NMQVNTIFBERkxheWVyQ29udHJvbGxl
cjsKQEAgLTc3LDggKzc5LDkgQEAgY2xhc3MgUERGUGx1Z2luQW5ub3RhdGlvbjsKIGNsYXNzIFBE
RlBsdWdpblBhc3N3b3JkRmllbGQ7CiBjbGFzcyBQbHVnaW5WaWV3OwogY2xhc3MgV2ViRnJhbWU7
CitzdHJ1Y3QgRnJhbWVJbmZvRGF0YTsKIAotY2xhc3MgUERGUGx1Z2luIGZpbmFsIDogcHVibGlj
IFBsdWdpbiwgcHJpdmF0ZSBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYQorY2xhc3MgUERGUGx1Z2lu
IGZpbmFsIDogcHVibGljIFBsdWdpbiwgcHVibGljIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhCiAj
aWYgSEFWRShJTkNSRU1FTlRBTF9QREZfQVBJUykKICAgICAsIHByaXZhdGUgV2ViQ29yZTo6TmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQKICNlbmRpZgpAQCAtMTAzLDkgKzEwNiwxOSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBub3RpZnlTZWxlY3Rpb25DaGFuZ2VkKFBERlNlbGVjdGlvbiAq
KTsKICAgICB2b2lkIG5vdGlmeUN1cnNvckNoYW5nZWQodWludDY0X3QgLyogUERGTGF5ZXJDb250
cm9sbGVyQ3Vyc29yVHlwZSAqLyk7CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQor
ICAgIHZvaWQgem9vbUluKCk7CisgICAgdm9pZCB6b29tT3V0KCk7CisgICAgdm9pZCBzYXZlKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJiwgY29uc3QgVVJMJiwgY29uc3QgSVBD
OjpEYXRhUmVmZXJlbmNlJik+JiYpOworICAgIHZvaWQgb3BlbldpdGhQcmV2aWV3KENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJiwgRnJhbWVJbmZvRGF0YSYmLCBjb25zdCBJUEM6
OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmKT4mJik7CisgICAgUERGUGx1Z2luSWRlbnRp
ZmllciBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CisjZW5kaWYK
KwogICAgIHZvaWQgY2xpY2tlZExpbmsoTlNVUkwgKik7CisjaWYgIUVOQUJMRShVSV9QUk9DRVNT
X1BERl9IVUQpCiAgICAgdm9pZCBzYXZlVG9QREYoKTsKICAgICB2b2lkIG9wZW5XaXRoTmF0aXZl
QXBwbGljYXRpb24oKTsKKyNlbmRpZgogICAgIHZvaWQgd3JpdGVJdGVtc1RvUGFzdGVib2FyZChO
U1N0cmluZyAqcGFzdGVib2FyZE5hbWUsIE5TQXJyYXkgKml0ZW1zLCBOU0FycmF5ICp0eXBlcyk7
CiAgICAgdm9pZCBzaG93RGVmaW5pdGlvbkZvckF0dHJpYnV0ZWRTdHJpbmcoTlNBdHRyaWJ1dGVk
U3RyaW5nICosIENHUG9pbnQpOwogICAgIHZvaWQgcGVyZm9ybVdlYlNlYXJjaChOU1N0cmluZyAq
KTsKQEAgLTExOCw3ICsxMzEsMTAgQEAgcHVibGljOgogCiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0
IGNvbnZlcnRGcm9tUERGVmlld1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGNv
bnN0OwogICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tUm9vdFZpZXdUb1BERlZpZXco
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBj
b252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29u
c3Q7CisgICAgV2ViQ29yZTo6SW50UmVjdCBjb252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3KGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdDsKICAgICBXZWJDb3JlOjpJbnRSZWN0IGJvdW5k
c09uU2NyZWVuKCkgY29uc3Q7CisgICAgV2ViQ29yZTo6SW50UmVjdCBmcmFtZUZvckhVRCgpIGNv
bnN0OwogCiAgICAgYm9vbCBzaG93Q29udGV4dE1lbnVBdFBvaW50KGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50Jik7CiAKQEAgLTE1OSw3ICsxNzUsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgd2FudHNX
aGVlbEV2ZW50cygpIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KICAgICB2b2lkIGdlb21ldHJ5RGlk
Q2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHBsdWdpblNpemUsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIGNsaXBSZWN0LCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mIHBsdWdp
blRvUm9vdFZpZXdUcmFuc2Zvcm0pIGZpbmFsOwogICAgIHZvaWQgY29udGVudHNTY2FsZUZhY3Rv
ckNoYW5nZWQoZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgdmlzaWJpbGl0eURpZENoYW5nZShib29s
KSBmaW5hbCB7IH0KKyAgICB2b2lkIHZpc2liaWxpdHlEaWRDaGFuZ2UoYm9vbCkgZmluYWw7CiAg
ICAgdm9pZCBmcmFtZURpZEZpbmlzaExvYWRpbmcodWludDY0X3QgcmVxdWVzdElEKSBmaW5hbDsK
ICAgICB2b2lkIGZyYW1lRGlkRmFpbCh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgd2FzQ2FuY2Vs
bGVkKSBmaW5hbDsKICAgICB2b2lkIGRpZEV2YWx1YXRlSmF2YVNjcmlwdCh1aW50NjRfdCByZXF1
ZXN0SUQsIGNvbnN0IFN0cmluZyYgcmVzdWx0KSBmaW5hbDsKQEAgLTI2Myw3ICsyNzksNiBAQCBw
cml2YXRlOgogICAgIE5TRXZlbnQgKm5zRXZlbnRGb3JXZWJNb3VzZUV2ZW50KGNvbnN0IFdlYk1v
dXNlRXZlbnQmKTsKICAgICBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbVBsdWdpblRvUERG
Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OwogICAgIFdlYkNvcmU6OkludFBv
aW50IGNvbnZlcnRGcm9tUm9vdFZpZXdUb1BsdWdpbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYp
IGNvbnN0OwotICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tUERGVmlld1RvUm9vdFZp
ZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKICAgICAKICAgICBib29sIHN1cHBv
cnRzRm9ybXMoKTsKICAgICBib29sIGlzRnVsbEZyYW1lUGx1Z2luKCkgY29uc3Q7CkBAIC00MDMs
NiArNDE4LDkgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAjZW5kaWYgLy8gSEFWRShJTkNSRU1FTlRB
TF9QREZfQVBJUykKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIFBERlBsdWdp
bklkZW50aWZpZXIgbV9pZGVudGlmaWVyOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVn
aW4ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERG
L1BERlBsdWdpbi5tbQkocmV2aXNpb24gMjY2MDg2KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNDMzLDEyICs0
MzMsMTYgQEAgLSAodm9pZClwZXJmb3JtU3BvdGxpZ2h0U2VhcmNoOihOU1N0cmluZwogCiAtICh2
b2lkKW9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24KIHsKKyNpZiAhRU5BQkxFKFVJX1BST0NFU1Nf
UERGX0hVRCkKICAgICBfcGRmUGx1Z2luLT5vcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKCk7Cisj
ZW5kaWYKIH0KIAogLSAodm9pZClzYXZlVG9QREYKIHsKKyNpZiAhRU5BQkxFKFVJX1BST0NFU1Nf
UERGX0hVRCkKICAgICBfcGRmUGx1Z2luLT5zYXZlVG9QREYoKTsKKyNlbmRpZgogfQogCiAtICh2
b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250
cm9sbGVyIGNsaWNrZWRMaW5rV2l0aFVSTDooTlNVUkwgKil1cmwKQEAgLTYwMCw3ICs2MDQsMTMg
QEAgaW5saW5lIFBERlBsdWdpbjo6UERGUGx1Z2luKFdlYkZyYW1lJiBmcgogI2lmIEhBVkUoSU5D
UkVNRU5UQUxfUERGX0FQSVMpCiAgICAgLCBtX2luY3JlbWVudGFsUERGTG9hZGluZ0VuYWJsZWQo
V2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5pbmNyZW1l
bnRhbFBERkxvYWRpbmdFbmFibGVkKCkpCiAjZW5kaWYKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19Q
REZfSFVEKQorICAgICwgbV9pZGVudGlmaWVyKFBERlBsdWdpbklkZW50aWZpZXI6OmdlbmVyYXRl
KCkpCisjZW5kaWYKIHsKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIFttX3Bk
ZkxheWVyQ29udHJvbGxlciBzZXREaXNwbGF5c1BERkhVRENvbnRyb2xsZXI6Tk9dOworI2VuZGlm
CiAgICAgbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkuZGVsZWdhdGUgPSBtX3BkZkxheWVyQ29u
dHJvbGxlckRlbGVnYXRlLmdldCgpOwogICAgIG1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpLnBh
cmVudExheWVyID0gbV9jb250ZW50TGF5ZXIuZ2V0KCk7CiAKQEAgLTY0MCw2ICs2NTAsMTAgQEAg
aW5saW5lIFBERlBsdWdpbjo6UERGUGx1Z2luKFdlYkZyYW1lJiBmcgogCiBQREZQbHVnaW46On5Q
REZQbHVnaW4oKQogeworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgaWYgKGF1
dG8qIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+cmVtb3ZlUERGSFVEKCp0
aGlzKTsKKyNlbmRpZgogfQogCiAjaWYgSEFWRShJTkNSRU1FTlRBTF9QREZfQVBJUykKQEAgLTE3
NzIsNiArMTc4NiwxMSBAQCB2b2lkIFBERlBsdWdpbjo6Y29udGVudHNTY2FsZUZhY3RvckNoYW5n
CiAgICAgdXBkYXRlUGFnZUFuZERldmljZVNjYWxlRmFjdG9ycygpOwogfQogCitJbnRSZWN0IFBE
RlBsdWdpbjo6ZnJhbWVGb3JIVUQoKSBjb25zdAoreworICAgIHJldHVybiBjb252ZXJ0RnJvbVBE
RlZpZXdUb1Jvb3RWaWV3KEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSgpKSk7Cit9CisKIHZvaWQg
UERGUGx1Z2luOjpjYWxjdWxhdGVTaXplcygpCiB7CiAgICAgaWYgKFttX3BkZkRvY3VtZW50IGlz
TG9ja2VkXSkgewpAQCAtMTc4Miw2ICsxODAxLDEwIEBAIHZvaWQgUERGUGx1Z2luOjpjYWxjdWxh
dGVTaXplcygpCiAKICAgICBtX2ZpcnN0UGFnZUhlaWdodCA9IFttX3BkZkRvY3VtZW50IHBhZ2VD
b3VudF0gPyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQ0dDZWlsaW5nKFtbbV9wZGZEb2N1bWVudCBw
YWdlQXRJbmRleDowXSBib3VuZHNGb3JCb3g6a1BERkRpc3BsYXlCb3hDcm9wQm94XS5zaXplLmhl
aWdodCkpIDogMDsKICAgICBzZXRQREZEb2N1bWVudFNpemUoSW50U2l6ZShbbV9wZGZMYXllckNv
bnRyb2xsZXIgY29udGVudFNpemVSZXNwZWN0aW5nWm9vbV0pKTsKKworI2lmIEVOQUJMRShVSV9Q
Uk9DRVNTX1BERl9IVUQpCisgICAgbV9mcmFtZS5wYWdlKCktPnVwZGF0ZVBERkhVRExvY2F0aW9u
KCp0aGlzLCBmcmFtZUZvckhVRCgpKTsKKyNlbmRpZgogfQogCiBib29sIFBERlBsdWdpbjo6aW5p
dGlhbGl6ZShjb25zdCBQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQpAQCAtMTkxNiw3ICsxOTM5LDEz
IEBAIEludFBvaW50IFBERlBsdWdpbjo6Y29udmVydEZyb21QREZWaWV3VG8KICAgICBJbnRQb2lu
dCBwb2ludEluUGx1Z2luQ29vcmRpbmF0ZXMocG9pbnQueCgpLCBzaXplKCkuaGVpZ2h0KCkgLSBw
b2ludC55KCkpOwogICAgIHJldHVybiBtX3Jvb3RWaWV3VG9QbHVnaW5UcmFuc2Zvcm0uaW52ZXJz
ZSgpLnZhbHVlT3IoQWZmaW5lVHJhbnNmb3JtKCkpLm1hcFBvaW50KHBvaW50SW5QbHVnaW5Db29y
ZGluYXRlcyk7CiB9Ci0gICAgCisKK0ludFJlY3QgUERGUGx1Z2luOjpjb252ZXJ0RnJvbVBERlZp
ZXdUb1Jvb3RWaWV3KGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgSW50UmVjdCBy
ZWN0SW5QbHVnaW5Db29yZGluYXRlcyhyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwg
cmVjdC5oZWlnaHQoKSk7CisgICAgcmV0dXJuIG1fcm9vdFZpZXdUb1BsdWdpblRyYW5zZm9ybS5p
bnZlcnNlKCkudmFsdWVPcihBZmZpbmVUcmFuc2Zvcm0oKSkubWFwUmVjdChyZWN0SW5QbHVnaW5D
b29yZGluYXRlcyk7Cit9CisKIEludFBvaW50IFBERlBsdWdpbjo6Y29udmVydEZyb21Sb290Vmll
d1RvUERGVmlldyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgSW50UG9pbnQg
cG9pbnRJblBsdWdpbkNvb3JkaW5hdGVzID0gbV9yb290Vmlld1RvUGx1Z2luVHJhbnNmb3JtLm1h
cFBvaW50KHBvaW50KTsKQEAgLTE5NDcsNiArMTk3NiwxOCBAQCBJbnRSZWN0IFBERlBsdWdpbjo6
Ym91bmRzT25TY3JlZW4oKSBjb25zCiAgICAgcmV0dXJuIGZyYW1lVmlldy0+Y29udGVudHNUb1Nj
cmVlbihlbmNsb3NpbmdJbnRSZWN0KHJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMpKTsKIH0KIAor
dm9pZCBQREZQbHVnaW46OnZpc2liaWxpdHlEaWRDaGFuZ2UoYm9vbCB2aXNpYmxlKQoreworI2lm
IEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgaWYgKHZpc2libGUpCisgICAgICAgIG1f
ZnJhbWUucGFnZSgpLT5jcmVhdGVQREZIVUQoKnRoaXMsIGZyYW1lRm9ySFVEKCkpOworICAgIGVs
c2UKKyAgICAgICAgbV9mcmFtZS5wYWdlKCktPnJlbW92ZVBERkhVRCgqdGhpcyk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTSh2aXNpYmxlKTsKKyNlbmRpZgorfQorCiB2b2lkIFBERlBsdWdpbjo6
Z2VvbWV0cnlEaWRDaGFuZ2UoY29uc3QgSW50U2l6ZSYgcGx1Z2luU2l6ZSwgY29uc3QgSW50UmVj
dCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybSkKIHsK
ICAgICBpZiAoc2l6ZSgpID09IHBsdWdpblNpemUgJiYgcGx1Z2luVmlldygpLT5wYWdlU2NhbGVG
YWN0b3IoKSA9PSBbbV9wZGZMYXllckNvbnRyb2xsZXIgY29udGVudFNjYWxlRmFjdG9yXSkKQEAg
LTIzOTIsNiArMjQzMywzMSBAQCBib29sIFBERlBsdWdpbjo6cGx1Z2luSGFuZGxlc0NvbnRlbnRP
ZmZzCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVE
KQorCit2b2lkIFBERlBsdWdpbjo6em9vbUluKCkKK3sKKyAgICBbbV9wZGZMYXllckNvbnRyb2xs
ZXIgem9vbUluOm5pbF07Cit9CisKK3ZvaWQgUERGUGx1Z2luOjp6b29tT3V0KCkKK3sKKyAgICBb
bV9wZGZMYXllckNvbnRyb2xsZXIgem9vbU91dDpuaWxdOworfQorCit2b2lkIFBERlBsdWdpbjo6
c2F2ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFVSTCYsIGNv
bnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIE5T
RGF0YSAqZGF0YSA9IGxpdmVEYXRhKCk7CisgICAgY29tcGxldGlvbkhhbmRsZXIobV9zdWdnZXN0
ZWRGaWxlbmFtZSwgbV9mcmFtZS51cmwoKSwgSVBDOjogRGF0YVJlZmVyZW5jZShzdGF0aWNfY2Fz
dDxjb25zdCB1aW50OF90Kj4oZGF0YS5ieXRlcyksIGRhdGEubGVuZ3RoKSk7Cit9CisKK3ZvaWQg
UERGUGx1Z2luOjpvcGVuV2l0aFByZXZpZXcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBT
dHJpbmcmLCBGcmFtZUluZm9EYXRhJiYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYsIGNvbnN0
IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIE5TRGF0YSAqZGF0YSA9IGxp
dmVEYXRhKCk7CisgICAgY29tcGxldGlvbkhhbmRsZXIobV9zdWdnZXN0ZWRGaWxlbmFtZSwgbV9m
cmFtZS5pbmZvKCksIElQQzo6IERhdGFSZWZlcmVuY2UgeyBzdGF0aWNfY2FzdDxjb25zdCB1aW50
OF90Kj4oZGF0YS5ieXRlcyksIGRhdGEubGVuZ3RoIH0sIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJp
bmcoKSk7Cit9CisKKyNlbHNlIC8vIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCiAgICAgCiB2
b2lkIFBERlBsdWdpbjo6c2F2ZVRvUERGKCkKIHsKQEAgLTI0MjQsNiArMjQ5MCw4IEBAIHZvaWQg
UERGUGx1Z2luOjpvcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW8KICAgICBtX2ZyYW1lLnBhZ2UoKS0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpPcGVuUERGRnJvbVRlbXBvcmFyeUZvbGRlcldp
dGhOYXRpdmVBcHBsaWNhdGlvbihtX2ZyYW1lLmluZm8oKSwgbV90ZW1wb3JhcnlQREZVVUlEKSk7
CiB9CiAKKyNlbmRpZiAvLyBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCiB2b2lkIFBERlBs
dWdpbjo6d3JpdGVJdGVtc1RvUGFzdGVib2FyZChOU1N0cmluZyAqcGFzdGVib2FyZE5hbWUsIE5T
QXJyYXkgKml0ZW1zLCBOU0FycmF5ICp0eXBlcykKIHsKICAgICBhdXRvIHBhc3RlYm9hcmRUeXBl
cyA9IG1ha2VWZWN0b3I8U3RyaW5nPih0eXBlcyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9QREZQbHVnaW5JZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUERGUGx1Z2luSWRlbnRpZmllci5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1BERlBsdWdpbklkZW50
aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCitlbnVtIFBERlBs
dWdpbklkZW50aWZpZXJUeXBlIHsgfTsKK3VzaW5nIFBERlBsdWdpbklkZW50aWZpZXIgPSBPYmpl
Y3RJZGVudGlmaWVyPFBERlBsdWdpbklkZW50aWZpZXJUeXBlPjsKKyNlbmRpZgorCit9CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNp
b24gMjY2MDg2KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlICJOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5h
Z2VyLmgiCisjaW5jbHVkZSAiUERGUGx1Z0luLmgiCiAjaW5jbHVkZSAiUGFnZUJhbm5lci5oIgog
I2luY2x1ZGUgIlBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiUGx1Z2luUHJv
eHkuaCIKQEAgLTUxMjMsMTIgKzUxMjQsMTIgQEAgdm9pZCBXZWJQYWdlOjpkaWRGaW5pc2hQcmlu
dE9wZXJhdGlvbihjbwogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikgJiYg
IUVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCiB2b2lkIFdlYlBhZ2U6OnNhdmVQREZUb0ZpbGVJ
bkRvd25sb2Fkc0ZvbGRlcihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25zdCBV
UkwmIG9yaWdpbmF0aW5nVVJMLCBjb25zdCB1aW50OF90KiBkYXRhLCB1bnNpZ25lZCBsb25nIHNp
emUpCiB7CiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTYXZlUERGVG9GaWxlSW5E
b3dubG9hZHNGb2xkZXIoc3VnZ2VzdGVkRmlsZW5hbWUsIG9yaWdpbmF0aW5nVVJMLCBJUEM6OkRh
dGFSZWZlcmVuY2UoZGF0YSwgc2l6ZSkpKTsKIH0KIAotI2lmIFBMQVRGT1JNKENPQ09BKQogdm9p
ZCBXZWJQYWdlOjpzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxp
Y2F0aW9uKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIEZyYW1lSW5mb0RhdGEmJiBm
cmFtZUluZm8sIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgY29uc3Qg
U3RyaW5nJiBwZGZVVUlEKQogewogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2F2
ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbihzdWdnZXN0
ZWRGaWxlbmFtZSwgZnJhbWVJbmZvLCBJUEM6OkRhdGFSZWZlcmVuY2UoZGF0YSwgc2l6ZSksIHBk
ZlVVSUQpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmgJKHJldmlzaW9uIDI2NjA4NikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIk1l
c3NhZ2VSZWNlaXZlci5oIgogI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKICNpbmNsdWRlICJP
cHRpb25hbENhbGxiYWNrSUQuaCIKKyNpbmNsdWRlICJQREZQbHVnaW5JZGVudGlmaWVyLmgiCiAj
aW5jbHVkZSAiUGx1Z2luLmgiCiAjaW5jbHVkZSAiUG9saWN5RGVjaXNpb24uaCIKICNpbmNsdWRl
ICJTYW5kYm94RXh0ZW5zaW9uLmgiCkBAIC0zNDUsNiArMzQ2LDE2IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgY2VudGVyU2VsZWN0aW9uSW5WaXNpYmxlQXJlYSgpOwogCisjaWYgRU5BQkxFKFVJX1BS
T0NFU1NfUERGX0hVRCkKKyAgICB2b2lkIGNyZWF0ZVBERkhVRChQREZQbHVnaW4mLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCB1cGRhdGVQREZIVURMb2NhdGlvbihQREZQbHVn
aW4mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCByZW1vdmVQREZIVUQoUERG
UGx1Z2luJik7CisgICAgdm9pZCB6b29tUERGSW4oUERGUGx1Z2luSWRlbnRpZmllcik7CisgICAg
dm9pZCB6b29tUERGT3V0KFBERlBsdWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgc2F2ZVBERihQ
REZQbHVnaW5JZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYs
IGNvbnN0IFVSTCYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpPiYmKTsKKyAgICB2b2lkIG9w
ZW5QREZXaXRoUHJldmlldyhQREZQbHVnaW5JZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGNvbnN0IFN0cmluZyYsIEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJl
bmNlJiwgY29uc3QgU3RyaW5nJik+JiYpOworI2VuZGlmCisKICNpZiBQTEFURk9STShDT0NPQSkK
ICAgICB2b2lkIHdpbGxDb21taXRMYXllclRyZWUoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24m
KTsKICAgICB2b2lkIGRpZEZsdXNoTGF5ZXJUcmVlQXRUaW1lKE1vbm90b25pY1RpbWUpOwpAQCAt
MTA3NCw5ICsxMDg1LDggQEAgcHVibGljOgogICAgIE5TRGljdGlvbmFyeSAqZGF0YURldGVjdGlv
bkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2RhdGFEZXRlY3Rpb25Db250ZXh0LmdldCgpOyB9
CiAjZW5kaWYKIAorI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKSAmJiAhRU5BQkxFKFVJX1BST0NF
U1NfUERGX0hVRCkKICAgICB2b2lkIHNhdmVQREZUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcihjb25z
dCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25zdCBVUkwmIG9yaWdpbmF0aW5nVVJMLCBj
b25zdCB1aW50OF90KiBkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUpOwotCi0jaWYgUExBVEZPUk0o
Q09DT0EpCiAgICAgdm9pZCBzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2
ZUFwcGxpY2F0aW9uKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIEZyYW1lSW5mb0Rh
dGEmJiwgY29uc3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplLCBjb25zdCBTdHJp
bmcmIHBkZlVVSUQpOwogI2VuZGlmCiAKQEAgLTE3OTEsNiArMTgwMSwxMCBAQCBwcml2YXRlOgog
CiAgICAgV2ViQ29yZTo6Q29sb3IgbV91bmRlcmxheUNvbG9yOwogCisjaWYgRU5BQkxFKFVJX1BS
T0NFU1NfUERGX0hVRCkKKyAgICBIYXNoTWFwPFBERlBsdWdpbklkZW50aWZpZXIsIFdlYWtQdHI8
UERGUGx1Z2luPj4gbV9wZGZQbHVnSW5zV2l0aEhVRDsKKyNlbmRpZgorCiAgICAgYm9vbCBtX2lz
SW5SZWRvIHsgZmFsc2UgfTsKICAgICBib29sIG1faXNDbG9zZWQgeyBmYWxzZSB9OwogICAgIGJv
b2wgbV90YWJUb0xpbmtzIHsgZmFsc2UgfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjY2MDg2
KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5p
bgkod29ya2luZyBjb3B5KQpAQCAtNTc2LDYgKzU3NiwxMyBAQCBHZW5lcmF0ZVN5bnRoZXRpY0Vk
aXRpbmdDb21tYW5kKGVudW06dWluCiAKICAgICBTZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJz
TG9hZGluZykKIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgWm9vbVBERklu
KFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQorICAgIFpvb21QREZPdXQo
V2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCisgICAgU2F2ZVBERihXZWJL
aXQ6OlBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikgLT4gKFN0cmluZyBmaWxlbmFtZSwg
VVJMIHVybCwgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEpIEFzeW5jCisgICAgT3BlblBERldpdGhQ
cmV2aWV3KFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKSAtPiAoU3RyaW5n
IGZpbGVuYW1lLCBzdHJ1Y3QgV2ViS2l0OjpGcmFtZUluZm9EYXRhIGZyYW1lSW5mbywgSVBDOjpE
YXRhUmVmZXJlbmNlIGRhdGEsIFN0cmluZyB1dWlkKSBBc3luYworI2VuZGlmCisKICAgICBVcGRh
dGVDdXJyZW50TW9kaWZpZXJTdGF0ZShPcHRpb25TZXQ8V2ViQ29yZTo6UGxhdGZvcm1FdmVudDo6
TW9kaWZpZXI+IG1vZGlmaWVycykKICAgICBTaW11bGF0ZURldmljZU9yaWVudGF0aW9uQ2hhbmdl
KGRvdWJsZSBhbHBoYSwgZG91YmxlIGJldGEsIGRvdWJsZSBnYW1tYSkKIApJbmRleDogU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0JKHJl
dmlzaW9uIDI2NjA4NikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9X
ZWJQYWdlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW1wb3J0ICJF
ZGl0aW5nUmFuZ2UuaCIKICNpbXBvcnQgIkVkaXRvclN0YXRlLmgiCiAjaW1wb3J0ICJGb250SW5m
by5oIgorI2ltcG9ydCAiRnJhbWVJbmZvRGF0YS5oIgogI2ltcG9ydCAiSW5qZWN0ZWRCdW5kbGVI
aXRUZXN0UmVzdWx0LmgiCiAjaW1wb3J0ICJQREZLaXRJbXBvcnRzLmgiCiAjaW1wb3J0ICJQREZQ
bHVnaW4uaCIKQEAgLTEwNTEsNyArMTA1Miw2MiBAQCB2b2lkIFdlYlBhZ2U6OnNldEFjY2VudENv
bG9yKFdlYkNvcmU6OkNvCiAgICAgW05TQXBwIF9zZXRBY2NlbnRDb2xvcjpjb2xvci5pc1ZhbGlk
KCkgPyBXZWJDb3JlOjpuc0NvbG9yKGNvbG9yKSA6IG5pbF07CiB9CiAKLSNlbmRpZgorI2VuZGlm
IC8vIEhBVkUoQVBQX0FDQ0VOVF9DT0xPUlMpCisKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZf
SFVEKQorCit2b2lkIFdlYlBhZ2U6Onpvb21QREZJbihQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50
aWZpZXIpCit7CisgICAgYXV0byBwZGZQbHVnaW4gPSBtX3BkZlBsdWdJbnNXaXRoSFVELmdldChp
ZGVudGlmaWVyKTsKKyAgICBpZiAoIXBkZlBsdWdpbikKKyAgICAgICAgcmV0dXJuOworICAgIHBk
ZlBsdWdpbi0+em9vbUluKCk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6em9vbVBERk91dChQREZQbHVn
aW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgYXV0byBwZGZQbHVnaW4gPSBtX3BkZlBs
dWdJbnNXaXRoSFVELmdldChpZGVudGlmaWVyKTsKKyAgICBpZiAoIXBkZlBsdWdpbikKKyAgICAg
ICAgcmV0dXJuOworICAgIHBkZlBsdWdpbi0+em9vbU91dCgpOworfQorCit2b2lkIFdlYlBhZ2U6
OnNhdmVQREYoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFVSTCYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5j
ZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGF1dG8gcGRmUGx1Z2luID0gbV9wZGZQ
bHVnSW5zV2l0aEhVRC5nZXQoaWRlbnRpZmllcik7CisgICAgaWYgKCFwZGZQbHVnaW4pCisgICAg
ICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0sIHsgfSwgeyB9KTsKKyAgICBwZGZQbHVn
aW4tPnNhdmUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIFdlYlBhZ2U6
Om9wZW5QREZXaXRoUHJldmlldyhQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJiwgRnJhbWVJbmZvRGF0YSYmLCBjb25zdCBJ
UEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
K3sKKyAgICBhdXRvIHBkZlBsdWdpbiA9IG1fcGRmUGx1Z0luc1dpdGhIVUQuZ2V0KGlkZW50aWZp
ZXIpOworICAgIGlmICghcGRmUGx1Z2luKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRs
ZXIoeyB9LCB7IH0sIHsgfSwgeyB9KTsKKyAgICBwZGZQbHVnaW4tPm9wZW5XaXRoUHJldmlldyhX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6Y3JlYXRlUERG
SFVEKFBERlBsdWdpbiYgcGx1Z2luLCBjb25zdCBJbnRSZWN0JiBib3VuZGluZ0JveCkKK3sKKyAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1fcGRmUGx1Z0luc1dpdGhIVUQuYWRkKHBsdWdpbi5pZGVudGlm
aWVyKCksIG1ha2VXZWFrUHRyKHBsdWdpbikpOworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRy
eSkKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDcmVhdGVQREZIVUQocGx1
Z2luLmlkZW50aWZpZXIoKSwgYm91bmRpbmdCb3gpKTsKK30KKwordm9pZCBXZWJQYWdlOjp1cGRh
dGVQREZIVURMb2NhdGlvbihQREZQbHVnaW4mIHBsdWdpbiwgY29uc3QgSW50UmVjdCYgYm91bmRp
bmdCb3gpCit7CisgICAgaWYgKG1fcGRmUGx1Z0luc1dpdGhIVUQuY29udGFpbnMocGx1Z2luLmlk
ZW50aWZpZXIoKSkpCisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6VXBkYXRl
UERGSFVETG9jYXRpb24ocGx1Z2luLmlkZW50aWZpZXIoKSwgYm91bmRpbmdCb3gpKTsKK30KKwor
dm9pZCBXZWJQYWdlOjpyZW1vdmVQREZIVUQoUERGUGx1Z2luJiBwbHVnaW4pCit7CisgICAgaWYg
KG1fcGRmUGx1Z0luc1dpdGhIVUQucmVtb3ZlKHBsdWdpbi5pZGVudGlmaWVyKCkpKQorICAgICAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlbW92ZVBERkhVRChwbHVnaW4uaWRlbnRp
ZmllcigpKSk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407150</attachid>
            <date>2020-08-24 17:41:41 -0700</date>
            <delta_ts>2020-08-24 18:08:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215780-20200824174140.patch</filename>
            <type>text/plain</type>
            <size>63955</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjYwOTApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA4LTI0ICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBQREYgaGVhZHMtdXAgZGlz
cGxheSB0byBVSSBwcm9jZXNzIG9uIG1hY09TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU3ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU4NzE1
ODQ3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
d3RmL1BsYXRmb3JtSGF2ZS5oOgorCiAyMDIwLTA4LTI0ICBBbGV4IENocmlzdGVuc2VuICA8YWNo
cmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgSW1wbGVtZW50IFJlcXVlc3QvUmVzcG9u
c2UgY29uc3VtaW5nIGFzIEZvcm1EYXRhCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVu
YWJsZUNvY29hLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGVD
b2NvYS5oCShyZXZpc2lvbiAyNjYwOTApCisrKyBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJs
ZUNvY29hLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw2ICsyMjgsMTAgQEAKICNkZWZpbmUgRU5B
QkxFX0dQVV9EUklWRVJfUFJFV0FSTUlORyAxCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKE1BQykg
JiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAwMDAKKyNkZWZpbmUgRU5B
QkxFX1VJX1BST0NFU1NfUERGX0hVRCAxCisjZW5kaWYKKwogI2lmICFkZWZpbmVkKEVOQUJMRV9J
TkRFWEVEX0RBVEFCQVNFKQogI2RlZmluZSBFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSAxCiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjYwOTApCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk2IEBACisyMDIwLTA4LTI0ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBQREYg
aGVhZHMtdXAgZGlzcGxheSB0byBVSSBwcm9jZXNzIG9uIG1hY09TCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU3ODAKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzU4NzE1ODQ3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoaXMgaGFzIG1hbnkgYmVuZWZpdHMgaW5jbHVkaW5nIHRoZSBvbmUgaW4gdGhl
IHJhZGFyLCB0ZXN0YWJpbGl0eSwgYW5kIG1vdmluZyBXZWJLaXQtc3BlY2lmaWMgY29kZSBmcm9t
IFBERktpdCB0byBXZWJLaXQuCisKKyAgICAgICAgTm93IHRoYXQgdGhlIEhVRCBpcyBkaXNwbGF5
ZWQgaW4gdGhlIFVJIHByb2Nlc3MgaW5zdGVhZCBvZiBpbiB0aGUgd2ViIGNvbnRlbnQsIHpvb21p
bmcgaW4ga2VlcHMgdGhlIEhVRCB0aGUgc2FtZSBzaXplLgorICAgICAgICBBIDNkLXRyYW5zZm9y
bWVkIGlmcmFtZSB3aXRoIGEgUERGIGluIGl0IG5vdyBzaG93cyB0aGUgSFVEIGluIHRoZSBwbGFj
ZSB5b3UgY2FuIGNsaWNrIG9uIGl0LCBpbnN0ZWFkIG9mIGluIHRoZSB0cmFuc2Zvcm1lZCBQREYu
CisgICAgICAgIEFsc28sIG1vdmluZyB0aGUgbW91c2UgdG8gdGhlIEhVRCB3aXRoaW4gdGhlIGZp
cnN0IDMgc2Vjb25kcyBwcmV2ZW50cyBpdCBmcm9tIGhpZGluZywgd2hpY2ggaXQgZG9lcyB3aGVu
IHRoZSBtb3VzZSBsZWF2ZXMgdGhlIEhVRC4KKyAgICAgICAgVGhlIHJlc3Qgb2YgdGhlIGJlaGF2
aW9yIEkgdGhpbmsgc2hvdWxkIGJlIHRoZSBzYW1lLiAgTW9zdCB1c2VycyBzaG91bGQgbm90IG5v
dGljZSBhbnkgZGlmZmVyZW5jZS4KKworICAgICAgICBGdW5jdGlvbmFsaXR5IGNvdmVyZWQgYnkg
QVBJIHRlc3RzLCB0aGUgZmlyc3QgdGVzdHMgZm9yIFBERiBjb250ZW50IGludGVyYWN0aW9uIQor
CisgICAgICAgICogU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvbWFjL1dLVmlldy5tbToKKyAgICAgICAgKC1bV0tWaWV3IF9jcmVhdGVQREZIVUQ6cmVjdDpd
KToKKyAgICAgICAgKC1bV0tWaWV3IF9wZGZIVUQ6Y2hhbmdlZExvY2F0aW9uOl0pOgorICAgICAg
ICAoLVtXS1ZpZXcgX3JlbW92ZVBERkhVRDpdKToKKyAgICAgICAgKC1bV0tWaWV3IF9yZW1vdmVB
bGxQREZIVURzXSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3TWFjLm1t
OgorICAgICAgICAoLVtXS1dlYlZpZXcgbW91c2VNb3ZlZDpdKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IG1vdXNlRG93bjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IG1vdXNlVXA6XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfY3JlYXRlUERGSFVEOnJlY3Q6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfcGRmSFVEOmNoYW5nZWRMb2NhdGlvbjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9y
ZW1vdmVQREZIVUQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcmVtb3ZlQWxsUERGSFVEc10p
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5n
TWFjLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5t
bToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHBkZkhVRHNdKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
Q29jb2EvV2ViVmlld0ltcGwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViVmlld0lt
cGwubW06CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjcmVhdGVQREZIVUQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dXBkYXRlUERGSFVETG9jYXRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cmVtb3ZlUERGSFVEKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6OnJlbW92ZUFsbFBERkhVRHMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9QYWdl
Q2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5Ojpwcm9jZXNzRGlkVGVybWluYXRlKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5t
bToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzYXZlUERGVG9UZW1wb3JhcnlGb2xk
ZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpvcGVuUERGRnJvbVRlbXBvcmFyeUZvbGRlcldpdGhOYXRpdmVBcHBs
aWNhdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1w
bE1hYy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW06Cisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpjcmVhdGVQREZIVUQpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6dXBkYXRlUERGSFVETG9jYXRpb24pOgorICAgICAgICAo
V2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6cmVtb3ZlUERGSFVEKToKKyAgICAgICAgKFdlYktpdDo6
UGFnZUNsaWVudEltcGw6OnJlbW92ZUFsbFBERkhVRHMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9t
YWMvV2ViUGFnZVByb3h5TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNh
dmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNyZWF0ZVBERkhVRCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6cmVtb3ZlUERGSFVEKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5Ojp1cGRhdGVQREZIVURMb2NhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6cGRmWm9vbUluKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZGZab29t
T3V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZGZTYXZlVG9QREYpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBkZk9wZW5XaXRoUHJldmlldyk6CisgICAgICAg
ICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vz
cy9QbHVnaW5zL1BERi9QREZMYXllckNvbnRyb2xsZXJTUEkuaDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lu
cy9QREYvUERGUGx1Z2luLm1tOgorICAgICAgICAoLVtXS1BERkxheWVyQ29udHJvbGxlckRlbGVn
YXRlIG9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb25dKToKKyAgICAgICAgKC1bV0tQREZMYXllckNv
bnRyb2xsZXJEZWxlZ2F0ZSBzYXZlVG9QREZdKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2lu
OjpQREZQbHVnaW4pOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46On5QREZQbHVnaW4pOgor
ICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmZyYW1lRm9ySFVEIGNvbnN0KToKKyAgICAgICAg
KFdlYktpdDo6UERGUGx1Z2luOjpjYWxjdWxhdGVTaXplcyk6CisgICAgICAgIChXZWJLaXQ6OlBE
RlBsdWdpbjo6Y29udmVydEZyb21QREZWaWV3VG9Sb290VmlldyBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OlBERlBsdWdpbjo6dmlzaWJpbGl0eURpZENoYW5nZSk6CisgICAgICAgIChXZWJLaXQ6
OlBERlBsdWdpbjo6em9vbUluKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjp6b29tT3V0
KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpzYXZlKToKKyAgICAgICAgKFdlYktpdDo6
UERGUGx1Z2luOjpvcGVuV2l0aFByZXZpZXcpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6em9vbVBERkluKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6em9vbVBE
Rk91dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNhdmVQREYpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjpvcGVuUERGV2l0aFByZXZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjpjcmVhdGVQREZIVUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cGRhdGVQREZI
VURMb2NhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlbW92ZVBERkhVRCk6CisK
IDIwMjAtMDgtMjQgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwgZml4IHRoZSBpbnRlcm5hbCBpT1MgMTMuNCBidWlsZApJbmRleDog
U291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CShyZXZpc2lvbiAyNjYwOTAp
CisrKyBTb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0yNDMsNiArMjQzLDcgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRf
ZGVjbGFyZQogICAgICAgICAnV2ViS2l0OjpNRE5TUmVnaXN0ZXJJZGVudGlmaWVyJywKICAgICAg
ICAgJ1dlYktpdDo6TWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlSWRlbnRpZmllcicsCiAgICAgICAg
ICdXZWJLaXQ6Ok1lZGlhUmVjb3JkZXJJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6UERG
UGx1Z2luSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbkNvbnRl
eHRJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6UGx1Z2luUHJvY2Vzc1R5cGUnLAogICAg
ICAgICAnV2ViS2l0OjpSZW1vdGVBdWRpb0Rlc3RpbmF0aW9uSWRlbnRpZmllcicsCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCShyZXZpc2lvbiAyNjYwOTApCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYg
KzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgor
I2luY2x1ZGUgIlBERlBsdWdpbklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJTYW1lRG9jdW1lbnRO
YXZpZ2F0aW9uVHlwZS5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUg
IldlYkNvbG9yUGlja2VyLmgiCkBAIC0yNDIsNiArMjQzLDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgZGlkRmFpbFByb3Zpc2lvbmFsTG9hZEZvck1haW5GcmFtZSgpIHsgfTsKICAgICB2
aXJ0dWFsIHZvaWQgZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBib29sIHVzZUN1c3RvbUNvbnRlbnRQcm92aWRlcikgPSAwOwogCisjaWYgRU5BQkxFKFVJ
X1BST0NFU1NfUERGX0hVRCkKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlUERGSFVEKFBERlBsdWdp
bklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVBERkhVRExvY2F0aW9uKFBERlBsdWdpbklkZW50aWZpZXIsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVBERkhVRChQREZQbHVn
aW5JZGVudGlmaWVyKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFsbFBERkhVRHMoKSA9
IDA7CisjZW5kaWYKKyAgICAKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0
KERvd25sb2FkUHJveHkmKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlUnVuT3BlblBh
bmVsKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqLCBjb25zdCBGcmFtZUluZm9EYXRhJiwg
QVBJOjpPcGVuUGFuZWxQYXJhbWV0ZXJzKiwgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94
eSopIHsgcmV0dXJuIGZhbHNlOyB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5jcHAJKHJldmlzaW9uIDI2NjA5MCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3NzIsMTUgKzQ3NzIsMTQgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZQogICAgICAgICAgICAgbV9w
bHVnaW5TY2FsZUZhY3RvciA9IDE7CiAgICAgICAgICAgICBtX21haW5GcmFtZVBsdWdpbkhhbmRs
ZXNQYWdlU2NhbGVHZXN0dXJlID0gZmFsc2U7CiAgICAgICAgIH0KLSAgICB9Ci0KICNpZiBFTkFC
TEUoUE9JTlRFUl9MT0NLKQotICAgIGlmIChmcmFtZS0+aXNNYWluRnJhbWUoKSkKICAgICAgICAg
cmVxdWVzdFBvaW50ZXJVbmxvY2soKTsKICNlbmRpZgotCi0gICAgaWYgKGZyYW1lLT5pc01haW5G
cmFtZSgpKQogICAgICAgICBwYWdlQ2xpZW50KCkuc2V0TW91c2VFdmVudFBvbGljeShtb3VzZUV2
ZW50UG9saWN5KTsKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgICAgICBwYWdl
Q2xpZW50KCkucmVtb3ZlQWxsUERGSFVEcygpOworI2VuZGlmCisgICAgfQogCiAgICAgbV9wYWdl
TG9hZFN0YXRlLmNvbW1pdENoYW5nZXMoKTsKICAgICBpZiAobV9sb2FkZXJDbGllbnQpCkBAIC03
NDUxLDYgKzc0NTAsOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cHJvY2Vzc0RpZFRlcm1pbmF0ZShQ
CiAKICAgICByZXNldFN0YXRlQWZ0ZXJQcm9jZXNzRXhpdGVkKHJlYXNvbik7CiAgICAgc3RvcEFs
bFVSTFNjaGVtZVRhc2tzKG1fcHJvY2Vzcy5wdHIoKSk7CisjaWYgRU5BQkxFKFVJX1BST0NFU1Nf
UERGX0hVRCkKKyAgICBwYWdlQ2xpZW50KCkucmVtb3ZlQWxsUERGSFVEcygpOworI2VuZGlmCiAK
ICAgICAvLyBGb3IgYnJpbmd1cCBvZiBwcm9jZXNzIHN3YXBwaW5nLCBOYXZpZ2F0aW9uU3dhcCB0
ZXJtaW5hdGlvbiB3aWxsIG5vdCBnbyBvdXQgdG8gY2xpZW50cy4KICAgICAvLyBJZiBpdCBkb2Vz
ICpkdXJpbmcqIHByb2Nlc3Mgc3dhcHBpbmcsIGFuZCB0aGUgY2xpZW50IHRyaWdnZXJzIGEgcmVs
b2FkLCB0aGF0IGNhdXNlcyBiaXphcnJlIFdlYktpdCByZS1lbnRyeS4KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAyNjYwOTApCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiAr
NDAsNyBAQAogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKICNpbmNsdWRlICJNZXNzYWdl
U2VuZGVyLmgiCiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2Vy
UHJveHkuaCIKKyNpbmNsdWRlICJQREZQbHVnaW5JZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiUGFn
ZUxvYWRTdGF0ZS5oIgogI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLmgiCiAjaW5j
bHVkZSAiUG9saWN5RGVjaXNpb24uaCIKQEAgLTEzMTEsMTAgKzEzMTIsMTIgQEAgcHVibGljOgog
CiAgICAgdm9pZCBzYXZlRGF0YVRvRmlsZUluRG93bmxvYWRzRm9sZGVyKFN0cmluZyYmIHN1Z2dl
c3RlZEZpbGVuYW1lLCBTdHJpbmcmJiBtaW1lVHlwZSwgVVJMJiYgb3JpZ2luYXRpbmdVUkwsIEFQ
STo6RGF0YSYpOwogICAgIHZvaWQgc2F2ZVBERlRvRmlsZUluRG93bmxvYWRzRm9sZGVyKFN0cmlu
ZyYmIHN1Z2dlc3RlZEZpbGVuYW1lLCBVUkwmJiBvcmlnaW5hdGluZ1VSTCwgY29uc3QgSVBDOjpE
YXRhUmVmZXJlbmNlJik7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCisjaWYgRU5BQkxFKFBERktJVF9Q
TFVHSU4pCiAgICAgdm9pZCBzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2
ZUFwcGxpY2F0aW9uKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIEZyYW1lSW5mb0Rh
dGEmJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwgY29uc3QgU3RyaW5nJiBwZGZVVUlEKTsK
KyNpZiAhRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKICAgICB2b2lkIG9wZW5QREZGcm9tVGVt
cG9yYXJ5Rm9sZGVyV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKEZyYW1lSW5mb0RhdGEmJiwgY29uc3Qg
U3RyaW5nJiBwZGZVVUlEKTsKICNlbmRpZgorI2VuZGlmCiAKICNpZiBFTkFCTEUoUERGS0lUX1BM
VUdJTikKICAgICB2b2lkIHNob3dQREZDb250ZXh0TWVudShjb25zdCBXZWJLaXQ6OlBERkNvbnRl
eHRNZW51JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxpbnQzMl90PiYmKT4mJik7
CkBAIC0xODA2LDYgKzE4MDksMTYgQEAgcHVibGljOgogICAgIGJvb2wgY2FuVXNlQ3JlZGVudGlh
bFN0b3JhZ2UoKSB7IHJldHVybiBtX2NhblVzZUNyZWRlbnRpYWxTdG9yYWdlOyB9CiAgICAgdm9p
ZCBzZXRDYW5Vc2VDcmVkZW50aWFsU3RvcmFnZShib29sKTsKIAorI2lmIEVOQUJMRShVSV9QUk9D
RVNTX1BERl9IVUQpCisgICAgdm9pZCBjcmVhdGVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllciwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgdXBkYXRlUERGSFVETG9jYXRpb24o
UERGUGx1Z2luSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQg
cmVtb3ZlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgcGRmWm9vbUluKFBE
RlBsdWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgcGRmWm9vbU91dChQREZQbHVnaW5JZGVudGlm
aWVyKTsKKyAgICB2b2lkIHBkZlNhdmVUb1BERihQREZQbHVnaW5JZGVudGlmaWVyKTsKKyAgICB2
b2lkIHBkZk9wZW5XaXRoUHJldmlldyhQREZQbHVnaW5JZGVudGlmaWVyKTsKKyNlbmRpZgorCiBw
cml2YXRlOgogICAgIFdlYlBhZ2VQcm94eShQYWdlQ2xpZW50JiwgV2ViUHJvY2Vzc1Byb3h5Jiwg
UmVmPEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24+JiYpOwogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFs
aXplKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2Fn
ZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyNjYwOTApCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTQzMyw5ICs0MzMs
OCBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIFNhdmVSZWNlbnRTZWFyY2hlcyhT
dHJpbmcgbmFtZSwgVmVjdG9yPFdlYkNvcmU6OlJlY2VudFNlYXJjaD4gc2VhcmNoSXRlbXMpCiAg
ICAgTG9hZFJlY2VudFNlYXJjaGVzKFN0cmluZyBuYW1lKSAtPiAoVmVjdG9yPFdlYkNvcmU6OlJl
Y2VudFNlYXJjaD4gcmVzdWx0KSBTeW5jaHJvbm91cwogCisjaWYgRU5BQkxFKFBERktJVF9QTFVH
SU4pICYmICFFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQogICAgIFNhdmVQREZUb0ZpbGVJbkRv
d25sb2Fkc0ZvbGRlcihTdHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWUsIFVSTCBvcmlnaW5hdGluZ1VS
TCwgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEpCi0KLSNpZiBQTEFURk9STShDT0NPQSkKICAgICBT
YXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKFN0cmlu
ZyBzdWdnZXN0ZWRGaWxlbmFtZSwgc3RydWN0IFdlYktpdDo6RnJhbWVJbmZvRGF0YSBzb3VyY2VG
cmFtZUluZm8sIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhLCBTdHJpbmcgcGRmVVVJRCkKICAgICBP
cGVuUERGRnJvbVRlbXBvcmFyeUZvbGRlcldpdGhOYXRpdmVBcHBsaWNhdGlvbihzdHJ1Y3QgV2Vi
S2l0OjpGcmFtZUluZm9EYXRhIHNvdXJjZUZyYW1lSW5mbywgU3RyaW5nIHBkZlVVSUQpCiAjZW5k
aWYKQEAgLTU2Niw2ICs1NjUsMTIgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBT
cGVlY2hTeW50aGVzaXNSZXN1bWUoKSAtPiAoKSBBc3luYwogI2VuZGlmCiAKKyNpZiBFTkFCTEUo
VUlfUFJPQ0VTU19QREZfSFVEKQorICAgIENyZWF0ZVBERkhVRChXZWJLaXQ6OlBERlBsdWdpbklk
ZW50aWZpZXIgaWRlbnRpZmllciwgV2ViQ29yZTo6SW50UmVjdCBib3VuZGluZ0JveCkKKyAgICBV
cGRhdGVQREZIVURMb2NhdGlvbihXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmll
ciwgV2ViQ29yZTo6SW50UmVjdCBib3VuZGluZ0JveCkKKyAgICBSZW1vdmVQREZIVUQoV2ViS2l0
OjpQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCisjZW5kaWYKKwogICAgIENvbmZpZ3Vy
ZUxvZ2dpbmdDaGFubmVsKFN0cmluZyBjaGFubmVsTmFtZSwgZW51bTp1aW50OF90IFdURkxvZ0No
YW5uZWxTdGF0ZSBzdGF0ZSwgZW51bTp1aW50OF90IFdURkxvZ0xldmVsIGxldmVsKQogCiAjaWYg
UExBVEZPUk0oR1RLKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2ViVmlld0ludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgJKHJldmlzaW9uIDI2NjA5MCkKKysrIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMywxMSArMjMsMTEgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCi0jaW1wb3J0ICJXS1dlYlZpZXdQcml2YXRlLmgiCi0KKyNpbXBvcnQgIlBE
RlBsdWdpbklkZW50aWZpZXIuaCIKICNpbXBvcnQgIlNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBl
LmgiCiAjaW1wb3J0ICJXS1NoYXJlU2hlZXQuaCIKICNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3Vy
YXRpb24uaCIKKyNpbXBvcnQgIldLV2ViVmlld1ByaXZhdGUuaCIKICNpbXBvcnQgIl9XS0F0dGFj
aG1lbnRJbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLV2ViVmlld1ByaW50Rm9ybWF0dGVySW50ZXJu
YWwuaCIKICNpbXBvcnQgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgpAQCAtMTMzLDcgKzEzMyw3
IEBAIGNsYXNzIFZpZXdHZXN0dXJlQ29udHJvbGxlcjsKICAgICAvLyBPbmx5IHVzZWQgd2l0aCBV
SS1zaWRlIGNvbXBvc2l0aW5nLgogICAgIFJldGFpblB0cjxXS1Njcm9sbFZpZXc+IF9zY3JvbGxW
aWV3OwogICAgIFJldGFpblB0cjxXS0NvbnRlbnRWaWV3PiBfY29udGVudFZpZXc7Ci0jZW5kaWYK
KyNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAg
IFJldGFpblB0cjxXS1Njcm9sbFZpZXc+IF9zY3JvbGxWaWV3OwpJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdQcml2YXRlRm9yVGVzdGluZ01hYy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3UHJpdmF0
ZUZvclRlc3RpbmdNYWMuaAkocmV2aXNpb24gMjY2MDkwKQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdQcml2YXRlRm9yVGVzdGluZ01hYy5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MCw2ICs1MCw3IEBAIEBpbnRlcmZhY2UgV0tXZWJWaWV3IChXS1Rlc3RpbmdNYWMp
CiAKIC0gKHZvaWQpX3NldEhlYWRlckJhbm5lckhlaWdodDooaW50KWhlaWdodDsKIC0gKHZvaWQp
X3NldEZvb3RlckJhbm5lckhlaWdodDooaW50KWhlaWdodDsKKy0gKE5TU2V0PE5TVmlldyAqPiAq
KV9wZGZIVURzOwogCiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9t
YWMvV0tXZWJWaWV3VGVzdGluZ01hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1Rlc3RpbmdNYWMubW0JKHJldmlzaW9uIDI2NjA5MCkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMTAzLDYgKzEwMywxNSBAQCAtICh2b2lkKV9zZXRGb290ZXJC
YW5uZXJIZWlnaHQ6KGludCloZWlnCiAgICAgX3BhZ2UtPnNldEZvb3RlckJhbm5lckhlaWdodEZv
clRlc3RpbmcoaGVpZ2h0KTsKIH0KIAorLSAoTlNTZXQ8TlNWaWV3ICo+ICopX3BkZkhVRHMKK3sK
KyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIHJldHVybiBfaW1wbC0+cGRmSFVE
cygpOworI2Vsc2UKKyAgICByZXR1cm4gbmlsOworI2VuZGlmCit9CisKIC0gKE5TTWVudSAqKV9h
Y3RpdmVNZW51CiB7CiAgICAgLy8gRklYTUU6IE9ubHkgdGhlIERPTSBwYXN0ZSBhY2Nlc3MgbWVu
dSBpcyBzdXBwb3J0ZWQgZm9yIG5vdy4gSW4gdGhlIGZ1dHVyZSwgaXQgY291bGQgYmUKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaAkocmV2aXNpb24g
MjY2MDkwKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgUExBVEZPUk0oTUFDKQogCisj
aW5jbHVkZSAiUERGUGx1Z2luSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlBsdWdpbkNvbXBsZXhU
ZXh0SW5wdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUg
IldLTGF5b3V0TW9kZS5oIgpAQCAtNzYsNiArNzcsMTAgQEAgT0JKQ19DTEFTUyBXS1RleHRUb3Vj
aEJhckl0ZW1Db250cm9sbGVyOwogT0JKQ19DTEFTUyBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdl
cjsKICNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikKIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BE
Rl9IVUQpCitPQkpDX0NMQVNTIFdLUERGSFVEVmlldzsKKyNlbmRpZgorCiBuYW1lc3BhY2UgQVBJ
IHsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBPYmplY3Q7CkBAIC0xOTAsNiArMTk1LDE0
IEBAIHB1YmxpYzoKICAgICB2b2lkIHZpZXdXaWxsU3RhcnRMaXZlUmVzaXplKCk7CiAgICAgdm9p
ZCB2aWV3RGlkRW5kTGl2ZVJlc2l6ZSgpOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hV
RCkKKyAgICB2b2lkIGNyZWF0ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCB1cGRhdGVQREZIVURMb2NhdGlvbihQREZQbHVnaW5J
ZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCByZW1vdmVQREZI
VUQoUERGUGx1Z2luSWRlbnRpZmllcik7CisgICAgdm9pZCByZW1vdmVBbGxQREZIVURzKCk7Cisg
ICAgTlNTZXQgKnBkZkhVRHMoKTsKKyNlbmRpZgorCiAgICAgdm9pZCByZW5ld0dTdGF0ZSgpOwog
ICAgIHZvaWQgc2V0RnJhbWVTaXplKENHU2l6ZSk7CiAgICAgdm9pZCBkaXNhYmxlRnJhbWVTaXpl
VXBkYXRlcygpOwpAQCAtNzI5LDcgKzc0MiwxMSBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShGVUxM
U0NSRUVOX0FQSSkKICAgICBSZXRhaW5QdHI8V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcj4g
bV9mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcjsKICNlbmRpZgotICAgIAorCisjaWYgRU5BQkxF
KFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBIYXNoTWFwPFdlYktpdDo6UERGUGx1Z2luSWRlbnRp
ZmllciwgUmV0YWluUHRyPFdLUERGSFVEVmlldz4+IF9wZGZIVURWaWV3czsKKyNlbmRpZgorCiAg
ICAgUmV0YWluUHRyPFdLU2hhcmVTaGVldD4gX3NoYXJlU2hlZXQ7CiAKICAgICBSZXRhaW5QdHI8
V0tXaW5kb3dWaXNpYmlsaXR5T2JzZXJ2ZXI+IG1fd2luZG93VmlzaWJpbGl0eU9ic2VydmVyOwpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0JKHJl
dmlzaW9uIDI2NjA5MCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJ
bXBsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw3IEBACiAjaW1wb3J0ICJXS0Vycm9y
SW50ZXJuYWwuaCIKICNpbXBvcnQgIldLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaCIKICNp
bXBvcnQgIldLSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5oIgorI2ltcG9ydCAiV0tQREZIVURW
aWV3LmgiCiAjaW1wb3J0ICJXS1ByaW50aW5nVmlldy5oIgogI2ltcG9ydCAiV0tTYWZlQnJvd3Np
bmdXYXJuaW5nLmgiCiAjaW1wb3J0ICJXS1NoYXJlU2hlZXQuaCIKQEAgLTE3MTgsNiArMTcxOSw0
NSBAQCB2b2lkIFdlYlZpZXdJbXBsOjp2aWV3RGlkRW5kTGl2ZVJlc2l6ZSgpCiAgICAgW21fbGF5
b3V0U3RyYXRlZ3kgZGlkRW5kTGl2ZVJlc2l6ZV07CiB9CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VT
U19QREZfSFVEKQorCit2b2lkIFdlYlZpZXdJbXBsOjpjcmVhdGVQREZIVUQoUERGUGx1Z2luSWRl
bnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAg
IHJlbW92ZVBERkhVRChpZGVudGlmaWVyKTsKKyAgICBhdXRvIGh1ZCA9IGFkb3B0TlMoW1tXS1BE
RkhVRFZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6cmVjdCBwbHVnaW5JZGVudGlmaWVyOmlkZW50
aWZpZXIgcGFnZTptX3BhZ2UuZ2V0KCldKTsKKyAgICBbbV92aWV3IGFkZFN1YnZpZXc6aHVkLmdl
dCgpXTsKKyAgICBfcGRmSFVEVmlld3MuYWRkKGlkZW50aWZpZXIsIFdURk1vdmUoaHVkKSk7Cit9
CisKK3ZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZVBERkhVRExvY2F0aW9uKFBERlBsdWdpbklkZW50
aWZpZXIgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBp
ZiAoYXV0byBodWQgPSBfcGRmSFVEVmlld3MuZ2V0KGlkZW50aWZpZXIpKQorICAgICAgICBbaHVk
IHNldEZyYW1lOnJlY3RdOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjpyZW1vdmVQREZIVUQoUERG
UGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIGlmIChhdXRvIGh1ZCA9IF9wZGZI
VURWaWV3cy50YWtlKGlkZW50aWZpZXIpKQorICAgICAgICBbaHVkIHJlbW92ZUZyb21TdXBlcnZp
ZXddOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjpyZW1vdmVBbGxQREZIVURzKCkKK3sKKyAgICBm
b3IgKGF1dG8mIGh1ZCA6IF9wZGZIVURWaWV3cy52YWx1ZXMoKSkKKyAgICAgICAgW2h1ZCByZW1v
dmVGcm9tU3VwZXJ2aWV3XTsKKyAgICBfcGRmSFVEVmlld3MuY2xlYXIoKTsKK30KKworTlNTZXQg
KldlYlZpZXdJbXBsOjpwZGZIVURzKCkKK3sKKyAgICBOU011dGFibGVTZXQ8TlNWaWV3ICo+ICpz
ZXQgPSBbTlNNdXRhYmxlU2V0IHNldFdpdGhDYXBhY2l0eTpfcGRmSFVEVmlld3Muc2l6ZSgpXTsK
KyAgICBmb3IgKGF1dG8mIGh1ZCA6IF9wZGZIVURWaWV3cy52YWx1ZXMoKSkKKyAgICAgICAgW3Nl
dCBhZGRPYmplY3Q6aHVkLmdldCgpXTsKKyAgICByZXR1cm4gc2V0OworfQorCisjZW5kaWYgLy8g
RU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKwogdm9pZCBXZWJWaWV3SW1wbDo6cmVuZXdHU3Rh
dGUoKQogewogICAgIGlmIChtX3RleHRJbmRpY2F0b3JXaW5kb3cpCkBAIC01MzkxLDYgKzU0MzEs
MTEgQEAgdm9pZCBXZWJWaWV3SW1wbDo6bW91c2VNb3ZlZChOU0V2ZW50ICpldgogICAgIGlmICht
X2lnbm9yZXNOb25XaGVlbEV2ZW50cykKICAgICAgICAgcmV0dXJuOwogCisjaWYgRU5BQkxFKFVJ
X1BST0NFU1NfUERGX0hVRCkKKyAgICBmb3IgKGF1dG8mIGh1ZCA6IF9wZGZIVURWaWV3cy52YWx1
ZXMoKSkKKyAgICAgICAgW2h1ZCBtb3VzZU1vdmVkOmV2ZW50XTsKKyNlbmRpZgorCiAgICAgLy8g
V2hlbiBhIHZpZXcgaXMgZmlyc3QgcmVzcG9uZGVyLCBpdCBnZXRzIG1vdXNlIG1vdmVkIGV2ZW50
cyBldmVuIHdoZW4gdGhlIG1vdXNlIGlzIG91dHNpZGUgaXRzIHZpc2libGUgcmVjdC4KICAgICBp
ZiAobV92aWV3LmdldEF1dG9yZWxlYXNlZCgpID09IFttX3ZpZXcgd2luZG93XS5maXJzdFJlc3Bv
bmRlciAmJiAhTlNQb2ludEluUmVjdChbbV92aWV3IGNvbnZlcnRQb2ludDpbZXZlbnQgbG9jYXRp
b25JbldpbmRvd10gZnJvbVZpZXc6bmlsXSwgW21fdmlldyB2aXNpYmxlUmVjdF0pKQogICAgICAg
ICByZXR1cm47CkBAIC01NDM5LDYgKzU0ODQsMTEgQEAgdm9pZCBXZWJWaWV3SW1wbDo6bW91c2VE
b3duKE5TRXZlbnQgKmV2ZQogICAgIGlmIChtX2lnbm9yZXNOb25XaGVlbEV2ZW50cykKICAgICAg
ICAgcmV0dXJuOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBmb3IgKGF1
dG8mIGh1ZCA6IF9wZGZIVURWaWV3cy52YWx1ZXMoKSkKKyAgICAgICAgW2h1ZCBtb3VzZURvd246
ZXZlbnRdOworI2VuZGlmCisKICAgICBzZXRMYXN0TW91c2VEb3duRXZlbnQoZXZlbnQpOwogICAg
IHNldElnbm9yZXNNb3VzZURyYWdnZWRFdmVudHMoZmFsc2UpOwogCkBAIC01NDUwLDYgKzU1MDAs
MTEgQEAgdm9pZCBXZWJWaWV3SW1wbDo6bW91c2VVcChOU0V2ZW50ICpldmVudAogICAgIGlmICht
X2lnbm9yZXNOb25XaGVlbEV2ZW50cykKICAgICAgICAgcmV0dXJuOwogCisjaWYgRU5BQkxFKFVJ
X1BST0NFU1NfUERGX0hVRCkKKyAgICBmb3IgKGF1dG8mIGh1ZCA6IF9wZGZIVURWaWV3cy52YWx1
ZXMoKSkKKyAgICAgICAgW2h1ZCBtb3VzZVVwOmV2ZW50XTsKKyNlbmRpZgorCiAgICAgc2V0TGFz
dE1vdXNlRG93bkV2ZW50KG5pbCk7CiAgICAgbW91c2VVcEludGVybmFsKGV2ZW50KTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BERi9XS1BERkhVRFZpZXcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QREYvV0tQREZIVURWaWV3LmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUERGL1dLUERGSFVEVmlldy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFVJX1BS
T0NFU1NfUERGX0hVRCkKKworI2ltcG9ydCAiUERGUGx1Z2luSWRlbnRpZmllci5oIgorCituYW1l
c3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlBhZ2VQcm94eTsKK30KKworQGludGVyZmFjZSBXS1BE
RkhVRFZpZXcgOiBOU1ZpZXcKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVj
dClmcmFtZSBwbHVnaW5JZGVudGlmaWVyOihXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIpcGx1
Z2luSWRlbnRpZmllciBwYWdlOihXZWJLaXQ6OldlYlBhZ2VQcm94eSYpcGFnZTsKKy0gKHZvaWQp
c2V0RnJhbWU6KE5TUmVjdClmcmFtZTsKKy0gKHZvaWQpbW91c2VNb3ZlZDooTlNFdmVudCAqKWV2
ZW50OworLSAodm9pZCltb3VzZURvd246KE5TRXZlbnQgKilldmVudDsKKy0gKHZvaWQpbW91c2VV
cDooTlNFdmVudCAqKWV2ZW50OworCitAZW5kCisKKyNlbmRpZiAvLyBFTkFCTEUoVUlfUFJPQ0VT
U19QREZfSFVEKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUERGL1dLUERGSFVEVmll
dy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QREYvV0tQREZIVURW
aWV3Lm1tCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BERi9XS1BE
RkhVRFZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNTAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldLUERGSFVEVmlldy5oIgorCisjaWYgRU5B
QkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKworI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1w
b3J0IDxRdWFydHpDb3JlL0NBVHJhbnNhY3Rpb24uaD4KKyNpbXBvcnQgPHBhbC9zcGkvY29jb2Ev
UXVhcnR6Q29yZVNQSS5oPgorI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNJbWFnZVNQSS5oPgorI2lt
cG9ydCA8d3RmL1dlYWtPYmpDUHRyLmg+CisKKy8vICBUaGUgSFVEIGl0ZW1zIHNob3VsZCBoYXZl
IHRoZSBmb2xsb3dpbmcgc3BhY2luZzoKKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyB8ICAgICAgMTIgICAgICAgIDEyICAgICAgMTAgICAg
IDEyICAgICAgICAxMiAgICAgIHwKKy8vIHwgICAgIC0tLS0gICAgICAtLS0tICAgICB8ICAgICAt
LS0tICAgICAgLS0tLSAgICAgfAorLy8gfCAxMCB8aWNvbnwgMTAgfGljb258IDEwIHwgMTAgfGlj
b258IDEwIHxpY29ufCAxMCB8CisvLyB8ICAgICAtLS0tICAgICAgLS0tLSAgICAgfCAgICAgLS0t
LSAgICAgIC0tLS0gICAgIHwKKy8vIHwgICAgICAxMiAgICAgICAgMTIgICAgICAxMCAgICAgMTIg
ICAgICAgIDEyICAgICAgfAorLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKy8vICB3aGVyZSB0aGUgMTIgcG9pbnQgdmVydGljYWwgc3BhY2luZyBp
cyBhbmNob3JlZCB0byB0aGUgc21hbGxlc3QgaWNvbiBpbWFnZSwKKy8vICBhbmQgYWxsIHN1YnNl
cXVlbnQgaWNvbnMgd2l0aCBiZSBjZW50ZXJlZCB2ZXJ0aWNhbGx5IHdpdGggdGhlIHNtYWxsZXN0
IGljb24uCisKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGtMYXllclZlcnRpY2FsT2Zmc2V0ID0gNDA7
CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrTGF5ZXJDb3JuZXJSYWRpdXMgPSAxMjsKK3N0YXRpYyBj
b25zdCBDR0Zsb2F0IGtMYXllckdyYXlDb21wb25lbnQgPSAwOworc3RhdGljIGNvbnN0IENHRmxv
YXQga0xheWVyQWxwaGEgPSAwLjc1Oworc3RhdGljIGNvbnN0IENHRmxvYXQga0xheWVySW1hZ2VT
Y2FsZSA9IDEuNTsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGtMYXllclNlcGVyYXRvckNvbnRyb2xs
ZXJTaXplID0gMS41Oworc3RhdGljIGNvbnN0IENHRmxvYXQga0xheWVyQ29udHJvbGxlckhvcml6
b250YWxNYXJnaW4gPSAxMC4wOworc3RhdGljIGNvbnN0IENHRmxvYXQga0xheWVySW1hZ2VWZXJ0
aWNhbE1hcmdpbiA9IDEyLjA7CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrTGF5ZXJTZXBlcmF0b3JW
ZXJ0aWNhbE1hcmdpbiA9IDEwLjA7CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrQ29udHJvbExheWVy
Tm9ybWFsQWxwaGEgPSAwLjc1Oworc3RhdGljIGNvbnN0IENHRmxvYXQga0NvbnRyb2xMYXllckRv
d25BbHBoYSA9IDAuNDU7CisKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFBERkhVRFpvb21JbkNv
bnRyb2wgPSBAInBsdXMubWFnbmlmeWluZ2dsYXNzIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0
IFBERkhVRFpvb21PdXRDb250cm9sID0gQCJtaW51cy5tYWduaWZ5aW5nZ2xhc3MiOworc3RhdGlj
IE5TU3RyaW5nICogY29uc3QgUERGSFVETGF1bmNoUHJldmlld0NvbnRyb2wgPSBAInByZXZpZXci
Oworc3RhdGljIE5TU3RyaW5nICogY29uc3QgUERGSFVEU2F2ZVBERkNvbnRyb2wgPSBAImFycm93
LmRvd24uY2lyY2xlIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFBERkhVRFNlcGVyYXRvckNv
bnRyb2wgPSBAIlBERkhVRFNlcGVyYXRvckNvbnRyb2wiOworCitzdGF0aWMgY29uc3QgQ0dGbG9h
dCBrTGF5ZXJGYWRlSW5UaW1lSW50ZXJ2YWwgPSAwLjI1Oworc3RhdGljIGNvbnN0IENHRmxvYXQg
a0xheWVyRmFkZU91dFRpbWVJbnRlcnZhbCA9IDAuNTsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGtJ
bml0aWFsSGlkZVRpbWVJbnRlcnZhbCA9IDMuMDsKKworc3RhdGljIE5TQXJyYXk8TlNTdHJpbmcg
Kj4gKmNvbnRyb2xBcnJheSgpCit7CisgICAgcmV0dXJuIEBbCisgICAgICAgIFBERkhVRFpvb21P
dXRDb250cm9sLAorICAgICAgICBQREZIVURab29tSW5Db250cm9sLAorICAgICAgICBQREZIVURT
ZXBlcmF0b3JDb250cm9sLAorICAgICAgICBQREZIVURMYXVuY2hQcmV2aWV3Q29udHJvbCwKKyAg
ICAgICAgUERGSFVEU2F2ZVBERkNvbnRyb2wKKyAgICBdOworfQorCitzdGF0aWMgTlNDb2xvciog
UERGQ0dDb2xvckNyZWF0ZUdlbmVyaWNSR0IoQ0dGbG9hdCByZWQsIENHRmxvYXQgZ3JlZW4sIENH
RmxvYXQgYmx1ZSwgQ0dGbG9hdCBhbHBoYSkKK3sKKyAgICBhdXRvIGNvbG9yU3BhY2UgPSBhZG9w
dENGKENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpKTsKKyAgICBjb25zdCBDR0Zsb2F0IGNv
bXBvbmVudHNbNF0gPSB7IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhIH07CisgICAgYXV0byBjZ0Nv
bG9yID0gYWRvcHRDRihDR0NvbG9yQ3JlYXRlKGNvbG9yU3BhY2UuZ2V0KCksIGNvbXBvbmVudHMp
KTsKKyAgICByZXR1cm4gW05TQ29sb3IgY29sb3JXaXRoQ0dDb2xvcjpjZ0NvbG9yLmdldCgpXTsK
K30KKworQGltcGxlbWVudGF0aW9uIFdLUERGSFVEVmlldyB7CitAcHJpdmF0ZQorICAgIFdlYWtQ
dHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+IF9wYWdlOworICAgIFJldGFpblB0cjxOU1N0cmluZz4g
X2FjdGl2ZUNvbnRyb2w7CisgICAgV2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVyIF9wbHVnaW5J
ZGVudGlmaWVyOworICAgIENHRmxvYXQgX2RldmljZVNjYWxlRmFjdG9yOworICAgIFJldGFpblB0
cjxDQUxheWVyPiBfbGF5ZXI7CisgICAgUmV0YWluUHRyPENBTGF5ZXI+IF9hY3RpdmVMYXllcjsK
KyAgICBDR1NpemUgX2ZyYW1lU2l6ZTsKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFy
eTxOU1N0cmluZyosIE5TSW1hZ2UqPj4gX2NhY2hlZEljb25zOworICAgIEJPT0wgX3Zpc2libGU7
CisgICAgYm9vbCBfbW91c2VNb3ZlZFRvSFVEOworICAgIGJvb2wgX2luaXRpYWxIaWRlVGltZXJG
aXJlZDsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSBw
bHVnaW5JZGVudGlmaWVyOihXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIpcGx1Z2luSWRlbnRp
ZmllciBwYWdlOihXZWJLaXQ6OldlYlBhZ2VQcm94eSYpcGFnZQoreworICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdFdpdGhGcmFtZTpmcmFtZV0pKQorICAgICAgICByZXR1cm4gbmlsOworICAg
IAorICAgIHNlbGYud2FudHNMYXllciA9IFlFUzsKKyAgICBfY2FjaGVkSWNvbnMgPSBhZG9wdE5T
KFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOworICAgIF9wbHVnaW5JZGVudGlm
aWVyID0gcGx1Z2luSWRlbnRpZmllcjsKKyAgICBfcGFnZSA9IG1ha2VXZWFrUHRyKHBhZ2UpOwor
ICAgIF9kZXZpY2VTY2FsZUZhY3RvciA9IHBhZ2UuZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBf
dmlzaWJsZSA9IFlFUzsKKyAgICBbc2VsZiBfc2V0dXBMYXllcjpzZWxmLmxheWVyXTsKKyAgICBb
c2VsZiBzZXRGcmFtZTpmcmFtZV07CisKKyAgICBXZWFrT2JqQ1B0cjxXS1BERkhVRFZpZXc+IHdl
YWtTZWxmID0gc2VsZjsKKyAgICBkaXNwYXRjaF9hZnRlcihkaXNwYXRjaF90aW1lKERJU1BBVENI
X1RJTUVfTk9XLCAoaW50NjRfdCkoa0luaXRpYWxIaWRlVGltZUludGVydmFsICogTlNFQ19QRVJf
U0VDKSksIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIFt3ZWFrU2VsZiBf
aGlkZVRpbWVyRmlyZWRdOworICAgIH0pOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lk
KWRlYWxsb2MKK3sKKyAgICBbX2xheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICBbc3Vw
ZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0RnJhbWU6KE5TUmVjdClyZWN0Cit7CisgICAg
W3N1cGVyIHNldEZyYW1lOnJlY3RdOworICAgIF9mcmFtZVNpemUgPSByZWN0LnNpemU7CisKKyAg
ICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFj
dGlvbnM6WUVTXTsKKyAgICBDR1JlY3QgbGF5ZXJCb3VuZHMgPSBbX2xheWVyIGJvdW5kc107Cisg
ICAgW19sYXllciBzZXRGcmFtZTpDR1JlY3RNYWtlKHJlY3Quc2l6ZS53aWR0aCAvIDIuMCAtIGxh
eWVyQm91bmRzLnNpemUud2lkdGggLyAyLjAsIGtMYXllclZlcnRpY2FsT2Zmc2V0LCBsYXllckJv
dW5kcy5zaXplLndpZHRoLCBsYXllckJvdW5kcy5zaXplLmhlaWdodCldOworICAgIFtDQVRyYW5z
YWN0aW9uIGNvbW1pdF07Cit9CisKKy0gKHZvaWQpX2hpZGVUaW1lckZpcmVkCit7CisgICAgX2lu
aXRpYWxIaWRlVGltZXJGaXJlZCA9IHRydWU7CisgICAgaWYgKCFfbW91c2VNb3ZlZFRvSFVEKQor
ICAgICAgICBbc2VsZiBfc2V0VmlzaWJsZTpmYWxzZV07Cit9CisKKy0gKHZvaWQpX3NldFZpc2li
bGU6KGJvb2wpaXNWaXNpYmxlCit7CisgICAgaWYgKF92aXNpYmxlID09IGlzVmlzaWJsZSkKKyAg
ICAgICAgcmV0dXJuOworICAgIF92aXNpYmxlID0gaXNWaXNpYmxlOworICAgIFtDQVRyYW5zYWN0
aW9uIGJlZ2luXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXRBbmltYXRpb25EdXJhdGlvbjogaXNW
aXNpYmxlID8ga0xheWVyRmFkZUluVGltZUludGVydmFsIDoga0xheWVyRmFkZU91dFRpbWVJbnRl
cnZhbF07CisgICAgW3NlbGYgX3NldExheWVyT3BhY2l0eTppc1Zpc2libGUgPyBrTGF5ZXJBbHBo
YSA6IDAuMF07CisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKK30KKworLSAodm9pZCltb3Vz
ZU1vdmVkOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBpZiAoQ0dSZWN0Q29udGFpbnNQb2ludChb
c2VsZiBjb252ZXJ0UmVjdDpDR1JlY3RJbnNldChbX2xheWVyIGZyYW1lXSwgLTE2LjAsIC0xNi4w
KSB0b1ZpZXc6bmlsXSwgTlNQb2ludFRvQ0dQb2ludChldmVudC5sb2NhdGlvbkluV2luZG93KSkp
IHsKKyAgICAgICAgW3NlbGYgX3NldFZpc2libGU6dHJ1ZV07CisgICAgICAgIF9tb3VzZU1vdmVk
VG9IVUQgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoX2luaXRpYWxIaWRlVGltZXJGaXJlZCkKKyAg
ICAgICAgW3NlbGYgX3NldFZpc2libGU6ZmFsc2VdOworfQorCistICh2b2lkKW1vdXNlRG93bjoo
TlNFdmVudCAqKWV2ZW50Cit7CisgICAgX2FjdGl2ZUNvbnRyb2wgPSBbc2VsZiBfY29udHJvbEZv
ckV2ZW50OmV2ZW50XTsKKyAgICBpZiAoW19hY3RpdmVDb250cm9sIGlzRXF1YWxUb1N0cmluZzpQ
REZIVURTZXBlcmF0b3JDb250cm9sXSkKKyAgICAgICAgX2FjdGl2ZUNvbnRyb2wgPSBuaWw7Cisg
ICAgaWYgKF9hY3RpdmVDb250cm9sKSB7CisgICAgICAgIC8vIFVwZGF0ZSByZW5kZXJpbmcgdG8g
aGlnaGxpZ2h0IGl0Li4KKyAgICAgICAgX2FjdGl2ZUxheWVyID0gW3NlbGYgX2xheWVyRm9yRXZl
bnQ6ZXZlbnRdOworICAgICAgICAKKyAgICAgICAgLy8gVXBkYXRlIGxheWVyIGltYWdlOyBkbyBu
b3QgYW5pbWF0ZQorICAgICAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgICAgIFtDQVRy
YW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107CisgICAgICAgIAorICAgICAgICBbX2Fj
dGl2ZUxheWVyIHNldE9wYWNpdHk6IGtDb250cm9sTGF5ZXJEb3duQWxwaGFdOworICAgICAgICAK
KyAgICAgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKKyAgICB9Cit9CisKKy0gKHZvaWQpbW91
c2VVcDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgaWYgKCFfYWN0aXZlQ29udHJvbCkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIE5TU3RyaW5nKiBtb3VzZVVwQ29udHJvbCA9IFtzZWxmIF9j
b250cm9sRm9yRXZlbnQ6ZXZlbnRdOworICAgIGlmIChbX2FjdGl2ZUNvbnRyb2wgaXNFcXVhbFRv
U3RyaW5nOm1vdXNlVXBDb250cm9sXSkKKyAgICAgICAgW3NlbGYgX3BlcmZvcm1BY3Rpb25Gb3JD
b250cm9sOl9hY3RpdmVDb250cm9sLmdldCgpXTsKKyAgICAKKyAgICBbQ0FUcmFuc2FjdGlvbiBi
ZWdpbl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKKyAgICBb
X2FjdGl2ZUxheWVyIHNldE9wYWNpdHk6a0NvbnRyb2xMYXllck5vcm1hbEFscGhhXTsKKyAgICBb
Q0FUcmFuc2FjdGlvbiBjb21taXRdOworCisgICAgX2FjdGl2ZUxheWVyID0gbmlsOworICAgIF9h
Y3RpdmVDb250cm9sID0gbmlsOworfQorCistIChPcHRpb25hbDxOU1VJbnRlZ2VyPilfY29udHJv
bEluZGV4Rm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIENHUG9pbnQgaW5pdGlhbFBv
aW50ID0gTlNQb2ludFRvQ0dQb2ludChldmVudC5sb2NhdGlvbkluV2luZG93KTsKKyAgICBpbml0
aWFsUG9pbnQueCAtPSBbX2xheWVyIGZyYW1lXS5vcmlnaW4ueDsKKyAgICBpbml0aWFsUG9pbnQu
eSAtPSBbX2xheWVyIGZyYW1lXS5vcmlnaW4ueTsKKyAgICBmb3IgKE5TVUludGVnZXIgaW5kZXgg
PSAwOyBpbmRleCA8IFtfbGF5ZXIgc3VibGF5ZXJzXS5jb3VudDsgaW5kZXgrKykgeworICAgICAg
ICBDQUxheWVyICpzdWJMYXllciA9IFtfbGF5ZXIgc3VibGF5ZXJzXVtpbmRleF07CisgICAgICAg
IE5TUmVjdCB3aW5kb3dTcGFjZVJlY3QgPSBbc2VsZiBjb252ZXJ0UmVjdDpzdWJMYXllci5mcmFt
ZSB0b1ZpZXc6bmlsXTsKKyAgICAgICAgaWYgKENHUmVjdENvbnRhaW5zUG9pbnQod2luZG93U3Bh
Y2VSZWN0LCBpbml0aWFsUG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgIH0K
KyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCistIChOU1N0cmluZyAqKV9jb250cm9sRm9y
RXZlbnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIGlmIChhdXRvIGluZGV4ID0gW3NlbGYgX2Nv
bnRyb2xJbmRleEZvckV2ZW50OmV2ZW50XSkKKyAgICAgICAgcmV0dXJuIGNvbnRyb2xBcnJheSgp
WyppbmRleF07CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoQ0FMYXllciAqKV9sYXllckZvckV2
ZW50OihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBpZiAoYXV0byBpbmRleCA9IFtzZWxmIF9jb250
cm9sSW5kZXhGb3JFdmVudDpldmVudF0pCisgICAgICAgIHJldHVybiBbX2xheWVyIHN1YmxheWVy
c11bKmluZGV4XTsKKyAgICByZXR1cm4gbmlsOworfQorCistICh2b2lkKV9wZXJmb3JtQWN0aW9u
Rm9yQ29udHJvbDooTlNTdHJpbmcgKiljb250cm9sCit7CisgICAgaWYgKCFfdmlzaWJsZSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGF1dG8qIHBhZ2UgPSBfcGFnZS5nZXQoKTsKKyAgICBpZiAoIXBh
Z2UpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoW2NvbnRyb2wgaXNFcXVhbFRvU3RyaW5nOlBE
RkhVRFpvb21JbkNvbnRyb2xdKQorICAgICAgICBwYWdlLT5wZGZab29tSW4oX3BsdWdpbklkZW50
aWZpZXIpOworICAgIGVsc2UgaWYgKFtjb250cm9sIGlzRXF1YWxUb1N0cmluZzpQREZIVURab29t
T3V0Q29udHJvbF0pCisgICAgICAgIHBhZ2UtPnBkZlpvb21PdXQoX3BsdWdpbklkZW50aWZpZXIp
OworICAgIGVsc2UgaWYgKFtjb250cm9sIGlzRXF1YWxUb1N0cmluZzpQREZIVURTYXZlUERGQ29u
dHJvbF0pCisgICAgICAgIHBhZ2UtPnBkZlNhdmVUb1BERihfcGx1Z2luSWRlbnRpZmllcik7Cisg
ICAgZWxzZSBpZiAoW2NvbnRyb2wgaXNFcXVhbFRvU3RyaW5nOlBERkhVRExhdW5jaFByZXZpZXdD
b250cm9sXSkKKyAgICAgICAgcGFnZS0+cGRmT3BlbldpdGhQcmV2aWV3KF9wbHVnaW5JZGVudGlm
aWVyKTsKK30KKworLSAodm9pZClfbG9hZEljb25JbWFnZXMKK3sKKyAgICBmb3IgKE5TU3RyaW5n
ICpjb250cm9sTmFtZSBpbiBjb250cm9sQXJyYXkoKSkKKyAgICAgICAgW3NlbGYgX2dldEltYWdl
Rm9yQ29udHJvbE5hbWU6IGNvbnRyb2xOYW1lXTsKK30KKworLSAodm9pZClfc2V0dXBMYXllcjoo
Q0FMYXllciAqKXBhcmVudExheWVyCit7CisgICAgX2xheWVyID0gYWRvcHROUyhbW0NBTGF5ZXIg
YWxsb2NdIGluaXRdKTsKKyAgICBbX2xheWVyIHNldENvcm5lclJhZGl1czprTGF5ZXJDb3JuZXJS
YWRpdXNdOworICAgIAorICAgIGF1dG8gY29sb3IgPSBhZG9wdE5TKFBERkNHQ29sb3JDcmVhdGVH
ZW5lcmljUkdCKGtMYXllckdyYXlDb21wb25lbnQsIGtMYXllckdyYXlDb21wb25lbnQsIGtMYXll
ckdyYXlDb21wb25lbnQsIDEuMCkpOworICAgIFtfbGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOltj
b2xvciBDR0NvbG9yXV07CisgICAgW3NlbGYgX3NldExheWVyT3BhY2l0eTprTGF5ZXJBbHBoYV07
CisgICAgCisgICAgW3NlbGYgX2xvYWRJY29uSW1hZ2VzXTsKKyAgICBDR0Zsb2F0IG1pbkljb25J
bWFnZUhlaWdodCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8Q0dGbG9hdD46Om1heCgpOworICAgIGZv
ciAoTlNJbWFnZSogaW1hZ2UgaW4gW19jYWNoZWRJY29ucyBhbGxWYWx1ZXNdKQorICAgICAgICBt
aW5JY29uSW1hZ2VIZWlnaHQgPSBzdGQ6Om1pbihtaW5JY29uSW1hZ2VIZWlnaHQsIChpbWFnZS5z
aXplLmhlaWdodCAvIF9kZXZpY2VTY2FsZUZhY3RvcikpOworICAgIAorICAgIENHRmxvYXQgZHgg
PSBrTGF5ZXJDb250cm9sbGVySG9yaXpvbnRhbE1hcmdpbjsKKyAgICBmb3IgKE5TU3RyaW5nICpj
b250cm9sTmFtZSBpbiBjb250cm9sQXJyYXkoKSkgeworICAgICAgICBhdXRvIGNvbnRyb2xMYXll
ciA9IGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0XSk7CisgICAgICAgIENHRmxvYXQgZHkg
PSAwLjA7CisgICAgICAgIENHRmxvYXQgY29udHJvbGxlcldpZHRoID0gMC4wOworICAgICAgICBD
R0Zsb2F0IGNvbnRyb2xsZXJIZWlnaHQgPSAwLjA7CisKKyAgICAgICAgaWYgKFtjb250cm9sTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6IFBERkhVRFNlcGVyYXRvckNvbnRyb2xdKSB7CisgICAgICAgICAg
ICBkeSA9IGtMYXllclNlcGVyYXRvclZlcnRpY2FsTWFyZ2luOworICAgICAgICAgICAgY29udHJv
bGxlcldpZHRoID0ga0xheWVyU2VwZXJhdG9yQ29udHJvbGxlclNpemU7CisgICAgICAgICAgICBj
b250cm9sbGVySGVpZ2h0ID0gbWluSWNvbkltYWdlSGVpZ2h0ICsgKDIuMCAqIGtMYXllckltYWdl
VmVydGljYWxNYXJnaW4pIC0gKDIuMCAqIGtMYXllclNlcGVyYXRvclZlcnRpY2FsTWFyZ2luKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgW2NvbnRyb2xMYXllciBzZXRCYWNrZ3JvdW5kQ29s
b3I6IFtbTlNDb2xvciBsaWdodEdyYXlDb2xvcl0gQ0dDb2xvcl1dOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgTlNJbWFnZSogY29udHJvbEltYWdlID0gW3NlbGYgX2dldEltYWdlRm9y
Q29udHJvbE5hbWU6Y29udHJvbE5hbWVdOworICAgICAgICAgICAgW2NvbnRyb2xMYXllciBzZXRD
b250ZW50czogY29udHJvbEltYWdlXTsKKyAgICAgICAgICAgIFtjb250cm9sTGF5ZXIgc2V0T3Bh
Y2l0eToga0NvbnRyb2xMYXllck5vcm1hbEFscGhhXTsKKworICAgICAgICAgICAgZHkgPSBrTGF5
ZXJJbWFnZVZlcnRpY2FsTWFyZ2luOworICAgICAgICAgICAgY29udHJvbGxlcldpZHRoID0gW2Nv
bnRyb2xJbWFnZSBzaXplXS53aWR0aCAvIF9kZXZpY2VTY2FsZUZhY3RvcjsKKyAgICAgICAgICAg
IGNvbnRyb2xsZXJIZWlnaHQgPSBbY29udHJvbEltYWdlIHNpemVdLmhlaWdodCAvIF9kZXZpY2VT
Y2FsZUZhY3RvcjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZHkgLT0gKGNvbnRyb2xsZXJI
ZWlnaHQgLSBtaW5JY29uSW1hZ2VIZWlnaHQpIC8gMi4wOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBbY29udHJvbExheWVyIHNldEZpbHRlcnM6QFtbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6
a0NBRmlsdGVyQ29sb3JJbnZlcnRdXV07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFtj
b250cm9sTGF5ZXIgc2V0RnJhbWU6Q0dSZWN0TWFrZShkeCwgZHksIGNvbnRyb2xsZXJXaWR0aCwg
Y29udHJvbGxlckhlaWdodCldOworICAgICAgICBbX2xheWVyIGFkZFN1YmxheWVyOmNvbnRyb2xM
YXllci5nZXQoKV07CisgICAgICAgIAorICAgICAgICBkeCArPSBjb250cm9sbGVyV2lkdGggKyBr
TGF5ZXJDb250cm9sbGVySG9yaXpvbnRhbE1hcmdpbjsKKyAgICB9CisgICAgCisgICAgW19sYXll
ciBzZXRGcmFtZTpDR1JlY3RNYWtlKDAsIGtMYXllclZlcnRpY2FsT2Zmc2V0LCBkeCwgbWluSWNv
bkltYWdlSGVpZ2h0ICsgMi4wICoga0xheWVySW1hZ2VWZXJ0aWNhbE1hcmdpbildOworICAgIFtw
YXJlbnRMYXllciBhZGRTdWJsYXllcjogX2xheWVyLmdldCgpXTsKK30KKworLSAodm9pZClfcmVk
cmF3TGF5ZXIKK3sKKyAgICBbX2NhY2hlZEljb25zIHJlbW92ZUFsbE9iamVjdHNdOworICAgIENB
TGF5ZXIgKnBhcmVudExheWVyID0gW19sYXllciBzdXBlcmxheWVyXTsKKyAgICBbX2xheWVyIHJl
bW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICBbc2VsZiBfc2V0dXBMYXllcjpwYXJlbnRMYXllcl07
CisgICAgW3NlbGYgc2V0RnJhbWVTaXplOl9mcmFtZVNpemVdOworfQorCistIChOU0ltYWdlKilf
Z2V0SW1hZ2VGb3JDb250cm9sTmFtZTooTlNTdHJpbmcgKiljb250cm9sCit7CisgICAgTlNJbWFn
ZSogaWNvbkltYWdlID0gX2NhY2hlZEljb25zLmdldCgpW2NvbnRyb2xdOworICAgIGlmIChpY29u
SW1hZ2UpCisgICAgICAgIHJldHVybiBpY29uSW1hZ2U7CisKKyAgICBpY29uSW1hZ2UgPSBbTlNJ
bWFnZSBfaW1hZ2VXaXRoU3lzdGVtU3ltYm9sTmFtZTogY29udHJvbF07CisgICAgaWYgKCFpY29u
SW1hZ2UpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBpY29uSW1hZ2UgPSBbaWNvbkltYWdl
IF9pbWFnZVdpdGhDb25maWd1cmF0aW9uOkB7CisgICAgICAgIE5TSW1hZ2VBbHRlcm5hdGVDcml0
ZXJpb25Gb250IDogW05TRm9udCBwcmVmZXJyZWRGb250Rm9yVGV4dFN0eWxlOk5TRm9udFRleHRT
dHlsZVRpdGxlMiBvcHRpb25zOkB7IH1dLAorICAgICAgICBOU0ltYWdlQWx0ZXJuYXRlQ3JpdGVy
aW9uU3ltYm9sU2NhbGUgOiBAKE5TSW1hZ2VTeW1ib2xTY2FsZUxhcmdlKQorICAgIH1dOworICAg
ICAgICAKKyAgICBOU1JlY3QgaWNvbkltYWdlUmVjdCA9IE5TTWFrZVJlY3QoMCwgMCwgW2ljb25J
bWFnZSBzaXplXS53aWR0aCAqIGtMYXllckltYWdlU2NhbGUgKiBfZGV2aWNlU2NhbGVGYWN0b3Is
IFtpY29uSW1hZ2Ugc2l6ZV0uaGVpZ2h0ICoga0xheWVySW1hZ2VTY2FsZSAqIF9kZXZpY2VTY2Fs
ZUZhY3Rvcik7CisgICAgTlNJbWFnZVJlcCogaWNvbkltYWdlUmVwID0gW2ljb25JbWFnZSBiZXN0
UmVwcmVzZW50YXRpb25Gb3JSZWN0Omljb25JbWFnZVJlY3QgY29udGV4dDpuaWwgaGludHM6bmls
XTsKKyAgICBpY29uSW1hZ2UgPSBbTlNJbWFnZSBpbWFnZVdpdGhJbWFnZVJlcDogaWNvbkltYWdl
UmVwXTsKKyAgICAKKyAgICBfY2FjaGVkSWNvbnMuZ2V0KClbY29udHJvbF0gPSBpY29uSW1hZ2U7
CisgICAgcmV0dXJuIGljb25JbWFnZTsKK30KKworLSAodm9pZClfc2V0TGF5ZXJPcGFjaXR5OihD
R0Zsb2F0KWFscGhhCit7CisgICAgW19sYXllciBzZXRPcGFjaXR5OmFscGhhXTsKKyAgICBmb3Ig
KENBTGF5ZXIgKnN1YkxheWVyIGluIFtfbGF5ZXIgc3VibGF5ZXJzXSkKKyAgICAgICAgW3N1Ykxh
eWVyIHNldE9wYWNpdHk6YWxwaGFdOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBFTkFCTEUoVUlf
UFJPQ0VTU19QREZfSFVEKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBh
Z2VQcm94eUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
V2ViUGFnZVByb3h5SU9TLm1tCShyZXZpc2lvbiAyNjYwOTApCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg4LDE2
ICsxMDg4LDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZFBlcmZvcm1EaWN0aW9uYXJ5TAogICAg
IHBhZ2VDbGllbnQoKS5kaWRQZXJmb3JtRGljdGlvbmFyeUxvb2t1cChkaWN0aW9uYXJ5UG9wdXBJ
bmZvKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFu
ZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oY29uc3QgU3RyaW5nJiwgRnJhbWVJbmZvRGF0YSYm
LCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViUGFnZVByb3h5OjpvcGVuUERGRnJvbVRlbXBvcmFy
eUZvbGRlcldpdGhOYXRpdmVBcHBsaWNhdGlvbihGcmFtZUluZm9EYXRhJiYsIGNvbnN0IFN0cmlu
ZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogdm9pZCBXZWJQYWdlUHJveHk6OnNl
dFJlbW90ZUxheWVyVHJlZVJvb3ROb2RlKFJlbW90ZUxheWVyVHJlZU5vZGUqIHJvb3ROb2RlKQog
ewogICAgIHBhZ2VDbGllbnQoKS5zZXRSZW1vdGVMYXllclRyZWVSb290Tm9kZShyb290Tm9kZSk7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxN
YWMuaAkocmV2aXNpb24gMjY2MDkwKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1Bh
Z2VDbGllbnRJbXBsTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5MCw2ICsxOTAsMTMgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgcmVnaXN0ZXJJbnNlcnRpb25VbmRvR3JvdXBpbmcoKSBvdmVycmlk
ZTsKIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgdm9pZCBjcmVhdGVQREZI
VUQoUERGUGx1Z2luSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRl
OworICAgIHZvaWQgdXBkYXRlUERGSFVETG9jYXRpb24oUERGUGx1Z2luSWRlbnRpZmllciwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlUERGSFVEKFBE
RlBsdWdpbklkZW50aWZpZXIpIG92ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlQWxsUERGSFVEcygp
IG92ZXJyaWRlOworI2VuZGlmCisKICAgICAvLyBBdXhpbGlhcnkgQ2xpZW50IENyZWF0aW9uCiAj
aWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlD
bGllbnQmIGZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGllbnQoKSBvdmVycmlkZTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0JKHJl
dmlzaW9uIDI2NjA5MCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50
SW1wbE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQ5LDYgKzM0OSwzMCBAQCB2b2lkIFBhZ2VD
bGllbnRJbXBsOjpyZWdpc3Rlckluc2VydGlvblVuCiAgICAgcmVnaXN0ZXJJbnNlcnRpb25VbmRv
R3JvdXBpbmdXaXRoVW5kb01hbmFnZXIoW21fdmlldyB1bmRvTWFuYWdlcl0pOwogfQogCisjaWYg
RU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRl
UERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgcmVjdCkKK3sKKyAgICBtX2ltcGwtPmNyZWF0ZVBERkhVRChpZGVudGlmaWVyLCByZWN0
KTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6dXBkYXRlUERGSFVETG9jYXRpb24oUERGUGx1
Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQor
eworICAgIG1faW1wbC0+dXBkYXRlUERGSFVETG9jYXRpb24oaWRlbnRpZmllciwgcmVjdCk7Cit9
CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnJlbW92ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVy
IGlkZW50aWZpZXIpCit7CisgICAgbV9pbXBsLT5yZW1vdmVQREZIVUQoaWRlbnRpZmllcik7Cit9
CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnJlbW92ZUFsbFBERkhVRHMoKQoreworICAgIG1faW1w
bC0+cmVtb3ZlQWxsUERGSFVEcygpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKFVJX1BST0NFU1Nf
UERGX0hVRCkKKwogdm9pZCBQYWdlQ2xpZW50SW1wbDo6Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKQog
ewogICAgIG1faW1wbC0+Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQkocmV2aXNpb24gMjY2MDkw
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtNDc1LDggKzQ3NSw2IEBAIHN0YXRpYyBOU1N0cmluZyAqcGF0aFRvUERG
T25EaXNrKGNvbnN0IFMKIAogdm9pZCBXZWJQYWdlUHJveHk6OnNhdmVQREZUb1RlbXBvcmFyeUZv
bGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRG
aWxlbmFtZSwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywgY29uc3QgSVBDOjpEYXRhUmVmZXJl
bmNlJiBkYXRhLCBjb25zdCBTdHJpbmcmIHBkZlVVSUQpCiB7Ci0gICAgTUVTU0FHRV9DSEVDSyhU
ZW1wb3JhcnlQREZGaWxlTWFwOjppc1ZhbGlkS2V5KHBkZlVVSUQpKTsKLQogICAgIGlmIChkYXRh
LmlzRW1wdHkoKSkgewogICAgICAgICBXVEZMb2dBbHdheXMoIkNhbm5vdCBzYXZlIGVtcHR5IFBE
RiBmaWxlIHRvIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5LiIpOwogICAgICAgICByZXR1cm47CkBA
IC01MDQsNyArNTAyLDggQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNhdmVQREZUb1RlbXBvcmFyeUZv
bAogICAgIGF1dG8gb3JpZ2luYXRpbmdVUkxTdHJpbmcgPSBmcmFtZUluZm8ucmVxdWVzdC51cmwo
KS5zdHJpbmcoKTsKICAgICBGaWxlU3lzdGVtOjpzZXRNZXRhZGF0YVVSTChuc1BhdGguZ2V0KCks
IG9yaWdpbmF0aW5nVVJMU3RyaW5nKTsKIAotICAgIG1fdGVtcG9yYXJ5UERGRmlsZXMuYWRkKHBk
ZlVVSUQsIG5zUGF0aC5nZXQoKSk7CisgICAgaWYgKFRlbXBvcmFyeVBERkZpbGVNYXA6OmlzVmFs
aWRLZXkocGRmVVVJRCkpCisgICAgICAgIG1fdGVtcG9yYXJ5UERGRmlsZXMuYWRkKHBkZlVVSUQs
IG5zUGF0aC5nZXQoKSk7CiAKICAgICBhdXRvIHBkZkZpbGVVUkwgPSBVUkw6OmZpbGVVUkxXaXRo
RmlsZVN5c3RlbVBhdGgoU3RyaW5nKG5zUGF0aC5nZXQoKSkpOwogICAgIG1fdWlDbGllbnQtPmNv
bmZpcm1QREZPcGVuaW5nKCp0aGlzLCBwZGZGaWxlVVJMLCBXVEZNb3ZlKGZyYW1lSW5mbyksIFtw
ZGZGaWxlVVJMXSAoYm9vbCBhbGxvd2VkKSB7CkBAIC01MTQsNiArNTEzLDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OnNhdmVQREZUb1RlbXBvcmFyeUZvbAogICAgIH0pOwogfQogCisjaWYgRU5BQkxF
KFBERktJVF9QTFVHSU4pICYmICFFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQogdm9pZCBXZWJQ
YWdlUHJveHk6Om9wZW5QREZGcm9tVGVtcG9yYXJ5Rm9sZGVyV2l0aE5hdGl2ZUFwcGxpY2F0aW9u
KEZyYW1lSW5mb0RhdGEmJiBmcmFtZUluZm8sIGNvbnN0IFN0cmluZyYgcGRmVVVJRCkKIHsKICAg
ICBNRVNTQUdFX0NIRUNLKFRlbXBvcmFyeVBERkZpbGVNYXA6OmlzVmFsaWRLZXkocGRmVVVJRCkp
OwpAQCAtNTMwLDYgKzUzMCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpvcGVuUERGRnJvbVRlbXBv
cmFyeUYKICAgICAgICAgW1tOU1dvcmtzcGFjZSBzaGFyZWRXb3Jrc3BhY2VdIG9wZW5VUkw6cGRm
RmlsZVVSTF07CiAgICAgfSk7CiB9CisjZW5kaWYKIAogI2lmIEVOQUJMRShQREZLSVRfUExVR0lO
KQogdm9pZCBXZWJQYWdlUHJveHk6OnNob3dQREZDb250ZXh0TWVudShjb25zdCBXZWJLaXQ6OlBE
RkNvbnRleHRNZW51JiBjb250ZXh0TWVudSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25h
bDxpbnQzMl90PiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTY3Myw2ICs2NzQsNDkgQEAg
UGxhdGZvcm1WaWV3KiBXZWJQYWdlUHJveHk6OnBsYXRmb3JtVmlldwogICAgIHJldHVybiBbcGFn
ZUNsaWVudCgpLnBsYXRmb3JtV2luZG93KCkgY29udGVudFZpZXddOwogfQogCisjaWYgRU5BQkxF
KFVJX1BST0NFU1NfUERGX0hVRCkKKwordm9pZCBXZWJQYWdlUHJveHk6OmNyZWF0ZVBERkhVRChQ
REZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJl
Y3QpCit7CisgICAgcGFnZUNsaWVudCgpLmNyZWF0ZVBERkhVRChpZGVudGlmaWVyLCByZWN0KTsK
K30KKwordm9pZCBXZWJQYWdlUHJveHk6OnJlbW92ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVy
IGlkZW50aWZpZXIpCit7CisgICAgcGFnZUNsaWVudCgpLnJlbW92ZVBERkhVRChpZGVudGlmaWVy
KTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnVwZGF0ZVBERkhVRExvY2F0aW9uKFBERlBsdWdp
bklkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sK
KyAgICBwYWdlQ2xpZW50KCkudXBkYXRlUERGSFVETG9jYXRpb24oaWRlbnRpZmllciwgcmVjdCk7
Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpwZGZab29tSW4oUERGUGx1Z2luSWRlbnRpZmllciBp
ZGVudGlmaWVyKQoreworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Olpvb21QREZJbihpZGVu
dGlmaWVyKSk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpwZGZab29tT3V0KFBERlBsdWdpbklk
ZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpab29t
UERGT3V0KGlkZW50aWZpZXIpKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnBkZlNhdmVUb1BE
RihQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgc2VuZFdpdGhBc3luY1Jl
cGx5KE1lc3NhZ2VzOjpXZWJQYWdlOjpTYXZlUERGKGlkZW50aWZpZXIpLCBbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSAoU3RyaW5nJiYgc3VnZ2VzdGVkRmlsZW5hbWUsIFVS
TCYmIG9yaWdpbmF0aW5nVVJMLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGFSZWZlcmVu
Y2UpIHsKKyAgICAgICAgc2F2ZVBERlRvRmlsZUluRG93bmxvYWRzRm9sZGVyKFdURk1vdmUoc3Vn
Z2VzdGVkRmlsZW5hbWUpLCBXVEZNb3ZlKG9yaWdpbmF0aW5nVVJMKSwgZGF0YVJlZmVyZW5jZSk7
CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpwZGZPcGVuV2l0aFByZXZpZXcoUERG
UGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIHNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6V2ViUGFnZTo6T3BlblBERldpdGhQcmV2aWV3KGlkZW50aWZpZXIpLCBbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSAoU3RyaW5nJiYgc3VnZ2VzdGVkRmlsZW5h
bWUsIEZyYW1lSW5mb0RhdGEmJiBmcmFtZUluZm8sIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYg
ZGF0YSwgY29uc3QgU3RyaW5nJiBwZGZVVUlEKSB7CisgICAgICAgIHNhdmVQREZUb1RlbXBvcmFy
eUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oV1RGTW92ZShzdWdnZXN0ZWRGaWxl
bmFtZSksIFdURk1vdmUoZnJhbWVJbmZvKSwgZGF0YSwgcGRmVVVJRCk7CisgICAgfSk7Cit9CisK
KyNlbmRpZiAvLyBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKIAogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjY2MDkwKQorKysg
U291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMTc5MCw2ICsxNzkwLDcgQEAKIAkJRDNCOTQ4NDkxMUZGNEI2NTAwMDMyQjM5IC8q
IFdlYlNlYXJjaFBvcHVwTWVudS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRDNCOTQ4NDUxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlNlYXJjaFBvcHVwTWVu
dS5oICovOyB9OwogCQlERjQ2MkUwRjIzRjIyRjU1MDBFRkYzNUYgLyogV0tIVFRQQ29va2llU3Rv
cmVQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBERjQ2MkUwRTIzRjIyRjUzMDBFRkYzNUYgLyogV0tIVFRQQ29va2llU3RvcmVQcml2YXRlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREY0NjJF
MTIyM0YzMzhCRTAwRUZGMzVGIC8qIFdLQ29udGVudFdvcmxkUHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREY0NjJFMTEyM0YzMzhBRDAwRUZG
MzVGIC8qIFdLQ29udGVudFdvcmxkUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCURGODRDRUU0MjQ5QUEyNEQwMDkwOTZGNiAvKiBXS1BE
RkhVRFZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBERjg0Q0VFMjI0OUFBMjFGMDA5MDk2RjYgLyogV0tQREZIVURWaWV3Lm1tICovOyB9OwogCQlF
MTA1RkU1NDE4RDdCOURFMDA4RjU3QTggLyogRWRpdGluZ1JhbmdlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTA1RkU1MzE4RDdCOURFMDA4RjU3QTgg
LyogRWRpdGluZ1JhbmdlLmggKi87IH07CiAJCUUxMUQzNUFFMTZCNjNEMUIwMDZEMjNENyAvKiBj
b20uYXBwbGUuV2ViUHJvY2Vzcy5zYiBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTE5NjdFMzcxNTBBQjVFMjAwQzczMTY5IC8qIGNvbS5hcHBsZS5XZWJQ
cm9jZXNzLnNiICovOyB9OwogCQlFMTRBOTU0QTE2RTAxNkE0MDA2OERFODIgLyogTmV0d29ya1By
b2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUxNEE5NTQ4MTZFMDE2QTQwMDY4REU4MiAvKiBOZXR3b3JrUHJvY2Vz
c1BsYXRmb3JtU3RyYXRlZ2llcy5oICovOyB9OwpAQCAtNTI3OSw2ICs1MjgwLDkgQEAKIAkJREY0
NjJFMTEyM0YzMzhBRDAwRUZGMzVGIC8qIFdLQ29udGVudFdvcmxkUHJpdmF0ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0NvbnRlbnRXb3JsZFByaXZhdGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREY1OEM2MzExMzcxQUM1ODAwRjlBMzdDIC8qIE5hdGl2
ZVdlYldoZWVsRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmF0aXZl
V2ViV2hlZWxFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERjU4QzYzNTEz
NzFBQ0EwMDBGOUEzN0MgLyogTmF0aXZlV2ViV2hlZWxFdmVudE1hYy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5hdGl2ZVdlYldoZWVsRXZlbnRNYWMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURGNzQyNzVDMjRGNDk1NTAwMEY4QUJFOSAvKiBQ
REZQbHVnaW5JZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBE
RlBsdWdpbklkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREY4NENF
RTIyNDlBQTIxRjAwOTA5NkY2IC8qIFdLUERGSFVEVmlldy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLUERGSFVEVmlldy5tbTsgcGF0aCA9IFBERi9XS1BERkhV
RFZpZXcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURGODRDRUUzMjQ5QUEyMUYw
MDkwOTZGNiAvKiBXS1BERkhVRFZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gV0tQREZIVURWaWV3Lmg7IHBhdGggPSBQREYvV0tQREZIVURWaWV3Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUxMDVGRTUzMThEN0I5REUwMDhGNTdBOCAvKiBFZGl0aW5nUmFu
Z2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWRpdGluZ1JhbmdlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMTVDNzE1MTkwRjhBMjUwMEVDQzUxNiAvKiBj
b20uYXBwbGUuV2ViS2l0LlN0b3JhZ2Uuc2IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gY29tLmFw
cGxlLldlYktpdC5TdG9yYWdlLnNiOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9jb20u
YXBwbGUuV2ViS2l0LlN0b3JhZ2Uuc2I7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7
IH07CiAJCUUxMzNGRDg5MTQyM0REN0YwMEZDN0JGQiAvKiBXZWJLaXQuaWNucyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGltYWdlLmljbnM7IG5hbWUg
PSBXZWJLaXQuaWNuczsgcGF0aCA9IFJlc291cmNlcy9XZWJLaXQuaWNuczsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTU5MDAsNiArNTkwNCw3IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJ
CQkxQTZGQjkwODExRTY2RkIxMDBEQjEzNzEgLyogTmV0c2NhcGUgKi8sCiAJCQkJRTE5OTg3NUIx
NDJCRjlDRjAwQkIyREU3IC8qIFBERiAqLywKKwkJCQlERjc0Mjc1QzI0RjQ5NTUwMDBGOEFCRTkg
LyogUERGUGx1Z2luSWRlbnRpZmllci5oICovLAogCQkJCTFBNkZCN0QwMTFFNjUxRTIwMERCMTM3
MSAvKiBQbHVnaW4uY3BwICovLAogCQkJCTFBNkZCN0QxMTFFNjUxRTIwMERCMTM3MSAvKiBQbHVn
aW4uaCAqLywKIAkJCQkxQUE1NkYyODExRTkyQkM4MDA2MUI4ODIgLyogUGx1Z2luQ29udHJvbGxl
ci5oICovLApAQCAtODk2Myw2ICs4OTY4LDcgQEAKIAkJCQlDRDQ1NzBEODI0NDRDQTE3MDBBM0RD
RUIgLyogTWVkaWEgKi8sCiAJCQkJNTEwQ0M3RTcxNjEzOEU3MjAwRDAzRUQzIC8qIE5ldHdvcmsg
Ki8sCiAJCQkJMzFBMkVDNDAxNDg5OTczNzAwODEwRDcxIC8qIE5vdGlmaWNhdGlvbnMgKi8sCisJ
CQkJREY4NENFRTEyNDlBQTIwMDAwOTA5NkY2IC8qIFBERiAqLywKIAkJCQkxQUVGQ0MwNTExRDAx
RjM0MDA4MjE5RDMgLyogUGx1Z2lucyAqLywKIAkJCQkyRDE1NTFBOTFGNUE5QjQyMDAwNkUzRkUg
LyogUmVtb3RlTGF5ZXJUcmVlICovLAogCQkJCTFBQUYwODlFMTkyNjgxQUMwMEI2MzkwQyAvKiBV
c2VyQ29udGVudCAqLywKQEAgLTEwNDUxLDYgKzEwNDU3LDE1IEBACiAJCQlwYXRoID0gaW9zOwog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJREY4NENFRTEyNDlBQTIwMDAwOTA5
NkY2IC8qIFBERiAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJ
CQkJREY4NENFRTMyNDlBQTIxRjAwOTA5NkY2IC8qIFdLUERGSFVEVmlldy5oICovLAorCQkJCURG
ODRDRUUyMjQ5QUEyMUYwMDkwOTZGNiAvKiBXS1BERkhVRFZpZXcubW0gKi8sCisJCQkpOworCQkJ
bmFtZSA9IFBERjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCUUxNzA4NzZE
MTZENkNBNzIwMEY5OTIyNiAvKiBGaWxlQVBJICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKQEAgLTEzMTQyLDYgKzEzMTU3LDcgQEAKIAkJCQk2MzcyODFBMzIxQURD
NzQ0MDA5RTBERTYgLyogV0tEb3dubG9hZFByb2dyZXNzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NUNFOTEyMEQyMjkzQzIxOTAwNUJFQzc4IC8qIFdLTWFpbi5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTQ2NTdEODhBMjI2NjRBMkYwMDVERTgyMyAvKiBXS09yaWVudGF0aW9uQWNjZXNzQWxlcnQubW0g
aW4gU291cmNlcyAqLywKKwkJCQlERjg0Q0VFNDI0OUFBMjREMDA5MDk2RjYgLyogV0tQREZIVURW
aWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNBMjZEODMyMTdBRDFCODAwRjk3QTM1IC8qIFdL
U2FmZUJyb3dzaW5nV2FybmluZy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFEQjAxOTQ0MjExQ0Yw
MDUwMDlGQjNFOCAvKiBXS1NoYXJlU2hlZXQubW0gaW4gU291cmNlcyAqLywKIAkJCQk3QTc4RkYz
MzIyNDE5MTlCMDA5NjQ4M0UgLyogV0tTdG9yYWdlQWNjZXNzQWxlcnQubW0gaW4gU291cmNlcyAq
LywKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERlBsdWdpbklkZW50
aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9Q
REZQbHVnaW5JZGVudGlmaWVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1BsdWdpbnMvUERGUGx1Z2luSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9P
YmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisjaWYgRU5BQkxFKFVJ
X1BST0NFU1NfUERGX0hVRCkKK2VudW0gUERGUGx1Z2luSWRlbnRpZmllclR5cGUgeyB9OwordXNp
bmcgUERGUGx1Z2luSWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8UERGUGx1Z2luSWRlbnRp
ZmllclR5cGU+OworI2VuZGlmCisKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BERi9QREZMYXllckNvbnRyb2xsZXJTUEkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGTGF5ZXJDb250cm9sbGVyU1BJLmgJKHJl
dmlzaW9uIDI2NjA5MCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9Q
REZMYXllckNvbnRyb2xsZXJTUEkuaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsMTIgQEAg
dHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgUERGTGF5ZXJDb250cgogCiAtICh2b2lkKXNuYXBz
aG90SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY29udGV4dDsKIAorI2lmIEVOQUJMRShVSV9QUk9D
RVNTX1BERl9IVUQpCistICh2b2lkKXNldERpc3BsYXlzUERGSFVEQ29udHJvbGxlcjooQk9PTClk
aXNwbGF5c0NvbnRyb2xsZXI7CistICh2b2lkKXpvb21JbjooaWQpYXRQb2ludDsKKy0gKHZvaWQp
em9vbU91dDooaWQpYXRQb2ludDsKKyNlbmRpZgorCiAtICh2b2lkKW1hZ25pZnlXaXRoTWFnbmlm
aWNhdGlvbjooQ0dGbG9hdCltYWduaWZpY2F0aW9uIGF0UG9pbnQ6KENHUG9pbnQpcG9pbnQgaW1t
ZWRpYXRlbHk6KEJPT0wpaW1tZWRpYXRlbHk7CiAKIC0gKENHUG9pbnQpc2Nyb2xsUG9zaXRpb247
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBs
dWdpbi5oCShyZXZpc2lvbiAyNjYwOTApCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1
Z2lucy9QREYvUERGUGx1Z2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNp
ZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKIAogI2luY2x1ZGUgIlBERktpdEltcG9ydHMuaCIKKyNp
bmNsdWRlICJQREZQbHVnaW5JZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiUGx1Z2luLmgiCiAjaW5j
bHVkZSAiV2ViRXZlbnQuaCIKICNpbmNsdWRlICJXZWJIaXRUZXN0UmVzdWx0RGF0YS5oIgpAQCAt
NTAsNiArNTEsNyBAQCB0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVKU1ZhbHVlKiBKU1ZhCiBP
QkpDX0NMQVNTIE5TQXJyYXk7CiBPQkpDX0NMQVNTIE5TQXR0cmlidXRlZFN0cmluZzsKIE9CSkNf
Q0xBU1MgTlNEYXRhOworT0JKQ19DTEFTUyBOU0V2ZW50OwogT0JKQ19DTEFTUyBOU1N0cmluZzsK
IE9CSkNfQ0xBU1MgUERGQW5ub3RhdGlvbjsKIE9CSkNfQ0xBU1MgUERGTGF5ZXJDb250cm9sbGVy
OwpAQCAtNzcsOCArNzksOSBAQCBjbGFzcyBQREZQbHVnaW5Bbm5vdGF0aW9uOwogY2xhc3MgUERG
UGx1Z2luUGFzc3dvcmRGaWVsZDsKIGNsYXNzIFBsdWdpblZpZXc7CiBjbGFzcyBXZWJGcmFtZTsK
K3N0cnVjdCBGcmFtZUluZm9EYXRhOwogCi1jbGFzcyBQREZQbHVnaW4gZmluYWwgOiBwdWJsaWMg
UGx1Z2luLCBwcml2YXRlIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhCitjbGFzcyBQREZQbHVnaW4g
ZmluYWwgOiBwdWJsaWMgUGx1Z2luLCBwdWJsaWMgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEKICNp
ZiBIQVZFKElOQ1JFTUVOVEFMX1BERl9BUElTKQogICAgICwgcHJpdmF0ZSBXZWJDb3JlOjpOZXRz
Y2FwZVBsdWdJblN0cmVhbUxvYWRlckNsaWVudAogI2VuZGlmCkBAIC0xMDMsOSArMTA2LDE5IEBA
IHB1YmxpYzoKICAgICB2b2lkIG5vdGlmeVNlbGVjdGlvbkNoYW5nZWQoUERGU2VsZWN0aW9uICop
OwogICAgIHZvaWQgbm90aWZ5Q3Vyc29yQ2hhbmdlZCh1aW50NjRfdCAvKiBQREZMYXllckNvbnRy
b2xsZXJDdXJzb3JUeXBlICovKTsKIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisg
ICAgdm9pZCB6b29tSW4oKTsKKyAgICB2b2lkIHpvb21PdXQoKTsKKyAgICB2b2lkIHNhdmUoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmLCBjb25zdCBVUkwmLCBjb25zdCBJUEM6
OkRhdGFSZWZlcmVuY2UmKT4mJik7CisgICAgdm9pZCBvcGVuV2l0aFByZXZpZXcoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmLCBGcmFtZUluZm9EYXRhJiYsIGNvbnN0IElQQzo6
RGF0YVJlZmVyZW5jZSYsIGNvbnN0IFN0cmluZyYpPiYmKTsKKyAgICBQREZQbHVnaW5JZGVudGlm
aWVyIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKyNlbmRpZgor
CiAgICAgdm9pZCBjbGlja2VkTGluayhOU1VSTCAqKTsKKyNpZiAhRU5BQkxFKFVJX1BST0NFU1Nf
UERGX0hVRCkKICAgICB2b2lkIHNhdmVUb1BERigpOwogICAgIHZvaWQgb3BlbldpdGhOYXRpdmVB
cHBsaWNhdGlvbigpOworI2VuZGlmCiAgICAgdm9pZCB3cml0ZUl0ZW1zVG9QYXN0ZWJvYXJkKE5T
U3RyaW5nICpwYXN0ZWJvYXJkTmFtZSwgTlNBcnJheSAqaXRlbXMsIE5TQXJyYXkgKnR5cGVzKTsK
ICAgICB2b2lkIHNob3dEZWZpbml0aW9uRm9yQXR0cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0ZWRT
dHJpbmcgKiwgQ0dQb2ludCk7CiAgICAgdm9pZCBwZXJmb3JtV2ViU2VhcmNoKE5TU3RyaW5nICop
OwpAQCAtMTE4LDcgKzEzMSwxMCBAQCBwdWJsaWM6CiAKICAgICBXZWJDb3JlOjpGbG9hdFJlY3Qg
Y29udmVydEZyb21QREZWaWV3VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgY29u
c3Q7CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZyb21Sb290Vmlld1RvUERGVmlldyhj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFBvaW50IGNv
bnZlcnRGcm9tUERGVmlld1RvUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25z
dDsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IGNvbnZlcnRGcm9tUERGVmlld1RvUm9vdFZpZXcoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0OwogICAgIFdlYkNvcmU6OkludFJlY3QgYm91bmRz
T25TY3JlZW4oKSBjb25zdDsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IGZyYW1lRm9ySFVEKCkgY29u
c3Q7CiAKICAgICBib29sIHNob3dDb250ZXh0TWVudUF0UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmKTsKIApAQCAtMTU5LDcgKzE3NSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCB3YW50c1do
ZWVsRXZlbnRzKCkgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZvaWQgZ2VvbWV0cnlEaWRD
aGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcGx1Z2luU2l6ZSwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgY2xpcFJlY3QsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYgcGx1Z2lu
VG9Sb290Vmlld1RyYW5zZm9ybSkgZmluYWw7CiAgICAgdm9pZCBjb250ZW50c1NjYWxlRmFjdG9y
Q2hhbmdlZChmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCB2aXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wp
IGZpbmFsIHsgfQorICAgIHZvaWQgdmlzaWJpbGl0eURpZENoYW5nZShib29sKSBmaW5hbDsKICAg
ICB2b2lkIGZyYW1lRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCByZXF1ZXN0SUQpIGZpbmFsOwog
ICAgIHZvaWQgZnJhbWVEaWRGYWlsKHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCB3YXNDYW5jZWxs
ZWQpIGZpbmFsOwogICAgIHZvaWQgZGlkRXZhbHVhdGVKYXZhU2NyaXB0KHVpbnQ2NF90IHJlcXVl
c3RJRCwgY29uc3QgU3RyaW5nJiByZXN1bHQpIGZpbmFsOwpAQCAtMjYzLDcgKzI3OSw2IEBAIHBy
aXZhdGU6CiAgICAgTlNFdmVudCAqbnNFdmVudEZvcldlYk1vdXNlRXZlbnQoY29uc3QgV2ViTW91
c2VFdmVudCYpOwogICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tUGx1Z2luVG9QREZW
aWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7CiAgICAgV2ViQ29yZTo6SW50UG9p
bnQgY29udmVydEZyb21Sb290Vmlld1RvUGx1Z2luKGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jikg
Y29uc3Q7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZyb21QREZWaWV3VG9Sb290Vmll
dyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OwogICAgIAogICAgIGJvb2wgc3VwcG9y
dHNGb3JtcygpOwogICAgIGJvb2wgaXNGdWxsRnJhbWVQbHVnaW4oKSBjb25zdDsKQEAgLTQwMyw2
ICs0MTgsOSBAQCBwcml2YXRlOgogI2VuZGlmCiAKICNlbmRpZiAvLyBIQVZFKElOQ1JFTUVOVEFM
X1BERl9BUElTKQorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgUERGUGx1Z2lu
SWRlbnRpZmllciBtX2lkZW50aWZpZXI7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdp
bi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYv
UERGUGx1Z2luLm1tCShyZXZpc2lvbiAyNjYwOTApCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MzMsMTIgKzQz
MywxNiBAQCAtICh2b2lkKXBlcmZvcm1TcG90bGlnaHRTZWFyY2g6KE5TU3RyaW5nCiAKIC0gKHZv
aWQpb3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbgogeworI2lmICFFTkFCTEUoVUlfUFJPQ0VTU19Q
REZfSFVEKQogICAgIF9wZGZQbHVnaW4tPm9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oKTsKKyNl
bmRpZgogfQogCiAtICh2b2lkKXNhdmVUb1BERgogeworI2lmICFFTkFCTEUoVUlfUFJPQ0VTU19Q
REZfSFVEKQogICAgIF9wZGZQbHVnaW4tPnNhdmVUb1BERigpOworI2VuZGlmCiB9CiAKIC0gKHZv
aWQpcGRmTGF5ZXJDb250cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRy
b2xsZXIgY2xpY2tlZExpbmtXaXRoVVJMOihOU1VSTCAqKXVybApAQCAtNjAwLDcgKzYwNCwxMyBA
QCBpbmxpbmUgUERGUGx1Z2luOjpQREZQbHVnaW4oV2ViRnJhbWUmIGZyCiAjaWYgSEFWRShJTkNS
RU1FTlRBTF9QREZfQVBJUykKICAgICAsIG1faW5jcmVtZW50YWxQREZMb2FkaW5nRW5hYmxlZChX
ZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmluY3JlbWVu
dGFsUERGTG9hZGluZ0VuYWJsZWQoKSkKICNlbmRpZgorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BE
Rl9IVUQpCisgICAgLCBtX2lkZW50aWZpZXIoUERGUGx1Z2luSWRlbnRpZmllcjo6Z2VuZXJhdGUo
KSkKKyNlbmRpZgogeworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgW21fcGRm
TGF5ZXJDb250cm9sbGVyIHNldERpc3BsYXlzUERGSFVEQ29udHJvbGxlcjpOT107CisjZW5kaWYK
ICAgICBtX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKS5kZWxlZ2F0ZSA9IG1fcGRmTGF5ZXJDb250
cm9sbGVyRGVsZWdhdGUuZ2V0KCk7CiAgICAgbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkucGFy
ZW50TGF5ZXIgPSBtX2NvbnRlbnRMYXllci5nZXQoKTsKIApAQCAtNjQwLDYgKzY1MCwxMCBAQCBp
bmxpbmUgUERGUGx1Z2luOjpQREZQbHVnaW4oV2ViRnJhbWUmIGZyCiAKIFBERlBsdWdpbjo6flBE
RlBsdWdpbigpCiB7CisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBpZiAoYXV0
byogcGFnZSA9IG1fZnJhbWUucGFnZSgpKQorICAgICAgICBwYWdlLT5yZW1vdmVQREZIVUQoKnRo
aXMpOworI2VuZGlmCiB9CiAKICNpZiBIQVZFKElOQ1JFTUVOVEFMX1BERl9BUElTKQpAQCAtMTc3
Miw2ICsxNzg2LDExIEBAIHZvaWQgUERGUGx1Z2luOjpjb250ZW50c1NjYWxlRmFjdG9yQ2hhbmcK
ICAgICB1cGRhdGVQYWdlQW5kRGV2aWNlU2NhbGVGYWN0b3JzKCk7CiB9CiAKK0ludFJlY3QgUERG
UGx1Z2luOjpmcmFtZUZvckhVRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnZlcnRGcm9tUERG
Vmlld1RvUm9vdFZpZXcoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkpKTsKK30KKwogdm9pZCBQ
REZQbHVnaW46OmNhbGN1bGF0ZVNpemVzKCkKIHsKICAgICBpZiAoW21fcGRmRG9jdW1lbnQgaXNM
b2NrZWRdKSB7CkBAIC0xNzgyLDYgKzE4MDEsMTAgQEAgdm9pZCBQREZQbHVnaW46OmNhbGN1bGF0
ZVNpemVzKCkKIAogICAgIG1fZmlyc3RQYWdlSGVpZ2h0ID0gW21fcGRmRG9jdW1lbnQgcGFnZUNv
dW50XSA/IHN0YXRpY19jYXN0PHVuc2lnbmVkPihDR0NlaWxpbmcoW1ttX3BkZkRvY3VtZW50IHBh
Z2VBdEluZGV4OjBdIGJvdW5kc0ZvckJveDprUERGRGlzcGxheUJveENyb3BCb3hdLnNpemUuaGVp
Z2h0KSkgOiAwOwogICAgIHNldFBERkRvY3VtZW50U2l6ZShJbnRTaXplKFttX3BkZkxheWVyQ29u
dHJvbGxlciBjb250ZW50U2l6ZVJlc3BlY3Rpbmdab29tXSkpOworCisjaWYgRU5BQkxFKFVJX1BS
T0NFU1NfUERGX0hVRCkKKyAgICBtX2ZyYW1lLnBhZ2UoKS0+dXBkYXRlUERGSFVETG9jYXRpb24o
KnRoaXMsIGZyYW1lRm9ySFVEKCkpOworI2VuZGlmCiB9CiAKIGJvb2wgUERGUGx1Z2luOjppbml0
aWFsaXplKGNvbnN0IFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCkBAIC0xOTE2LDcgKzE5MzksMTMg
QEAgSW50UG9pbnQgUERGUGx1Z2luOjpjb252ZXJ0RnJvbVBERlZpZXdUbwogICAgIEludFBvaW50
IHBvaW50SW5QbHVnaW5Db29yZGluYXRlcyhwb2ludC54KCksIHNpemUoKS5oZWlnaHQoKSAtIHBv
aW50LnkoKSk7CiAgICAgcmV0dXJuIG1fcm9vdFZpZXdUb1BsdWdpblRyYW5zZm9ybS5pbnZlcnNl
KCkudmFsdWVPcihBZmZpbmVUcmFuc2Zvcm0oKSkubWFwUG9pbnQocG9pbnRJblBsdWdpbkNvb3Jk
aW5hdGVzKTsKIH0KLSAgICAKKworSW50UmVjdCBQREZQbHVnaW46OmNvbnZlcnRGcm9tUERGVmll
d1RvUm9vdFZpZXcoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJl
Y3RJblBsdWdpbkNvb3JkaW5hdGVzKHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCBy
ZWN0LmhlaWdodCgpKTsKKyAgICByZXR1cm4gbV9yb290Vmlld1RvUGx1Z2luVHJhbnNmb3JtLmlu
dmVyc2UoKS52YWx1ZU9yKEFmZmluZVRyYW5zZm9ybSgpKS5tYXBSZWN0KHJlY3RJblBsdWdpbkNv
b3JkaW5hdGVzKTsKK30KKwogSW50UG9pbnQgUERGUGx1Z2luOjpjb252ZXJ0RnJvbVJvb3RWaWV3
VG9QREZWaWV3KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBJbnRQb2ludCBw
b2ludEluUGx1Z2luQ29vcmRpbmF0ZXMgPSBtX3Jvb3RWaWV3VG9QbHVnaW5UcmFuc2Zvcm0ubWFw
UG9pbnQocG9pbnQpOwpAQCAtMTk0Nyw2ICsxOTc2LDE4IEBAIEludFJlY3QgUERGUGx1Z2luOjpi
b3VuZHNPblNjcmVlbigpIGNvbnMKICAgICByZXR1cm4gZnJhbWVWaWV3LT5jb250ZW50c1RvU2Ny
ZWVuKGVuY2xvc2luZ0ludFJlY3QocmVjdEluUm9vdFZpZXdDb29yZGluYXRlcykpOwogfQogCit2
b2lkIFBERlBsdWdpbjo6dmlzaWJpbGl0eURpZENoYW5nZShib29sIHZpc2libGUpCit7CisjaWYg
RU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBpZiAodmlzaWJsZSkKKyAgICAgICAgbV9m
cmFtZS5wYWdlKCktPmNyZWF0ZVBERkhVRCgqdGhpcywgZnJhbWVGb3JIVUQoKSk7CisgICAgZWxz
ZQorICAgICAgICBtX2ZyYW1lLnBhZ2UoKS0+cmVtb3ZlUERGSFVEKCp0aGlzKTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKHZpc2libGUpOworI2VuZGlmCit9CisKIHZvaWQgUERGUGx1Z2luOjpn
ZW9tZXRyeURpZENoYW5nZShjb25zdCBJbnRTaXplJiBwbHVnaW5TaXplLCBjb25zdCBJbnRSZWN0
JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtKQogewog
ICAgIGlmIChzaXplKCkgPT0gcGx1Z2luU2l6ZSAmJiBwbHVnaW5WaWV3KCktPnBhZ2VTY2FsZUZh
Y3RvcigpID09IFttX3BkZkxheWVyQ29udHJvbGxlciBjb250ZW50U2NhbGVGYWN0b3JdKQpAQCAt
MjM5Miw2ICsyNDMzLDMxIEBAIGJvb2wgUERGUGx1Z2luOjpwbHVnaW5IYW5kbGVzQ29udGVudE9m
ZnMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQp
CisKK3ZvaWQgUERGUGx1Z2luOjp6b29tSW4oKQoreworICAgIFttX3BkZkxheWVyQ29udHJvbGxl
ciB6b29tSW46bmlsXTsKK30KKwordm9pZCBQREZQbHVnaW46Onpvb21PdXQoKQoreworICAgIFtt
X3BkZkxheWVyQ29udHJvbGxlciB6b29tT3V0Om5pbF07Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpz
YXZlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJiwgY29uc3QgVVJMJiwgY29u
c3QgSVBDOjpEYXRhUmVmZXJlbmNlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgTlNE
YXRhICpkYXRhID0gbGl2ZURhdGEoKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihtX3N1Z2dlc3Rl
ZEZpbGVuYW1lLCBtX2ZyYW1lLnVybCgpLCBJUEM6OiBEYXRhUmVmZXJlbmNlKHN0YXRpY19jYXN0
PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmJ5dGVzKSwgZGF0YS5sZW5ndGgpKTsKK30KKwordm9pZCBQ
REZQbHVnaW46Om9wZW5XaXRoUHJldmlldyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0
cmluZyYsIEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwgY29uc3Qg
U3RyaW5nJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgTlNEYXRhICpkYXRhID0gbGl2
ZURhdGEoKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihtX3N1Z2dlc3RlZEZpbGVuYW1lLCBtX2Zy
YW1lLmluZm8oKSwgSVBDOjogRGF0YVJlZmVyZW5jZSB7IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4
X3QqPihkYXRhLmJ5dGVzKSwgZGF0YS5sZW5ndGggfSwgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmlu
ZygpKTsKK30KKworI2Vsc2UgLy8gRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKICAgICAKIHZv
aWQgUERGUGx1Z2luOjpzYXZlVG9QREYoKQogewpAQCAtMjQyNCw2ICsyNDkwLDggQEAgdm9pZCBQ
REZQbHVnaW46Om9wZW5XaXRoTmF0aXZlQXBwbGljYXRpbwogICAgIG1fZnJhbWUucGFnZSgpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6Ok9wZW5QREZGcm9tVGVtcG9yYXJ5Rm9sZGVyV2l0
aE5hdGl2ZUFwcGxpY2F0aW9uKG1fZnJhbWUuaW5mbygpLCBtX3RlbXBvcmFyeVBERlVVSUQpKTsK
IH0KIAorI2VuZGlmIC8vIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKIHZvaWQgUERGUGx1
Z2luOjp3cml0ZUl0ZW1zVG9QYXN0ZWJvYXJkKE5TU3RyaW5nICpwYXN0ZWJvYXJkTmFtZSwgTlNB
cnJheSAqaXRlbXMsIE5TQXJyYXkgKnR5cGVzKQogewogICAgIGF1dG8gcGFzdGVib2FyZFR5cGVz
ID0gbWFrZVZlY3RvcjxTdHJpbmc+KHR5cGVzKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAyNjYwOTApCisrKyBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTEsNiArNTEsNyBAQAogI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVz
c2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKICNpbmNsdWRl
ICJOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuaCIKKyNpbmNsdWRlICJQREZQ
bHVnSW4uaCIKICNpbmNsdWRlICJQYWdlQmFubmVyLmgiCiAjaW5jbHVkZSAiUGx1Z2luUHJvY2Vz
c0F0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJQbHVnaW5Qcm94eS5oIgpAQCAtNTEyMywxMiArNTEy
NCwxMiBAQCB2b2lkIFdlYlBhZ2U6OmRpZEZpbmlzaFByaW50T3BlcmF0aW9uKGNvCiB9CiAjZW5k
aWYKIAorI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKSAmJiAhRU5BQkxFKFVJX1BST0NFU1NfUERG
X0hVRCkKIHZvaWQgV2ViUGFnZTo6c2F2ZVBERlRvRmlsZUluRG93bmxvYWRzRm9sZGVyKGNvbnN0
IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIGNvbnN0IFVSTCYgb3JpZ2luYXRpbmdVUkwsIGNv
bnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKICAgICBzZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OlNhdmVQREZUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcihzdWdnZXN0
ZWRGaWxlbmFtZSwgb3JpZ2luYXRpbmdVUkwsIElQQzo6RGF0YVJlZmVyZW5jZShkYXRhLCBzaXpl
KSkpOwogfQogCi0jaWYgUExBVEZPUk0oQ09DT0EpCiB2b2lkIFdlYlBhZ2U6OnNhdmVQREZUb1Rl
bXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oY29uc3QgU3RyaW5nJiBz
dWdnZXN0ZWRGaWxlbmFtZSwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywgY29uc3QgdWludDhf
dCogZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplLCBjb25zdCBTdHJpbmcmIHBkZlVVSUQpCiB7CiAg
ICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJB
bmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKHN1Z2dlc3RlZEZpbGVuYW1lLCBmcmFtZUluZm8s
IElQQzo6RGF0YVJlZmVyZW5jZShkYXRhLCBzaXplKSwgcGRmVVVJRCkpOwpJbmRleDogU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNpb24gMjY2MDkwKQor
KysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCiAjaW5j
bHVkZSAiTWVzc2FnZVNlbmRlci5oIgogI2luY2x1ZGUgIk9wdGlvbmFsQ2FsbGJhY2tJRC5oIgor
I2luY2x1ZGUgIlBERlBsdWdpbklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJQbHVnaW4uaCIKICNp
bmNsdWRlICJQb2xpY3lEZWNpc2lvbi5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIK
QEAgLTM0NSw2ICszNDYsMTYgQEAgcHVibGljOgogCiAgICAgdm9pZCBjZW50ZXJTZWxlY3Rpb25J
blZpc2libGVBcmVhKCk7CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIHZv
aWQgY3JlYXRlUERGSFVEKFBERlBsdWdpbiYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAg
ICB2b2lkIHVwZGF0ZVBERkhVRExvY2F0aW9uKFBERlBsdWdpbiYsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKTsKKyAgICB2b2lkIHJlbW92ZVBERkhVRChQREZQbHVnaW4mKTsKKyAgICB2b2lkIHpv
b21QREZJbihQREZQbHVnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHpvb21QREZPdXQoUERGUGx1
Z2luSWRlbnRpZmllcik7CisgICAgdm9pZCBzYXZlUERGKFBERlBsdWdpbklkZW50aWZpZXIsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJiwgY29uc3QgVVJMJiwgY29uc3QgSVBD
OjpEYXRhUmVmZXJlbmNlJik+JiYpOworICAgIHZvaWQgb3BlblBERldpdGhQcmV2aWV3KFBERlBs
dWdpbklkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJiwgRnJh
bWVJbmZvRGF0YSYmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmKT4m
Jik7CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgd2lsbENvbW1pdExh
eWVyVHJlZShSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbiYpOwogICAgIHZvaWQgZGlkRmx1c2hM
YXllclRyZWVBdFRpbWUoTW9ub3RvbmljVGltZSk7CkBAIC0xMDc0LDkgKzEwODUsOCBAQCBwdWJs
aWM6CiAgICAgTlNEaWN0aW9uYXJ5ICpkYXRhRGV0ZWN0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0
dXJuIG1fZGF0YURldGVjdGlvbkNvbnRleHQuZ2V0KCk7IH0KICNlbmRpZgogCisjaWYgRU5BQkxF
KFBERktJVF9QTFVHSU4pICYmICFFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQogICAgIHZvaWQg
c2F2ZVBERlRvRmlsZUluRG93bmxvYWRzRm9sZGVyKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmls
ZW5hbWUsIGNvbnN0IFVSTCYgb3JpZ2luYXRpbmdVUkwsIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHVu
c2lnbmVkIGxvbmcgc2l6ZSk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIHNhdmVQ
REZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oY29uc3QgU3Ry
aW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgRnJhbWVJbmZvRGF0YSYmLCBjb25zdCB1aW50OF90KiBk
YXRhLCB1bnNpZ25lZCBsb25nIHNpemUsIGNvbnN0IFN0cmluZyYgcGRmVVVJRCk7CiAjZW5kaWYK
IApAQCAtMTc5MSw2ICsxODAxLDEwIEBAIHByaXZhdGU6CiAKICAgICBXZWJDb3JlOjpDb2xvciBt
X3VuZGVybGF5Q29sb3I7CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIEhh
c2hNYXA8UERGUGx1Z2luSWRlbnRpZmllciwgV2Vha1B0cjxQREZQbHVnaW4+PiBtX3BkZlBsdWdJ
bnNXaXRoSFVEOworI2VuZGlmCisKICAgICBib29sIG1faXNJblJlZG8geyBmYWxzZSB9OwogICAg
IGJvb2wgbV9pc0Nsb3NlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3RhYlRvTGlua3MgeyBmYWxz
ZSB9OwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNz
YWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyNjYwOTApCisrKyBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC01
NzYsNiArNTc2LDEzIEBAIEdlbmVyYXRlU3ludGhldGljRWRpdGluZ0NvbW1hbmQoZW51bTp1aW4K
IAogICAgIFNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnNMb2FkaW5nKQogCisjaWYgRU5BQkxF
KFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBab29tUERGSW4oV2ViS2l0OjpQREZQbHVnaW5JZGVu
dGlmaWVyIGlkZW50aWZpZXIpCisgICAgWm9vbVBERk91dChXZWJLaXQ6OlBERlBsdWdpbklkZW50
aWZpZXIgaWRlbnRpZmllcikKKyAgICBTYXZlUERGKFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmll
ciBpZGVudGlmaWVyKSAtPiAoU3RyaW5nIGZpbGVuYW1lLCBVUkwgdXJsLCBJUEM6OkRhdGFSZWZl
cmVuY2UgZGF0YSkgQXN5bmMKKyAgICBPcGVuUERGV2l0aFByZXZpZXcoV2ViS2l0OjpQREZQbHVn
aW5JZGVudGlmaWVyIGlkZW50aWZpZXIpIC0+IChTdHJpbmcgZmlsZW5hbWUsIHN0cnVjdCBXZWJL
aXQ6OkZyYW1lSW5mb0RhdGEgZnJhbWVJbmZvLCBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YSwgU3Ry
aW5nIHV1aWQpIEFzeW5jCisjZW5kaWYKKwogICAgIFVwZGF0ZUN1cnJlbnRNb2RpZmllclN0YXRl
KE9wdGlvblNldDxXZWJDb3JlOjpQbGF0Zm9ybUV2ZW50OjpNb2RpZmllcj4gbW9kaWZpZXJzKQog
ICAgIFNpbXVsYXRlRGV2aWNlT3JpZW50YXRpb25DaGFuZ2UoZG91YmxlIGFscGhhLCBkb3VibGUg
YmV0YSwgZG91YmxlIGdhbW1hKQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvV2ViUGFnZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQkocmV2aXNpb24gMjY2MDkwKQorKysgU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbXBvcnQgIkVkaXRpbmdSYW5nZS5oIgogI2ltcG9y
dCAiRWRpdG9yU3RhdGUuaCIKICNpbXBvcnQgIkZvbnRJbmZvLmgiCisjaW1wb3J0ICJGcmFtZUlu
Zm9EYXRhLmgiCiAjaW1wb3J0ICJJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQuaCIKICNpbXBv
cnQgIlBERktpdEltcG9ydHMuaCIKICNpbXBvcnQgIlBERlBsdWdpbi5oIgpAQCAtMTA1MSw3ICsx
MDUyLDYyIEBAIHZvaWQgV2ViUGFnZTo6c2V0QWNjZW50Q29sb3IoV2ViQ29yZTo6Q28KICAgICBb
TlNBcHAgX3NldEFjY2VudENvbG9yOmNvbG9yLmlzVmFsaWQoKSA/IFdlYkNvcmU6Om5zQ29sb3Io
Y29sb3IpIDogbmlsXTsKIH0KIAotI2VuZGlmCisjZW5kaWYgLy8gSEFWRShBUFBfQUNDRU5UX0NP
TE9SUykKKworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKK3ZvaWQgV2ViUGFnZTo6
em9vbVBERkluKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBhdXRvIHBk
ZlBsdWdpbiA9IG1fcGRmUGx1Z0luc1dpdGhIVUQuZ2V0KGlkZW50aWZpZXIpOworICAgIGlmICgh
cGRmUGx1Z2luKQorICAgICAgICByZXR1cm47CisgICAgcGRmUGx1Z2luLT56b29tSW4oKTsKK30K
Kwordm9pZCBXZWJQYWdlOjp6b29tUERGT3V0KFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmll
cikKK3sKKyAgICBhdXRvIHBkZlBsdWdpbiA9IG1fcGRmUGx1Z0luc1dpdGhIVUQuZ2V0KGlkZW50
aWZpZXIpOworICAgIGlmICghcGRmUGx1Z2luKQorICAgICAgICByZXR1cm47CisgICAgcGRmUGx1
Z2luLT56b29tT3V0KCk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6c2F2ZVBERihQREZQbHVnaW5JZGVu
dGlmaWVyIGlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJiwg
Y29uc3QgVVJMJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCit7CisgICAgYXV0byBwZGZQbHVnaW4gPSBtX3BkZlBsdWdJbnNXaXRoSFVELmdldChpZGVu
dGlmaWVyKTsKKyAgICBpZiAoIXBkZlBsdWdpbikKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25I
YW5kbGVyKHsgfSwgeyB9LCB7IH0pOworICAgIHBkZlBsdWdpbi0+c2F2ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6b3BlblBERldpdGhQcmV2aWV3KFBE
RlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25z
dCBTdHJpbmcmLCBGcmFtZUluZm9EYXRhJiYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYsIGNv
bnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGF1dG8gcGRmUGx1Z2lu
ID0gbV9wZGZQbHVnSW5zV2l0aEhVRC5nZXQoaWRlbnRpZmllcik7CisgICAgaWYgKCFwZGZQbHVn
aW4pCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0sIHsgfSwgeyB9LCB7IH0p
OworICAgIHBkZlBsdWdpbi0+b3BlbldpdGhQcmV2aWV3KFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKK30KKwordm9pZCBXZWJQYWdlOjpjcmVhdGVQREZIVUQoUERGUGx1Z2luJiBwbHVnaW4s
IGNvbnN0IEludFJlY3QmIGJvdW5kaW5nQm94KQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9w
ZGZQbHVnSW5zV2l0aEhVRC5hZGQocGx1Z2luLmlkZW50aWZpZXIoKSwgbWFrZVdlYWtQdHIocGx1
Z2luKSk7CisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICBzZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OkNyZWF0ZVBERkhVRChwbHVnaW4uaWRlbnRpZmllcigpLCBib3Vu
ZGluZ0JveCkpOworfQorCit2b2lkIFdlYlBhZ2U6OnVwZGF0ZVBERkhVRExvY2F0aW9uKFBERlBs
dWdpbiYgcGx1Z2luLCBjb25zdCBJbnRSZWN0JiBib3VuZGluZ0JveCkKK3sKKyAgICBpZiAobV9w
ZGZQbHVnSW5zV2l0aEhVRC5jb250YWlucyhwbHVnaW4uaWRlbnRpZmllcigpKSkKKyAgICAgICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpVcGRhdGVQREZIVURMb2NhdGlvbihwbHVnaW4u
aWRlbnRpZmllcigpLCBib3VuZGluZ0JveCkpOworfQorCit2b2lkIFdlYlBhZ2U6OnJlbW92ZVBE
RkhVRChQREZQbHVnaW4mIHBsdWdpbikKK3sKKyAgICBpZiAobV9wZGZQbHVnSW5zV2l0aEhVRC5y
ZW1vdmUocGx1Z2luLmlkZW50aWZpZXIoKSkpCisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6UmVtb3ZlUERGSFVEKHBsdWdpbi5pZGVudGlmaWVyKCkpKTsKK30KKworI2VuZGlm
IC8vIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407154</attachid>
            <date>2020-08-24 18:08:48 -0700</date>
            <delta_ts>2020-08-24 18:40:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215780-20200824180847.patch</filename>
            <type>text/plain</type>
            <size>63682</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjYwOTApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA4LTI0ICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBQREYgaGVhZHMtdXAgZGlz
cGxheSB0byBVSSBwcm9jZXNzIG9uIG1hY09TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU3ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU4NzE1
ODQ3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
d3RmL1BsYXRmb3JtSGF2ZS5oOgorCiAyMDIwLTA4LTI0ICBBbGV4IENocmlzdGVuc2VuICA8YWNo
cmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgSW1wbGVtZW50IFJlcXVlc3QvUmVzcG9u
c2UgY29uc3VtaW5nIGFzIEZvcm1EYXRhCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVu
YWJsZUNvY29hLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGVD
b2NvYS5oCShyZXZpc2lvbiAyNjYwOTApCisrKyBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJs
ZUNvY29hLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw2ICsyMjgsMTAgQEAKICNkZWZpbmUgRU5B
QkxFX0dQVV9EUklWRVJfUFJFV0FSTUlORyAxCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKE1BQykg
JiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAwMDAKKyNkZWZpbmUgRU5B
QkxFX1VJX1BST0NFU1NfUERGX0hVRCAxCisjZW5kaWYKKwogI2lmICFkZWZpbmVkKEVOQUJMRV9J
TkRFWEVEX0RBVEFCQVNFKQogI2RlZmluZSBFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSAxCiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjYwOTApCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk2IEBACisyMDIwLTA4LTI0ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBQREYg
aGVhZHMtdXAgZGlzcGxheSB0byBVSSBwcm9jZXNzIG9uIG1hY09TCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU3ODAKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzU4NzE1ODQ3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoaXMgaGFzIG1hbnkgYmVuZWZpdHMgaW5jbHVkaW5nIHRoZSBvbmUgaW4gdGhl
IHJhZGFyLCB0ZXN0YWJpbGl0eSwgYW5kIG1vdmluZyBXZWJLaXQtc3BlY2lmaWMgY29kZSBmcm9t
IFBERktpdCB0byBXZWJLaXQuCisKKyAgICAgICAgTm93IHRoYXQgdGhlIEhVRCBpcyBkaXNwbGF5
ZWQgaW4gdGhlIFVJIHByb2Nlc3MgaW5zdGVhZCBvZiBpbiB0aGUgd2ViIGNvbnRlbnQsIHpvb21p
bmcgaW4ga2VlcHMgdGhlIEhVRCB0aGUgc2FtZSBzaXplLgorICAgICAgICBBIDNkLXRyYW5zZm9y
bWVkIGlmcmFtZSB3aXRoIGEgUERGIGluIGl0IG5vdyBzaG93cyB0aGUgSFVEIGluIHRoZSBwbGFj
ZSB5b3UgY2FuIGNsaWNrIG9uIGl0LCBpbnN0ZWFkIG9mIGluIHRoZSB0cmFuc2Zvcm1lZCBQREYu
CisgICAgICAgIEFsc28sIG1vdmluZyB0aGUgbW91c2UgdG8gdGhlIEhVRCB3aXRoaW4gdGhlIGZp
cnN0IDMgc2Vjb25kcyBwcmV2ZW50cyBpdCBmcm9tIGhpZGluZywgd2hpY2ggaXQgZG9lcyB3aGVu
IHRoZSBtb3VzZSBsZWF2ZXMgdGhlIEhVRC4KKyAgICAgICAgVGhlIHJlc3Qgb2YgdGhlIGJlaGF2
aW9yIEkgdGhpbmsgc2hvdWxkIGJlIHRoZSBzYW1lLiAgTW9zdCB1c2VycyBzaG91bGQgbm90IG5v
dGljZSBhbnkgZGlmZmVyZW5jZS4KKworICAgICAgICBGdW5jdGlvbmFsaXR5IGNvdmVyZWQgYnkg
QVBJIHRlc3RzLCB0aGUgZmlyc3QgdGVzdHMgZm9yIFBERiBjb250ZW50IGludGVyYWN0aW9uIQor
CisgICAgICAgICogU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvbWFjL1dLVmlldy5tbToKKyAgICAgICAgKC1bV0tWaWV3IF9jcmVhdGVQREZIVUQ6cmVjdDpd
KToKKyAgICAgICAgKC1bV0tWaWV3IF9wZGZIVUQ6Y2hhbmdlZExvY2F0aW9uOl0pOgorICAgICAg
ICAoLVtXS1ZpZXcgX3JlbW92ZVBERkhVRDpdKToKKyAgICAgICAgKC1bV0tWaWV3IF9yZW1vdmVB
bGxQREZIVURzXSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3TWFjLm1t
OgorICAgICAgICAoLVtXS1dlYlZpZXcgbW91c2VNb3ZlZDpdKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IG1vdXNlRG93bjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IG1vdXNlVXA6XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfY3JlYXRlUERGSFVEOnJlY3Q6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfcGRmSFVEOmNoYW5nZWRMb2NhdGlvbjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9y
ZW1vdmVQREZIVUQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcmVtb3ZlQWxsUERGSFVEc10p
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5n
TWFjLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5t
bToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHBkZkhVRHNdKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
Q29jb2EvV2ViVmlld0ltcGwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViVmlld0lt
cGwubW06CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjcmVhdGVQREZIVUQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dXBkYXRlUERGSFVETG9jYXRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cmVtb3ZlUERGSFVEKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6OnJlbW92ZUFsbFBERkhVRHMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9QYWdl
Q2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5Ojpwcm9jZXNzRGlkVGVybWluYXRlKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5t
bToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzYXZlUERGVG9UZW1wb3JhcnlGb2xk
ZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpvcGVuUERGRnJvbVRlbXBvcmFyeUZvbGRlcldpdGhOYXRpdmVBcHBs
aWNhdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1w
bE1hYy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW06Cisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpjcmVhdGVQREZIVUQpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6dXBkYXRlUERGSFVETG9jYXRpb24pOgorICAgICAgICAo
V2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6cmVtb3ZlUERGSFVEKToKKyAgICAgICAgKFdlYktpdDo6
UGFnZUNsaWVudEltcGw6OnJlbW92ZUFsbFBERkhVRHMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9t
YWMvV2ViUGFnZVByb3h5TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNh
dmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNyZWF0ZVBERkhVRCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6cmVtb3ZlUERGSFVEKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5Ojp1cGRhdGVQREZIVURMb2NhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6cGRmWm9vbUluKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZGZab29t
T3V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZGZTYXZlVG9QREYpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBkZk9wZW5XaXRoUHJldmlldyk6CisgICAgICAg
ICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vz
cy9QbHVnaW5zL1BERi9QREZMYXllckNvbnRyb2xsZXJTUEkuaDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lu
cy9QREYvUERGUGx1Z2luLm1tOgorICAgICAgICAoLVtXS1BERkxheWVyQ29udHJvbGxlckRlbGVn
YXRlIG9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb25dKToKKyAgICAgICAgKC1bV0tQREZMYXllckNv
bnRyb2xsZXJEZWxlZ2F0ZSBzYXZlVG9QREZdKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2lu
OjpQREZQbHVnaW4pOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46On5QREZQbHVnaW4pOgor
ICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmZyYW1lRm9ySFVEIGNvbnN0KToKKyAgICAgICAg
KFdlYktpdDo6UERGUGx1Z2luOjpjYWxjdWxhdGVTaXplcyk6CisgICAgICAgIChXZWJLaXQ6OlBE
RlBsdWdpbjo6Y29udmVydEZyb21QREZWaWV3VG9Sb290VmlldyBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OlBERlBsdWdpbjo6dmlzaWJpbGl0eURpZENoYW5nZSk6CisgICAgICAgIChXZWJLaXQ6
OlBERlBsdWdpbjo6em9vbUluKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjp6b29tT3V0
KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpzYXZlKToKKyAgICAgICAgKFdlYktpdDo6
UERGUGx1Z2luOjpvcGVuV2l0aFByZXZpZXcpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6em9vbVBERkluKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6em9vbVBE
Rk91dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNhdmVQREYpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjpvcGVuUERGV2l0aFByZXZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjpjcmVhdGVQREZIVUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cGRhdGVQREZI
VURMb2NhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlbW92ZVBERkhVRCk6CisK
IDIwMjAtMDgtMjQgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwgZml4IHRoZSBpbnRlcm5hbCBpT1MgMTMuNCBidWlsZApJbmRleDog
U291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CShyZXZpc2lvbiAyNjYwOTAp
CisrKyBTb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0yNDMsNiArMjQzLDcgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRf
ZGVjbGFyZQogICAgICAgICAnV2ViS2l0OjpNRE5TUmVnaXN0ZXJJZGVudGlmaWVyJywKICAgICAg
ICAgJ1dlYktpdDo6TWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlSWRlbnRpZmllcicsCiAgICAgICAg
ICdXZWJLaXQ6Ok1lZGlhUmVjb3JkZXJJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6UERG
UGx1Z2luSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlBsYXliYWNrU2Vzc2lvbkNvbnRl
eHRJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6UGx1Z2luUHJvY2Vzc1R5cGUnLAogICAg
ICAgICAnV2ViS2l0OjpSZW1vdGVBdWRpb0Rlc3RpbmF0aW9uSWRlbnRpZmllcicsCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCShyZXZpc2lvbiAyNjYwOTApCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYg
KzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgor
I2luY2x1ZGUgIlBERlBsdWdpbklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJTYW1lRG9jdW1lbnRO
YXZpZ2F0aW9uVHlwZS5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUg
IldlYkNvbG9yUGlja2VyLmgiCkBAIC0yNDIsNiArMjQzLDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgZGlkRmFpbFByb3Zpc2lvbmFsTG9hZEZvck1haW5GcmFtZSgpIHsgfTsKICAgICB2
aXJ0dWFsIHZvaWQgZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBib29sIHVzZUN1c3RvbUNvbnRlbnRQcm92aWRlcikgPSAwOwogCisjaWYgRU5BQkxFKFVJ
X1BST0NFU1NfUERGX0hVRCkKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlUERGSFVEKFBERlBsdWdp
bklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVBERkhVRExvY2F0aW9uKFBERlBsdWdpbklkZW50aWZpZXIsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVBERkhVRChQREZQbHVn
aW5JZGVudGlmaWVyKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFsbFBERkhVRHMoKSA9
IDA7CisjZW5kaWYKKyAgICAKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0
KERvd25sb2FkUHJveHkmKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlUnVuT3BlblBh
bmVsKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqLCBjb25zdCBGcmFtZUluZm9EYXRhJiwg
QVBJOjpPcGVuUGFuZWxQYXJhbWV0ZXJzKiwgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94
eSopIHsgcmV0dXJuIGZhbHNlOyB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5jcHAJKHJldmlzaW9uIDI2NjA5MCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3NzIsMTUgKzQ3NzIsMTQgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZQogICAgICAgICAgICAgbV9w
bHVnaW5TY2FsZUZhY3RvciA9IDE7CiAgICAgICAgICAgICBtX21haW5GcmFtZVBsdWdpbkhhbmRs
ZXNQYWdlU2NhbGVHZXN0dXJlID0gZmFsc2U7CiAgICAgICAgIH0KLSAgICB9Ci0KICNpZiBFTkFC
TEUoUE9JTlRFUl9MT0NLKQotICAgIGlmIChmcmFtZS0+aXNNYWluRnJhbWUoKSkKICAgICAgICAg
cmVxdWVzdFBvaW50ZXJVbmxvY2soKTsKICNlbmRpZgotCi0gICAgaWYgKGZyYW1lLT5pc01haW5G
cmFtZSgpKQogICAgICAgICBwYWdlQ2xpZW50KCkuc2V0TW91c2VFdmVudFBvbGljeShtb3VzZUV2
ZW50UG9saWN5KTsKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgICAgICBwYWdl
Q2xpZW50KCkucmVtb3ZlQWxsUERGSFVEcygpOworI2VuZGlmCisgICAgfQogCiAgICAgbV9wYWdl
TG9hZFN0YXRlLmNvbW1pdENoYW5nZXMoKTsKICAgICBpZiAobV9sb2FkZXJDbGllbnQpCkBAIC03
NDUxLDYgKzc0NTAsOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cHJvY2Vzc0RpZFRlcm1pbmF0ZShQ
CiAKICAgICByZXNldFN0YXRlQWZ0ZXJQcm9jZXNzRXhpdGVkKHJlYXNvbik7CiAgICAgc3RvcEFs
bFVSTFNjaGVtZVRhc2tzKG1fcHJvY2Vzcy5wdHIoKSk7CisjaWYgRU5BQkxFKFVJX1BST0NFU1Nf
UERGX0hVRCkKKyAgICBwYWdlQ2xpZW50KCkucmVtb3ZlQWxsUERGSFVEcygpOworI2VuZGlmCiAK
ICAgICAvLyBGb3IgYnJpbmd1cCBvZiBwcm9jZXNzIHN3YXBwaW5nLCBOYXZpZ2F0aW9uU3dhcCB0
ZXJtaW5hdGlvbiB3aWxsIG5vdCBnbyBvdXQgdG8gY2xpZW50cy4KICAgICAvLyBJZiBpdCBkb2Vz
ICpkdXJpbmcqIHByb2Nlc3Mgc3dhcHBpbmcsIGFuZCB0aGUgY2xpZW50IHRyaWdnZXJzIGEgcmVs
b2FkLCB0aGF0IGNhdXNlcyBiaXphcnJlIFdlYktpdCByZS1lbnRyeS4KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAyNjYwOTApCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiAr
NDAsNyBAQAogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKICNpbmNsdWRlICJNZXNzYWdl
U2VuZGVyLmgiCiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2Vy
UHJveHkuaCIKKyNpbmNsdWRlICJQREZQbHVnaW5JZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiUGFn
ZUxvYWRTdGF0ZS5oIgogI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLmgiCiAjaW5j
bHVkZSAiUG9saWN5RGVjaXNpb24uaCIKQEAgLTEzMTEsMTAgKzEzMTIsMTIgQEAgcHVibGljOgog
CiAgICAgdm9pZCBzYXZlRGF0YVRvRmlsZUluRG93bmxvYWRzRm9sZGVyKFN0cmluZyYmIHN1Z2dl
c3RlZEZpbGVuYW1lLCBTdHJpbmcmJiBtaW1lVHlwZSwgVVJMJiYgb3JpZ2luYXRpbmdVUkwsIEFQ
STo6RGF0YSYpOwogICAgIHZvaWQgc2F2ZVBERlRvRmlsZUluRG93bmxvYWRzRm9sZGVyKFN0cmlu
ZyYmIHN1Z2dlc3RlZEZpbGVuYW1lLCBVUkwmJiBvcmlnaW5hdGluZ1VSTCwgY29uc3QgSVBDOjpE
YXRhUmVmZXJlbmNlJik7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCisjaWYgRU5BQkxFKFBERktJVF9Q
TFVHSU4pCiAgICAgdm9pZCBzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2
ZUFwcGxpY2F0aW9uKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIEZyYW1lSW5mb0Rh
dGEmJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwgY29uc3QgU3RyaW5nJiBwZGZVVUlEKTsK
KyNpZiAhRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKICAgICB2b2lkIG9wZW5QREZGcm9tVGVt
cG9yYXJ5Rm9sZGVyV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKEZyYW1lSW5mb0RhdGEmJiwgY29uc3Qg
U3RyaW5nJiBwZGZVVUlEKTsKICNlbmRpZgorI2VuZGlmCiAKICNpZiBFTkFCTEUoUERGS0lUX1BM
VUdJTikKICAgICB2b2lkIHNob3dQREZDb250ZXh0TWVudShjb25zdCBXZWJLaXQ6OlBERkNvbnRl
eHRNZW51JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxpbnQzMl90PiYmKT4mJik7
CkBAIC0xODA2LDYgKzE4MDksMTYgQEAgcHVibGljOgogICAgIGJvb2wgY2FuVXNlQ3JlZGVudGlh
bFN0b3JhZ2UoKSB7IHJldHVybiBtX2NhblVzZUNyZWRlbnRpYWxTdG9yYWdlOyB9CiAgICAgdm9p
ZCBzZXRDYW5Vc2VDcmVkZW50aWFsU3RvcmFnZShib29sKTsKIAorI2lmIEVOQUJMRShVSV9QUk9D
RVNTX1BERl9IVUQpCisgICAgdm9pZCBjcmVhdGVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllciwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgdXBkYXRlUERGSFVETG9jYXRpb24o
UERGUGx1Z2luSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQg
cmVtb3ZlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgcGRmWm9vbUluKFBE
RlBsdWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgcGRmWm9vbU91dChQREZQbHVnaW5JZGVudGlm
aWVyKTsKKyAgICB2b2lkIHBkZlNhdmVUb1BERihQREZQbHVnaW5JZGVudGlmaWVyKTsKKyAgICB2
b2lkIHBkZk9wZW5XaXRoUHJldmlldyhQREZQbHVnaW5JZGVudGlmaWVyKTsKKyNlbmRpZgorCiBw
cml2YXRlOgogICAgIFdlYlBhZ2VQcm94eShQYWdlQ2xpZW50JiwgV2ViUHJvY2Vzc1Byb3h5Jiwg
UmVmPEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24+JiYpOwogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFs
aXplKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2Fn
ZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyNjYwOTApCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTQzMyw5ICs0MzMs
OCBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIFNhdmVSZWNlbnRTZWFyY2hlcyhT
dHJpbmcgbmFtZSwgVmVjdG9yPFdlYkNvcmU6OlJlY2VudFNlYXJjaD4gc2VhcmNoSXRlbXMpCiAg
ICAgTG9hZFJlY2VudFNlYXJjaGVzKFN0cmluZyBuYW1lKSAtPiAoVmVjdG9yPFdlYkNvcmU6OlJl
Y2VudFNlYXJjaD4gcmVzdWx0KSBTeW5jaHJvbm91cwogCisjaWYgRU5BQkxFKFBERktJVF9QTFVH
SU4pICYmICFFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQogICAgIFNhdmVQREZUb0ZpbGVJbkRv
d25sb2Fkc0ZvbGRlcihTdHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWUsIFVSTCBvcmlnaW5hdGluZ1VS
TCwgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEpCi0KLSNpZiBQTEFURk9STShDT0NPQSkKICAgICBT
YXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKFN0cmlu
ZyBzdWdnZXN0ZWRGaWxlbmFtZSwgc3RydWN0IFdlYktpdDo6RnJhbWVJbmZvRGF0YSBzb3VyY2VG
cmFtZUluZm8sIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhLCBTdHJpbmcgcGRmVVVJRCkKICAgICBP
cGVuUERGRnJvbVRlbXBvcmFyeUZvbGRlcldpdGhOYXRpdmVBcHBsaWNhdGlvbihzdHJ1Y3QgV2Vi
S2l0OjpGcmFtZUluZm9EYXRhIHNvdXJjZUZyYW1lSW5mbywgU3RyaW5nIHBkZlVVSUQpCiAjZW5k
aWYKQEAgLTU2Niw2ICs1NjUsMTIgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBT
cGVlY2hTeW50aGVzaXNSZXN1bWUoKSAtPiAoKSBBc3luYwogI2VuZGlmCiAKKyNpZiBFTkFCTEUo
VUlfUFJPQ0VTU19QREZfSFVEKQorICAgIENyZWF0ZVBERkhVRChXZWJLaXQ6OlBERlBsdWdpbklk
ZW50aWZpZXIgaWRlbnRpZmllciwgV2ViQ29yZTo6SW50UmVjdCBib3VuZGluZ0JveCkKKyAgICBV
cGRhdGVQREZIVURMb2NhdGlvbihXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmll
ciwgV2ViQ29yZTo6SW50UmVjdCBib3VuZGluZ0JveCkKKyAgICBSZW1vdmVQREZIVUQoV2ViS2l0
OjpQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCisjZW5kaWYKKwogICAgIENvbmZpZ3Vy
ZUxvZ2dpbmdDaGFubmVsKFN0cmluZyBjaGFubmVsTmFtZSwgZW51bTp1aW50OF90IFdURkxvZ0No
YW5uZWxTdGF0ZSBzdGF0ZSwgZW51bTp1aW50OF90IFdURkxvZ0xldmVsIGxldmVsKQogCiAjaWYg
UExBVEZPUk0oR1RLKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2ViVmlld0ludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgJKHJldmlzaW9uIDI2NjA5MCkKKysrIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMywxMSArMjMsMTEgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCi0jaW1wb3J0ICJXS1dlYlZpZXdQcml2YXRlLmgiCi0KKyNpbXBvcnQgIlBE
RlBsdWdpbklkZW50aWZpZXIuaCIKICNpbXBvcnQgIlNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBl
LmgiCiAjaW1wb3J0ICJXS1NoYXJlU2hlZXQuaCIKICNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3Vy
YXRpb24uaCIKKyNpbXBvcnQgIldLV2ViVmlld1ByaXZhdGUuaCIKICNpbXBvcnQgIl9XS0F0dGFj
aG1lbnRJbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLV2ViVmlld1ByaW50Rm9ybWF0dGVySW50ZXJu
YWwuaCIKICNpbXBvcnQgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgpAQCAtMTMzLDcgKzEzMyw3
IEBAIGNsYXNzIFZpZXdHZXN0dXJlQ29udHJvbGxlcjsKICAgICAvLyBPbmx5IHVzZWQgd2l0aCBV
SS1zaWRlIGNvbXBvc2l0aW5nLgogICAgIFJldGFpblB0cjxXS1Njcm9sbFZpZXc+IF9zY3JvbGxW
aWV3OwogICAgIFJldGFpblB0cjxXS0NvbnRlbnRWaWV3PiBfY29udGVudFZpZXc7Ci0jZW5kaWYK
KyNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAg
IFJldGFpblB0cjxXS1Njcm9sbFZpZXc+IF9zY3JvbGxWaWV3OwpJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdQcml2YXRlRm9yVGVzdGluZ01hYy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3UHJpdmF0
ZUZvclRlc3RpbmdNYWMuaAkocmV2aXNpb24gMjY2MDkwKQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdQcml2YXRlRm9yVGVzdGluZ01hYy5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MCw2ICs1MCw3IEBAIEBpbnRlcmZhY2UgV0tXZWJWaWV3IChXS1Rlc3RpbmdNYWMp
CiAKIC0gKHZvaWQpX3NldEhlYWRlckJhbm5lckhlaWdodDooaW50KWhlaWdodDsKIC0gKHZvaWQp
X3NldEZvb3RlckJhbm5lckhlaWdodDooaW50KWhlaWdodDsKKy0gKE5TU2V0PE5TVmlldyAqPiAq
KV9wZGZIVURzOwogCiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9t
YWMvV0tXZWJWaWV3VGVzdGluZ01hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1Rlc3RpbmdNYWMubW0JKHJldmlzaW9uIDI2NjA5MCkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMTAzLDYgKzEwMywxNSBAQCAtICh2b2lkKV9zZXRGb290ZXJC
YW5uZXJIZWlnaHQ6KGludCloZWlnCiAgICAgX3BhZ2UtPnNldEZvb3RlckJhbm5lckhlaWdodEZv
clRlc3RpbmcoaGVpZ2h0KTsKIH0KIAorLSAoTlNTZXQ8TlNWaWV3ICo+ICopX3BkZkhVRHMKK3sK
KyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIHJldHVybiBfaW1wbC0+cGRmSFVE
cygpOworI2Vsc2UKKyAgICByZXR1cm4gbmlsOworI2VuZGlmCit9CisKIC0gKE5TTWVudSAqKV9h
Y3RpdmVNZW51CiB7CiAgICAgLy8gRklYTUU6IE9ubHkgdGhlIERPTSBwYXN0ZSBhY2Nlc3MgbWVu
dSBpcyBzdXBwb3J0ZWQgZm9yIG5vdy4gSW4gdGhlIGZ1dHVyZSwgaXQgY291bGQgYmUKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaAkocmV2aXNpb24g
MjY2MDkwKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgUExBVEZPUk0oTUFDKQogCisj
aW5jbHVkZSAiUERGUGx1Z2luSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlBsdWdpbkNvbXBsZXhU
ZXh0SW5wdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUg
IldLTGF5b3V0TW9kZS5oIgpAQCAtNzYsNiArNzcsMTAgQEAgT0JKQ19DTEFTUyBXS1RleHRUb3Vj
aEJhckl0ZW1Db250cm9sbGVyOwogT0JKQ19DTEFTUyBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdl
cjsKICNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikKIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BE
Rl9IVUQpCitPQkpDX0NMQVNTIFdLUERGSFVEVmlldzsKKyNlbmRpZgorCiBuYW1lc3BhY2UgQVBJ
IHsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBPYmplY3Q7CkBAIC0xOTAsNiArMTk1LDE0
IEBAIHB1YmxpYzoKICAgICB2b2lkIHZpZXdXaWxsU3RhcnRMaXZlUmVzaXplKCk7CiAgICAgdm9p
ZCB2aWV3RGlkRW5kTGl2ZVJlc2l6ZSgpOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hV
RCkKKyAgICB2b2lkIGNyZWF0ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCB1cGRhdGVQREZIVURMb2NhdGlvbihQREZQbHVnaW5J
ZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCByZW1vdmVQREZI
VUQoUERGUGx1Z2luSWRlbnRpZmllcik7CisgICAgdm9pZCByZW1vdmVBbGxQREZIVURzKCk7Cisg
ICAgTlNTZXQgKnBkZkhVRHMoKTsKKyNlbmRpZgorCiAgICAgdm9pZCByZW5ld0dTdGF0ZSgpOwog
ICAgIHZvaWQgc2V0RnJhbWVTaXplKENHU2l6ZSk7CiAgICAgdm9pZCBkaXNhYmxlRnJhbWVTaXpl
VXBkYXRlcygpOwpAQCAtNzI5LDcgKzc0MiwxMSBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShGVUxM
U0NSRUVOX0FQSSkKICAgICBSZXRhaW5QdHI8V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcj4g
bV9mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcjsKICNlbmRpZgotICAgIAorCisjaWYgRU5BQkxF
KFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBIYXNoTWFwPFdlYktpdDo6UERGUGx1Z2luSWRlbnRp
ZmllciwgUmV0YWluUHRyPFdLUERGSFVEVmlldz4+IF9wZGZIVURWaWV3czsKKyNlbmRpZgorCiAg
ICAgUmV0YWluUHRyPFdLU2hhcmVTaGVldD4gX3NoYXJlU2hlZXQ7CiAKICAgICBSZXRhaW5QdHI8
V0tXaW5kb3dWaXNpYmlsaXR5T2JzZXJ2ZXI+IG1fd2luZG93VmlzaWJpbGl0eU9ic2VydmVyOwpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0JKHJl
dmlzaW9uIDI2NjA5MCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJ
bXBsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw3IEBACiAjaW1wb3J0ICJXS0Vycm9y
SW50ZXJuYWwuaCIKICNpbXBvcnQgIldLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaCIKICNp
bXBvcnQgIldLSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5oIgorI2ltcG9ydCAiV0tQREZIVURW
aWV3LmgiCiAjaW1wb3J0ICJXS1ByaW50aW5nVmlldy5oIgogI2ltcG9ydCAiV0tTYWZlQnJvd3Np
bmdXYXJuaW5nLmgiCiAjaW1wb3J0ICJXS1NoYXJlU2hlZXQuaCIKQEAgLTE3MTgsNiArMTcxOSw0
NSBAQCB2b2lkIFdlYlZpZXdJbXBsOjp2aWV3RGlkRW5kTGl2ZVJlc2l6ZSgpCiAgICAgW21fbGF5
b3V0U3RyYXRlZ3kgZGlkRW5kTGl2ZVJlc2l6ZV07CiB9CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VT
U19QREZfSFVEKQorCit2b2lkIFdlYlZpZXdJbXBsOjpjcmVhdGVQREZIVUQoUERGUGx1Z2luSWRl
bnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAg
IHJlbW92ZVBERkhVRChpZGVudGlmaWVyKTsKKyAgICBhdXRvIGh1ZCA9IGFkb3B0TlMoW1tXS1BE
RkhVRFZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6cmVjdCBwbHVnaW5JZGVudGlmaWVyOmlkZW50
aWZpZXIgcGFnZTptX3BhZ2UuZ2V0KCldKTsKKyAgICBbbV92aWV3IGFkZFN1YnZpZXc6aHVkLmdl
dCgpXTsKKyAgICBfcGRmSFVEVmlld3MuYWRkKGlkZW50aWZpZXIsIFdURk1vdmUoaHVkKSk7Cit9
CisKK3ZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZVBERkhVRExvY2F0aW9uKFBERlBsdWdpbklkZW50
aWZpZXIgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBp
ZiAoYXV0byBodWQgPSBfcGRmSFVEVmlld3MuZ2V0KGlkZW50aWZpZXIpKQorICAgICAgICBbaHVk
IHNldEZyYW1lOnJlY3RdOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjpyZW1vdmVQREZIVUQoUERG
UGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIGlmIChhdXRvIGh1ZCA9IF9wZGZI
VURWaWV3cy50YWtlKGlkZW50aWZpZXIpKQorICAgICAgICBbaHVkIHJlbW92ZUZyb21TdXBlcnZp
ZXddOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjpyZW1vdmVBbGxQREZIVURzKCkKK3sKKyAgICBm
b3IgKGF1dG8mIGh1ZCA6IF9wZGZIVURWaWV3cy52YWx1ZXMoKSkKKyAgICAgICAgW2h1ZCByZW1v
dmVGcm9tU3VwZXJ2aWV3XTsKKyAgICBfcGRmSFVEVmlld3MuY2xlYXIoKTsKK30KKworTlNTZXQg
KldlYlZpZXdJbXBsOjpwZGZIVURzKCkKK3sKKyAgICBOU011dGFibGVTZXQ8TlNWaWV3ICo+ICpz
ZXQgPSBbTlNNdXRhYmxlU2V0IHNldFdpdGhDYXBhY2l0eTpfcGRmSFVEVmlld3Muc2l6ZSgpXTsK
KyAgICBmb3IgKGF1dG8mIGh1ZCA6IF9wZGZIVURWaWV3cy52YWx1ZXMoKSkKKyAgICAgICAgW3Nl
dCBhZGRPYmplY3Q6aHVkLmdldCgpXTsKKyAgICByZXR1cm4gc2V0OworfQorCisjZW5kaWYgLy8g
RU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKwogdm9pZCBXZWJWaWV3SW1wbDo6cmVuZXdHU3Rh
dGUoKQogewogICAgIGlmIChtX3RleHRJbmRpY2F0b3JXaW5kb3cpCkBAIC01MzkxLDYgKzU0MzEs
MTEgQEAgdm9pZCBXZWJWaWV3SW1wbDo6bW91c2VNb3ZlZChOU0V2ZW50ICpldgogICAgIGlmICht
X2lnbm9yZXNOb25XaGVlbEV2ZW50cykKICAgICAgICAgcmV0dXJuOwogCisjaWYgRU5BQkxFKFVJ
X1BST0NFU1NfUERGX0hVRCkKKyAgICBmb3IgKGF1dG8mIGh1ZCA6IF9wZGZIVURWaWV3cy52YWx1
ZXMoKSkKKyAgICAgICAgW2h1ZCBtb3VzZU1vdmVkOmV2ZW50XTsKKyNlbmRpZgorCiAgICAgLy8g
V2hlbiBhIHZpZXcgaXMgZmlyc3QgcmVzcG9uZGVyLCBpdCBnZXRzIG1vdXNlIG1vdmVkIGV2ZW50
cyBldmVuIHdoZW4gdGhlIG1vdXNlIGlzIG91dHNpZGUgaXRzIHZpc2libGUgcmVjdC4KICAgICBp
ZiAobV92aWV3LmdldEF1dG9yZWxlYXNlZCgpID09IFttX3ZpZXcgd2luZG93XS5maXJzdFJlc3Bv
bmRlciAmJiAhTlNQb2ludEluUmVjdChbbV92aWV3IGNvbnZlcnRQb2ludDpbZXZlbnQgbG9jYXRp
b25JbldpbmRvd10gZnJvbVZpZXc6bmlsXSwgW21fdmlldyB2aXNpYmxlUmVjdF0pKQogICAgICAg
ICByZXR1cm47CkBAIC01NDM5LDYgKzU0ODQsMTEgQEAgdm9pZCBXZWJWaWV3SW1wbDo6bW91c2VE
b3duKE5TRXZlbnQgKmV2ZQogICAgIGlmIChtX2lnbm9yZXNOb25XaGVlbEV2ZW50cykKICAgICAg
ICAgcmV0dXJuOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBmb3IgKGF1
dG8mIGh1ZCA6IF9wZGZIVURWaWV3cy52YWx1ZXMoKSkKKyAgICAgICAgW2h1ZCBtb3VzZURvd246
ZXZlbnRdOworI2VuZGlmCisKICAgICBzZXRMYXN0TW91c2VEb3duRXZlbnQoZXZlbnQpOwogICAg
IHNldElnbm9yZXNNb3VzZURyYWdnZWRFdmVudHMoZmFsc2UpOwogCkBAIC01NDUwLDYgKzU1MDAs
MTEgQEAgdm9pZCBXZWJWaWV3SW1wbDo6bW91c2VVcChOU0V2ZW50ICpldmVudAogICAgIGlmICht
X2lnbm9yZXNOb25XaGVlbEV2ZW50cykKICAgICAgICAgcmV0dXJuOwogCisjaWYgRU5BQkxFKFVJ
X1BST0NFU1NfUERGX0hVRCkKKyAgICBmb3IgKGF1dG8mIGh1ZCA6IF9wZGZIVURWaWV3cy52YWx1
ZXMoKSkKKyAgICAgICAgW2h1ZCBtb3VzZVVwOmV2ZW50XTsKKyNlbmRpZgorCiAgICAgc2V0TGFz
dE1vdXNlRG93bkV2ZW50KG5pbCk7CiAgICAgbW91c2VVcEludGVybmFsKGV2ZW50KTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BERi9XS1BERkhVRFZpZXcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QREYvV0tQREZIVURWaWV3LmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUERGL1dLUERGSFVEVmlldy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFVJX1BS
T0NFU1NfUERGX0hVRCkKKworI2ltcG9ydCAiUERGUGx1Z2luSWRlbnRpZmllci5oIgorCituYW1l
c3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlBhZ2VQcm94eTsKK30KKworQGludGVyZmFjZSBXS1BE
RkhVRFZpZXcgOiBOU1ZpZXcKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVj
dClmcmFtZSBwbHVnaW5JZGVudGlmaWVyOihXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIpcGx1
Z2luSWRlbnRpZmllciBwYWdlOihXZWJLaXQ6OldlYlBhZ2VQcm94eSYpcGFnZTsKKy0gKHZvaWQp
c2V0RnJhbWU6KE5TUmVjdClmcmFtZTsKKy0gKHZvaWQpbW91c2VNb3ZlZDooTlNFdmVudCAqKWV2
ZW50OworLSAodm9pZCltb3VzZURvd246KE5TRXZlbnQgKilldmVudDsKKy0gKHZvaWQpbW91c2VV
cDooTlNFdmVudCAqKWV2ZW50OworCitAZW5kCisKKyNlbmRpZiAvLyBFTkFCTEUoVUlfUFJPQ0VT
U19QREZfSFVEKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUERGL1dLUERGSFVEVmll
dy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QREYvV0tQREZIVURW
aWV3Lm1tCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BERi9XS1BE
RkhVRFZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNTAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldLUERGSFVEVmlldy5oIgorCisjaWYgRU5B
QkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKworI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1w
b3J0IDxRdWFydHpDb3JlL0NBVHJhbnNhY3Rpb24uaD4KKyNpbXBvcnQgPHBhbC9zcGkvY29jb2Ev
UXVhcnR6Q29yZVNQSS5oPgorI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNJbWFnZVNQSS5oPgorI2lt
cG9ydCA8d3RmL1dlYWtPYmpDUHRyLmg+CisKKy8vICBUaGUgSFVEIGl0ZW1zIHNob3VsZCBoYXZl
IHRoZSBmb2xsb3dpbmcgc3BhY2luZzoKKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyB8ICAgICAgMTIgICAgICAgIDEyICAgICAgMTAgICAg
IDEyICAgICAgICAxMiAgICAgIHwKKy8vIHwgICAgIC0tLS0gICAgICAtLS0tICAgICB8ICAgICAt
LS0tICAgICAgLS0tLSAgICAgfAorLy8gfCAxMCB8aWNvbnwgMTAgfGljb258IDEwIHwgMTAgfGlj
b258IDEwIHxpY29ufCAxMCB8CisvLyB8ICAgICAtLS0tICAgICAgLS0tLSAgICAgfCAgICAgLS0t
LSAgICAgIC0tLS0gICAgIHwKKy8vIHwgICAgICAxMiAgICAgICAgMTIgICAgICAxMCAgICAgMTIg
ICAgICAgIDEyICAgICAgfAorLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKy8vICB3aGVyZSB0aGUgMTIgcG9pbnQgdmVydGljYWwgc3BhY2luZyBp
cyBhbmNob3JlZCB0byB0aGUgc21hbGxlc3QgaWNvbiBpbWFnZSwKKy8vICBhbmQgYWxsIHN1YnNl
cXVlbnQgaWNvbnMgd2l0aCBiZSBjZW50ZXJlZCB2ZXJ0aWNhbGx5IHdpdGggdGhlIHNtYWxsZXN0
IGljb24uCisKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGtMYXllclZlcnRpY2FsT2Zmc2V0ID0gNDA7
CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrTGF5ZXJDb3JuZXJSYWRpdXMgPSAxMjsKK3N0YXRpYyBj
b25zdCBDR0Zsb2F0IGtMYXllckdyYXlDb21wb25lbnQgPSAwOworc3RhdGljIGNvbnN0IENHRmxv
YXQga0xheWVyQWxwaGEgPSAwLjc1Oworc3RhdGljIGNvbnN0IENHRmxvYXQga0xheWVySW1hZ2VT
Y2FsZSA9IDEuNTsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGtMYXllclNlcGVyYXRvckNvbnRyb2xs
ZXJTaXplID0gMS41Oworc3RhdGljIGNvbnN0IENHRmxvYXQga0xheWVyQ29udHJvbGxlckhvcml6
b250YWxNYXJnaW4gPSAxMC4wOworc3RhdGljIGNvbnN0IENHRmxvYXQga0xheWVySW1hZ2VWZXJ0
aWNhbE1hcmdpbiA9IDEyLjA7CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrTGF5ZXJTZXBlcmF0b3JW
ZXJ0aWNhbE1hcmdpbiA9IDEwLjA7CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrQ29udHJvbExheWVy
Tm9ybWFsQWxwaGEgPSAwLjc1Oworc3RhdGljIGNvbnN0IENHRmxvYXQga0NvbnRyb2xMYXllckRv
d25BbHBoYSA9IDAuNDU7CisKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFBERkhVRFpvb21JbkNv
bnRyb2wgPSBAInBsdXMubWFnbmlmeWluZ2dsYXNzIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0
IFBERkhVRFpvb21PdXRDb250cm9sID0gQCJtaW51cy5tYWduaWZ5aW5nZ2xhc3MiOworc3RhdGlj
IE5TU3RyaW5nICogY29uc3QgUERGSFVETGF1bmNoUHJldmlld0NvbnRyb2wgPSBAInByZXZpZXci
Oworc3RhdGljIE5TU3RyaW5nICogY29uc3QgUERGSFVEU2F2ZVBERkNvbnRyb2wgPSBAImFycm93
LmRvd24uY2lyY2xlIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFBERkhVRFNlcGVyYXRvckNv
bnRyb2wgPSBAIlBERkhVRFNlcGVyYXRvckNvbnRyb2wiOworCitzdGF0aWMgY29uc3QgQ0dGbG9h
dCBrTGF5ZXJGYWRlSW5UaW1lSW50ZXJ2YWwgPSAwLjI1Oworc3RhdGljIGNvbnN0IENHRmxvYXQg
a0xheWVyRmFkZU91dFRpbWVJbnRlcnZhbCA9IDAuNTsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGtJ
bml0aWFsSGlkZVRpbWVJbnRlcnZhbCA9IDMuMDsKKworc3RhdGljIE5TQXJyYXk8TlNTdHJpbmcg
Kj4gKmNvbnRyb2xBcnJheSgpCit7CisgICAgcmV0dXJuIEBbCisgICAgICAgIFBERkhVRFpvb21P
dXRDb250cm9sLAorICAgICAgICBQREZIVURab29tSW5Db250cm9sLAorICAgICAgICBQREZIVURT
ZXBlcmF0b3JDb250cm9sLAorICAgICAgICBQREZIVURMYXVuY2hQcmV2aWV3Q29udHJvbCwKKyAg
ICAgICAgUERGSFVEU2F2ZVBERkNvbnRyb2wKKyAgICBdOworfQorCitzdGF0aWMgTlNDb2xvciog
UERGQ0dDb2xvckNyZWF0ZUdlbmVyaWNSR0IoQ0dGbG9hdCByZWQsIENHRmxvYXQgZ3JlZW4sIENH
RmxvYXQgYmx1ZSwgQ0dGbG9hdCBhbHBoYSkKK3sKKyAgICBhdXRvIGNvbG9yU3BhY2UgPSBhZG9w
dENGKENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpKTsKKyAgICBjb25zdCBDR0Zsb2F0IGNv
bXBvbmVudHNbNF0gPSB7IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhIH07CisgICAgYXV0byBjZ0Nv
bG9yID0gYWRvcHRDRihDR0NvbG9yQ3JlYXRlKGNvbG9yU3BhY2UuZ2V0KCksIGNvbXBvbmVudHMp
KTsKKyAgICByZXR1cm4gW05TQ29sb3IgY29sb3JXaXRoQ0dDb2xvcjpjZ0NvbG9yLmdldCgpXTsK
K30KKworQGltcGxlbWVudGF0aW9uIFdLUERGSFVEVmlldyB7CitAcHJpdmF0ZQorICAgIFdlYWtQ
dHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+IF9wYWdlOworICAgIFJldGFpblB0cjxOU1N0cmluZz4g
X2FjdGl2ZUNvbnRyb2w7CisgICAgV2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVyIF9wbHVnaW5J
ZGVudGlmaWVyOworICAgIENHRmxvYXQgX2RldmljZVNjYWxlRmFjdG9yOworICAgIFJldGFpblB0
cjxDQUxheWVyPiBfbGF5ZXI7CisgICAgUmV0YWluUHRyPENBTGF5ZXI+IF9hY3RpdmVMYXllcjsK
KyAgICBDR1NpemUgX2ZyYW1lU2l6ZTsKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFy
eTxOU1N0cmluZyosIE5TSW1hZ2UqPj4gX2NhY2hlZEljb25zOworICAgIEJPT0wgX3Zpc2libGU7
CisgICAgYm9vbCBfbW91c2VNb3ZlZFRvSFVEOworICAgIGJvb2wgX2luaXRpYWxIaWRlVGltZXJG
aXJlZDsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSBw
bHVnaW5JZGVudGlmaWVyOihXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIpcGx1Z2luSWRlbnRp
ZmllciBwYWdlOihXZWJLaXQ6OldlYlBhZ2VQcm94eSYpcGFnZQoreworICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdFdpdGhGcmFtZTpmcmFtZV0pKQorICAgICAgICByZXR1cm4gbmlsOworICAg
IAorICAgIHNlbGYud2FudHNMYXllciA9IFlFUzsKKyAgICBfY2FjaGVkSWNvbnMgPSBhZG9wdE5T
KFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOworICAgIF9wbHVnaW5JZGVudGlm
aWVyID0gcGx1Z2luSWRlbnRpZmllcjsKKyAgICBfcGFnZSA9IG1ha2VXZWFrUHRyKHBhZ2UpOwor
ICAgIF9kZXZpY2VTY2FsZUZhY3RvciA9IHBhZ2UuZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBf
dmlzaWJsZSA9IFlFUzsKKyAgICBbc2VsZiBfc2V0dXBMYXllcjpzZWxmLmxheWVyXTsKKyAgICBb
c2VsZiBzZXRGcmFtZTpmcmFtZV07CisKKyAgICBXZWFrT2JqQ1B0cjxXS1BERkhVRFZpZXc+IHdl
YWtTZWxmID0gc2VsZjsKKyAgICBkaXNwYXRjaF9hZnRlcihkaXNwYXRjaF90aW1lKERJU1BBVENI
X1RJTUVfTk9XLCAoaW50NjRfdCkoa0luaXRpYWxIaWRlVGltZUludGVydmFsICogTlNFQ19QRVJf
U0VDKSksIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIFt3ZWFrU2VsZiBf
aGlkZVRpbWVyRmlyZWRdOworICAgIH0pOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lk
KWRlYWxsb2MKK3sKKyAgICBbX2xheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICBbc3Vw
ZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0RnJhbWU6KE5TUmVjdClyZWN0Cit7CisgICAg
W3N1cGVyIHNldEZyYW1lOnJlY3RdOworICAgIF9mcmFtZVNpemUgPSByZWN0LnNpemU7CisKKyAg
ICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFj
dGlvbnM6WUVTXTsKKyAgICBDR1JlY3QgbGF5ZXJCb3VuZHMgPSBbX2xheWVyIGJvdW5kc107Cisg
ICAgW19sYXllciBzZXRGcmFtZTpDR1JlY3RNYWtlKHJlY3Quc2l6ZS53aWR0aCAvIDIuMCAtIGxh
eWVyQm91bmRzLnNpemUud2lkdGggLyAyLjAsIGtMYXllclZlcnRpY2FsT2Zmc2V0LCBsYXllckJv
dW5kcy5zaXplLndpZHRoLCBsYXllckJvdW5kcy5zaXplLmhlaWdodCldOworICAgIFtDQVRyYW5z
YWN0aW9uIGNvbW1pdF07Cit9CisKKy0gKHZvaWQpX2hpZGVUaW1lckZpcmVkCit7CisgICAgX2lu
aXRpYWxIaWRlVGltZXJGaXJlZCA9IHRydWU7CisgICAgaWYgKCFfbW91c2VNb3ZlZFRvSFVEKQor
ICAgICAgICBbc2VsZiBfc2V0VmlzaWJsZTpmYWxzZV07Cit9CisKKy0gKHZvaWQpX3NldFZpc2li
bGU6KGJvb2wpaXNWaXNpYmxlCit7CisgICAgaWYgKF92aXNpYmxlID09IGlzVmlzaWJsZSkKKyAg
ICAgICAgcmV0dXJuOworICAgIF92aXNpYmxlID0gaXNWaXNpYmxlOworICAgIFtDQVRyYW5zYWN0
aW9uIGJlZ2luXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXRBbmltYXRpb25EdXJhdGlvbjogaXNW
aXNpYmxlID8ga0xheWVyRmFkZUluVGltZUludGVydmFsIDoga0xheWVyRmFkZU91dFRpbWVJbnRl
cnZhbF07CisgICAgW3NlbGYgX3NldExheWVyT3BhY2l0eTppc1Zpc2libGUgPyBrTGF5ZXJBbHBo
YSA6IDAuMF07CisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKK30KKworLSAodm9pZCltb3Vz
ZU1vdmVkOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBpZiAoQ0dSZWN0Q29udGFpbnNQb2ludChb
c2VsZiBjb252ZXJ0UmVjdDpDR1JlY3RJbnNldChbX2xheWVyIGZyYW1lXSwgLTE2LjAsIC0xNi4w
KSB0b1ZpZXc6bmlsXSwgTlNQb2ludFRvQ0dQb2ludChldmVudC5sb2NhdGlvbkluV2luZG93KSkp
IHsKKyAgICAgICAgW3NlbGYgX3NldFZpc2libGU6dHJ1ZV07CisgICAgICAgIF9tb3VzZU1vdmVk
VG9IVUQgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoX2luaXRpYWxIaWRlVGltZXJGaXJlZCkKKyAg
ICAgICAgW3NlbGYgX3NldFZpc2libGU6ZmFsc2VdOworfQorCistICh2b2lkKW1vdXNlRG93bjoo
TlNFdmVudCAqKWV2ZW50Cit7CisgICAgX2FjdGl2ZUNvbnRyb2wgPSBbc2VsZiBfY29udHJvbEZv
ckV2ZW50OmV2ZW50XTsKKyAgICBpZiAoW19hY3RpdmVDb250cm9sIGlzRXF1YWxUb1N0cmluZzpQ
REZIVURTZXBlcmF0b3JDb250cm9sXSkKKyAgICAgICAgX2FjdGl2ZUNvbnRyb2wgPSBuaWw7Cisg
ICAgaWYgKF9hY3RpdmVDb250cm9sKSB7CisgICAgICAgIC8vIFVwZGF0ZSByZW5kZXJpbmcgdG8g
aGlnaGxpZ2h0IGl0Li4KKyAgICAgICAgX2FjdGl2ZUxheWVyID0gW3NlbGYgX2xheWVyRm9yRXZl
bnQ6ZXZlbnRdOworICAgICAgICAKKyAgICAgICAgLy8gVXBkYXRlIGxheWVyIGltYWdlOyBkbyBu
b3QgYW5pbWF0ZQorICAgICAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgICAgIFtDQVRy
YW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107CisgICAgICAgIAorICAgICAgICBbX2Fj
dGl2ZUxheWVyIHNldE9wYWNpdHk6IGtDb250cm9sTGF5ZXJEb3duQWxwaGFdOworICAgICAgICAK
KyAgICAgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKKyAgICB9Cit9CisKKy0gKHZvaWQpbW91
c2VVcDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgaWYgKCFfYWN0aXZlQ29udHJvbCkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIE5TU3RyaW5nKiBtb3VzZVVwQ29udHJvbCA9IFtzZWxmIF9j
b250cm9sRm9yRXZlbnQ6ZXZlbnRdOworICAgIGlmIChbX2FjdGl2ZUNvbnRyb2wgaXNFcXVhbFRv
U3RyaW5nOm1vdXNlVXBDb250cm9sXSkKKyAgICAgICAgW3NlbGYgX3BlcmZvcm1BY3Rpb25Gb3JD
b250cm9sOl9hY3RpdmVDb250cm9sLmdldCgpXTsKKyAgICAKKyAgICBbQ0FUcmFuc2FjdGlvbiBi
ZWdpbl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKKyAgICBb
X2FjdGl2ZUxheWVyIHNldE9wYWNpdHk6a0NvbnRyb2xMYXllck5vcm1hbEFscGhhXTsKKyAgICBb
Q0FUcmFuc2FjdGlvbiBjb21taXRdOworCisgICAgX2FjdGl2ZUxheWVyID0gbmlsOworICAgIF9h
Y3RpdmVDb250cm9sID0gbmlsOworfQorCistIChPcHRpb25hbDxOU1VJbnRlZ2VyPilfY29udHJv
bEluZGV4Rm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIENHUG9pbnQgaW5pdGlhbFBv
aW50ID0gTlNQb2ludFRvQ0dQb2ludChldmVudC5sb2NhdGlvbkluV2luZG93KTsKKyAgICBpbml0
aWFsUG9pbnQueCAtPSBbX2xheWVyIGZyYW1lXS5vcmlnaW4ueDsKKyAgICBpbml0aWFsUG9pbnQu
eSAtPSBbX2xheWVyIGZyYW1lXS5vcmlnaW4ueTsKKyAgICBmb3IgKE5TVUludGVnZXIgaW5kZXgg
PSAwOyBpbmRleCA8IFtfbGF5ZXIgc3VibGF5ZXJzXS5jb3VudDsgaW5kZXgrKykgeworICAgICAg
ICBDQUxheWVyICpzdWJMYXllciA9IFtfbGF5ZXIgc3VibGF5ZXJzXVtpbmRleF07CisgICAgICAg
IE5TUmVjdCB3aW5kb3dTcGFjZVJlY3QgPSBbc2VsZiBjb252ZXJ0UmVjdDpzdWJMYXllci5mcmFt
ZSB0b1ZpZXc6bmlsXTsKKyAgICAgICAgaWYgKENHUmVjdENvbnRhaW5zUG9pbnQod2luZG93U3Bh
Y2VSZWN0LCBpbml0aWFsUG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgIH0K
KyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCistIChOU1N0cmluZyAqKV9jb250cm9sRm9y
RXZlbnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIGlmIChhdXRvIGluZGV4ID0gW3NlbGYgX2Nv
bnRyb2xJbmRleEZvckV2ZW50OmV2ZW50XSkKKyAgICAgICAgcmV0dXJuIGNvbnRyb2xBcnJheSgp
WyppbmRleF07CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoQ0FMYXllciAqKV9sYXllckZvckV2
ZW50OihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBpZiAoYXV0byBpbmRleCA9IFtzZWxmIF9jb250
cm9sSW5kZXhGb3JFdmVudDpldmVudF0pCisgICAgICAgIHJldHVybiBbX2xheWVyIHN1YmxheWVy
c11bKmluZGV4XTsKKyAgICByZXR1cm4gbmlsOworfQorCistICh2b2lkKV9wZXJmb3JtQWN0aW9u
Rm9yQ29udHJvbDooTlNTdHJpbmcgKiljb250cm9sCit7CisgICAgaWYgKCFfdmlzaWJsZSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGF1dG8qIHBhZ2UgPSBfcGFnZS5nZXQoKTsKKyAgICBpZiAoIXBh
Z2UpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoW2NvbnRyb2wgaXNFcXVhbFRvU3RyaW5nOlBE
RkhVRFpvb21JbkNvbnRyb2xdKQorICAgICAgICBwYWdlLT5wZGZab29tSW4oX3BsdWdpbklkZW50
aWZpZXIpOworICAgIGVsc2UgaWYgKFtjb250cm9sIGlzRXF1YWxUb1N0cmluZzpQREZIVURab29t
T3V0Q29udHJvbF0pCisgICAgICAgIHBhZ2UtPnBkZlpvb21PdXQoX3BsdWdpbklkZW50aWZpZXIp
OworICAgIGVsc2UgaWYgKFtjb250cm9sIGlzRXF1YWxUb1N0cmluZzpQREZIVURTYXZlUERGQ29u
dHJvbF0pCisgICAgICAgIHBhZ2UtPnBkZlNhdmVUb1BERihfcGx1Z2luSWRlbnRpZmllcik7Cisg
ICAgZWxzZSBpZiAoW2NvbnRyb2wgaXNFcXVhbFRvU3RyaW5nOlBERkhVRExhdW5jaFByZXZpZXdD
b250cm9sXSkKKyAgICAgICAgcGFnZS0+cGRmT3BlbldpdGhQcmV2aWV3KF9wbHVnaW5JZGVudGlm
aWVyKTsKK30KKworLSAodm9pZClfbG9hZEljb25JbWFnZXMKK3sKKyAgICBmb3IgKE5TU3RyaW5n
ICpjb250cm9sTmFtZSBpbiBjb250cm9sQXJyYXkoKSkKKyAgICAgICAgW3NlbGYgX2dldEltYWdl
Rm9yQ29udHJvbE5hbWU6IGNvbnRyb2xOYW1lXTsKK30KKworLSAodm9pZClfc2V0dXBMYXllcjoo
Q0FMYXllciAqKXBhcmVudExheWVyCit7CisgICAgX2xheWVyID0gYWRvcHROUyhbW0NBTGF5ZXIg
YWxsb2NdIGluaXRdKTsKKyAgICBbX2xheWVyIHNldENvcm5lclJhZGl1czprTGF5ZXJDb3JuZXJS
YWRpdXNdOworICAgIAorICAgIGF1dG8gY29sb3IgPSBhZG9wdE5TKFBERkNHQ29sb3JDcmVhdGVH
ZW5lcmljUkdCKGtMYXllckdyYXlDb21wb25lbnQsIGtMYXllckdyYXlDb21wb25lbnQsIGtMYXll
ckdyYXlDb21wb25lbnQsIDEuMCkpOworICAgIFtfbGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOltj
b2xvciBDR0NvbG9yXV07CisgICAgW3NlbGYgX3NldExheWVyT3BhY2l0eTprTGF5ZXJBbHBoYV07
CisgICAgCisgICAgW3NlbGYgX2xvYWRJY29uSW1hZ2VzXTsKKyAgICBDR0Zsb2F0IG1pbkljb25J
bWFnZUhlaWdodCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8Q0dGbG9hdD46Om1heCgpOworICAgIGZv
ciAoTlNJbWFnZSogaW1hZ2UgaW4gW19jYWNoZWRJY29ucyBhbGxWYWx1ZXNdKQorICAgICAgICBt
aW5JY29uSW1hZ2VIZWlnaHQgPSBzdGQ6Om1pbihtaW5JY29uSW1hZ2VIZWlnaHQsIChpbWFnZS5z
aXplLmhlaWdodCAvIF9kZXZpY2VTY2FsZUZhY3RvcikpOworICAgIAorICAgIENHRmxvYXQgZHgg
PSBrTGF5ZXJDb250cm9sbGVySG9yaXpvbnRhbE1hcmdpbjsKKyAgICBmb3IgKE5TU3RyaW5nICpj
b250cm9sTmFtZSBpbiBjb250cm9sQXJyYXkoKSkgeworICAgICAgICBhdXRvIGNvbnRyb2xMYXll
ciA9IGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0XSk7CisgICAgICAgIENHRmxvYXQgZHkg
PSAwLjA7CisgICAgICAgIENHRmxvYXQgY29udHJvbGxlcldpZHRoID0gMC4wOworICAgICAgICBD
R0Zsb2F0IGNvbnRyb2xsZXJIZWlnaHQgPSAwLjA7CisKKyAgICAgICAgaWYgKFtjb250cm9sTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6IFBERkhVRFNlcGVyYXRvckNvbnRyb2xdKSB7CisgICAgICAgICAg
ICBkeSA9IGtMYXllclNlcGVyYXRvclZlcnRpY2FsTWFyZ2luOworICAgICAgICAgICAgY29udHJv
bGxlcldpZHRoID0ga0xheWVyU2VwZXJhdG9yQ29udHJvbGxlclNpemU7CisgICAgICAgICAgICBj
b250cm9sbGVySGVpZ2h0ID0gbWluSWNvbkltYWdlSGVpZ2h0ICsgKDIuMCAqIGtMYXllckltYWdl
VmVydGljYWxNYXJnaW4pIC0gKDIuMCAqIGtMYXllclNlcGVyYXRvclZlcnRpY2FsTWFyZ2luKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgW2NvbnRyb2xMYXllciBzZXRCYWNrZ3JvdW5kQ29s
b3I6IFtbTlNDb2xvciBsaWdodEdyYXlDb2xvcl0gQ0dDb2xvcl1dOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgTlNJbWFnZSogY29udHJvbEltYWdlID0gW3NlbGYgX2dldEltYWdlRm9y
Q29udHJvbE5hbWU6Y29udHJvbE5hbWVdOworICAgICAgICAgICAgW2NvbnRyb2xMYXllciBzZXRD
b250ZW50czogY29udHJvbEltYWdlXTsKKyAgICAgICAgICAgIFtjb250cm9sTGF5ZXIgc2V0T3Bh
Y2l0eToga0NvbnRyb2xMYXllck5vcm1hbEFscGhhXTsKKworICAgICAgICAgICAgZHkgPSBrTGF5
ZXJJbWFnZVZlcnRpY2FsTWFyZ2luOworICAgICAgICAgICAgY29udHJvbGxlcldpZHRoID0gW2Nv
bnRyb2xJbWFnZSBzaXplXS53aWR0aCAvIF9kZXZpY2VTY2FsZUZhY3RvcjsKKyAgICAgICAgICAg
IGNvbnRyb2xsZXJIZWlnaHQgPSBbY29udHJvbEltYWdlIHNpemVdLmhlaWdodCAvIF9kZXZpY2VT
Y2FsZUZhY3RvcjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZHkgLT0gKGNvbnRyb2xsZXJI
ZWlnaHQgLSBtaW5JY29uSW1hZ2VIZWlnaHQpIC8gMi4wOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBbY29udHJvbExheWVyIHNldEZpbHRlcnM6QFtbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6
a0NBRmlsdGVyQ29sb3JJbnZlcnRdXV07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFtj
b250cm9sTGF5ZXIgc2V0RnJhbWU6Q0dSZWN0TWFrZShkeCwgZHksIGNvbnRyb2xsZXJXaWR0aCwg
Y29udHJvbGxlckhlaWdodCldOworICAgICAgICBbX2xheWVyIGFkZFN1YmxheWVyOmNvbnRyb2xM
YXllci5nZXQoKV07CisgICAgICAgIAorICAgICAgICBkeCArPSBjb250cm9sbGVyV2lkdGggKyBr
TGF5ZXJDb250cm9sbGVySG9yaXpvbnRhbE1hcmdpbjsKKyAgICB9CisgICAgCisgICAgW19sYXll
ciBzZXRGcmFtZTpDR1JlY3RNYWtlKDAsIGtMYXllclZlcnRpY2FsT2Zmc2V0LCBkeCwgbWluSWNv
bkltYWdlSGVpZ2h0ICsgMi4wICoga0xheWVySW1hZ2VWZXJ0aWNhbE1hcmdpbildOworICAgIFtw
YXJlbnRMYXllciBhZGRTdWJsYXllcjogX2xheWVyLmdldCgpXTsKK30KKworLSAodm9pZClfcmVk
cmF3TGF5ZXIKK3sKKyAgICBbX2NhY2hlZEljb25zIHJlbW92ZUFsbE9iamVjdHNdOworICAgIENB
TGF5ZXIgKnBhcmVudExheWVyID0gW19sYXllciBzdXBlcmxheWVyXTsKKyAgICBbX2xheWVyIHJl
bW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICBbc2VsZiBfc2V0dXBMYXllcjpwYXJlbnRMYXllcl07
CisgICAgW3NlbGYgc2V0RnJhbWVTaXplOl9mcmFtZVNpemVdOworfQorCistIChOU0ltYWdlKilf
Z2V0SW1hZ2VGb3JDb250cm9sTmFtZTooTlNTdHJpbmcgKiljb250cm9sCit7CisgICAgTlNJbWFn
ZSogaWNvbkltYWdlID0gX2NhY2hlZEljb25zLmdldCgpW2NvbnRyb2xdOworICAgIGlmIChpY29u
SW1hZ2UpCisgICAgICAgIHJldHVybiBpY29uSW1hZ2U7CisKKyAgICBpY29uSW1hZ2UgPSBbTlNJ
bWFnZSBfaW1hZ2VXaXRoU3lzdGVtU3ltYm9sTmFtZTogY29udHJvbF07CisgICAgaWYgKCFpY29u
SW1hZ2UpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBpY29uSW1hZ2UgPSBbaWNvbkltYWdl
IF9pbWFnZVdpdGhDb25maWd1cmF0aW9uOkB7CisgICAgICAgIE5TSW1hZ2VBbHRlcm5hdGVDcml0
ZXJpb25Gb250IDogW05TRm9udCBwcmVmZXJyZWRGb250Rm9yVGV4dFN0eWxlOk5TRm9udFRleHRT
dHlsZVRpdGxlMiBvcHRpb25zOkB7IH1dLAorICAgICAgICBOU0ltYWdlQWx0ZXJuYXRlQ3JpdGVy
aW9uU3ltYm9sU2NhbGUgOiBAKE5TSW1hZ2VTeW1ib2xTY2FsZUxhcmdlKQorICAgIH1dOworICAg
ICAgICAKKyAgICBOU1JlY3QgaWNvbkltYWdlUmVjdCA9IE5TTWFrZVJlY3QoMCwgMCwgW2ljb25J
bWFnZSBzaXplXS53aWR0aCAqIGtMYXllckltYWdlU2NhbGUgKiBfZGV2aWNlU2NhbGVGYWN0b3Is
IFtpY29uSW1hZ2Ugc2l6ZV0uaGVpZ2h0ICoga0xheWVySW1hZ2VTY2FsZSAqIF9kZXZpY2VTY2Fs
ZUZhY3Rvcik7CisgICAgTlNJbWFnZVJlcCogaWNvbkltYWdlUmVwID0gW2ljb25JbWFnZSBiZXN0
UmVwcmVzZW50YXRpb25Gb3JSZWN0Omljb25JbWFnZVJlY3QgY29udGV4dDpuaWwgaGludHM6bmls
XTsKKyAgICBpY29uSW1hZ2UgPSBbTlNJbWFnZSBpbWFnZVdpdGhJbWFnZVJlcDogaWNvbkltYWdl
UmVwXTsKKyAgICAKKyAgICBfY2FjaGVkSWNvbnMuZ2V0KClbY29udHJvbF0gPSBpY29uSW1hZ2U7
CisgICAgcmV0dXJuIGljb25JbWFnZTsKK30KKworLSAodm9pZClfc2V0TGF5ZXJPcGFjaXR5OihD
R0Zsb2F0KWFscGhhCit7CisgICAgW19sYXllciBzZXRPcGFjaXR5OmFscGhhXTsKKyAgICBmb3Ig
KENBTGF5ZXIgKnN1YkxheWVyIGluIFtfbGF5ZXIgc3VibGF5ZXJzXSkKKyAgICAgICAgW3N1Ykxh
eWVyIHNldE9wYWNpdHk6YWxwaGFdOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBFTkFCTEUoVUlf
UFJPQ0VTU19QREZfSFVEKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBh
Z2VQcm94eUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
V2ViUGFnZVByb3h5SU9TLm1tCShyZXZpc2lvbiAyNjYwOTApCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg4LDE2
ICsxMDg4LDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZFBlcmZvcm1EaWN0aW9uYXJ5TAogICAg
IHBhZ2VDbGllbnQoKS5kaWRQZXJmb3JtRGljdGlvbmFyeUxvb2t1cChkaWN0aW9uYXJ5UG9wdXBJ
bmZvKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFu
ZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oY29uc3QgU3RyaW5nJiwgRnJhbWVJbmZvRGF0YSYm
LCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViUGFnZVByb3h5OjpvcGVuUERGRnJvbVRlbXBvcmFy
eUZvbGRlcldpdGhOYXRpdmVBcHBsaWNhdGlvbihGcmFtZUluZm9EYXRhJiYsIGNvbnN0IFN0cmlu
ZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogdm9pZCBXZWJQYWdlUHJveHk6OnNl
dFJlbW90ZUxheWVyVHJlZVJvb3ROb2RlKFJlbW90ZUxheWVyVHJlZU5vZGUqIHJvb3ROb2RlKQog
ewogICAgIHBhZ2VDbGllbnQoKS5zZXRSZW1vdGVMYXllclRyZWVSb290Tm9kZShyb290Tm9kZSk7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxN
YWMuaAkocmV2aXNpb24gMjY2MDkwKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1Bh
Z2VDbGllbnRJbXBsTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5MCw2ICsxOTAsMTMgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgcmVnaXN0ZXJJbnNlcnRpb25VbmRvR3JvdXBpbmcoKSBvdmVycmlk
ZTsKIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgdm9pZCBjcmVhdGVQREZI
VUQoUERGUGx1Z2luSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRl
OworICAgIHZvaWQgdXBkYXRlUERGSFVETG9jYXRpb24oUERGUGx1Z2luSWRlbnRpZmllciwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlUERGSFVEKFBE
RlBsdWdpbklkZW50aWZpZXIpIG92ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlQWxsUERGSFVEcygp
IG92ZXJyaWRlOworI2VuZGlmCisKICAgICAvLyBBdXhpbGlhcnkgQ2xpZW50IENyZWF0aW9uCiAj
aWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlD
bGllbnQmIGZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGllbnQoKSBvdmVycmlkZTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0JKHJl
dmlzaW9uIDI2NjA5MCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50
SW1wbE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQ5LDYgKzM0OSwzMCBAQCB2b2lkIFBhZ2VD
bGllbnRJbXBsOjpyZWdpc3Rlckluc2VydGlvblVuCiAgICAgcmVnaXN0ZXJJbnNlcnRpb25VbmRv
R3JvdXBpbmdXaXRoVW5kb01hbmFnZXIoW21fdmlldyB1bmRvTWFuYWdlcl0pOwogfQogCisjaWYg
RU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRl
UERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgcmVjdCkKK3sKKyAgICBtX2ltcGwtPmNyZWF0ZVBERkhVRChpZGVudGlmaWVyLCByZWN0
KTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6dXBkYXRlUERGSFVETG9jYXRpb24oUERGUGx1
Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQor
eworICAgIG1faW1wbC0+dXBkYXRlUERGSFVETG9jYXRpb24oaWRlbnRpZmllciwgcmVjdCk7Cit9
CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnJlbW92ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVy
IGlkZW50aWZpZXIpCit7CisgICAgbV9pbXBsLT5yZW1vdmVQREZIVUQoaWRlbnRpZmllcik7Cit9
CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnJlbW92ZUFsbFBERkhVRHMoKQoreworICAgIG1faW1w
bC0+cmVtb3ZlQWxsUERGSFVEcygpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKFVJX1BST0NFU1Nf
UERGX0hVRCkKKwogdm9pZCBQYWdlQ2xpZW50SW1wbDo6Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKQog
ewogICAgIG1faW1wbC0+Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQkocmV2aXNpb24gMjY2MDkw
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtNDc1LDggKzQ3NSw2IEBAIHN0YXRpYyBOU1N0cmluZyAqcGF0aFRvUERG
T25EaXNrKGNvbnN0IFMKIAogdm9pZCBXZWJQYWdlUHJveHk6OnNhdmVQREZUb1RlbXBvcmFyeUZv
bGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRG
aWxlbmFtZSwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywgY29uc3QgSVBDOjpEYXRhUmVmZXJl
bmNlJiBkYXRhLCBjb25zdCBTdHJpbmcmIHBkZlVVSUQpCiB7Ci0gICAgTUVTU0FHRV9DSEVDSyhU
ZW1wb3JhcnlQREZGaWxlTWFwOjppc1ZhbGlkS2V5KHBkZlVVSUQpKTsKLQogICAgIGlmIChkYXRh
LmlzRW1wdHkoKSkgewogICAgICAgICBXVEZMb2dBbHdheXMoIkNhbm5vdCBzYXZlIGVtcHR5IFBE
RiBmaWxlIHRvIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5LiIpOwogICAgICAgICByZXR1cm47CkBA
IC01MDQsNyArNTAyLDggQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNhdmVQREZUb1RlbXBvcmFyeUZv
bAogICAgIGF1dG8gb3JpZ2luYXRpbmdVUkxTdHJpbmcgPSBmcmFtZUluZm8ucmVxdWVzdC51cmwo
KS5zdHJpbmcoKTsKICAgICBGaWxlU3lzdGVtOjpzZXRNZXRhZGF0YVVSTChuc1BhdGguZ2V0KCks
IG9yaWdpbmF0aW5nVVJMU3RyaW5nKTsKIAotICAgIG1fdGVtcG9yYXJ5UERGRmlsZXMuYWRkKHBk
ZlVVSUQsIG5zUGF0aC5nZXQoKSk7CisgICAgaWYgKFRlbXBvcmFyeVBERkZpbGVNYXA6OmlzVmFs
aWRLZXkocGRmVVVJRCkpCisgICAgICAgIG1fdGVtcG9yYXJ5UERGRmlsZXMuYWRkKHBkZlVVSUQs
IG5zUGF0aC5nZXQoKSk7CiAKICAgICBhdXRvIHBkZkZpbGVVUkwgPSBVUkw6OmZpbGVVUkxXaXRo
RmlsZVN5c3RlbVBhdGgoU3RyaW5nKG5zUGF0aC5nZXQoKSkpOwogICAgIG1fdWlDbGllbnQtPmNv
bmZpcm1QREZPcGVuaW5nKCp0aGlzLCBwZGZGaWxlVVJMLCBXVEZNb3ZlKGZyYW1lSW5mbyksIFtw
ZGZGaWxlVVJMXSAoYm9vbCBhbGxvd2VkKSB7CkBAIC01MTQsNiArNTEzLDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OnNhdmVQREZUb1RlbXBvcmFyeUZvbAogICAgIH0pOwogfQogCisjaWYgRU5BQkxF
KFBERktJVF9QTFVHSU4pICYmICFFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQogdm9pZCBXZWJQ
YWdlUHJveHk6Om9wZW5QREZGcm9tVGVtcG9yYXJ5Rm9sZGVyV2l0aE5hdGl2ZUFwcGxpY2F0aW9u
KEZyYW1lSW5mb0RhdGEmJiBmcmFtZUluZm8sIGNvbnN0IFN0cmluZyYgcGRmVVVJRCkKIHsKICAg
ICBNRVNTQUdFX0NIRUNLKFRlbXBvcmFyeVBERkZpbGVNYXA6OmlzVmFsaWRLZXkocGRmVVVJRCkp
OwpAQCAtNTMwLDYgKzUzMCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpvcGVuUERGRnJvbVRlbXBv
cmFyeUYKICAgICAgICAgW1tOU1dvcmtzcGFjZSBzaGFyZWRXb3Jrc3BhY2VdIG9wZW5VUkw6cGRm
RmlsZVVSTF07CiAgICAgfSk7CiB9CisjZW5kaWYKIAogI2lmIEVOQUJMRShQREZLSVRfUExVR0lO
KQogdm9pZCBXZWJQYWdlUHJveHk6OnNob3dQREZDb250ZXh0TWVudShjb25zdCBXZWJLaXQ6OlBE
RkNvbnRleHRNZW51JiBjb250ZXh0TWVudSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25h
bDxpbnQzMl90PiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTY3Myw2ICs2NzQsNDkgQEAg
UGxhdGZvcm1WaWV3KiBXZWJQYWdlUHJveHk6OnBsYXRmb3JtVmlldwogICAgIHJldHVybiBbcGFn
ZUNsaWVudCgpLnBsYXRmb3JtV2luZG93KCkgY29udGVudFZpZXddOwogfQogCisjaWYgRU5BQkxF
KFVJX1BST0NFU1NfUERGX0hVRCkKKwordm9pZCBXZWJQYWdlUHJveHk6OmNyZWF0ZVBERkhVRChQ
REZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJl
Y3QpCit7CisgICAgcGFnZUNsaWVudCgpLmNyZWF0ZVBERkhVRChpZGVudGlmaWVyLCByZWN0KTsK
K30KKwordm9pZCBXZWJQYWdlUHJveHk6OnJlbW92ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVy
IGlkZW50aWZpZXIpCit7CisgICAgcGFnZUNsaWVudCgpLnJlbW92ZVBERkhVRChpZGVudGlmaWVy
KTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnVwZGF0ZVBERkhVRExvY2F0aW9uKFBERlBsdWdp
bklkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sK
KyAgICBwYWdlQ2xpZW50KCkudXBkYXRlUERGSFVETG9jYXRpb24oaWRlbnRpZmllciwgcmVjdCk7
Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpwZGZab29tSW4oUERGUGx1Z2luSWRlbnRpZmllciBp
ZGVudGlmaWVyKQoreworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Olpvb21QREZJbihpZGVu
dGlmaWVyKSk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpwZGZab29tT3V0KFBERlBsdWdpbklk
ZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpab29t
UERGT3V0KGlkZW50aWZpZXIpKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnBkZlNhdmVUb1BE
RihQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgc2VuZFdpdGhBc3luY1Jl
cGx5KE1lc3NhZ2VzOjpXZWJQYWdlOjpTYXZlUERGKGlkZW50aWZpZXIpLCBbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSAoU3RyaW5nJiYgc3VnZ2VzdGVkRmlsZW5hbWUsIFVS
TCYmIG9yaWdpbmF0aW5nVVJMLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGFSZWZlcmVu
Y2UpIHsKKyAgICAgICAgc2F2ZVBERlRvRmlsZUluRG93bmxvYWRzRm9sZGVyKFdURk1vdmUoc3Vn
Z2VzdGVkRmlsZW5hbWUpLCBXVEZNb3ZlKG9yaWdpbmF0aW5nVVJMKSwgZGF0YVJlZmVyZW5jZSk7
CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpwZGZPcGVuV2l0aFByZXZpZXcoUERG
UGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIHNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6V2ViUGFnZTo6T3BlblBERldpdGhQcmV2aWV3KGlkZW50aWZpZXIpLCBbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSAoU3RyaW5nJiYgc3VnZ2VzdGVkRmlsZW5h
bWUsIEZyYW1lSW5mb0RhdGEmJiBmcmFtZUluZm8sIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYg
ZGF0YSwgY29uc3QgU3RyaW5nJiBwZGZVVUlEKSB7CisgICAgICAgIHNhdmVQREZUb1RlbXBvcmFy
eUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oV1RGTW92ZShzdWdnZXN0ZWRGaWxl
bmFtZSksIFdURk1vdmUoZnJhbWVJbmZvKSwgZGF0YSwgcGRmVVVJRCk7CisgICAgfSk7Cit9CisK
KyNlbmRpZiAvLyBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKIAogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjY2MDkwKQorKysg
U291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMTc5MCw2ICsxNzkwLDcgQEAKIAkJRDNCOTQ4NDkxMUZGNEI2NTAwMDMyQjM5IC8q
IFdlYlNlYXJjaFBvcHVwTWVudS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRDNCOTQ4NDUxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlNlYXJjaFBvcHVwTWVu
dS5oICovOyB9OwogCQlERjQ2MkUwRjIzRjIyRjU1MDBFRkYzNUYgLyogV0tIVFRQQ29va2llU3Rv
cmVQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBERjQ2MkUwRTIzRjIyRjUzMDBFRkYzNUYgLyogV0tIVFRQQ29va2llU3RvcmVQcml2YXRlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREY0NjJF
MTIyM0YzMzhCRTAwRUZGMzVGIC8qIFdLQ29udGVudFdvcmxkUHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREY0NjJFMTEyM0YzMzhBRDAwRUZG
MzVGIC8qIFdLQ29udGVudFdvcmxkUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCURGODRDRUU0MjQ5QUEyNEQwMDkwOTZGNiAvKiBXS1BE
RkhVRFZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBERjg0Q0VFMjI0OUFBMjFGMDA5MDk2RjYgLyogV0tQREZIVURWaWV3Lm1tICovOyB9OwogCQlF
MTA1RkU1NDE4RDdCOURFMDA4RjU3QTggLyogRWRpdGluZ1JhbmdlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTA1RkU1MzE4RDdCOURFMDA4RjU3QTgg
LyogRWRpdGluZ1JhbmdlLmggKi87IH07CiAJCUUxMUQzNUFFMTZCNjNEMUIwMDZEMjNENyAvKiBj
b20uYXBwbGUuV2ViUHJvY2Vzcy5zYiBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTE5NjdFMzcxNTBBQjVFMjAwQzczMTY5IC8qIGNvbS5hcHBsZS5XZWJQ
cm9jZXNzLnNiICovOyB9OwogCQlFMTRBOTU0QTE2RTAxNkE0MDA2OERFODIgLyogTmV0d29ya1By
b2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUxNEE5NTQ4MTZFMDE2QTQwMDY4REU4MiAvKiBOZXR3b3JrUHJvY2Vz
c1BsYXRmb3JtU3RyYXRlZ2llcy5oICovOyB9OwpAQCAtNTI3OSw2ICs1MjgwLDkgQEAKIAkJREY0
NjJFMTEyM0YzMzhBRDAwRUZGMzVGIC8qIFdLQ29udGVudFdvcmxkUHJpdmF0ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0NvbnRlbnRXb3JsZFByaXZhdGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREY1OEM2MzExMzcxQUM1ODAwRjlBMzdDIC8qIE5hdGl2
ZVdlYldoZWVsRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmF0aXZl
V2ViV2hlZWxFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERjU4QzYzNTEz
NzFBQ0EwMDBGOUEzN0MgLyogTmF0aXZlV2ViV2hlZWxFdmVudE1hYy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5hdGl2ZVdlYldoZWVsRXZlbnRNYWMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURGNzQyNzVDMjRGNDk1NTAwMEY4QUJFOSAvKiBQ
REZQbHVnaW5JZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBE
RlBsdWdpbklkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREY4NENF
RTIyNDlBQTIxRjAwOTA5NkY2IC8qIFdLUERGSFVEVmlldy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLUERGSFVEVmlldy5tbTsgcGF0aCA9IFBERi9XS1BERkhV
RFZpZXcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURGODRDRUUzMjQ5QUEyMUYw
MDkwOTZGNiAvKiBXS1BERkhVRFZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gV0tQREZIVURWaWV3Lmg7IHBhdGggPSBQREYvV0tQREZIVURWaWV3Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUxMDVGRTUzMThEN0I5REUwMDhGNTdBOCAvKiBFZGl0aW5nUmFu
Z2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWRpdGluZ1JhbmdlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMTVDNzE1MTkwRjhBMjUwMEVDQzUxNiAvKiBj
b20uYXBwbGUuV2ViS2l0LlN0b3JhZ2Uuc2IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gY29tLmFw
cGxlLldlYktpdC5TdG9yYWdlLnNiOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9jb20u
YXBwbGUuV2ViS2l0LlN0b3JhZ2Uuc2I7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7
IH07CiAJCUUxMzNGRDg5MTQyM0REN0YwMEZDN0JGQiAvKiBXZWJLaXQuaWNucyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGltYWdlLmljbnM7IG5hbWUg
PSBXZWJLaXQuaWNuczsgcGF0aCA9IFJlc291cmNlcy9XZWJLaXQuaWNuczsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTU5MDAsNiArNTkwNCw3IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJ
CQkxQTZGQjkwODExRTY2RkIxMDBEQjEzNzEgLyogTmV0c2NhcGUgKi8sCiAJCQkJRTE5OTg3NUIx
NDJCRjlDRjAwQkIyREU3IC8qIFBERiAqLywKKwkJCQlERjc0Mjc1QzI0RjQ5NTUwMDBGOEFCRTkg
LyogUERGUGx1Z2luSWRlbnRpZmllci5oICovLAogCQkJCTFBNkZCN0QwMTFFNjUxRTIwMERCMTM3
MSAvKiBQbHVnaW4uY3BwICovLAogCQkJCTFBNkZCN0QxMTFFNjUxRTIwMERCMTM3MSAvKiBQbHVn
aW4uaCAqLywKIAkJCQkxQUE1NkYyODExRTkyQkM4MDA2MUI4ODIgLyogUGx1Z2luQ29udHJvbGxl
ci5oICovLApAQCAtODk2Myw2ICs4OTY4LDcgQEAKIAkJCQlDRDQ1NzBEODI0NDRDQTE3MDBBM0RD
RUIgLyogTWVkaWEgKi8sCiAJCQkJNTEwQ0M3RTcxNjEzOEU3MjAwRDAzRUQzIC8qIE5ldHdvcmsg
Ki8sCiAJCQkJMzFBMkVDNDAxNDg5OTczNzAwODEwRDcxIC8qIE5vdGlmaWNhdGlvbnMgKi8sCisJ
CQkJREY4NENFRTEyNDlBQTIwMDAwOTA5NkY2IC8qIFBERiAqLywKIAkJCQkxQUVGQ0MwNTExRDAx
RjM0MDA4MjE5RDMgLyogUGx1Z2lucyAqLywKIAkJCQkyRDE1NTFBOTFGNUE5QjQyMDAwNkUzRkUg
LyogUmVtb3RlTGF5ZXJUcmVlICovLAogCQkJCTFBQUYwODlFMTkyNjgxQUMwMEI2MzkwQyAvKiBV
c2VyQ29udGVudCAqLywKQEAgLTEwNDUxLDYgKzEwNDU3LDE1IEBACiAJCQlwYXRoID0gaW9zOwog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJREY4NENFRTEyNDlBQTIwMDAwOTA5
NkY2IC8qIFBERiAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJ
CQkJREY4NENFRTMyNDlBQTIxRjAwOTA5NkY2IC8qIFdLUERGSFVEVmlldy5oICovLAorCQkJCURG
ODRDRUUyMjQ5QUEyMUYwMDkwOTZGNiAvKiBXS1BERkhVRFZpZXcubW0gKi8sCisJCQkpOworCQkJ
bmFtZSA9IFBERjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCUUxNzA4NzZE
MTZENkNBNzIwMEY5OTIyNiAvKiBGaWxlQVBJICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKQEAgLTEzMTQyLDYgKzEzMTU3LDcgQEAKIAkJCQk2MzcyODFBMzIxQURD
NzQ0MDA5RTBERTYgLyogV0tEb3dubG9hZFByb2dyZXNzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NUNFOTEyMEQyMjkzQzIxOTAwNUJFQzc4IC8qIFdLTWFpbi5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTQ2NTdEODhBMjI2NjRBMkYwMDVERTgyMyAvKiBXS09yaWVudGF0aW9uQWNjZXNzQWxlcnQubW0g
aW4gU291cmNlcyAqLywKKwkJCQlERjg0Q0VFNDI0OUFBMjREMDA5MDk2RjYgLyogV0tQREZIVURW
aWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNBMjZEODMyMTdBRDFCODAwRjk3QTM1IC8qIFdL
U2FmZUJyb3dzaW5nV2FybmluZy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFEQjAxOTQ0MjExQ0Yw
MDUwMDlGQjNFOCAvKiBXS1NoYXJlU2hlZXQubW0gaW4gU291cmNlcyAqLywKIAkJCQk3QTc4RkYz
MzIyNDE5MTlCMDA5NjQ4M0UgLyogV0tTdG9yYWdlQWNjZXNzQWxlcnQubW0gaW4gU291cmNlcyAq
LywKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERlBsdWdpbklkZW50
aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9Q
REZQbHVnaW5JZGVudGlmaWVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1BsdWdpbnMvUERGUGx1Z2luSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9P
YmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisjaWYgRU5BQkxFKFVJ
X1BST0NFU1NfUERGX0hVRCkKK2VudW0gUERGUGx1Z2luSWRlbnRpZmllclR5cGUgeyB9OwordXNp
bmcgUERGUGx1Z2luSWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8UERGUGx1Z2luSWRlbnRp
ZmllclR5cGU+OworI2VuZGlmCisKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BERi9QREZMYXllckNvbnRyb2xsZXJTUEkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGTGF5ZXJDb250cm9sbGVyU1BJLmgJKHJl
dmlzaW9uIDI2NjA5MCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9Q
REZMYXllckNvbnRyb2xsZXJTUEkuaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsMTIgQEAg
dHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgUERGTGF5ZXJDb250cgogCiAtICh2b2lkKXNuYXBz
aG90SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY29udGV4dDsKIAorI2lmIEVOQUJMRShVSV9QUk9D
RVNTX1BERl9IVUQpCistICh2b2lkKXNldERpc3BsYXlzUERGSFVEQ29udHJvbGxlcjooQk9PTClk
aXNwbGF5c0NvbnRyb2xsZXI7CistICh2b2lkKXpvb21JbjooaWQpYXRQb2ludDsKKy0gKHZvaWQp
em9vbU91dDooaWQpYXRQb2ludDsKKyNlbmRpZgorCiAtICh2b2lkKW1hZ25pZnlXaXRoTWFnbmlm
aWNhdGlvbjooQ0dGbG9hdCltYWduaWZpY2F0aW9uIGF0UG9pbnQ6KENHUG9pbnQpcG9pbnQgaW1t
ZWRpYXRlbHk6KEJPT0wpaW1tZWRpYXRlbHk7CiAKIC0gKENHUG9pbnQpc2Nyb2xsUG9zaXRpb247
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBs
dWdpbi5oCShyZXZpc2lvbiAyNjYwOTApCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1
Z2lucy9QREYvUERGUGx1Z2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNp
ZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKIAogI2luY2x1ZGUgIlBERktpdEltcG9ydHMuaCIKKyNp
bmNsdWRlICJQREZQbHVnaW5JZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiUGx1Z2luLmgiCiAjaW5j
bHVkZSAiV2ViRXZlbnQuaCIKICNpbmNsdWRlICJXZWJIaXRUZXN0UmVzdWx0RGF0YS5oIgpAQCAt
NTAsNiArNTEsNyBAQCB0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVKU1ZhbHVlKiBKU1ZhCiBP
QkpDX0NMQVNTIE5TQXJyYXk7CiBPQkpDX0NMQVNTIE5TQXR0cmlidXRlZFN0cmluZzsKIE9CSkNf
Q0xBU1MgTlNEYXRhOworT0JKQ19DTEFTUyBOU0V2ZW50OwogT0JKQ19DTEFTUyBOU1N0cmluZzsK
IE9CSkNfQ0xBU1MgUERGQW5ub3RhdGlvbjsKIE9CSkNfQ0xBU1MgUERGTGF5ZXJDb250cm9sbGVy
OwpAQCAtNzcsOCArNzksOSBAQCBjbGFzcyBQREZQbHVnaW5Bbm5vdGF0aW9uOwogY2xhc3MgUERG
UGx1Z2luUGFzc3dvcmRGaWVsZDsKIGNsYXNzIFBsdWdpblZpZXc7CiBjbGFzcyBXZWJGcmFtZTsK
K3N0cnVjdCBGcmFtZUluZm9EYXRhOwogCi1jbGFzcyBQREZQbHVnaW4gZmluYWwgOiBwdWJsaWMg
UGx1Z2luLCBwcml2YXRlIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhCitjbGFzcyBQREZQbHVnaW4g
ZmluYWwgOiBwdWJsaWMgUGx1Z2luLCBwdWJsaWMgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEKICNp
ZiBIQVZFKElOQ1JFTUVOVEFMX1BERl9BUElTKQogICAgICwgcHJpdmF0ZSBXZWJDb3JlOjpOZXRz
Y2FwZVBsdWdJblN0cmVhbUxvYWRlckNsaWVudAogI2VuZGlmCkBAIC0xMDMsOSArMTA2LDE5IEBA
IHB1YmxpYzoKICAgICB2b2lkIG5vdGlmeVNlbGVjdGlvbkNoYW5nZWQoUERGU2VsZWN0aW9uICop
OwogICAgIHZvaWQgbm90aWZ5Q3Vyc29yQ2hhbmdlZCh1aW50NjRfdCAvKiBQREZMYXllckNvbnRy
b2xsZXJDdXJzb3JUeXBlICovKTsKIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisg
ICAgdm9pZCB6b29tSW4oKTsKKyAgICB2b2lkIHpvb21PdXQoKTsKKyAgICB2b2lkIHNhdmUoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmLCBjb25zdCBVUkwmLCBjb25zdCBJUEM6
OkRhdGFSZWZlcmVuY2UmKT4mJik7CisgICAgdm9pZCBvcGVuV2l0aFByZXZpZXcoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmLCBGcmFtZUluZm9EYXRhJiYsIGNvbnN0IElQQzo6
RGF0YVJlZmVyZW5jZSYsIGNvbnN0IFN0cmluZyYpPiYmKTsKKyAgICBQREZQbHVnaW5JZGVudGlm
aWVyIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKyNlbmRpZgor
CiAgICAgdm9pZCBjbGlja2VkTGluayhOU1VSTCAqKTsKKyNpZiAhRU5BQkxFKFVJX1BST0NFU1Nf
UERGX0hVRCkKICAgICB2b2lkIHNhdmVUb1BERigpOwogICAgIHZvaWQgb3BlbldpdGhOYXRpdmVB
cHBsaWNhdGlvbigpOworI2VuZGlmCiAgICAgdm9pZCB3cml0ZUl0ZW1zVG9QYXN0ZWJvYXJkKE5T
U3RyaW5nICpwYXN0ZWJvYXJkTmFtZSwgTlNBcnJheSAqaXRlbXMsIE5TQXJyYXkgKnR5cGVzKTsK
ICAgICB2b2lkIHNob3dEZWZpbml0aW9uRm9yQXR0cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0ZWRT
dHJpbmcgKiwgQ0dQb2ludCk7CiAgICAgdm9pZCBwZXJmb3JtV2ViU2VhcmNoKE5TU3RyaW5nICop
OwpAQCAtMTE4LDcgKzEzMSwxMCBAQCBwdWJsaWM6CiAKICAgICBXZWJDb3JlOjpGbG9hdFJlY3Qg
Y29udmVydEZyb21QREZWaWV3VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgY29u
c3Q7CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZyb21Sb290Vmlld1RvUERGVmlldyhj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFBvaW50IGNv
bnZlcnRGcm9tUERGVmlld1RvUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25z
dDsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IGNvbnZlcnRGcm9tUERGVmlld1RvUm9vdFZpZXcoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0OwogICAgIFdlYkNvcmU6OkludFJlY3QgYm91bmRz
T25TY3JlZW4oKSBjb25zdDsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IGZyYW1lRm9ySFVEKCkgY29u
c3Q7CiAKICAgICBib29sIHNob3dDb250ZXh0TWVudUF0UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmKTsKIApAQCAtMTU5LDcgKzE3NSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCB3YW50c1do
ZWVsRXZlbnRzKCkgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZvaWQgZ2VvbWV0cnlEaWRD
aGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcGx1Z2luU2l6ZSwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgY2xpcFJlY3QsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYgcGx1Z2lu
VG9Sb290Vmlld1RyYW5zZm9ybSkgZmluYWw7CiAgICAgdm9pZCBjb250ZW50c1NjYWxlRmFjdG9y
Q2hhbmdlZChmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCB2aXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wp
IGZpbmFsIHsgfQorICAgIHZvaWQgdmlzaWJpbGl0eURpZENoYW5nZShib29sKSBmaW5hbDsKICAg
ICB2b2lkIGZyYW1lRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCByZXF1ZXN0SUQpIGZpbmFsOwog
ICAgIHZvaWQgZnJhbWVEaWRGYWlsKHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCB3YXNDYW5jZWxs
ZWQpIGZpbmFsOwogICAgIHZvaWQgZGlkRXZhbHVhdGVKYXZhU2NyaXB0KHVpbnQ2NF90IHJlcXVl
c3RJRCwgY29uc3QgU3RyaW5nJiByZXN1bHQpIGZpbmFsOwpAQCAtMjYzLDcgKzI3OSw2IEBAIHBy
aXZhdGU6CiAgICAgTlNFdmVudCAqbnNFdmVudEZvcldlYk1vdXNlRXZlbnQoY29uc3QgV2ViTW91
c2VFdmVudCYpOwogICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tUGx1Z2luVG9QREZW
aWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7CiAgICAgV2ViQ29yZTo6SW50UG9p
bnQgY29udmVydEZyb21Sb290Vmlld1RvUGx1Z2luKGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jikg
Y29uc3Q7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZyb21QREZWaWV3VG9Sb290Vmll
dyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OwogICAgIAogICAgIGJvb2wgc3VwcG9y
dHNGb3JtcygpOwogICAgIGJvb2wgaXNGdWxsRnJhbWVQbHVnaW4oKSBjb25zdDsKQEAgLTQwMyw2
ICs0MTgsOSBAQCBwcml2YXRlOgogI2VuZGlmCiAKICNlbmRpZiAvLyBIQVZFKElOQ1JFTUVOVEFM
X1BERl9BUElTKQorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgUERGUGx1Z2lu
SWRlbnRpZmllciBtX2lkZW50aWZpZXI7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdp
bi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYv
UERGUGx1Z2luLm1tCShyZXZpc2lvbiAyNjYwOTApCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MzMsMTIgKzQz
MywxNiBAQCAtICh2b2lkKXBlcmZvcm1TcG90bGlnaHRTZWFyY2g6KE5TU3RyaW5nCiAKIC0gKHZv
aWQpb3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbgogeworI2lmICFFTkFCTEUoVUlfUFJPQ0VTU19Q
REZfSFVEKQogICAgIF9wZGZQbHVnaW4tPm9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oKTsKKyNl
bmRpZgogfQogCiAtICh2b2lkKXNhdmVUb1BERgogeworI2lmICFFTkFCTEUoVUlfUFJPQ0VTU19Q
REZfSFVEKQogICAgIF9wZGZQbHVnaW4tPnNhdmVUb1BERigpOworI2VuZGlmCiB9CiAKIC0gKHZv
aWQpcGRmTGF5ZXJDb250cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRy
b2xsZXIgY2xpY2tlZExpbmtXaXRoVVJMOihOU1VSTCAqKXVybApAQCAtNjAwLDcgKzYwNCwxMyBA
QCBpbmxpbmUgUERGUGx1Z2luOjpQREZQbHVnaW4oV2ViRnJhbWUmIGZyCiAjaWYgSEFWRShJTkNS
RU1FTlRBTF9QREZfQVBJUykKICAgICAsIG1faW5jcmVtZW50YWxQREZMb2FkaW5nRW5hYmxlZChX
ZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmluY3JlbWVu
dGFsUERGTG9hZGluZ0VuYWJsZWQoKSkKICNlbmRpZgorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BE
Rl9IVUQpCisgICAgLCBtX2lkZW50aWZpZXIoUERGUGx1Z2luSWRlbnRpZmllcjo6Z2VuZXJhdGUo
KSkKKyNlbmRpZgogeworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgW21fcGRm
TGF5ZXJDb250cm9sbGVyIHNldERpc3BsYXlzUERGSFVEQ29udHJvbGxlcjpOT107CisjZW5kaWYK
ICAgICBtX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKS5kZWxlZ2F0ZSA9IG1fcGRmTGF5ZXJDb250
cm9sbGVyRGVsZWdhdGUuZ2V0KCk7CiAgICAgbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkucGFy
ZW50TGF5ZXIgPSBtX2NvbnRlbnRMYXllci5nZXQoKTsKIApAQCAtNjQwLDYgKzY1MCwxMCBAQCBp
bmxpbmUgUERGUGx1Z2luOjpQREZQbHVnaW4oV2ViRnJhbWUmIGZyCiAKIFBERlBsdWdpbjo6flBE
RlBsdWdpbigpCiB7CisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBpZiAoYXV0
byogcGFnZSA9IG1fZnJhbWUucGFnZSgpKQorICAgICAgICBwYWdlLT5yZW1vdmVQREZIVUQoKnRo
aXMpOworI2VuZGlmCiB9CiAKICNpZiBIQVZFKElOQ1JFTUVOVEFMX1BERl9BUElTKQpAQCAtMTc3
Miw2ICsxNzg2LDExIEBAIHZvaWQgUERGUGx1Z2luOjpjb250ZW50c1NjYWxlRmFjdG9yQ2hhbmcK
ICAgICB1cGRhdGVQYWdlQW5kRGV2aWNlU2NhbGVGYWN0b3JzKCk7CiB9CiAKK0ludFJlY3QgUERG
UGx1Z2luOjpmcmFtZUZvckhVRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnZlcnRGcm9tUERG
Vmlld1RvUm9vdFZpZXcoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkpKTsKK30KKwogdm9pZCBQ
REZQbHVnaW46OmNhbGN1bGF0ZVNpemVzKCkKIHsKICAgICBpZiAoW21fcGRmRG9jdW1lbnQgaXNM
b2NrZWRdKSB7CkBAIC0xNzgyLDYgKzE4MDEsMTAgQEAgdm9pZCBQREZQbHVnaW46OmNhbGN1bGF0
ZVNpemVzKCkKIAogICAgIG1fZmlyc3RQYWdlSGVpZ2h0ID0gW21fcGRmRG9jdW1lbnQgcGFnZUNv
dW50XSA/IHN0YXRpY19jYXN0PHVuc2lnbmVkPihDR0NlaWxpbmcoW1ttX3BkZkRvY3VtZW50IHBh
Z2VBdEluZGV4OjBdIGJvdW5kc0ZvckJveDprUERGRGlzcGxheUJveENyb3BCb3hdLnNpemUuaGVp
Z2h0KSkgOiAwOwogICAgIHNldFBERkRvY3VtZW50U2l6ZShJbnRTaXplKFttX3BkZkxheWVyQ29u
dHJvbGxlciBjb250ZW50U2l6ZVJlc3BlY3Rpbmdab29tXSkpOworCisjaWYgRU5BQkxFKFVJX1BS
T0NFU1NfUERGX0hVRCkKKyAgICBtX2ZyYW1lLnBhZ2UoKS0+dXBkYXRlUERGSFVETG9jYXRpb24o
KnRoaXMsIGZyYW1lRm9ySFVEKCkpOworI2VuZGlmCiB9CiAKIGJvb2wgUERGUGx1Z2luOjppbml0
aWFsaXplKGNvbnN0IFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCkBAIC0xOTE2LDcgKzE5MzksMTMg
QEAgSW50UG9pbnQgUERGUGx1Z2luOjpjb252ZXJ0RnJvbVBERlZpZXdUbwogICAgIEludFBvaW50
IHBvaW50SW5QbHVnaW5Db29yZGluYXRlcyhwb2ludC54KCksIHNpemUoKS5oZWlnaHQoKSAtIHBv
aW50LnkoKSk7CiAgICAgcmV0dXJuIG1fcm9vdFZpZXdUb1BsdWdpblRyYW5zZm9ybS5pbnZlcnNl
KCkudmFsdWVPcihBZmZpbmVUcmFuc2Zvcm0oKSkubWFwUG9pbnQocG9pbnRJblBsdWdpbkNvb3Jk
aW5hdGVzKTsKIH0KLSAgICAKKworSW50UmVjdCBQREZQbHVnaW46OmNvbnZlcnRGcm9tUERGVmll
d1RvUm9vdFZpZXcoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJl
Y3RJblBsdWdpbkNvb3JkaW5hdGVzKHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCBy
ZWN0LmhlaWdodCgpKTsKKyAgICByZXR1cm4gbV9yb290Vmlld1RvUGx1Z2luVHJhbnNmb3JtLmlu
dmVyc2UoKS52YWx1ZU9yKEFmZmluZVRyYW5zZm9ybSgpKS5tYXBSZWN0KHJlY3RJblBsdWdpbkNv
b3JkaW5hdGVzKTsKK30KKwogSW50UG9pbnQgUERGUGx1Z2luOjpjb252ZXJ0RnJvbVJvb3RWaWV3
VG9QREZWaWV3KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBJbnRQb2ludCBw
b2ludEluUGx1Z2luQ29vcmRpbmF0ZXMgPSBtX3Jvb3RWaWV3VG9QbHVnaW5UcmFuc2Zvcm0ubWFw
UG9pbnQocG9pbnQpOwpAQCAtMTk0Nyw2ICsxOTc2LDE4IEBAIEludFJlY3QgUERGUGx1Z2luOjpi
b3VuZHNPblNjcmVlbigpIGNvbnMKICAgICByZXR1cm4gZnJhbWVWaWV3LT5jb250ZW50c1RvU2Ny
ZWVuKGVuY2xvc2luZ0ludFJlY3QocmVjdEluUm9vdFZpZXdDb29yZGluYXRlcykpOwogfQogCit2
b2lkIFBERlBsdWdpbjo6dmlzaWJpbGl0eURpZENoYW5nZShib29sIHZpc2libGUpCit7CisjaWYg
RU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBpZiAodmlzaWJsZSkKKyAgICAgICAgbV9m
cmFtZS5wYWdlKCktPmNyZWF0ZVBERkhVRCgqdGhpcywgZnJhbWVGb3JIVUQoKSk7CisgICAgZWxz
ZQorICAgICAgICBtX2ZyYW1lLnBhZ2UoKS0+cmVtb3ZlUERGSFVEKCp0aGlzKTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKHZpc2libGUpOworI2VuZGlmCit9CisKIHZvaWQgUERGUGx1Z2luOjpn
ZW9tZXRyeURpZENoYW5nZShjb25zdCBJbnRTaXplJiBwbHVnaW5TaXplLCBjb25zdCBJbnRSZWN0
JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtKQogewog
ICAgIGlmIChzaXplKCkgPT0gcGx1Z2luU2l6ZSAmJiBwbHVnaW5WaWV3KCktPnBhZ2VTY2FsZUZh
Y3RvcigpID09IFttX3BkZkxheWVyQ29udHJvbGxlciBjb250ZW50U2NhbGVGYWN0b3JdKQpAQCAt
MjM5Miw2ICsyNDMzLDMxIEBAIGJvb2wgUERGUGx1Z2luOjpwbHVnaW5IYW5kbGVzQ29udGVudE9m
ZnMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQp
CisKK3ZvaWQgUERGUGx1Z2luOjp6b29tSW4oKQoreworICAgIFttX3BkZkxheWVyQ29udHJvbGxl
ciB6b29tSW46bmlsXTsKK30KKwordm9pZCBQREZQbHVnaW46Onpvb21PdXQoKQoreworICAgIFtt
X3BkZkxheWVyQ29udHJvbGxlciB6b29tT3V0Om5pbF07Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpz
YXZlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJiwgY29uc3QgVVJMJiwgY29u
c3QgSVBDOjpEYXRhUmVmZXJlbmNlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgTlNE
YXRhICpkYXRhID0gbGl2ZURhdGEoKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihtX3N1Z2dlc3Rl
ZEZpbGVuYW1lLCBtX2ZyYW1lLnVybCgpLCBJUEM6OiBEYXRhUmVmZXJlbmNlKHN0YXRpY19jYXN0
PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmJ5dGVzKSwgZGF0YS5sZW5ndGgpKTsKK30KKwordm9pZCBQ
REZQbHVnaW46Om9wZW5XaXRoUHJldmlldyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0
cmluZyYsIEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwgY29uc3Qg
U3RyaW5nJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgTlNEYXRhICpkYXRhID0gbGl2
ZURhdGEoKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihtX3N1Z2dlc3RlZEZpbGVuYW1lLCBtX2Zy
YW1lLmluZm8oKSwgSVBDOjogRGF0YVJlZmVyZW5jZSB7IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4
X3QqPihkYXRhLmJ5dGVzKSwgZGF0YS5sZW5ndGggfSwgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmlu
ZygpKTsKK30KKworI2Vsc2UgLy8gRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKICAgICAKIHZv
aWQgUERGUGx1Z2luOjpzYXZlVG9QREYoKQogewpAQCAtMjQyNCw2ICsyNDkwLDggQEAgdm9pZCBQ
REZQbHVnaW46Om9wZW5XaXRoTmF0aXZlQXBwbGljYXRpbwogICAgIG1fZnJhbWUucGFnZSgpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6Ok9wZW5QREZGcm9tVGVtcG9yYXJ5Rm9sZGVyV2l0
aE5hdGl2ZUFwcGxpY2F0aW9uKG1fZnJhbWUuaW5mbygpLCBtX3RlbXBvcmFyeVBERlVVSUQpKTsK
IH0KIAorI2VuZGlmIC8vIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKIHZvaWQgUERGUGx1
Z2luOjp3cml0ZUl0ZW1zVG9QYXN0ZWJvYXJkKE5TU3RyaW5nICpwYXN0ZWJvYXJkTmFtZSwgTlNB
cnJheSAqaXRlbXMsIE5TQXJyYXkgKnR5cGVzKQogewogICAgIGF1dG8gcGFzdGVib2FyZFR5cGVz
ID0gbWFrZVZlY3RvcjxTdHJpbmc+KHR5cGVzKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAyNjYwOTApCisrKyBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTEyMywxMiArNTEyMywxMiBAQCB2b2lkIFdlYlBhZ2U6OmRpZEZpbmlzaFByaW50T3BlcmF0aW9u
KGNvCiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKSAmJiAhRU5BQkxFKFVJ
X1BST0NFU1NfUERGX0hVRCkKIHZvaWQgV2ViUGFnZTo6c2F2ZVBERlRvRmlsZUluRG93bmxvYWRz
Rm9sZGVyKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIGNvbnN0IFVSTCYgb3JpZ2lu
YXRpbmdVUkwsIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKICAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNhdmVQREZUb0ZpbGVJbkRvd25sb2Fkc0Zv
bGRlcihzdWdnZXN0ZWRGaWxlbmFtZSwgb3JpZ2luYXRpbmdVUkwsIElQQzo6RGF0YVJlZmVyZW5j
ZShkYXRhLCBzaXplKSkpOwogfQogCi0jaWYgUExBVEZPUk0oQ09DT0EpCiB2b2lkIFdlYlBhZ2U6
OnNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oY29u
c3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywg
Y29uc3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplLCBjb25zdCBTdHJpbmcmIHBk
ZlVVSUQpCiB7CiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTYXZlUERGVG9UZW1w
b3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKHN1Z2dlc3RlZEZpbGVuYW1l
LCBmcmFtZUluZm8sIElQQzo6RGF0YVJlZmVyZW5jZShkYXRhLCBzaXplKSwgcGRmVVVJRCkpOwpJ
bmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNp
b24gMjY2MDkwKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiTWVzc2FnZVJlY2Vp
dmVyLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgogI2luY2x1ZGUgIk9wdGlvbmFsQ2Fs
bGJhY2tJRC5oIgorI2luY2x1ZGUgIlBERlBsdWdpbklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJQ
bHVnaW4uaCIKICNpbmNsdWRlICJQb2xpY3lEZWNpc2lvbi5oIgogI2luY2x1ZGUgIlNhbmRib3hF
eHRlbnNpb24uaCIKQEAgLTM0NSw2ICszNDYsMTYgQEAgcHVibGljOgogCiAgICAgdm9pZCBjZW50
ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhKCk7CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZf
SFVEKQorICAgIHZvaWQgY3JlYXRlUERGSFVEKFBERlBsdWdpbiYsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKTsKKyAgICB2b2lkIHVwZGF0ZVBERkhVRExvY2F0aW9uKFBERlBsdWdpbiYsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIHJlbW92ZVBERkhVRChQREZQbHVnaW4mKTsK
KyAgICB2b2lkIHpvb21QREZJbihQREZQbHVnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHpvb21Q
REZPdXQoUERGUGx1Z2luSWRlbnRpZmllcik7CisgICAgdm9pZCBzYXZlUERGKFBERlBsdWdpbklk
ZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJiwgY29uc3QgVVJM
JiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik+JiYpOworICAgIHZvaWQgb3BlblBERldpdGhQ
cmV2aWV3KFBERlBsdWdpbklkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3Qg
U3RyaW5nJiwgRnJhbWVJbmZvRGF0YSYmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25z
dCBTdHJpbmcmKT4mJik7CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQg
d2lsbENvbW1pdExheWVyVHJlZShSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbiYpOwogICAgIHZv
aWQgZGlkRmx1c2hMYXllclRyZWVBdFRpbWUoTW9ub3RvbmljVGltZSk7CkBAIC0xMDc0LDkgKzEw
ODUsOCBAQCBwdWJsaWM6CiAgICAgTlNEaWN0aW9uYXJ5ICpkYXRhRGV0ZWN0aW9uQ29udGV4dCgp
IGNvbnN0IHsgcmV0dXJuIG1fZGF0YURldGVjdGlvbkNvbnRleHQuZ2V0KCk7IH0KICNlbmRpZgog
CisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pICYmICFFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVE
KQogICAgIHZvaWQgc2F2ZVBERlRvRmlsZUluRG93bmxvYWRzRm9sZGVyKGNvbnN0IFN0cmluZyYg
c3VnZ2VzdGVkRmlsZW5hbWUsIGNvbnN0IFVSTCYgb3JpZ2luYXRpbmdVUkwsIGNvbnN0IHVpbnQ4
X3QqIGRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKICAg
ICB2b2lkIHNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRp
b24oY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgRnJhbWVJbmZvRGF0YSYmLCBjb25z
dCB1aW50OF90KiBkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUsIGNvbnN0IFN0cmluZyYgcGRmVVVJ
RCk7CiAjZW5kaWYKIApAQCAtMTc5MSw2ICsxODAxLDEwIEBAIHByaXZhdGU6CiAKICAgICBXZWJD
b3JlOjpDb2xvciBtX3VuZGVybGF5Q29sb3I7CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZf
SFVEKQorICAgIEhhc2hNYXA8UERGUGx1Z2luSWRlbnRpZmllciwgV2Vha1B0cjxQREZQbHVnaW4+
PiBtX3BkZlBsdWdJbnNXaXRoSFVEOworI2VuZGlmCisKICAgICBib29sIG1faXNJblJlZG8geyBm
YWxzZSB9OwogICAgIGJvb2wgbV9pc0Nsb3NlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3RhYlRv
TGlua3MgeyBmYWxzZSB9OwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyNjYwOTApCisrKyBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCSh3b3JraW5n
IGNvcHkpCkBAIC01NzYsNiArNTc2LDEzIEBAIEdlbmVyYXRlU3ludGhldGljRWRpdGluZ0NvbW1h
bmQoZW51bTp1aW4KIAogICAgIFNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnNMb2FkaW5nKQog
CisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBab29tUERGSW4oV2ViS2l0OjpQ
REZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCisgICAgWm9vbVBERk91dChXZWJLaXQ6OlBE
RlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikKKyAgICBTYXZlUERGKFdlYktpdDo6UERGUGx1
Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKSAtPiAoU3RyaW5nIGZpbGVuYW1lLCBVUkwgdXJsLCBJ
UEM6OkRhdGFSZWZlcmVuY2UgZGF0YSkgQXN5bmMKKyAgICBPcGVuUERGV2l0aFByZXZpZXcoV2Vi
S2l0OjpQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpIC0+IChTdHJpbmcgZmlsZW5hbWUs
IHN0cnVjdCBXZWJLaXQ6OkZyYW1lSW5mb0RhdGEgZnJhbWVJbmZvLCBJUEM6OkRhdGFSZWZlcmVu
Y2UgZGF0YSwgU3RyaW5nIHV1aWQpIEFzeW5jCisjZW5kaWYKKwogICAgIFVwZGF0ZUN1cnJlbnRN
b2RpZmllclN0YXRlKE9wdGlvblNldDxXZWJDb3JlOjpQbGF0Zm9ybUV2ZW50OjpNb2RpZmllcj4g
bW9kaWZpZXJzKQogICAgIFNpbXVsYXRlRGV2aWNlT3JpZW50YXRpb25DaGFuZ2UoZG91YmxlIGFs
cGhhLCBkb3VibGUgYmV0YSwgZG91YmxlIGdhbW1hKQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQkocmV2aXNpb24gMjY2
MDkwKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbXBvcnQgIkVkaXRpbmdSYW5n
ZS5oIgogI2ltcG9ydCAiRWRpdG9yU3RhdGUuaCIKICNpbXBvcnQgIkZvbnRJbmZvLmgiCisjaW1w
b3J0ICJGcmFtZUluZm9EYXRhLmgiCiAjaW1wb3J0ICJJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1
bHQuaCIKICNpbXBvcnQgIlBERktpdEltcG9ydHMuaCIKICNpbXBvcnQgIlBERlBsdWdpbi5oIgpA
QCAtMTA1MSw3ICsxMDUyLDYyIEBAIHZvaWQgV2ViUGFnZTo6c2V0QWNjZW50Q29sb3IoV2ViQ29y
ZTo6Q28KICAgICBbTlNBcHAgX3NldEFjY2VudENvbG9yOmNvbG9yLmlzVmFsaWQoKSA/IFdlYkNv
cmU6Om5zQ29sb3IoY29sb3IpIDogbmlsXTsKIH0KIAotI2VuZGlmCisjZW5kaWYgLy8gSEFWRShB
UFBfQUNDRU5UX0NPTE9SUykKKworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKK3Zv
aWQgV2ViUGFnZTo6em9vbVBERkluKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikKK3sK
KyAgICBhdXRvIHBkZlBsdWdpbiA9IG1fcGRmUGx1Z0luc1dpdGhIVUQuZ2V0KGlkZW50aWZpZXIp
OworICAgIGlmICghcGRmUGx1Z2luKQorICAgICAgICByZXR1cm47CisgICAgcGRmUGx1Z2luLT56
b29tSW4oKTsKK30KKwordm9pZCBXZWJQYWdlOjp6b29tUERGT3V0KFBERlBsdWdpbklkZW50aWZp
ZXIgaWRlbnRpZmllcikKK3sKKyAgICBhdXRvIHBkZlBsdWdpbiA9IG1fcGRmUGx1Z0luc1dpdGhI
VUQuZ2V0KGlkZW50aWZpZXIpOworICAgIGlmICghcGRmUGx1Z2luKQorICAgICAgICByZXR1cm47
CisgICAgcGRmUGx1Z2luLT56b29tT3V0KCk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6c2F2ZVBERihQ
REZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29u
c3QgU3RyaW5nJiwgY29uc3QgVVJMJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik+JiYgY29t
cGxldGlvbkhhbmRsZXIpCit7CisgICAgYXV0byBwZGZQbHVnaW4gPSBtX3BkZlBsdWdJbnNXaXRo
SFVELmdldChpZGVudGlmaWVyKTsKKyAgICBpZiAoIXBkZlBsdWdpbikKKyAgICAgICAgcmV0dXJu
IGNvbXBsZXRpb25IYW5kbGVyKHsgfSwgeyB9LCB7IH0pOworICAgIHBkZlBsdWdpbi0+c2F2ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6b3BlblBERldp
dGhQcmV2aWV3KFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChjb25zdCBTdHJpbmcmLCBGcmFtZUluZm9EYXRhJiYsIGNvbnN0IElQQzo6RGF0YVJl
ZmVyZW5jZSYsIGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGF1
dG8gcGRmUGx1Z2luID0gbV9wZGZQbHVnSW5zV2l0aEhVRC5nZXQoaWRlbnRpZmllcik7CisgICAg
aWYgKCFwZGZQbHVnaW4pCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0sIHsg
fSwgeyB9LCB7IH0pOworICAgIHBkZlBsdWdpbi0+b3BlbldpdGhQcmV2aWV3KFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBXZWJQYWdlOjpjcmVhdGVQREZIVUQoUERGUGx1
Z2luJiBwbHVnaW4sIGNvbnN0IEludFJlY3QmIGJvdW5kaW5nQm94KQoreworICAgIGF1dG8gYWRk
UmVzdWx0ID0gbV9wZGZQbHVnSW5zV2l0aEhVRC5hZGQocGx1Z2luLmlkZW50aWZpZXIoKSwgbWFr
ZVdlYWtQdHIocGx1Z2luKSk7CisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNyZWF0ZVBERkhVRChwbHVnaW4uaWRlbnRp
ZmllcigpLCBib3VuZGluZ0JveCkpOworfQorCit2b2lkIFdlYlBhZ2U6OnVwZGF0ZVBERkhVRExv
Y2F0aW9uKFBERlBsdWdpbiYgcGx1Z2luLCBjb25zdCBJbnRSZWN0JiBib3VuZGluZ0JveCkKK3sK
KyAgICBpZiAobV9wZGZQbHVnSW5zV2l0aEhVRC5jb250YWlucyhwbHVnaW4uaWRlbnRpZmllcigp
KSkKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpVcGRhdGVQREZIVURMb2Nh
dGlvbihwbHVnaW4uaWRlbnRpZmllcigpLCBib3VuZGluZ0JveCkpOworfQorCit2b2lkIFdlYlBh
Z2U6OnJlbW92ZVBERkhVRChQREZQbHVnaW4mIHBsdWdpbikKK3sKKyAgICBpZiAobV9wZGZQbHVn
SW5zV2l0aEhVRC5yZW1vdmUocGx1Z2luLmlkZW50aWZpZXIoKSkpCisgICAgICAgIHNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6UmVtb3ZlUERGSFVEKHBsdWdpbi5pZGVudGlmaWVyKCkpKTsK
K30KKworI2VuZGlmIC8vIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407157</attachid>
            <date>2020-08-24 18:40:52 -0700</date>
            <delta_ts>2020-08-24 19:40:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215780-20200824184050.patch</filename>
            <type>text/plain</type>
            <size>64664</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjYwOTApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA4LTI0ICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBQREYgaGVhZHMtdXAgZGlz
cGxheSB0byBVSSBwcm9jZXNzIG9uIG1hY09TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU3ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU4NzE1
ODQ3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
d3RmL1BsYXRmb3JtSGF2ZS5oOgorCiAyMDIwLTA4LTI0ICBBbGV4IENocmlzdGVuc2VuICA8YWNo
cmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgSW1wbGVtZW50IFJlcXVlc3QvUmVzcG9u
c2UgY29uc3VtaW5nIGFzIEZvcm1EYXRhCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVu
YWJsZUNvY29hLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGVD
b2NvYS5oCShyZXZpc2lvbiAyNjYwOTApCisrKyBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJs
ZUNvY29hLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw2ICsyMjgsMTAgQEAKICNkZWZpbmUgRU5B
QkxFX0dQVV9EUklWRVJfUFJFV0FSTUlORyAxCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKE1BQykg
JiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAwMDAKKyNkZWZpbmUgRU5B
QkxFX1VJX1BST0NFU1NfUERGX0hVRCAxCisjZW5kaWYKKwogI2lmICFkZWZpbmVkKEVOQUJMRV9J
TkRFWEVEX0RBVEFCQVNFKQogI2RlZmluZSBFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSAxCiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9OU0ltYWdlU1BJLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL05TSW1hZ2VTUEkuaAko
cmV2aXNpb24gMjY2MDkwKQorKysgU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL05TSW1h
Z2VTUEkuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogTlNfQVNTVU1FX05PTk5V
TExfQkVHSU4KIAogQGludGVyZmFjZSBOU0ltYWdlICgpCisrIChpbnN0YW5jZXR5cGUpaW1hZ2VX
aXRoSW1hZ2VSZXA6KE5TSW1hZ2VSZXAgKilpbWFnZVJlcDsKIC0gKHZvaWQpbG9ja0ZvY3VzV2l0
aFJlY3Q6KE5TUmVjdClyZWN0IGNvbnRleHQ6KG51bGxhYmxlIE5TR3JhcGhpY3NDb250ZXh0ICop
Y29udGV4dCBoaW50czoobnVsbGFibGUgTlNEaWN0aW9uYXJ5ICopaGludHMgZmxpcHBlZDooQk9P
TClmbGlwcGVkOwogQGVuZAogCkBAIC00NSw2ICs0NiwxMyBAQCBAaW50ZXJmYWNlIE5TSW1hZ2Ug
KE5TU3lzdGVtU3ltYm9scykKIAogTlNfQVNTVU1FX05PTk5VTExfRU5ECiAKK1dURl9FWFRFUk5f
Q19CRUdJTgorCitleHRlcm4gY29uc3QgTlNTdHJpbmcgKk5TSW1hZ2VBbHRlcm5hdGVDcml0ZXJp
b25Gb250OworZXh0ZXJuIGNvbnN0IE5TU3RyaW5nICpOU0ltYWdlQWx0ZXJuYXRlQ3JpdGVyaW9u
U3ltYm9sU2NhbGU7CisKK1dURl9FWFRFUk5fQ19FTkQKKwogI2VuZGlmCiAKICNpZiBIQVZFKEFM
VEVSTkFURV9JQ09OUykKQEAgLTU2LDYgKzY0LDYgQEAgZXh0ZXJuIGNvbnN0IE5TSW1hZ2VIaW50
S2V5IE5TSW1hZ2VIaW50UwogCiBOU19BU1NVTUVfTk9OTlVMTF9FTkQKIAotI2VuZGlmCisjZW5k
aWYgLy8gSEFWRShBTFRFUk5BVEVfSUNPTlMpCiAKLSNlbmRpZgorI2VuZGlmIC8vIFVTRShBUFBM
RV9JTlRFUk5BTF9TREspCkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjY2MDkwKQorKysgU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw5NiBAQAorMjAyMC0w
OC0yNCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAg
ICAgIE1vdmUgUERGIGhlYWRzLXVwIGRpc3BsYXkgdG8gVUkgcHJvY2VzcyBvbiBtYWNPUworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1NzgwCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS81ODcxNTg0Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGhhcyBtYW55IGJlbmVmaXRzIGluY2x1ZGluZyB0
aGUgb25lIGluIHRoZSByYWRhciwgdGVzdGFiaWxpdHksIGFuZCBtb3ZpbmcgV2ViS2l0LXNwZWNp
ZmljIGNvZGUgZnJvbSBQREZLaXQgdG8gV2ViS2l0LgorCisgICAgICAgIE5vdyB0aGF0IHRoZSBI
VUQgaXMgZGlzcGxheWVkIGluIHRoZSBVSSBwcm9jZXNzIGluc3RlYWQgb2YgaW4gdGhlIHdlYiBj
b250ZW50LCB6b29taW5nIGluIGtlZXBzIHRoZSBIVUQgdGhlIHNhbWUgc2l6ZS4KKyAgICAgICAg
QSAzZC10cmFuc2Zvcm1lZCBpZnJhbWUgd2l0aCBhIFBERiBpbiBpdCBub3cgc2hvd3MgdGhlIEhV
RCBpbiB0aGUgcGxhY2UgeW91IGNhbiBjbGljayBvbiBpdCwgaW5zdGVhZCBvZiBpbiB0aGUgdHJh
bnNmb3JtZWQgUERGLgorICAgICAgICBBbHNvLCBtb3ZpbmcgdGhlIG1vdXNlIHRvIHRoZSBIVUQg
d2l0aGluIHRoZSBmaXJzdCAzIHNlY29uZHMgcHJldmVudHMgaXQgZnJvbSBoaWRpbmcsIHdoaWNo
IGl0IGRvZXMgd2hlbiB0aGUgbW91c2UgbGVhdmVzIHRoZSBIVUQuCisgICAgICAgIFRoZSByZXN0
IG9mIHRoZSBiZWhhdmlvciBJIHRoaW5rIHNob3VsZCBiZSB0aGUgc2FtZS4gIE1vc3QgdXNlcnMg
c2hvdWxkIG5vdCBub3RpY2UgYW55IGRpZmZlcmVuY2UuCisKKyAgICAgICAgRnVuY3Rpb25hbGl0
eSBjb3ZlcmVkIGJ5IEFQSSB0ZXN0cywgdGhlIGZpcnN0IHRlc3RzIGZvciBQREYgY29udGVudCBp
bnRlcmFjdGlvbiEKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAgICgtW1dLVmlldyBfY3JlYXRl
UERGSFVEOnJlY3Q6XSk6CisgICAgICAgICgtW1dLVmlldyBfcGRmSFVEOmNoYW5nZWRMb2NhdGlv
bjpdKToKKyAgICAgICAgKC1bV0tWaWV3IF9yZW1vdmVQREZIVUQ6XSk6CisgICAgICAgICgtW1dL
VmlldyBfcmVtb3ZlQWxsUERGSFVEc10pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dL
V2ViVmlld01hYy5tbToKKyAgICAgICAgKC1bV0tXZWJWaWV3IG1vdXNlTW92ZWQ6XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBtb3VzZURvd246XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBtb3Vz
ZVVwOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NyZWF0ZVBERkhVRDpyZWN0Ol0pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX3BkZkhVRDpjaGFuZ2VkTG9jYXRpb246XSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfcmVtb3ZlUERGSFVEOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3JlbW92
ZUFsbFBERkhVRHNdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdQcml2
YXRlRm9yVGVzdGluZ01hYy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmll
d1Rlc3RpbmdNYWMubW06CisgICAgICAgICgtW1dLV2ViVmlldyBwZGZIVURzXSk6CisgICAgICAg
ICogVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0Nv
Y29hL1dlYlZpZXdJbXBsLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y3JlYXRl
UERGSFVEKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0ZVBERkhVRExvY2F0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnJlbW92ZVBERkhVRCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZW1vdmVBbGxQREZIVURzKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvUGFnZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFt
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cHJvY2Vzc0RpZFRlcm1pbmF0ZSk6
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XZWJQ
YWdlUHJveHlJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2F2ZVBERlRv
VGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6b3BlblBERkZyb21UZW1wb3JhcnlGb2xkZXJX
aXRoTmF0aXZlQXBwbGljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMv
UGFnZUNsaWVudEltcGxNYWMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJ
bXBsTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlUERGSFVE
KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnVwZGF0ZVBERkhVRExvY2F0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnJlbW92ZVBERkhVRCk6CisgICAg
ICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpyZW1vdmVBbGxQREZIVURzKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5OjpzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxp
Y2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjcmVhdGVQREZIVUQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlbW92ZVBERkhVRCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6dXBkYXRlUERGSFVETG9jYXRpb24pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnBkZlpvb21Jbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6cGRmWm9vbU91dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGRmU2F2
ZVRvUERGKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZGZPcGVuV2l0aFByZXZp
ZXcpOgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGTGF5ZXJDb250cm9sbGVyU1BJLmg6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaDoKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbToKKyAgICAgICAgKC1bV0tQREZMYXllckNv
bnRyb2xsZXJEZWxlZ2F0ZSBvcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uXSk6CisgICAgICAgICgt
W1dLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgc2F2ZVRvUERGXSk6CisgICAgICAgIChXZWJL
aXQ6OlBERlBsdWdpbjo6UERGUGx1Z2luKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjp+
UERGUGx1Z2luKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpmcmFtZUZvckhVRCBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6Y2FsY3VsYXRlU2l6ZXMpOgorICAgICAg
ICAoV2ViS2l0OjpQREZQbHVnaW46OmNvbnZlcnRGcm9tUERGVmlld1RvUm9vdFZpZXcgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnZpc2liaWxpdHlEaWRDaGFuZ2UpOgorICAg
ICAgICAoV2ViS2l0OjpQREZQbHVnaW46Onpvb21Jbik6CisgICAgICAgIChXZWJLaXQ6OlBERlBs
dWdpbjo6em9vbU91dCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6c2F2ZSk6CisgICAg
ICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6b3BlbldpdGhQcmV2aWV3KToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdl
cy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6Onpvb21QREZJbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6Onpvb21QREZPdXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzYXZlUERGKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6b3BlblBERldpdGhQcmV2aWV3KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6Y3JlYXRlUERGSFVEKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6dXBkYXRlUERGSFVETG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpyZW1v
dmVQREZIVUQpOgorCiAyMDIwLTA4LTI0ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBw
bGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGZpeCB0aGUgaW50ZXJuYWwgaU9TIDEzLjQg
YnVpbGQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQkocmV2
aXNpb24gMjY2MDkwKQorKysgU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5w
eQkod29ya2luZyBjb3B5KQpAQCAtMjQzLDYgKzI0Myw3IEBAIGRlZiB0eXBlc190aGF0X2Nhbm5v
dF9iZV9mb3J3YXJkX2RlY2xhcmUKICAgICAgICAgJ1dlYktpdDo6TUROU1JlZ2lzdGVySWRlbnRp
ZmllcicsCiAgICAgICAgICdXZWJLaXQ6Ok1lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZUlkZW50aWZp
ZXInLAogICAgICAgICAnV2ViS2l0OjpNZWRpYVJlY29yZGVySWRlbnRpZmllcicsCisgICAgICAg
ICdXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpQbGF5YmFj
a1Nlc3Npb25Db250ZXh0SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlBsdWdpblByb2Nl
c3NUeXBlJywKICAgICAgICAgJ1dlYktpdDo6UmVtb3RlQXVkaW9EZXN0aW5hdGlvbklkZW50aWZp
ZXInLApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkocmV2aXNpb24gMjY2
MDkwKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkxheWVyVHJl
ZUNvbnRleHQuaCIKKyNpbmNsdWRlICJQREZQbHVnaW5JZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAi
U2FtZURvY3VtZW50TmF2aWdhdGlvblR5cGUuaCIKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAu
aCIKICNpbmNsdWRlICJXZWJDb2xvclBpY2tlci5oIgpAQCAtMjQyLDYgKzI0MywxMyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWxQcm92aXNpb25hbExvYWRGb3JNYWluRnJhbWUo
KSB7IH07CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdExvYWRGb3JNYWluRnJhbWUoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgYm9vbCB1c2VDdXN0b21Db250ZW50UHJvdmlkZXIpID0gMDsKIAor
I2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVBE
RkhVRChQREZQbHVnaW5JZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVQREZIVURMb2NhdGlvbihQREZQbHVnaW5JZGVudGlmaWVy
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVQ
REZIVUQoUERGUGx1Z2luSWRlbnRpZmllcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVB
bGxQREZIVURzKCkgPSAwOworI2VuZGlmCisgICAgCiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZURv
d25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5JikgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGhh
bmRsZVJ1bk9wZW5QYW5lbChXZWJQYWdlUHJveHkqLCBXZWJGcmFtZVByb3h5KiwgY29uc3QgRnJh
bWVJbmZvRGF0YSYsIEFQSTo6T3BlblBhbmVsUGFyYW1ldGVycyosIFdlYk9wZW5QYW5lbFJlc3Vs
dExpc3RlbmVyUHJveHkqKSB7IHJldHVybiBmYWxzZTsgfQpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAyNjYwOTApCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzcyLDE1
ICs0NzcyLDE0IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUKICAg
ICAgICAgICAgIG1fcGx1Z2luU2NhbGVGYWN0b3IgPSAxOwogICAgICAgICAgICAgbV9tYWluRnJh
bWVQbHVnaW5IYW5kbGVzUGFnZVNjYWxlR2VzdHVyZSA9IGZhbHNlOwogICAgICAgICB9Ci0gICAg
fQotCiAjaWYgRU5BQkxFKFBPSU5URVJfTE9DSykKLSAgICBpZiAoZnJhbWUtPmlzTWFpbkZyYW1l
KCkpCiAgICAgICAgIHJlcXVlc3RQb2ludGVyVW5sb2NrKCk7CiAjZW5kaWYKLQotICAgIGlmIChm
cmFtZS0+aXNNYWluRnJhbWUoKSkKICAgICAgICAgcGFnZUNsaWVudCgpLnNldE1vdXNlRXZlbnRQ
b2xpY3kobW91c2VFdmVudFBvbGljeSk7CisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkK
KyAgICAgICAgcGFnZUNsaWVudCgpLnJlbW92ZUFsbFBERkhVRHMoKTsKKyNlbmRpZgorICAgIH0K
IAogICAgIG1fcGFnZUxvYWRTdGF0ZS5jb21taXRDaGFuZ2VzKCk7CiAgICAgaWYgKG1fbG9hZGVy
Q2xpZW50KQpAQCAtNzQ1MSw2ICs3NDUwLDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnByb2Nlc3NE
aWRUZXJtaW5hdGUoUAogCiAgICAgcmVzZXRTdGF0ZUFmdGVyUHJvY2Vzc0V4aXRlZChyZWFzb24p
OwogICAgIHN0b3BBbGxVUkxTY2hlbWVUYXNrcyhtX3Byb2Nlc3MucHRyKCkpOworI2lmIEVOQUJM
RShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgcGFnZUNsaWVudCgpLnJlbW92ZUFsbFBERkhVRHMo
KTsKKyNlbmRpZgogCiAgICAgLy8gRm9yIGJyaW5ndXAgb2YgcHJvY2VzcyBzd2FwcGluZywgTmF2
aWdhdGlvblN3YXAgdGVybWluYXRpb24gd2lsbCBub3QgZ28gb3V0IHRvIGNsaWVudHMuCiAgICAg
Ly8gSWYgaXQgZG9lcyAqZHVyaW5nKiBwcm9jZXNzIHN3YXBwaW5nLCBhbmQgdGhlIGNsaWVudCB0
cmlnZ2VycyBhIHJlbG9hZCwgdGhhdCBjYXVzZXMgYml6YXJyZSBXZWJLaXQgcmUtZW50cnkuCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMjY2MDkw
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCiAjaW5j
bHVkZSAiTWVzc2FnZVNlbmRlci5oIgogI2luY2x1ZGUgIk5vdGlmaWNhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0TWFuYWdlclByb3h5LmgiCisjaW5jbHVkZSAiUERGUGx1Z2luSWRlbnRpZmllci5oIgog
I2luY2x1ZGUgIlBhZ2VMb2FkU3RhdGUuaCIKICNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzQXR0cmli
dXRlcy5oIgogI2luY2x1ZGUgIlBvbGljeURlY2lzaW9uLmgiCkBAIC0xMzExLDEwICsxMzEyLDEy
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2F2ZURhdGFUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcihT
dHJpbmcmJiBzdWdnZXN0ZWRGaWxlbmFtZSwgU3RyaW5nJiYgbWltZVR5cGUsIFVSTCYmIG9yaWdp
bmF0aW5nVVJMLCBBUEk6OkRhdGEmKTsKICAgICB2b2lkIHNhdmVQREZUb0ZpbGVJbkRvd25sb2Fk
c0ZvbGRlcihTdHJpbmcmJiBzdWdnZXN0ZWRGaWxlbmFtZSwgVVJMJiYgb3JpZ2luYXRpbmdVUkws
IGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpOwotI2lmIFBMQVRGT1JNKENPQ09BKQorI2lmIEVO
QUJMRShQREZLSVRfUExVR0lOKQogICAgIHZvaWQgc2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5k
T3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1l
LCBGcmFtZUluZm9EYXRhJiYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYsIGNvbnN0IFN0cmlu
ZyYgcGRmVVVJRCk7CisjaWYgIUVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCiAgICAgdm9pZCBv
cGVuUERGRnJvbVRlbXBvcmFyeUZvbGRlcldpdGhOYXRpdmVBcHBsaWNhdGlvbihGcmFtZUluZm9E
YXRhJiYsIGNvbnN0IFN0cmluZyYgcGRmVVVJRCk7CiAjZW5kaWYKKyNlbmRpZgogCiAjaWYgRU5B
QkxFKFBERktJVF9QTFVHSU4pCiAgICAgdm9pZCBzaG93UERGQ29udGV4dE1lbnUoY29uc3QgV2Vi
S2l0OjpQREZDb250ZXh0TWVudSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8aW50
MzJfdD4mJik+JiYpOwpAQCAtMTgwNiw2ICsxODA5LDE2IEBAIHB1YmxpYzoKICAgICBib29sIGNh
blVzZUNyZWRlbnRpYWxTdG9yYWdlKCkgeyByZXR1cm4gbV9jYW5Vc2VDcmVkZW50aWFsU3RvcmFn
ZTsgfQogICAgIHZvaWQgc2V0Q2FuVXNlQ3JlZGVudGlhbFN0b3JhZ2UoYm9vbCk7CiAKKyNpZiBF
TkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIHZvaWQgY3JlYXRlUERGSFVEKFBERlBsdWdp
bklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIHVwZGF0ZVBE
RkhVRExvY2F0aW9uKFBERlBsdWdpbklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
KTsKKyAgICB2b2lkIHJlbW92ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lk
IHBkZlpvb21JbihQREZQbHVnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHBkZlpvb21PdXQoUERG
UGx1Z2luSWRlbnRpZmllcik7CisgICAgdm9pZCBwZGZTYXZlVG9QREYoUERGUGx1Z2luSWRlbnRp
Zmllcik7CisgICAgdm9pZCBwZGZPcGVuV2l0aFByZXZpZXcoUERGUGx1Z2luSWRlbnRpZmllcik7
CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBXZWJQYWdlUHJveHkoUGFnZUNsaWVudCYsIFdlYlBy
b2Nlc3NQcm94eSYsIFJlZjxBUEk6OlBhZ2VDb25maWd1cmF0aW9uPiYmKTsKICAgICB2b2lkIHBs
YXRmb3JtSW5pdGlhbGl6ZSgpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjY2MDkwKQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBA
IC00MzMsOSArNDMzLDggQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBTYXZlUmVj
ZW50U2VhcmNoZXMoU3RyaW5nIG5hbWUsIFZlY3RvcjxXZWJDb3JlOjpSZWNlbnRTZWFyY2g+IHNl
YXJjaEl0ZW1zKQogICAgIExvYWRSZWNlbnRTZWFyY2hlcyhTdHJpbmcgbmFtZSkgLT4gKFZlY3Rv
cjxXZWJDb3JlOjpSZWNlbnRTZWFyY2g+IHJlc3VsdCkgU3luY2hyb25vdXMKIAorI2lmIEVOQUJM
RShQREZLSVRfUExVR0lOKSAmJiAhRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKICAgICBTYXZl
UERGVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIoU3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1lLCBVUkwg
b3JpZ2luYXRpbmdVUkwsIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhKQotCi0jaWYgUExBVEZPUk0o
Q09DT0EpCiAgICAgU2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBs
aWNhdGlvbihTdHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWUsIHN0cnVjdCBXZWJLaXQ6OkZyYW1lSW5m
b0RhdGEgc291cmNlRnJhbWVJbmZvLCBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YSwgU3RyaW5nIHBk
ZlVVSUQpCiAgICAgT3BlblBERkZyb21UZW1wb3JhcnlGb2xkZXJXaXRoTmF0aXZlQXBwbGljYXRp
b24oc3RydWN0IFdlYktpdDo6RnJhbWVJbmZvRGF0YSBzb3VyY2VGcmFtZUluZm8sIFN0cmluZyBw
ZGZVVUlEKQogI2VuZGlmCkBAIC01NjYsNiArNTY1LDEyIEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQ
cm94eSB7CiAgICAgU3BlZWNoU3ludGhlc2lzUmVzdW1lKCkgLT4gKCkgQXN5bmMKICNlbmRpZgog
CisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBDcmVhdGVQREZIVUQoV2ViS2l0
OjpQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYkNvcmU6OkludFJlY3QgYm91bmRp
bmdCb3gpCisgICAgVXBkYXRlUERGSFVETG9jYXRpb24oV2ViS2l0OjpQREZQbHVnaW5JZGVudGlm
aWVyIGlkZW50aWZpZXIsIFdlYkNvcmU6OkludFJlY3QgYm91bmRpbmdCb3gpCisgICAgUmVtb3Zl
UERGSFVEKFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQorI2VuZGlmCisK
ICAgICBDb25maWd1cmVMb2dnaW5nQ2hhbm5lbChTdHJpbmcgY2hhbm5lbE5hbWUsIGVudW06dWlu
dDhfdCBXVEZMb2dDaGFubmVsU3RhdGUgc3RhdGUsIGVudW06dWludDhfdCBXVEZMb2dMZXZlbCBs
ZXZlbCkKIAogI2lmIFBMQVRGT1JNKEdUSykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCShyZXZpc2lvbiAyNjYw
OTApCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJu
YWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTEgKzIzLDExIEBACiAgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2ltcG9ydCAiV0tXZWJWaWV3UHJpdmF0ZS5oIgot
CisjaW1wb3J0ICJQREZQbHVnaW5JZGVudGlmaWVyLmgiCiAjaW1wb3J0ICJTYW1lRG9jdW1lbnRO
YXZpZ2F0aW9uVHlwZS5oIgogI2ltcG9ydCAiV0tTaGFyZVNoZWV0LmgiCiAjaW1wb3J0ICJXS1dl
YlZpZXdDb25maWd1cmF0aW9uLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdQcml2YXRlLmgiCiAjaW1w
b3J0ICJfV0tBdHRhY2htZW50SW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1dlYlZpZXdQcmludEZv
cm1hdHRlckludGVybmFsLmgiCiAjaW1wb3J0IDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KQEAg
LTEzMyw3ICsxMzMsNyBAQCBjbGFzcyBWaWV3R2VzdHVyZUNvbnRyb2xsZXI7CiAgICAgLy8gT25s
eSB1c2VkIHdpdGggVUktc2lkZSBjb21wb3NpdGluZy4KICAgICBSZXRhaW5QdHI8V0tTY3JvbGxW
aWV3PiBfc2Nyb2xsVmlldzsKICAgICBSZXRhaW5QdHI8V0tDb250ZW50Vmlldz4gX2NvbnRlbnRW
aWV3OwotI2VuZGlmCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKICAgICBSZXRhaW5QdHI8V0tTY3JvbGxWaWV3PiBfc2Nyb2xsVmlldzsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3UHJpdmF0ZUZvclRlc3Rp
bmdNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dL
V2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nTWFjLmgJKHJldmlzaW9uIDI2NjA5MCkKKysrIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3UHJpdmF0ZUZvclRlc3RpbmdNYWMu
aAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBAaW50ZXJmYWNlIFdLV2ViVmlldyAo
V0tUZXN0aW5nTWFjKQogCiAtICh2b2lkKV9zZXRIZWFkZXJCYW5uZXJIZWlnaHQ6KGludCloZWln
aHQ7CiAtICh2b2lkKV9zZXRGb290ZXJCYW5uZXJIZWlnaHQ6KGludCloZWlnaHQ7CistIChOU1Nl
dDxOU1ZpZXcgKj4gKilfcGRmSFVEczsKIAogQGVuZAogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1Rlc3RpbmdNYWMubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdUZXN0aW5nTWFjLm1tCShyZXZp
c2lvbiAyNjYwOTApCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmll
d1Rlc3RpbmdNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwMyw2ICsxMDMsMTUgQEAgLSAodm9p
ZClfc2V0Rm9vdGVyQmFubmVySGVpZ2h0OihpbnQpaGVpZwogICAgIF9wYWdlLT5zZXRGb290ZXJC
YW5uZXJIZWlnaHRGb3JUZXN0aW5nKGhlaWdodCk7CiB9CiAKKy0gKE5TU2V0PE5TVmlldyAqPiAq
KV9wZGZIVURzCit7CisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICByZXR1cm4g
X2ltcGwtPnBkZkhVRHMoKTsKKyNlbHNlCisgICAgcmV0dXJuIG5pbDsKKyNlbmRpZgorfQorCiAt
IChOU01lbnUgKilfYWN0aXZlTWVudQogewogICAgIC8vIEZJWE1FOiBPbmx5IHRoZSBET00gcGFz
dGUgYWNjZXNzIG1lbnUgaXMgc3VwcG9ydGVkIGZvciBub3cuIEluIHRoZSBmdXR1cmUsIGl0IGNv
dWxkIGJlCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBs
LmgJKHJldmlzaW9uIDI2NjA5MCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dl
YlZpZXdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIFBMQVRG
T1JNKE1BQykKIAorI2luY2x1ZGUgIlBERlBsdWdpbklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJQ
bHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUuaCIKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAu
aCIKICNpbmNsdWRlICJXS0xheW91dE1vZGUuaCIKQEAgLTc2LDYgKzc3LDEwIEBAIE9CSkNfQ0xB
U1MgV0tUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlcjsKIE9CSkNfQ0xBU1MgV2ViUGxheWJhY2tD
b250cm9sc01hbmFnZXI7CiAjZW5kaWYgLy8gSEFWRShUT1VDSF9CQVIpCiAKKyNpZiBFTkFCTEUo
VUlfUFJPQ0VTU19QREZfSFVEKQorT0JKQ19DTEFTUyBXS1BERkhVRFZpZXc7CisjZW5kaWYKKwog
bmFtZXNwYWNlIEFQSSB7CiBjbGFzcyBIaXRUZXN0UmVzdWx0OwogY2xhc3MgT2JqZWN0OwpAQCAt
MTkwLDYgKzE5NSwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCB2aWV3V2lsbFN0YXJ0TGl2ZVJlc2l6
ZSgpOwogICAgIHZvaWQgdmlld0RpZEVuZExpdmVSZXNpemUoKTsKIAorI2lmIEVOQUJMRShVSV9Q
Uk9DRVNTX1BERl9IVUQpCisgICAgdm9pZCBjcmVhdGVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmll
ciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgdXBkYXRlUERGSFVETG9jYXRp
b24oUERGUGx1Z2luSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZv
aWQgcmVtb3ZlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgcmVtb3ZlQWxs
UERGSFVEcygpOworICAgIE5TU2V0ICpwZGZIVURzKCk7CisjZW5kaWYKKwogICAgIHZvaWQgcmVu
ZXdHU3RhdGUoKTsKICAgICB2b2lkIHNldEZyYW1lU2l6ZShDR1NpemUpOwogICAgIHZvaWQgZGlz
YWJsZUZyYW1lU2l6ZVVwZGF0ZXMoKTsKQEAgLTcyOSw3ICs3NDIsMTEgQEAgcHJpdmF0ZToKICNp
ZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgUmV0YWluUHRyPFdLRnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXI+IG1fZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI7CiAjZW5kaWYKLSAgICAK
KworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgSGFzaE1hcDxXZWJLaXQ6OlBE
RlBsdWdpbklkZW50aWZpZXIsIFJldGFpblB0cjxXS1BERkhVRFZpZXc+PiBfcGRmSFVEVmlld3M7
CisjZW5kaWYKKwogICAgIFJldGFpblB0cjxXS1NoYXJlU2hlZXQ+IF9zaGFyZVNoZWV0OwogCiAg
ICAgUmV0YWluUHRyPFdLV2luZG93VmlzaWJpbGl0eU9ic2VydmVyPiBtX3dpbmRvd1Zpc2liaWxp
dHlPYnNlcnZlcjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJ
bXBsLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZp
ZXdJbXBsLm1tCShyZXZpc2lvbiAyNjYwOTApCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9XZWJWaWV3SW1wbC5tbQkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsNyBAQAogI2lt
cG9ydCAiV0tFcnJvckludGVybmFsLmgiCiAjaW1wb3J0ICJXS0Z1bGxTY3JlZW5XaW5kb3dDb250
cm9sbGVyLmgiCiAjaW1wb3J0ICJXS0ltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIuaCIKKyNpbXBv
cnQgIldLUERGSFVEVmlldy5oIgogI2ltcG9ydCAiV0tQcmludGluZ1ZpZXcuaCIKICNpbXBvcnQg
IldLU2FmZUJyb3dzaW5nV2FybmluZy5oIgogI2ltcG9ydCAiV0tTaGFyZVNoZWV0LmgiCkBAIC0x
NzE4LDYgKzE3MTksNDUgQEAgdm9pZCBXZWJWaWV3SW1wbDo6dmlld0RpZEVuZExpdmVSZXNpemUo
KQogICAgIFttX2xheW91dFN0cmF0ZWd5IGRpZEVuZExpdmVSZXNpemVdOwogfQogCisjaWYgRU5B
QkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKwordm9pZCBXZWJWaWV3SW1wbDo6Y3JlYXRlUERGSFVE
KFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
cmVjdCkKK3sKKyAgICByZW1vdmVQREZIVUQoaWRlbnRpZmllcik7CisgICAgYXV0byBodWQgPSBh
ZG9wdE5TKFtbV0tQREZIVURWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOnJlY3QgcGx1Z2luSWRl
bnRpZmllcjppZGVudGlmaWVyIHBhZ2U6bV9wYWdlLmdldCgpXSk7CisgICAgW21fdmlldyBhZGRT
dWJ2aWV3Omh1ZC5nZXQoKV07CisgICAgX3BkZkhVRFZpZXdzLmFkZChpZGVudGlmaWVyLCBXVEZN
b3ZlKGh1ZCkpOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVQREZIVURMb2NhdGlvbihQ
REZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJl
Y3QpCit7CisgICAgaWYgKGF1dG8gaHVkID0gX3BkZkhVRFZpZXdzLmdldChpZGVudGlmaWVyKSkK
KyAgICAgICAgW2h1ZCBzZXRGcmFtZTpyZWN0XTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6cmVt
b3ZlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBpZiAoYXV0
byBodWQgPSBfcGRmSFVEVmlld3MudGFrZShpZGVudGlmaWVyKSkKKyAgICAgICAgW2h1ZCByZW1v
dmVGcm9tU3VwZXJ2aWV3XTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6cmVtb3ZlQWxsUERGSFVE
cygpCit7CisgICAgZm9yIChhdXRvJiBodWQgOiBfcGRmSFVEVmlld3MudmFsdWVzKCkpCisgICAg
ICAgIFtodWQgcmVtb3ZlRnJvbVN1cGVydmlld107CisgICAgX3BkZkhVRFZpZXdzLmNsZWFyKCk7
Cit9CisKK05TU2V0ICpXZWJWaWV3SW1wbDo6cGRmSFVEcygpCit7CisgICAgTlNNdXRhYmxlU2V0
PE5TVmlldyAqPiAqc2V0ID0gW05TTXV0YWJsZVNldCBzZXRXaXRoQ2FwYWNpdHk6X3BkZkhVRFZp
ZXdzLnNpemUoKV07CisgICAgZm9yIChhdXRvJiBodWQgOiBfcGRmSFVEVmlld3MudmFsdWVzKCkp
CisgICAgICAgIFtzZXQgYWRkT2JqZWN0Omh1ZC5nZXQoKV07CisgICAgcmV0dXJuIHNldDsKK30K
KworI2VuZGlmIC8vIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKIHZvaWQgV2ViVmlld0lt
cGw6OnJlbmV3R1N0YXRlKCkKIHsKICAgICBpZiAobV90ZXh0SW5kaWNhdG9yV2luZG93KQpAQCAt
NTM5MSw2ICs1NDMxLDExIEBAIHZvaWQgV2ViVmlld0ltcGw6Om1vdXNlTW92ZWQoTlNFdmVudCAq
ZXYKICAgICBpZiAobV9pZ25vcmVzTm9uV2hlZWxFdmVudHMpCiAgICAgICAgIHJldHVybjsKIAor
I2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgZm9yIChhdXRvJiBodWQgOiBfcGRm
SFVEVmlld3MudmFsdWVzKCkpCisgICAgICAgIFtodWQgbW91c2VNb3ZlZDpldmVudF07CisjZW5k
aWYKKwogICAgIC8vIFdoZW4gYSB2aWV3IGlzIGZpcnN0IHJlc3BvbmRlciwgaXQgZ2V0cyBtb3Vz
ZSBtb3ZlZCBldmVudHMgZXZlbiB3aGVuIHRoZSBtb3VzZSBpcyBvdXRzaWRlIGl0cyB2aXNpYmxl
IHJlY3QuCiAgICAgaWYgKG1fdmlldy5nZXRBdXRvcmVsZWFzZWQoKSA9PSBbbV92aWV3IHdpbmRv
d10uZmlyc3RSZXNwb25kZXIgJiYgIU5TUG9pbnRJblJlY3QoW21fdmlldyBjb252ZXJ0UG9pbnQ6
W2V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddIGZyb21WaWV3Om5pbF0sIFttX3ZpZXcgdmlzaWJsZVJl
Y3RdKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTQzOSw2ICs1NDg0LDExIEBAIHZvaWQgV2ViVmll
d0ltcGw6Om1vdXNlRG93bihOU0V2ZW50ICpldmUKICAgICBpZiAobV9pZ25vcmVzTm9uV2hlZWxF
dmVudHMpCiAgICAgICAgIHJldHVybjsKIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQp
CisgICAgZm9yIChhdXRvJiBodWQgOiBfcGRmSFVEVmlld3MudmFsdWVzKCkpCisgICAgICAgIFto
dWQgbW91c2VEb3duOmV2ZW50XTsKKyNlbmRpZgorCiAgICAgc2V0TGFzdE1vdXNlRG93bkV2ZW50
KGV2ZW50KTsKICAgICBzZXRJZ25vcmVzTW91c2VEcmFnZ2VkRXZlbnRzKGZhbHNlKTsKIApAQCAt
NTQ1MCw2ICs1NTAwLDExIEBAIHZvaWQgV2ViVmlld0ltcGw6Om1vdXNlVXAoTlNFdmVudCAqZXZl
bnQKICAgICBpZiAobV9pZ25vcmVzTm9uV2hlZWxFdmVudHMpCiAgICAgICAgIHJldHVybjsKIAor
I2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgZm9yIChhdXRvJiBodWQgOiBfcGRm
SFVEVmlld3MudmFsdWVzKCkpCisgICAgICAgIFtodWQgbW91c2VVcDpldmVudF07CisjZW5kaWYK
KwogICAgIHNldExhc3RNb3VzZURvd25FdmVudChuaWwpOwogICAgIG1vdXNlVXBJbnRlcm5hbChl
dmVudCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QREYvV0tQREZIVURWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUERGL1dLUERGSFVEVmll
dy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BERi9XS1BERkhV
RFZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
IEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKKyNpbXBvcnQgIlBERlBsdWdpbklkZW50aWZp
ZXIuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJQYWdlUHJveHk7Cit9CisKK0Bp
bnRlcmZhY2UgV0tQREZIVURWaWV3IDogTlNWaWV3CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aEZyYW1lOihOU1JlY3QpZnJhbWUgcGx1Z2luSWRlbnRpZmllcjooV2ViS2l0OjpQREZQbHVnaW5J
ZGVudGlmaWVyKXBsdWdpbklkZW50aWZpZXIgcGFnZTooV2ViS2l0OjpXZWJQYWdlUHJveHkmKXBh
Z2U7CistICh2b2lkKXNldEZyYW1lOihOU1JlY3QpZnJhbWU7CistICh2b2lkKW1vdXNlTW92ZWQ6
KE5TRXZlbnQgKilldmVudDsKKy0gKHZvaWQpbW91c2VEb3duOihOU0V2ZW50ICopZXZlbnQ7Cist
ICh2b2lkKW1vdXNlVXA6KE5TRXZlbnQgKilldmVudDsKKworQGVuZAorCisjZW5kaWYgLy8gRU5B
QkxFKFVJX1BST0NFU1NfUERGX0hVRCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BE
Ri9XS1BERkhVRFZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
UERGL1dLUERGSFVEVmlldy5tbQkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9QREYvV0tQREZIVURWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzUwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXS1BERkhVRFZpZXcu
aCIKKworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKKyNpbXBvcnQgIldlYlBhZ2VQ
cm94eS5oIgorI2ltcG9ydCA8UXVhcnR6Q29yZS9DQVRyYW5zYWN0aW9uLmg+CisjaW1wb3J0IDxw
YWwvc3BpL2NvY29hL1F1YXJ0ekNvcmVTUEkuaD4KKyNpbXBvcnQgPHBhbC9zcGkvbWFjL05TSW1h
Z2VTUEkuaD4KKyNpbXBvcnQgPHd0Zi9XZWFrT2JqQ1B0ci5oPgorCisvLyAgVGhlIEhVRCBpdGVt
cyBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIHNwYWNpbmc6CisvLyAgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gfCAgICAgIDEyICAgICAgICAx
MiAgICAgIDEwICAgICAxMiAgICAgICAgMTIgICAgICB8CisvLyB8ICAgICAtLS0tICAgICAgLS0t
LSAgICAgfCAgICAgLS0tLSAgICAgIC0tLS0gICAgIHwKKy8vIHwgMTAgfGljb258IDEwIHxpY29u
fCAxMCB8IDEwIHxpY29ufCAxMCB8aWNvbnwgMTAgfAorLy8gfCAgICAgLS0tLSAgICAgIC0tLS0g
ICAgIHwgICAgIC0tLS0gICAgICAtLS0tICAgICB8CisvLyB8ICAgICAgMTIgICAgICAgIDEyICAg
ICAgMTAgICAgIDEyICAgICAgICAxMiAgICAgIHwKKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgd2hlcmUgdGhlIDEyIHBvaW50IHZlcnRp
Y2FsIHNwYWNpbmcgaXMgYW5jaG9yZWQgdG8gdGhlIHNtYWxsZXN0IGljb24gaW1hZ2UsCisvLyAg
YW5kIGFsbCBzdWJzZXF1ZW50IGljb25zIHdpdGggYmUgY2VudGVyZWQgdmVydGljYWxseSB3aXRo
IHRoZSBzbWFsbGVzdCBpY29uLgorCitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrTGF5ZXJWZXJ0aWNh
bE9mZnNldCA9IDQwOworc3RhdGljIGNvbnN0IENHRmxvYXQga0xheWVyQ29ybmVyUmFkaXVzID0g
MTI7CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrTGF5ZXJHcmF5Q29tcG9uZW50ID0gMDsKK3N0YXRp
YyBjb25zdCBDR0Zsb2F0IGtMYXllckFscGhhID0gMC43NTsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0
IGtMYXllckltYWdlU2NhbGUgPSAxLjU7CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrTGF5ZXJTZXBl
cmF0b3JDb250cm9sbGVyU2l6ZSA9IDEuNTsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGtMYXllckNv
bnRyb2xsZXJIb3Jpem9udGFsTWFyZ2luID0gMTAuMDsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGtM
YXllckltYWdlVmVydGljYWxNYXJnaW4gPSAxMi4wOworc3RhdGljIGNvbnN0IENHRmxvYXQga0xh
eWVyU2VwZXJhdG9yVmVydGljYWxNYXJnaW4gPSAxMC4wOworc3RhdGljIGNvbnN0IENHRmxvYXQg
a0NvbnRyb2xMYXllck5vcm1hbEFscGhhID0gMC43NTsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGtD
b250cm9sTGF5ZXJEb3duQWxwaGEgPSAwLjQ1OworCitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBQ
REZIVURab29tSW5Db250cm9sID0gQCJwbHVzLm1hZ25pZnlpbmdnbGFzcyI7CitzdGF0aWMgTlNT
dHJpbmcgKiBjb25zdCBQREZIVURab29tT3V0Q29udHJvbCA9IEAibWludXMubWFnbmlmeWluZ2ds
YXNzIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFBERkhVRExhdW5jaFByZXZpZXdDb250cm9s
ID0gQCJwcmV2aWV3IjsKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFBERkhVRFNhdmVQREZDb250
cm9sID0gQCJhcnJvdy5kb3duLmNpcmNsZSI7CitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBQREZI
VURTZXBlcmF0b3JDb250cm9sID0gQCJQREZIVURTZXBlcmF0b3JDb250cm9sIjsKKworc3RhdGlj
IGNvbnN0IENHRmxvYXQga0xheWVyRmFkZUluVGltZUludGVydmFsID0gMC4yNTsKK3N0YXRpYyBj
b25zdCBDR0Zsb2F0IGtMYXllckZhZGVPdXRUaW1lSW50ZXJ2YWwgPSAwLjU7CitzdGF0aWMgY29u
c3QgQ0dGbG9hdCBrSW5pdGlhbEhpZGVUaW1lSW50ZXJ2YWwgPSAzLjA7CisKK3N0YXRpYyBOU0Fy
cmF5PE5TU3RyaW5nICo+ICpjb250cm9sQXJyYXkoKQoreworICAgIHJldHVybiBAWworICAgICAg
ICBQREZIVURab29tT3V0Q29udHJvbCwKKyAgICAgICAgUERGSFVEWm9vbUluQ29udHJvbCwKKyAg
ICAgICAgUERGSFVEU2VwZXJhdG9yQ29udHJvbCwKKyAgICAgICAgUERGSFVETGF1bmNoUHJldmll
d0NvbnRyb2wsCisgICAgICAgIFBERkhVRFNhdmVQREZDb250cm9sCisgICAgXTsKK30KKworc3Rh
dGljIE5TQ29sb3IqIFBERkNHQ29sb3JDcmVhdGVHZW5lcmljUkdCKENHRmxvYXQgcmVkLCBDR0Zs
b2F0IGdyZWVuLCBDR0Zsb2F0IGJsdWUsIENHRmxvYXQgYWxwaGEpCit7CisgICAgYXV0byBjb2xv
clNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7CisgICAgY29u
c3QgQ0dGbG9hdCBjb21wb25lbnRzWzRdID0geyByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSB9Owor
ICAgIGF1dG8gY2dDb2xvciA9IGFkb3B0Q0YoQ0dDb2xvckNyZWF0ZShjb2xvclNwYWNlLmdldCgp
LCBjb21wb25lbnRzKSk7CisgICAgcmV0dXJuIFtOU0NvbG9yIGNvbG9yV2l0aENHQ29sb3I6Y2dD
b2xvci5nZXQoKV07Cit9CisKK0BpbXBsZW1lbnRhdGlvbiBXS1BERkhVRFZpZXcgeworQHByaXZh
dGUKKyAgICBXZWFrUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PiBfcGFnZTsKKyAgICBSZXRhaW5Q
dHI8TlNTdHJpbmc+IF9hY3RpdmVDb250cm9sOworICAgIFdlYktpdDo6UERGUGx1Z2luSWRlbnRp
ZmllciBfcGx1Z2luSWRlbnRpZmllcjsKKyAgICBDR0Zsb2F0IF9kZXZpY2VTY2FsZUZhY3RvcjsK
KyAgICBSZXRhaW5QdHI8Q0FMYXllcj4gX2xheWVyOworICAgIFJldGFpblB0cjxDQUxheWVyPiBf
YWN0aXZlTGF5ZXI7CisgICAgQ0dTaXplIF9mcmFtZVNpemU7CisgICAgUmV0YWluUHRyPE5TTXV0
YWJsZURpY3Rpb25hcnk8TlNTdHJpbmcqLCBOU0ltYWdlKj4+IF9jYWNoZWRJY29uczsKKyAgICBC
T09MIF92aXNpYmxlOworICAgIGJvb2wgX21vdXNlTW92ZWRUb0hVRDsKKyAgICBib29sIF9pbml0
aWFsSGlkZVRpbWVyRmlyZWQ7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihO
U1JlY3QpZnJhbWUgcGx1Z2luSWRlbnRpZmllcjooV2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVy
KXBsdWdpbklkZW50aWZpZXIgcGFnZTooV2ViS2l0OjpXZWJQYWdlUHJveHkmKXBhZ2UKK3sKKyAg
ICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoRnJhbWU6ZnJhbWVdKSkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICAKKyAgICBzZWxmLndhbnRzTGF5ZXIgPSBZRVM7CisgICAgX2NhY2hlZElj
b25zID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKKyAgICBf
cGx1Z2luSWRlbnRpZmllciA9IHBsdWdpbklkZW50aWZpZXI7CisgICAgX3BhZ2UgPSBtYWtlV2Vh
a1B0cihwYWdlKTsKKyAgICBfZGV2aWNlU2NhbGVGYWN0b3IgPSBwYWdlLmRldmljZVNjYWxlRmFj
dG9yKCk7CisgICAgX3Zpc2libGUgPSBZRVM7CisgICAgW3NlbGYgX3NldHVwTGF5ZXI6c2VsZi5s
YXllcl07CisgICAgW3NlbGYgc2V0RnJhbWU6ZnJhbWVdOworCisgICAgV2Vha09iakNQdHI8V0tQ
REZIVURWaWV3PiB3ZWFrU2VsZiA9IHNlbGY7CisgICAgZGlzcGF0Y2hfYWZ0ZXIoZGlzcGF0Y2hf
dGltZShESVNQQVRDSF9USU1FX05PVywgKGludDY0X3QpKGtJbml0aWFsSGlkZVRpbWVJbnRlcnZh
bCAqIE5TRUNfUEVSX1NFQykpLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAg
ICBbd2Vha1NlbGYgX2hpZGVUaW1lckZpcmVkXTsKKyAgICB9KTsKKyAgICByZXR1cm4gc2VsZjsK
K30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19sYXllciByZW1vdmVGcm9tU3VwZXJsYXll
cl07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNldEZyYW1lOihOU1JlY3Qp
cmVjdAoreworICAgIFtzdXBlciBzZXRGcmFtZTpyZWN0XTsKKyAgICBfZnJhbWVTaXplID0gcmVj
dC5zaXplOworCisgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAgIFtDQVRyYW5zYWN0aW9u
IHNldERpc2FibGVBY3Rpb25zOllFU107CisgICAgQ0dSZWN0IGxheWVyQm91bmRzID0gW19sYXll
ciBib3VuZHNdOworICAgIFtfbGF5ZXIgc2V0RnJhbWU6Q0dSZWN0TWFrZShyZWN0LnNpemUud2lk
dGggLyAyLjAgLSBsYXllckJvdW5kcy5zaXplLndpZHRoIC8gMi4wLCBrTGF5ZXJWZXJ0aWNhbE9m
ZnNldCwgbGF5ZXJCb3VuZHMuc2l6ZS53aWR0aCwgbGF5ZXJCb3VuZHMuc2l6ZS5oZWlnaHQpXTsK
KyAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworfQorCistICh2b2lkKV9oaWRlVGltZXJGaXJl
ZAoreworICAgIF9pbml0aWFsSGlkZVRpbWVyRmlyZWQgPSB0cnVlOworICAgIGlmICghX21vdXNl
TW92ZWRUb0hVRCkKKyAgICAgICAgW3NlbGYgX3NldFZpc2libGU6ZmFsc2VdOworfQorCistICh2
b2lkKV9zZXRWaXNpYmxlOihib29sKWlzVmlzaWJsZQoreworICAgIGlmIChfdmlzaWJsZSA9PSBp
c1Zpc2libGUpCisgICAgICAgIHJldHVybjsKKyAgICBfdmlzaWJsZSA9IGlzVmlzaWJsZTsKKyAg
ICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0QW5pbWF0aW9u
RHVyYXRpb246IGlzVmlzaWJsZSA/IGtMYXllckZhZGVJblRpbWVJbnRlcnZhbCA6IGtMYXllckZh
ZGVPdXRUaW1lSW50ZXJ2YWxdOworICAgIFtzZWxmIF9zZXRMYXllck9wYWNpdHk6aXNWaXNpYmxl
ID8ga0xheWVyQWxwaGEgOiAwLjBdOworICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Cit9CisK
Ky0gKHZvaWQpbW91c2VNb3ZlZDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgaWYgKENHUmVjdENv
bnRhaW5zUG9pbnQoW3NlbGYgY29udmVydFJlY3Q6Q0dSZWN0SW5zZXQoW19sYXllciBmcmFtZV0s
IC0xNi4wLCAtMTYuMCkgdG9WaWV3Om5pbF0sIE5TUG9pbnRUb0NHUG9pbnQoZXZlbnQubG9jYXRp
b25JbldpbmRvdykpKSB7CisgICAgICAgIFtzZWxmIF9zZXRWaXNpYmxlOnRydWVdOworICAgICAg
ICBfbW91c2VNb3ZlZFRvSFVEID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKF9pbml0aWFsSGlkZVRp
bWVyRmlyZWQpCisgICAgICAgIFtzZWxmIF9zZXRWaXNpYmxlOmZhbHNlXTsKK30KKworLSAodm9p
ZCltb3VzZURvd246KE5TRXZlbnQgKilldmVudAoreworICAgIF9hY3RpdmVDb250cm9sID0gW3Nl
bGYgX2NvbnRyb2xGb3JFdmVudDpldmVudF07CisgICAgaWYgKFtfYWN0aXZlQ29udHJvbCBpc0Vx
dWFsVG9TdHJpbmc6UERGSFVEU2VwZXJhdG9yQ29udHJvbF0pCisgICAgICAgIF9hY3RpdmVDb250
cm9sID0gbmlsOworICAgIGlmIChfYWN0aXZlQ29udHJvbCkgeworICAgICAgICAvLyBVcGRhdGUg
cmVuZGVyaW5nIHRvIGhpZ2hsaWdodCBpdC4uCisgICAgICAgIF9hY3RpdmVMYXllciA9IFtzZWxm
IF9sYXllckZvckV2ZW50OmV2ZW50XTsKKyAgICAgICAgCisgICAgICAgIC8vIFVwZGF0ZSBsYXll
ciBpbWFnZTsgZG8gbm90IGFuaW1hdGUKKyAgICAgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwor
ICAgICAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOworICAgICAgICAK
KyAgICAgICAgW19hY3RpdmVMYXllciBzZXRPcGFjaXR5OiBrQ29udHJvbExheWVyRG93bkFscGhh
XTsKKyAgICAgICAgCisgICAgICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CisgICAgfQorfQor
CistICh2b2lkKW1vdXNlVXA6KE5TRXZlbnQgKilldmVudAoreworICAgIGlmICghX2FjdGl2ZUNv
bnRyb2wpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBOU1N0cmluZyogbW91c2VVcENvbnRy
b2wgPSBbc2VsZiBfY29udHJvbEZvckV2ZW50OmV2ZW50XTsKKyAgICBpZiAoW19hY3RpdmVDb250
cm9sIGlzRXF1YWxUb1N0cmluZzptb3VzZVVwQ29udHJvbF0pCisgICAgICAgIFtzZWxmIF9wZXJm
b3JtQWN0aW9uRm9yQ29udHJvbDpfYWN0aXZlQ29udHJvbC5nZXQoKV07CisgICAgCisgICAgW0NB
VHJhbnNhY3Rpb24gYmVnaW5dOworICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25z
OllFU107CisgICAgW19hY3RpdmVMYXllciBzZXRPcGFjaXR5OmtDb250cm9sTGF5ZXJOb3JtYWxB
bHBoYV07CisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKKworICAgIF9hY3RpdmVMYXllciA9
IG5pbDsKKyAgICBfYWN0aXZlQ29udHJvbCA9IG5pbDsKK30KKworLSAoT3B0aW9uYWw8TlNVSW50
ZWdlcj4pX2NvbnRyb2xJbmRleEZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBDR1Bv
aW50IGluaXRpYWxQb2ludCA9IE5TUG9pbnRUb0NHUG9pbnQoZXZlbnQubG9jYXRpb25JbldpbmRv
dyk7CisgICAgaW5pdGlhbFBvaW50LnggLT0gW19sYXllciBmcmFtZV0ub3JpZ2luLng7CisgICAg
aW5pdGlhbFBvaW50LnkgLT0gW19sYXllciBmcmFtZV0ub3JpZ2luLnk7CisgICAgZm9yIChOU1VJ
bnRlZ2VyIGluZGV4ID0gMDsgaW5kZXggPCBbX2xheWVyIHN1YmxheWVyc10uY291bnQ7IGluZGV4
KyspIHsKKyAgICAgICAgQ0FMYXllciAqc3ViTGF5ZXIgPSBbX2xheWVyIHN1YmxheWVyc11baW5k
ZXhdOworICAgICAgICBOU1JlY3Qgd2luZG93U3BhY2VSZWN0ID0gW3NlbGYgY29udmVydFJlY3Q6
c3ViTGF5ZXIuZnJhbWUgdG9WaWV3Om5pbF07CisgICAgICAgIGlmIChDR1JlY3RDb250YWluc1Bv
aW50KHdpbmRvd1NwYWNlUmVjdCwgaW5pdGlhbFBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiBp
bmRleDsKKyAgICB9CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworLSAoTlNTdHJpbmcg
KilfY29udHJvbEZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBpZiAoYXV0byBpbmRl
eCA9IFtzZWxmIF9jb250cm9sSW5kZXhGb3JFdmVudDpldmVudF0pCisgICAgICAgIHJldHVybiBj
b250cm9sQXJyYXkoKVsqaW5kZXhdOworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKENBTGF5ZXIg
KilfbGF5ZXJGb3JFdmVudDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgaWYgKGF1dG8gaW5kZXgg
PSBbc2VsZiBfY29udHJvbEluZGV4Rm9yRXZlbnQ6ZXZlbnRdKQorICAgICAgICByZXR1cm4gW19s
YXllciBzdWJsYXllcnNdWyppbmRleF07CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAodm9pZClf
cGVyZm9ybUFjdGlvbkZvckNvbnRyb2w6KE5TU3RyaW5nICopY29udHJvbAoreworICAgIGlmICgh
X3Zpc2libGUpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBwYWdlID0gX3BhZ2UuZ2V0KCk7
CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFtjb250cm9sIGlzRXF1
YWxUb1N0cmluZzpQREZIVURab29tSW5Db250cm9sXSkKKyAgICAgICAgcGFnZS0+cGRmWm9vbUlu
KF9wbHVnaW5JZGVudGlmaWVyKTsKKyAgICBlbHNlIGlmIChbY29udHJvbCBpc0VxdWFsVG9TdHJp
bmc6UERGSFVEWm9vbU91dENvbnRyb2xdKQorICAgICAgICBwYWdlLT5wZGZab29tT3V0KF9wbHVn
aW5JZGVudGlmaWVyKTsKKyAgICBlbHNlIGlmIChbY29udHJvbCBpc0VxdWFsVG9TdHJpbmc6UERG
SFVEU2F2ZVBERkNvbnRyb2xdKQorICAgICAgICBwYWdlLT5wZGZTYXZlVG9QREYoX3BsdWdpbklk
ZW50aWZpZXIpOworICAgIGVsc2UgaWYgKFtjb250cm9sIGlzRXF1YWxUb1N0cmluZzpQREZIVURM
YXVuY2hQcmV2aWV3Q29udHJvbF0pCisgICAgICAgIHBhZ2UtPnBkZk9wZW5XaXRoUHJldmlldyhf
cGx1Z2luSWRlbnRpZmllcik7Cit9CisKKy0gKHZvaWQpX2xvYWRJY29uSW1hZ2VzCit7CisgICAg
Zm9yIChOU1N0cmluZyAqY29udHJvbE5hbWUgaW4gY29udHJvbEFycmF5KCkpCisgICAgICAgIFtz
ZWxmIF9nZXRJbWFnZUZvckNvbnRyb2xOYW1lOiBjb250cm9sTmFtZV07Cit9CisKKy0gKHZvaWQp
X3NldHVwTGF5ZXI6KENBTGF5ZXIgKilwYXJlbnRMYXllcgoreworICAgIF9sYXllciA9IGFkb3B0
TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0XSk7CisgICAgW19sYXllciBzZXRDb3JuZXJSYWRpdXM6
a0xheWVyQ29ybmVyUmFkaXVzXTsKKyAgICAKKyAgICBhdXRvIGNvbG9yID0gYWRvcHROUyhQREZD
R0NvbG9yQ3JlYXRlR2VuZXJpY1JHQihrTGF5ZXJHcmF5Q29tcG9uZW50LCBrTGF5ZXJHcmF5Q29t
cG9uZW50LCBrTGF5ZXJHcmF5Q29tcG9uZW50LCAxLjApKTsKKyAgICBbX2xheWVyIHNldEJhY2tn
cm91bmRDb2xvcjpbY29sb3IgQ0dDb2xvcl1dOworICAgIFtzZWxmIF9zZXRMYXllck9wYWNpdHk6
a0xheWVyQWxwaGFdOworICAgIAorICAgIFtzZWxmIF9sb2FkSWNvbkltYWdlc107CisgICAgQ0dG
bG9hdCBtaW5JY29uSW1hZ2VIZWlnaHQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPENHRmxvYXQ+Ojpt
YXgoKTsKKyAgICBmb3IgKE5TSW1hZ2UqIGltYWdlIGluIFtfY2FjaGVkSWNvbnMgYWxsVmFsdWVz
XSkKKyAgICAgICAgbWluSWNvbkltYWdlSGVpZ2h0ID0gc3RkOjptaW4obWluSWNvbkltYWdlSGVp
Z2h0LCAoaW1hZ2Uuc2l6ZS5oZWlnaHQgLyBfZGV2aWNlU2NhbGVGYWN0b3IpKTsKKyAgICAKKyAg
ICBDR0Zsb2F0IGR4ID0ga0xheWVyQ29udHJvbGxlckhvcml6b250YWxNYXJnaW47CisgICAgZm9y
IChOU1N0cmluZyAqY29udHJvbE5hbWUgaW4gY29udHJvbEFycmF5KCkpIHsKKyAgICAgICAgYXV0
byBjb250cm9sTGF5ZXIgPSBhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0pOworICAgICAg
ICBDR0Zsb2F0IGR5ID0gMC4wOworICAgICAgICBDR0Zsb2F0IGNvbnRyb2xsZXJXaWR0aCA9IDAu
MDsKKyAgICAgICAgQ0dGbG9hdCBjb250cm9sbGVySGVpZ2h0ID0gMC4wOworCisgICAgICAgIGlm
IChbY29udHJvbE5hbWUgaXNFcXVhbFRvU3RyaW5nOiBQREZIVURTZXBlcmF0b3JDb250cm9sXSkg
eworICAgICAgICAgICAgZHkgPSBrTGF5ZXJTZXBlcmF0b3JWZXJ0aWNhbE1hcmdpbjsKKyAgICAg
ICAgICAgIGNvbnRyb2xsZXJXaWR0aCA9IGtMYXllclNlcGVyYXRvckNvbnRyb2xsZXJTaXplOwor
ICAgICAgICAgICAgY29udHJvbGxlckhlaWdodCA9IG1pbkljb25JbWFnZUhlaWdodCArICgyLjAg
KiBrTGF5ZXJJbWFnZVZlcnRpY2FsTWFyZ2luKSAtICgyLjAgKiBrTGF5ZXJTZXBlcmF0b3JWZXJ0
aWNhbE1hcmdpbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFtjb250cm9sTGF5ZXIgc2V0
QmFja2dyb3VuZENvbG9yOiBbW05TQ29sb3IgbGlnaHRHcmF5Q29sb3JdIENHQ29sb3JdXTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIE5TSW1hZ2UqIGNvbnRyb2xJbWFnZSA9IFtzZWxm
IF9nZXRJbWFnZUZvckNvbnRyb2xOYW1lOmNvbnRyb2xOYW1lXTsKKyAgICAgICAgICAgIFtjb250
cm9sTGF5ZXIgc2V0Q29udGVudHM6IGNvbnRyb2xJbWFnZV07CisgICAgICAgICAgICBbY29udHJv
bExheWVyIHNldE9wYWNpdHk6IGtDb250cm9sTGF5ZXJOb3JtYWxBbHBoYV07CisKKyAgICAgICAg
ICAgIGR5ID0ga0xheWVySW1hZ2VWZXJ0aWNhbE1hcmdpbjsKKyAgICAgICAgICAgIGNvbnRyb2xs
ZXJXaWR0aCA9IFtjb250cm9sSW1hZ2Ugc2l6ZV0ud2lkdGggLyBfZGV2aWNlU2NhbGVGYWN0b3I7
CisgICAgICAgICAgICBjb250cm9sbGVySGVpZ2h0ID0gW2NvbnRyb2xJbWFnZSBzaXplXS5oZWln
aHQgLyBfZGV2aWNlU2NhbGVGYWN0b3I7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGR5IC09
IChjb250cm9sbGVySGVpZ2h0IC0gbWluSWNvbkltYWdlSGVpZ2h0KSAvIDIuMDsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgW2NvbnRyb2xMYXllciBzZXRGaWx0ZXJzOkBbW0NBRmlsdGVyIGZp
bHRlcldpdGhUeXBlOmtDQUZpbHRlckNvbG9ySW52ZXJ0XV1dOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBbY29udHJvbExheWVyIHNldEZyYW1lOkNHUmVjdE1ha2UoZHgsIGR5LCBjb250
cm9sbGVyV2lkdGgsIGNvbnRyb2xsZXJIZWlnaHQpXTsKKyAgICAgICAgW19sYXllciBhZGRTdWJs
YXllcjpjb250cm9sTGF5ZXIuZ2V0KCldOworICAgICAgICAKKyAgICAgICAgZHggKz0gY29udHJv
bGxlcldpZHRoICsga0xheWVyQ29udHJvbGxlckhvcml6b250YWxNYXJnaW47CisgICAgfQorICAg
IAorICAgIFtfbGF5ZXIgc2V0RnJhbWU6Q0dSZWN0TWFrZSgwLCBrTGF5ZXJWZXJ0aWNhbE9mZnNl
dCwgZHgsIG1pbkljb25JbWFnZUhlaWdodCArIDIuMCAqIGtMYXllckltYWdlVmVydGljYWxNYXJn
aW4pXTsKKyAgICBbcGFyZW50TGF5ZXIgYWRkU3VibGF5ZXI6IF9sYXllci5nZXQoKV07Cit9CisK
Ky0gKHZvaWQpX3JlZHJhd0xheWVyCit7CisgICAgW19jYWNoZWRJY29ucyByZW1vdmVBbGxPYmpl
Y3RzXTsKKyAgICBDQUxheWVyICpwYXJlbnRMYXllciA9IFtfbGF5ZXIgc3VwZXJsYXllcl07Cisg
ICAgW19sYXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07CisgICAgW3NlbGYgX3NldHVwTGF5ZXI6
cGFyZW50TGF5ZXJdOworICAgIFtzZWxmIHNldEZyYW1lU2l6ZTpfZnJhbWVTaXplXTsKK30KKwor
LSAoTlNJbWFnZSopX2dldEltYWdlRm9yQ29udHJvbE5hbWU6KE5TU3RyaW5nICopY29udHJvbAor
eworICAgIE5TSW1hZ2UqIGljb25JbWFnZSA9IF9jYWNoZWRJY29ucy5nZXQoKVtjb250cm9sXTsK
KyAgICBpZiAoaWNvbkltYWdlKQorICAgICAgICByZXR1cm4gaWNvbkltYWdlOworCisgICAgaWNv
bkltYWdlID0gW05TSW1hZ2UgX2ltYWdlV2l0aFN5c3RlbVN5bWJvbE5hbWU6IGNvbnRyb2xdOwor
ICAgIGlmICghaWNvbkltYWdlKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgaWNvbkltYWdl
ID0gW2ljb25JbWFnZSBfaW1hZ2VXaXRoQ29uZmlndXJhdGlvbjpAeworICAgICAgICBOU0ltYWdl
QWx0ZXJuYXRlQ3JpdGVyaW9uRm9udCA6IFtOU0ZvbnQgcHJlZmVycmVkRm9udEZvclRleHRTdHls
ZTpOU0ZvbnRUZXh0U3R5bGVUaXRsZTIgb3B0aW9uczpAeyB9XSwKKyAgICAgICAgTlNJbWFnZUFs
dGVybmF0ZUNyaXRlcmlvblN5bWJvbFNjYWxlIDogQChOU0ltYWdlU3ltYm9sU2NhbGVMYXJnZSkK
KyAgICB9XTsKKyAgICAgICAgCisgICAgTlNSZWN0IGljb25JbWFnZVJlY3QgPSBOU01ha2VSZWN0
KDAsIDAsIFtpY29uSW1hZ2Ugc2l6ZV0ud2lkdGggKiBrTGF5ZXJJbWFnZVNjYWxlICogX2Rldmlj
ZVNjYWxlRmFjdG9yLCBbaWNvbkltYWdlIHNpemVdLmhlaWdodCAqIGtMYXllckltYWdlU2NhbGUg
KiBfZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIE5TSW1hZ2VSZXAqIGljb25JbWFnZVJlcCA9IFtp
Y29uSW1hZ2UgYmVzdFJlcHJlc2VudGF0aW9uRm9yUmVjdDppY29uSW1hZ2VSZWN0IGNvbnRleHQ6
bmlsIGhpbnRzOm5pbF07CisgICAgaWNvbkltYWdlID0gW05TSW1hZ2UgaW1hZ2VXaXRoSW1hZ2VS
ZXA6IGljb25JbWFnZVJlcF07CisgICAgCisgICAgX2NhY2hlZEljb25zLmdldCgpW2NvbnRyb2xd
ID0gaWNvbkltYWdlOworICAgIHJldHVybiBpY29uSW1hZ2U7Cit9CisKKy0gKHZvaWQpX3NldExh
eWVyT3BhY2l0eTooQ0dGbG9hdClhbHBoYQoreworICAgIFtfbGF5ZXIgc2V0T3BhY2l0eTphbHBo
YV07CisgICAgZm9yIChDQUxheWVyICpzdWJMYXllciBpbiBbX2xheWVyIHN1YmxheWVyc10pCisg
ICAgICAgIFtzdWJMYXllciBzZXRPcGFjaXR5OmFscGhhXTsKK30KKworQGVuZAorCisjZW5kaWYg
Ly8gRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQkocmV2aXNpb24gMjY2MDkwKQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMTA4OCwxNiArMTA4OCw2IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRQZXJmb3JtRGlj
dGlvbmFyeUwKICAgICBwYWdlQ2xpZW50KCkuZGlkUGVyZm9ybURpY3Rpb25hcnlMb29rdXAoZGlj
dGlvbmFyeVBvcHVwSW5mbyk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpzYXZlUERGVG9UZW1w
b3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKGNvbnN0IFN0cmluZyYsIEZy
YW1lSW5mb0RhdGEmJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwgY29uc3QgU3RyaW5nJikK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYlBhZ2VQcm94eTo6b3BlblBE
RkZyb21UZW1wb3JhcnlGb2xkZXJXaXRoTmF0aXZlQXBwbGljYXRpb24oRnJhbWVJbmZvRGF0YSYm
LCBjb25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KIHZvaWQgV2Vi
UGFnZVByb3h5OjpzZXRSZW1vdGVMYXllclRyZWVSb290Tm9kZShSZW1vdGVMYXllclRyZWVOb2Rl
KiByb290Tm9kZSkKIHsKICAgICBwYWdlQ2xpZW50KCkuc2V0UmVtb3RlTGF5ZXJUcmVlUm9vdE5v
ZGUocm9vdE5vZGUpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGll
bnRJbXBsTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1Bh
Z2VDbGllbnRJbXBsTWFjLmgJKHJldmlzaW9uIDI2NjA5MCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNiAr
MTkwLDEzIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHJlZ2lzdGVySW5zZXJ0aW9uVW5kb0dyb3Vw
aW5nKCkgb3ZlcnJpZGU7CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIHZv
aWQgY3JlYXRlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIHVwZGF0ZVBERkhVRExvY2F0aW9uKFBERlBsdWdpbklk
ZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIHJl
bW92ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbW92
ZUFsbFBERkhVRHMoKSBvdmVycmlkZTsKKyNlbmRpZgorCiAgICAgLy8gQXV4aWxpYXJ5IENsaWVu
dCBDcmVhdGlvbgogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICBXZWJGdWxsU2NyZWVu
TWFuYWdlclByb3h5Q2xpZW50JiBmdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50KCkgb3ZlcnJp
ZGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJ
bXBsTWFjLm1tCShyZXZpc2lvbiAyNjYwOTApCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9t
YWMvUGFnZUNsaWVudEltcGxNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM0OSw2ICszNDksMzAg
QEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVnaXN0ZXJJbnNlcnRpb25VbgogICAgIHJlZ2lzdGVy
SW5zZXJ0aW9uVW5kb0dyb3VwaW5nV2l0aFVuZG9NYW5hZ2VyKFttX3ZpZXcgdW5kb01hbmFnZXJd
KTsKIH0KIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKK3ZvaWQgUGFnZUNsaWVu
dEltcGw6OmNyZWF0ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCit7CisgICAgbV9pbXBsLT5jcmVhdGVQREZIVUQoaWRl
bnRpZmllciwgcmVjdCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnVwZGF0ZVBERkhVRExv
Y2F0aW9uKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgcmVjdCkKK3sKKyAgICBtX2ltcGwtPnVwZGF0ZVBERkhVRExvY2F0aW9uKGlkZW50aWZp
ZXIsIHJlY3QpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpyZW1vdmVQREZIVUQoUERGUGx1
Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIG1faW1wbC0+cmVtb3ZlUERGSFVEKGlk
ZW50aWZpZXIpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpyZW1vdmVBbGxQREZIVURzKCkK
K3sKKyAgICBtX2ltcGwtPnJlbW92ZUFsbFBERkhVRHMoKTsKK30KKworI2VuZGlmIC8vIEVOQUJM
RShVSV9QUk9DRVNTX1BERl9IVUQpCisKIHZvaWQgUGFnZUNsaWVudEltcGw6OmNsZWFyQWxsRWRp
dENvbW1hbmRzKCkKIHsKICAgICBtX2ltcGwtPmNsZWFyQWxsRWRpdENvbW1hbmRzKCk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0JKHJl
dmlzaW9uIDI2NjA5MCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJv
eHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ3NSw4ICs0NzUsNiBAQCBzdGF0aWMgTlNTdHJp
bmcgKnBhdGhUb1BERk9uRGlzayhjb25zdCBTCiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzYXZlUERG
VG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKGNvbnN0IFN0cmlu
ZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIEZyYW1lSW5mb0RhdGEmJiBmcmFtZUluZm8sIGNvbnN0IElQ
Qzo6RGF0YVJlZmVyZW5jZSYgZGF0YSwgY29uc3QgU3RyaW5nJiBwZGZVVUlEKQogewotICAgIE1F
U1NBR0VfQ0hFQ0soVGVtcG9yYXJ5UERGRmlsZU1hcDo6aXNWYWxpZEtleShwZGZVVUlEKSk7Ci0K
ICAgICBpZiAoZGF0YS5pc0VtcHR5KCkpIHsKICAgICAgICAgV1RGTG9nQWx3YXlzKCJDYW5ub3Qg
c2F2ZSBlbXB0eSBQREYgZmlsZSB0byB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeS4iKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtNTA0LDcgKzUwMiw4IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzYXZlUERG
VG9UZW1wb3JhcnlGb2wKICAgICBhdXRvIG9yaWdpbmF0aW5nVVJMU3RyaW5nID0gZnJhbWVJbmZv
LnJlcXVlc3QudXJsKCkuc3RyaW5nKCk7CiAgICAgRmlsZVN5c3RlbTo6c2V0TWV0YWRhdGFVUkwo
bnNQYXRoLmdldCgpLCBvcmlnaW5hdGluZ1VSTFN0cmluZyk7CiAKLSAgICBtX3RlbXBvcmFyeVBE
RkZpbGVzLmFkZChwZGZVVUlELCBuc1BhdGguZ2V0KCkpOworICAgIGlmIChUZW1wb3JhcnlQREZG
aWxlTWFwOjppc1ZhbGlkS2V5KHBkZlVVSUQpKQorICAgICAgICBtX3RlbXBvcmFyeVBERkZpbGVz
LmFkZChwZGZVVUlELCBuc1BhdGguZ2V0KCkpOwogCiAgICAgYXV0byBwZGZGaWxlVVJMID0gVVJM
OjpmaWxlVVJMV2l0aEZpbGVTeXN0ZW1QYXRoKFN0cmluZyhuc1BhdGguZ2V0KCkpKTsKICAgICBt
X3VpQ2xpZW50LT5jb25maXJtUERGT3BlbmluZygqdGhpcywgcGRmRmlsZVVSTCwgV1RGTW92ZShm
cmFtZUluZm8pLCBbcGRmRmlsZVVSTF0gKGJvb2wgYWxsb3dlZCkgewpAQCAtNTE0LDYgKzUxMyw3
IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzYXZlUERGVG9UZW1wb3JhcnlGb2wKICAgICB9KTsKIH0K
IAorI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKSAmJiAhRU5BQkxFKFVJX1BST0NFU1NfUERGX0hV
RCkKIHZvaWQgV2ViUGFnZVByb3h5OjpvcGVuUERGRnJvbVRlbXBvcmFyeUZvbGRlcldpdGhOYXRp
dmVBcHBsaWNhdGlvbihGcmFtZUluZm9EYXRhJiYgZnJhbWVJbmZvLCBjb25zdCBTdHJpbmcmIHBk
ZlVVSUQpCiB7CiAgICAgTUVTU0FHRV9DSEVDSyhUZW1wb3JhcnlQREZGaWxlTWFwOjppc1ZhbGlk
S2V5KHBkZlVVSUQpKTsKQEAgLTUzMCw2ICs1MzAsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6b3Bl
blBERkZyb21UZW1wb3JhcnlGCiAgICAgICAgIFtbTlNXb3Jrc3BhY2Ugc2hhcmVkV29ya3NwYWNl
XSBvcGVuVVJMOnBkZkZpbGVVUkxdOwogICAgIH0pOwogfQorI2VuZGlmCiAKICNpZiBFTkFCTEUo
UERGS0lUX1BMVUdJTikKIHZvaWQgV2ViUGFnZVByb3h5OjpzaG93UERGQ29udGV4dE1lbnUoY29u
c3QgV2ViS2l0OjpQREZDb250ZXh0TWVudSYgY29udGV4dE1lbnUsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoT3B0aW9uYWw8aW50MzJfdD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC02NzMs
NiArNjc0LDQ5IEBAIFBsYXRmb3JtVmlldyogV2ViUGFnZVByb3h5OjpwbGF0Zm9ybVZpZXcKICAg
ICByZXR1cm4gW3BhZ2VDbGllbnQoKS5wbGF0Zm9ybVdpbmRvdygpIGNvbnRlbnRWaWV3XTsKIH0K
IAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKK3ZvaWQgV2ViUGFnZVByb3h5Ojpj
cmVhdGVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiByZWN0KQoreworICAgIHBhZ2VDbGllbnQoKS5jcmVhdGVQREZIVUQoaWRlbnRp
ZmllciwgcmVjdCk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpyZW1vdmVQREZIVUQoUERGUGx1
Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIHBhZ2VDbGllbnQoKS5yZW1vdmVQREZI
VUQoaWRlbnRpZmllcik7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5Ojp1cGRhdGVQREZIVURMb2Nh
dGlvbihQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIHJlY3QpCit7CisgICAgcGFnZUNsaWVudCgpLnVwZGF0ZVBERkhVRExvY2F0aW9uKGlkZW50
aWZpZXIsIHJlY3QpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6cGRmWm9vbUluKFBERlBsdWdp
bklkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpa
b29tUERGSW4oaWRlbnRpZmllcikpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6cGRmWm9vbU91
dChQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgc2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6Wm9vbVBERk91dChpZGVudGlmaWVyKSk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5
OjpwZGZTYXZlVG9QREYoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIHNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViUGFnZTo6U2F2ZVBERihpZGVudGlmaWVyKSwg
W3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gKFN0cmluZyYmIHN1Z2dlc3Rl
ZEZpbGVuYW1lLCBVUkwmJiBvcmlnaW5hdGluZ1VSTCwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNl
JiBkYXRhUmVmZXJlbmNlKSB7CisgICAgICAgIHNhdmVQREZUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRl
cihXVEZNb3ZlKHN1Z2dlc3RlZEZpbGVuYW1lKSwgV1RGTW92ZShvcmlnaW5hdGluZ1VSTCksIGRh
dGFSZWZlcmVuY2UpOworICAgIH0pOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6cGRmT3Blbldp
dGhQcmV2aWV3KFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBzZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6Ok9wZW5QREZXaXRoUHJldmlldyhpZGVudGlm
aWVyKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gKFN0cmluZyYmIHN1
Z2dlc3RlZEZpbGVuYW1lLCBGcmFtZUluZm9EYXRhJiYgZnJhbWVJbmZvLCBjb25zdCBJUEM6OkRh
dGFSZWZlcmVuY2UmIGRhdGEsIGNvbnN0IFN0cmluZyYgcGRmVVVJRCkgeworICAgICAgICBzYXZl
UERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKFdURk1vdmUo
c3VnZ2VzdGVkRmlsZW5hbWUpLCBXVEZNb3ZlKGZyYW1lSW5mbyksIGRhdGEsIHBkZlVVSUQpOwor
ICAgIH0pOworfQorCisjZW5kaWYgLy8gRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKwogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDI2NjA5MCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTE3OTAsNiArMTc5MCw3IEBACiAJCUQzQjk0ODQ5MTFGRjRC
NjUwMDAzMkIzOSAvKiBXZWJTZWFyY2hQb3B1cE1lbnUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzQjk0ODQ1MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJT
ZWFyY2hQb3B1cE1lbnUuaCAqLzsgfTsKIAkJREY0NjJFMEYyM0YyMkY1NTAwRUZGMzVGIC8qIFdL
SFRUUENvb2tpZVN0b3JlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gREY0NjJFMEUyM0YyMkY1MzAwRUZGMzVGIC8qIFdLSFRUUENvb2tpZVN0
b3JlUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCURGNDYyRTEyMjNGMzM4QkUwMEVGRjM1RiAvKiBXS0NvbnRlbnRXb3JsZFByaXZhdGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERGNDYyRTEx
MjNGMzM4QUQwMEVGRjM1RiAvKiBXS0NvbnRlbnRXb3JsZFByaXZhdGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlERjg0Q0VFNDI0OUFBMjREMDA5
MDk2RjYgLyogV0tQREZIVURWaWV3Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gREY4NENFRTIyNDlBQTIxRjAwOTA5NkY2IC8qIFdLUERGSFVEVmlldy5t
bSAqLzsgfTsKIAkJRTEwNUZFNTQxOEQ3QjlERTAwOEY1N0E4IC8qIEVkaXRpbmdSYW5nZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEwNUZFNTMxOEQ3
QjlERTAwOEY1N0E4IC8qIEVkaXRpbmdSYW5nZS5oICovOyB9OwogCQlFMTFEMzVBRTE2QjYzRDFC
MDA2RDIzRDcgLyogY29tLmFwcGxlLldlYlByb2Nlc3Muc2IgaW4gUmVzb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOTY3RTM3MTUwQUI1RTIwMEM3MzE2OSAvKiBj
b20uYXBwbGUuV2ViUHJvY2Vzcy5zYiAqLzsgfTsKIAkJRTE0QTk1NEExNkUwMTZBNDAwNjhERTgy
IC8qIE5ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTRBOTU0ODE2RTAxNkE0MDA2OERFODIgLyog
TmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXMuaCAqLzsgfTsKQEAgLTUyNzksNiArNTI4
MCw5IEBACiAJCURGNDYyRTExMjNGMzM4QUQwMEVGRjM1RiAvKiBXS0NvbnRlbnRXb3JsZFByaXZh
dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tDb250ZW50V29ybGRQcml2
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURGNThDNjMxMTM3MUFDNTgwMEY5
QTM3QyAvKiBOYXRpdmVXZWJXaGVlbEV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE5hdGl2ZVdlYldoZWVsRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJREY1OEM2MzUxMzcxQUNBMDAwRjlBMzdDIC8qIE5hdGl2ZVdlYldoZWVsRXZlbnRNYWMubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBOYXRpdmVXZWJXaGVlbEV2
ZW50TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlERjc0Mjc1QzI0RjQ5NTUw
MDBGOEFCRTkgLyogUERGUGx1Z2luSWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQREZQbHVnaW5JZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCURGODRDRUUyMjQ5QUEyMUYwMDkwOTZGNiAvKiBXS1BERkhVRFZpZXcubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS1BERkhVRFZpZXcubW07IHBhdGgg
PSBQREYvV0tQREZIVURWaWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlERjg0
Q0VFMzI0OUFBMjFGMDA5MDk2RjYgLyogV0tQREZIVURWaWV3LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IFdLUERGSFVEVmlldy5oOyBwYXRoID0gUERGL1dLUERGSFVEVmlldy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTA1RkU1MzE4RDdCOURFMDA4RjU3QTgg
LyogRWRpdGluZ1JhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVkaXRp
bmdSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTE1QzcxNTE5MEY4QTI1
MDBFQ0M1MTYgLyogY29tLmFwcGxlLldlYktpdC5TdG9yYWdlLnNiICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
bmFtZSA9IGNvbS5hcHBsZS5XZWJLaXQuU3RvcmFnZS5zYjsgcGF0aCA9IERlcml2ZWRTb3VyY2Vz
L1dlYktpdDIvY29tLmFwcGxlLldlYktpdC5TdG9yYWdlLnNiOyBzb3VyY2VUcmVlID0gQlVJTFRf
UFJPRFVDVFNfRElSOyB9OwogCQlFMTMzRkQ4OTE0MjNERDdGMDBGQzdCRkIgLyogV2ViS2l0Lmlj
bnMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBpbWFn
ZS5pY25zOyBuYW1lID0gV2ViS2l0LmljbnM7IHBhdGggPSBSZXNvdXJjZXMvV2ViS2l0LmljbnM7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01OTAwLDYgKzU5MDQsNyBAQAogCQkJY2hp
bGRyZW4gPSAoCiAJCQkJMUE2RkI5MDgxMUU2NkZCMTAwREIxMzcxIC8qIE5ldHNjYXBlICovLAog
CQkJCUUxOTk4NzVCMTQyQkY5Q0YwMEJCMkRFNyAvKiBQREYgKi8sCisJCQkJREY3NDI3NUMyNEY0
OTU1MDAwRjhBQkU5IC8qIFBERlBsdWdpbklkZW50aWZpZXIuaCAqLywKIAkJCQkxQTZGQjdEMDEx
RTY1MUUyMDBEQjEzNzEgLyogUGx1Z2luLmNwcCAqLywKIAkJCQkxQTZGQjdEMTExRTY1MUUyMDBE
QjEzNzEgLyogUGx1Z2luLmggKi8sCiAJCQkJMUFBNTZGMjgxMUU5MkJDODAwNjFCODgyIC8qIFBs
dWdpbkNvbnRyb2xsZXIuaCAqLywKQEAgLTg5NjMsNiArODk2OCw3IEBACiAJCQkJQ0Q0NTcwRDgy
NDQ0Q0ExNzAwQTNEQ0VCIC8qIE1lZGlhICovLAogCQkJCTUxMENDN0U3MTYxMzhFNzIwMEQwM0VE
MyAvKiBOZXR3b3JrICovLAogCQkJCTMxQTJFQzQwMTQ4OTk3MzcwMDgxMEQ3MSAvKiBOb3RpZmlj
YXRpb25zICovLAorCQkJCURGODRDRUUxMjQ5QUEyMDAwMDkwOTZGNiAvKiBQREYgKi8sCiAJCQkJ
MUFFRkNDMDUxMUQwMUYzNDAwODIxOUQzIC8qIFBsdWdpbnMgKi8sCiAJCQkJMkQxNTUxQTkxRjVB
OUI0MjAwMDZFM0ZFIC8qIFJlbW90ZUxheWVyVHJlZSAqLywKIAkJCQkxQUFGMDg5RTE5MjY4MUFD
MDBCNjM5MEMgLyogVXNlckNvbnRlbnQgKi8sCkBAIC0xMDQ1MSw2ICsxMDQ1NywxNSBAQAogCQkJ
cGF0aCA9IGlvczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCURGODRDRUUx
MjQ5QUEyMDAwMDkwOTZGNiAvKiBQREYgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNo
aWxkcmVuID0gKAorCQkJCURGODRDRUUzMjQ5QUEyMUYwMDkwOTZGNiAvKiBXS1BERkhVRFZpZXcu
aCAqLywKKwkJCQlERjg0Q0VFMjI0OUFBMjFGMDA5MDk2RjYgLyogV0tQREZIVURWaWV3Lm1tICov
LAorCQkJKTsKKwkJCW5hbWUgPSBQREY7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9
OwogCQlFMTcwODc2RDE2RDZDQTcyMDBGOTkyMjYgLyogRmlsZUFQSSAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0xMzE0Miw2ICsxMzE1Nyw3IEBACiAJCQkJ
NjM3MjgxQTMyMUFEQzc0NDAwOUUwREU2IC8qIFdLRG93bmxvYWRQcm9ncmVzcy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTVDRTkxMjBEMjI5M0MyMTkwMDVCRUM3OCAvKiBXS01haW4ubW0gaW4gU291
cmNlcyAqLywKIAkJCQk0NjU3RDg4QTIyNjY0QTJGMDA1REU4MjMgLyogV0tPcmllbnRhdGlvbkFj
Y2Vzc0FsZXJ0Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJREY4NENFRTQyNDlBQTI0RDAwOTA5NkY2
IC8qIFdLUERGSFVEVmlldy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTVDQTI2RDgzMjE3QUQxQjgw
MEY5N0EzNSAvKiBXS1NhZmVCcm93c2luZ1dhcm5pbmcubW0gaW4gU291cmNlcyAqLywKIAkJCQkx
REIwMTk0NDIxMUNGMDA1MDA5RkIzRTggLyogV0tTaGFyZVNoZWV0Lm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJN0E3OEZGMzMyMjQxOTE5QjAwOTY0ODNFIC8qIFdLU3RvcmFnZUFjY2Vzc0FsZXJ0Lm1t
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9Q
REZQbHVnaW5JZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1BsdWdpbnMvUERGUGx1Z2luSWRlbnRpZmllci5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERlBsdWdpbklkZW50aWZpZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
I2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCitlbnVtIFBERlBsdWdpbklkZW50aWZpZXJU
eXBlIHsgfTsKK3VzaW5nIFBERlBsdWdpbklkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPFBE
RlBsdWdpbklkZW50aWZpZXJUeXBlPjsKKyNlbmRpZgorCit9CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGTGF5ZXJDb250cm9sbGVyU1BJLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERkxheWVyQ29udHJv
bGxlclNQSS5oCShyZXZpc2lvbiAyNjYwOTApCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
UGx1Z2lucy9QREYvUERGTGF5ZXJDb250cm9sbGVyU1BJLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3
LDYgKzg3LDEyIEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFBERkxheWVyQ29udHIKIAog
LSAodm9pZClzbmFwc2hvdEluQ29udGV4dDooQ0dDb250ZXh0UmVmKWNvbnRleHQ7CiAKKyNpZiBF
TkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorLSAodm9pZClzZXREaXNwbGF5c1BERkhVRENvbnRy
b2xsZXI6KEJPT0wpZGlzcGxheXNDb250cm9sbGVyOworLSAodm9pZCl6b29tSW46KGlkKWF0UG9p
bnQ7CistICh2b2lkKXpvb21PdXQ6KGlkKWF0UG9pbnQ7CisjZW5kaWYKKwogLSAodm9pZCltYWdu
aWZ5V2l0aE1hZ25pZmljYXRpb246KENHRmxvYXQpbWFnbmlmaWNhdGlvbiBhdFBvaW50OihDR1Bv
aW50KXBvaW50IGltbWVkaWF0ZWx5OihCT09MKWltbWVkaWF0ZWx5OwogCiAtIChDR1BvaW50KXNj
cm9sbFBvc2l0aW9uOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERG
L1BERlBsdWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BERi9QREZQbHVnaW4uaAkocmV2aXNpb24gMjY2MDkwKQorKysgU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCw3IEBACiAjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCiAKICNpbmNsdWRlICJQREZLaXRJ
bXBvcnRzLmgiCisjaW5jbHVkZSAiUERGUGx1Z2luSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlBs
dWdpbi5oIgogI2luY2x1ZGUgIldlYkV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViSGl0VGVzdFJlc3Vs
dERhdGEuaCIKQEAgLTUwLDYgKzUxLDcgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlSlNW
YWx1ZSogSlNWYQogT0JKQ19DTEFTUyBOU0FycmF5OwogT0JKQ19DTEFTUyBOU0F0dHJpYnV0ZWRT
dHJpbmc7CiBPQkpDX0NMQVNTIE5TRGF0YTsKK09CSkNfQ0xBU1MgTlNFdmVudDsKIE9CSkNfQ0xB
U1MgTlNTdHJpbmc7CiBPQkpDX0NMQVNTIFBERkFubm90YXRpb247CiBPQkpDX0NMQVNTIFBERkxh
eWVyQ29udHJvbGxlcjsKQEAgLTc3LDggKzc5LDkgQEAgY2xhc3MgUERGUGx1Z2luQW5ub3RhdGlv
bjsKIGNsYXNzIFBERlBsdWdpblBhc3N3b3JkRmllbGQ7CiBjbGFzcyBQbHVnaW5WaWV3OwogY2xh
c3MgV2ViRnJhbWU7CitzdHJ1Y3QgRnJhbWVJbmZvRGF0YTsKIAotY2xhc3MgUERGUGx1Z2luIGZp
bmFsIDogcHVibGljIFBsdWdpbiwgcHJpdmF0ZSBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYQorY2xh
c3MgUERGUGx1Z2luIGZpbmFsIDogcHVibGljIFBsdWdpbiwgcHVibGljIFdlYkNvcmU6OlNjcm9s
bGFibGVBcmVhCiAjaWYgSEFWRShJTkNSRU1FTlRBTF9QREZfQVBJUykKICAgICAsIHByaXZhdGUg
V2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQKICNlbmRpZgpAQCAtMTAz
LDkgKzEwNiwxOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBub3RpZnlTZWxlY3Rpb25DaGFuZ2VkKFBE
RlNlbGVjdGlvbiAqKTsKICAgICB2b2lkIG5vdGlmeUN1cnNvckNoYW5nZWQodWludDY0X3QgLyog
UERGTGF5ZXJDb250cm9sbGVyQ3Vyc29yVHlwZSAqLyk7CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VT
U19QREZfSFVEKQorICAgIHZvaWQgem9vbUluKCk7CisgICAgdm9pZCB6b29tT3V0KCk7CisgICAg
dm9pZCBzYXZlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJiwgY29uc3QgVVJM
JiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik+JiYpOworICAgIHZvaWQgb3BlbldpdGhQcmV2
aWV3KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJiwgRnJhbWVJbmZvRGF0YSYm
LCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmKT4mJik7CisgICAgUERG
UGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVy
OyB9CisjZW5kaWYKKwogICAgIHZvaWQgY2xpY2tlZExpbmsoTlNVUkwgKik7CisjaWYgIUVOQUJM
RShVSV9QUk9DRVNTX1BERl9IVUQpCiAgICAgdm9pZCBzYXZlVG9QREYoKTsKICAgICB2b2lkIG9w
ZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oKTsKKyNlbmRpZgogICAgIHZvaWQgd3JpdGVJdGVtc1Rv
UGFzdGVib2FyZChOU1N0cmluZyAqcGFzdGVib2FyZE5hbWUsIE5TQXJyYXkgKml0ZW1zLCBOU0Fy
cmF5ICp0eXBlcyk7CiAgICAgdm9pZCBzaG93RGVmaW5pdGlvbkZvckF0dHJpYnV0ZWRTdHJpbmco
TlNBdHRyaWJ1dGVkU3RyaW5nICosIENHUG9pbnQpOwogICAgIHZvaWQgcGVyZm9ybVdlYlNlYXJj
aChOU1N0cmluZyAqKTsKQEAgLTExOCw3ICsxMzEsMTAgQEAgcHVibGljOgogCiAgICAgV2ViQ29y
ZTo6RmxvYXRSZWN0IGNvbnZlcnRGcm9tUERGVmlld1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYpIGNvbnN0OwogICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tUm9vdFZp
ZXdUb1BERlZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKKyAgICBXZWJDb3Jl
OjpJbnRQb2ludCBjb252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JikgY29uc3Q7CisgICAgV2ViQ29yZTo6SW50UmVjdCBjb252ZXJ0RnJvbVBERlZpZXdU
b1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdDsKICAgICBXZWJDb3JlOjpJ
bnRSZWN0IGJvdW5kc09uU2NyZWVuKCkgY29uc3Q7CisgICAgV2ViQ29yZTo6SW50UmVjdCBmcmFt
ZUZvckhVRCgpIGNvbnN0OwogCiAgICAgYm9vbCBzaG93Q29udGV4dE1lbnVBdFBvaW50KGNvbnN0
IFdlYkNvcmU6OkludFBvaW50Jik7CiAKQEAgLTE1OSw3ICsxNzUsNyBAQCBwcml2YXRlOgogICAg
IGJvb2wgd2FudHNXaGVlbEV2ZW50cygpIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KICAgICB2b2lk
IGdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHBsdWdpblNpemUsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0LCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFu
c2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0pIGZpbmFsOwogICAgIHZvaWQgY29udGVu
dHNTY2FsZUZhY3RvckNoYW5nZWQoZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgdmlzaWJpbGl0eURp
ZENoYW5nZShib29sKSBmaW5hbCB7IH0KKyAgICB2b2lkIHZpc2liaWxpdHlEaWRDaGFuZ2UoYm9v
bCkgZmluYWw7CiAgICAgdm9pZCBmcmFtZURpZEZpbmlzaExvYWRpbmcodWludDY0X3QgcmVxdWVz
dElEKSBmaW5hbDsKICAgICB2b2lkIGZyYW1lRGlkRmFpbCh1aW50NjRfdCByZXF1ZXN0SUQsIGJv
b2wgd2FzQ2FuY2VsbGVkKSBmaW5hbDsKICAgICB2b2lkIGRpZEV2YWx1YXRlSmF2YVNjcmlwdCh1
aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFN0cmluZyYgcmVzdWx0KSBmaW5hbDsKQEAgLTI2Myw3
ICsyNzksNiBAQCBwcml2YXRlOgogICAgIE5TRXZlbnQgKm5zRXZlbnRGb3JXZWJNb3VzZUV2ZW50
KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKICAgICBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJv
bVBsdWdpblRvUERGVmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OwogICAgIFdl
YkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tUm9vdFZpZXdUb1BsdWdpbihjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYpIGNvbnN0OwotICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tUERG
Vmlld1RvUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKICAgICAKICAg
ICBib29sIHN1cHBvcnRzRm9ybXMoKTsKICAgICBib29sIGlzRnVsbEZyYW1lUGx1Z2luKCkgY29u
c3Q7CkBAIC00MDMsNiArNDE4LDkgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAjZW5kaWYgLy8gSEFW
RShJTkNSRU1FTlRBTF9QREZfQVBJUykKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQor
ICAgIFBERlBsdWdpbklkZW50aWZpZXIgbV9pZGVudGlmaWVyOworI2VuZGlmCiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BERi9QREZQbHVnaW4ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQkocmV2aXNpb24gMjY2MDkwKQorKysgU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQkod29ya2luZyBjb3B5KQpA
QCAtNDMzLDEyICs0MzMsMTYgQEAgLSAodm9pZClwZXJmb3JtU3BvdGxpZ2h0U2VhcmNoOihOU1N0
cmluZwogCiAtICh2b2lkKW9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24KIHsKKyNpZiAhRU5BQkxF
KFVJX1BST0NFU1NfUERGX0hVRCkKICAgICBfcGRmUGx1Z2luLT5vcGVuV2l0aE5hdGl2ZUFwcGxp
Y2F0aW9uKCk7CisjZW5kaWYKIH0KIAogLSAodm9pZClzYXZlVG9QREYKIHsKKyNpZiAhRU5BQkxF
KFVJX1BST0NFU1NfUERGX0hVRCkKICAgICBfcGRmUGx1Z2luLT5zYXZlVG9QREYoKTsKKyNlbmRp
ZgogfQogCiAtICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICop
cGRmTGF5ZXJDb250cm9sbGVyIGNsaWNrZWRMaW5rV2l0aFVSTDooTlNVUkwgKil1cmwKQEAgLTYw
MCw3ICs2MDQsMTMgQEAgaW5saW5lIFBERlBsdWdpbjo6UERGUGx1Z2luKFdlYkZyYW1lJiBmcgog
I2lmIEhBVkUoSU5DUkVNRU5UQUxfUERGX0FQSVMpCiAgICAgLCBtX2luY3JlbWVudGFsUERGTG9h
ZGluZ0VuYWJsZWQoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS5pbmNyZW1lbnRhbFBERkxvYWRpbmdFbmFibGVkKCkpCiAjZW5kaWYKKyNpZiBFTkFCTEUo
VUlfUFJPQ0VTU19QREZfSFVEKQorICAgICwgbV9pZGVudGlmaWVyKFBERlBsdWdpbklkZW50aWZp
ZXI6OmdlbmVyYXRlKCkpCisjZW5kaWYKIHsKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVE
KQorICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBzZXREaXNwbGF5c1BERkhVRENvbnRyb2xsZXI6
Tk9dOworI2VuZGlmCiAgICAgbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkuZGVsZWdhdGUgPSBt
X3BkZkxheWVyQ29udHJvbGxlckRlbGVnYXRlLmdldCgpOwogICAgIG1fcGRmTGF5ZXJDb250cm9s
bGVyLmdldCgpLnBhcmVudExheWVyID0gbV9jb250ZW50TGF5ZXIuZ2V0KCk7CiAKQEAgLTY0MCw2
ICs2NTAsMTAgQEAgaW5saW5lIFBERlBsdWdpbjo6UERGUGx1Z2luKFdlYkZyYW1lJiBmcgogCiBQ
REZQbHVnaW46On5QREZQbHVnaW4oKQogeworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQp
CisgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+cmVt
b3ZlUERGSFVEKCp0aGlzKTsKKyNlbmRpZgogfQogCiAjaWYgSEFWRShJTkNSRU1FTlRBTF9QREZf
QVBJUykKQEAgLTE3NzIsNiArMTc4NiwxMSBAQCB2b2lkIFBERlBsdWdpbjo6Y29udGVudHNTY2Fs
ZUZhY3RvckNoYW5nCiAgICAgdXBkYXRlUGFnZUFuZERldmljZVNjYWxlRmFjdG9ycygpOwogfQog
CitJbnRSZWN0IFBERlBsdWdpbjo6ZnJhbWVGb3JIVUQoKSBjb25zdAoreworICAgIHJldHVybiBj
b252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3KEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSgpKSk7
Cit9CisKIHZvaWQgUERGUGx1Z2luOjpjYWxjdWxhdGVTaXplcygpCiB7CiAgICAgaWYgKFttX3Bk
ZkRvY3VtZW50IGlzTG9ja2VkXSkgewpAQCAtMTc4Miw2ICsxODAxLDEwIEBAIHZvaWQgUERGUGx1
Z2luOjpjYWxjdWxhdGVTaXplcygpCiAKICAgICBtX2ZpcnN0UGFnZUhlaWdodCA9IFttX3BkZkRv
Y3VtZW50IHBhZ2VDb3VudF0gPyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQ0dDZWlsaW5nKFtbbV9w
ZGZEb2N1bWVudCBwYWdlQXRJbmRleDowXSBib3VuZHNGb3JCb3g6a1BERkRpc3BsYXlCb3hDcm9w
Qm94XS5zaXplLmhlaWdodCkpIDogMDsKICAgICBzZXRQREZEb2N1bWVudFNpemUoSW50U2l6ZShb
bV9wZGZMYXllckNvbnRyb2xsZXIgY29udGVudFNpemVSZXNwZWN0aW5nWm9vbV0pKTsKKworI2lm
IEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgbV9mcmFtZS5wYWdlKCktPnVwZGF0ZVBE
RkhVRExvY2F0aW9uKCp0aGlzLCBmcmFtZUZvckhVRCgpKTsKKyNlbmRpZgogfQogCiBib29sIFBE
RlBsdWdpbjo6aW5pdGlhbGl6ZShjb25zdCBQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQpAQCAtMTkx
Niw3ICsxOTM5LDEzIEBAIEludFBvaW50IFBERlBsdWdpbjo6Y29udmVydEZyb21QREZWaWV3VG8K
ICAgICBJbnRQb2ludCBwb2ludEluUGx1Z2luQ29vcmRpbmF0ZXMocG9pbnQueCgpLCBzaXplKCku
aGVpZ2h0KCkgLSBwb2ludC55KCkpOwogICAgIHJldHVybiBtX3Jvb3RWaWV3VG9QbHVnaW5UcmFu
c2Zvcm0uaW52ZXJzZSgpLnZhbHVlT3IoQWZmaW5lVHJhbnNmb3JtKCkpLm1hcFBvaW50KHBvaW50
SW5QbHVnaW5Db29yZGluYXRlcyk7CiB9Ci0gICAgCisKK0ludFJlY3QgUERGUGx1Z2luOjpjb252
ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3KGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Cit7Cisg
ICAgSW50UmVjdCByZWN0SW5QbHVnaW5Db29yZGluYXRlcyhyZWN0LngoKSwgcmVjdC55KCksIHJl
Y3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgcmV0dXJuIG1fcm9vdFZpZXdUb1BsdWdp
blRyYW5zZm9ybS5pbnZlcnNlKCkudmFsdWVPcihBZmZpbmVUcmFuc2Zvcm0oKSkubWFwUmVjdChy
ZWN0SW5QbHVnaW5Db29yZGluYXRlcyk7Cit9CisKIEludFBvaW50IFBERlBsdWdpbjo6Y29udmVy
dEZyb21Sb290Vmlld1RvUERGVmlldyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CiB7CiAg
ICAgSW50UG9pbnQgcG9pbnRJblBsdWdpbkNvb3JkaW5hdGVzID0gbV9yb290Vmlld1RvUGx1Z2lu
VHJhbnNmb3JtLm1hcFBvaW50KHBvaW50KTsKQEAgLTE5NDcsNiArMTk3NiwxOCBAQCBJbnRSZWN0
IFBERlBsdWdpbjo6Ym91bmRzT25TY3JlZW4oKSBjb25zCiAgICAgcmV0dXJuIGZyYW1lVmlldy0+
Y29udGVudHNUb1NjcmVlbihlbmNsb3NpbmdJbnRSZWN0KHJlY3RJblJvb3RWaWV3Q29vcmRpbmF0
ZXMpKTsKIH0KIAordm9pZCBQREZQbHVnaW46OnZpc2liaWxpdHlEaWRDaGFuZ2UoYm9vbCB2aXNp
YmxlKQoreworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgaWYgKHZpc2libGUp
CisgICAgICAgIG1fZnJhbWUucGFnZSgpLT5jcmVhdGVQREZIVUQoKnRoaXMsIGZyYW1lRm9ySFVE
KCkpOworICAgIGVsc2UKKyAgICAgICAgbV9mcmFtZS5wYWdlKCktPnJlbW92ZVBERkhVRCgqdGhp
cyk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh2aXNpYmxlKTsKKyNlbmRpZgorfQorCiB2b2lk
IFBERlBsdWdpbjo6Z2VvbWV0cnlEaWRDaGFuZ2UoY29uc3QgSW50U2l6ZSYgcGx1Z2luU2l6ZSwg
Y29uc3QgSW50UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGx1Z2luVG9Sb290Vmlld1Ry
YW5zZm9ybSkKIHsKICAgICBpZiAoc2l6ZSgpID09IHBsdWdpblNpemUgJiYgcGx1Z2luVmlldygp
LT5wYWdlU2NhbGVGYWN0b3IoKSA9PSBbbV9wZGZMYXllckNvbnRyb2xsZXIgY29udGVudFNjYWxl
RmFjdG9yXSkKQEAgLTIzOTIsNiArMjQzMywzMSBAQCBib29sIFBERlBsdWdpbjo6cGx1Z2luSGFu
ZGxlc0NvbnRlbnRPZmZzCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKyNpZiBFTkFCTEUoVUlfUFJP
Q0VTU19QREZfSFVEKQorCit2b2lkIFBERlBsdWdpbjo6em9vbUluKCkKK3sKKyAgICBbbV9wZGZM
YXllckNvbnRyb2xsZXIgem9vbUluOm5pbF07Cit9CisKK3ZvaWQgUERGUGx1Z2luOjp6b29tT3V0
KCkKK3sKKyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgem9vbU91dDpuaWxdOworfQorCit2b2lk
IFBERlBsdWdpbjo6c2F2ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYsIGNv
bnN0IFVSTCYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQoreworICAgIE5TRGF0YSAqZGF0YSA9IGxpdmVEYXRhKCk7CisgICAgY29tcGxldGlvbkhhbmRs
ZXIobV9zdWdnZXN0ZWRGaWxlbmFtZSwgbV9mcmFtZS51cmwoKSwgSVBDOjogRGF0YVJlZmVyZW5j
ZShzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5ieXRlcyksIGRhdGEubGVuZ3RoKSk7
Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpvcGVuV2l0aFByZXZpZXcoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChjb25zdCBTdHJpbmcmLCBGcmFtZUluZm9EYXRhJiYsIGNvbnN0IElQQzo6RGF0YVJlZmVy
ZW5jZSYsIGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIE5TRGF0
YSAqZGF0YSA9IGxpdmVEYXRhKCk7CisgICAgY29tcGxldGlvbkhhbmRsZXIobV9zdWdnZXN0ZWRG
aWxlbmFtZSwgbV9mcmFtZS5pbmZvKCksIElQQzo6IERhdGFSZWZlcmVuY2UgeyBzdGF0aWNfY2Fz
dDxjb25zdCB1aW50OF90Kj4oZGF0YS5ieXRlcyksIGRhdGEubGVuZ3RoIH0sIGNyZWF0ZUNhbm9u
aWNhbFVVSURTdHJpbmcoKSk7Cit9CisKKyNlbHNlIC8vIEVOQUJMRShVSV9QUk9DRVNTX1BERl9I
VUQpCiAgICAgCiB2b2lkIFBERlBsdWdpbjo6c2F2ZVRvUERGKCkKIHsKQEAgLTI0MjQsNiArMjQ5
MCw4IEBAIHZvaWQgUERGUGx1Z2luOjpvcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW8KICAgICBtX2Zy
YW1lLnBhZ2UoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpPcGVuUERGRnJvbVRlbXBv
cmFyeUZvbGRlcldpdGhOYXRpdmVBcHBsaWNhdGlvbihtX2ZyYW1lLmluZm8oKSwgbV90ZW1wb3Jh
cnlQREZVVUlEKSk7CiB9CiAKKyNlbmRpZiAvLyBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQor
CiB2b2lkIFBERlBsdWdpbjo6d3JpdGVJdGVtc1RvUGFzdGVib2FyZChOU1N0cmluZyAqcGFzdGVi
b2FyZE5hbWUsIE5TQXJyYXkgKml0ZW1zLCBOU0FycmF5ICp0eXBlcykKIHsKICAgICBhdXRvIHBh
c3RlYm9hcmRUeXBlcyA9IG1ha2VWZWN0b3I8U3RyaW5nPih0eXBlcyk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMjY2MDkw
KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUxMjMsMTIgKzUxMjMsMTIgQEAgdm9pZCBXZWJQYWdlOjpkaWRGaW5pc2hQ
cmludE9wZXJhdGlvbihjbwogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikg
JiYgIUVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCiB2b2lkIFdlYlBhZ2U6OnNhdmVQREZUb0Zp
bGVJbkRvd25sb2Fkc0ZvbGRlcihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25z
dCBVUkwmIG9yaWdpbmF0aW5nVVJMLCBjb25zdCB1aW50OF90KiBkYXRhLCB1bnNpZ25lZCBsb25n
IHNpemUpCiB7CiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTYXZlUERGVG9GaWxl
SW5Eb3dubG9hZHNGb2xkZXIoc3VnZ2VzdGVkRmlsZW5hbWUsIG9yaWdpbmF0aW5nVVJMLCBJUEM6
OkRhdGFSZWZlcmVuY2UoZGF0YSwgc2l6ZSkpKTsKIH0KIAotI2lmIFBMQVRGT1JNKENPQ09BKQog
dm9pZCBXZWJQYWdlOjpzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFw
cGxpY2F0aW9uKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIEZyYW1lSW5mb0RhdGEm
JiBmcmFtZUluZm8sIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgY29u
c3QgU3RyaW5nJiBwZGZVVUlEKQogewogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
U2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbihzdWdn
ZXN0ZWRGaWxlbmFtZSwgZnJhbWVJbmZvLCBJUEM6OkRhdGFSZWZlcmVuY2UoZGF0YSwgc2l6ZSks
IHBkZlVVSUQpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmgJKHJldmlzaW9uIDI2NjA5MCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUg
Ik1lc3NhZ2VSZWNlaXZlci5oIgogI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKICNpbmNsdWRl
ICJPcHRpb25hbENhbGxiYWNrSUQuaCIKKyNpbmNsdWRlICJQREZQbHVnaW5JZGVudGlmaWVyLmgi
CiAjaW5jbHVkZSAiUGx1Z2luLmgiCiAjaW5jbHVkZSAiUG9saWN5RGVjaXNpb24uaCIKICNpbmNs
dWRlICJTYW5kYm94RXh0ZW5zaW9uLmgiCkBAIC0zNDUsNiArMzQ2LDE2IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgY2VudGVyU2VsZWN0aW9uSW5WaXNpYmxlQXJlYSgpOwogCisjaWYgRU5BQkxFKFVJ
X1BST0NFU1NfUERGX0hVRCkKKyAgICB2b2lkIGNyZWF0ZVBERkhVRChQREZQbHVnaW4mLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCB1cGRhdGVQREZIVURMb2NhdGlvbihQREZQ
bHVnaW4mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCByZW1vdmVQREZIVUQo
UERGUGx1Z2luJik7CisgICAgdm9pZCB6b29tUERGSW4oUERGUGx1Z2luSWRlbnRpZmllcik7Cisg
ICAgdm9pZCB6b29tUERGT3V0KFBERlBsdWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgc2F2ZVBE
RihQREZQbHVnaW5JZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFVSTCYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpPiYmKTsKKyAgICB2b2lk
IG9wZW5QREZXaXRoUHJldmlldyhQREZQbHVnaW5JZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGNvbnN0IFN0cmluZyYsIEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgSVBDOjpEYXRhUmVm
ZXJlbmNlJiwgY29uc3QgU3RyaW5nJik+JiYpOworI2VuZGlmCisKICNpZiBQTEFURk9STShDT0NP
QSkKICAgICB2b2lkIHdpbGxDb21taXRMYXllclRyZWUoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rp
b24mKTsKICAgICB2b2lkIGRpZEZsdXNoTGF5ZXJUcmVlQXRUaW1lKE1vbm90b25pY1RpbWUpOwpA
QCAtMTA3NCw5ICsxMDg1LDggQEAgcHVibGljOgogICAgIE5TRGljdGlvbmFyeSAqZGF0YURldGVj
dGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2RhdGFEZXRlY3Rpb25Db250ZXh0LmdldCgp
OyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKSAmJiAhRU5BQkxFKFVJX1BS
T0NFU1NfUERGX0hVRCkKICAgICB2b2lkIHNhdmVQREZUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcihj
b25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25zdCBVUkwmIG9yaWdpbmF0aW5nVVJM
LCBjb25zdCB1aW50OF90KiBkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUpOwotCi0jaWYgUExBVEZP
Uk0oQ09DT0EpCiAgICAgdm9pZCBzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5h
dGl2ZUFwcGxpY2F0aW9uKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIEZyYW1lSW5m
b0RhdGEmJiwgY29uc3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplLCBjb25zdCBT
dHJpbmcmIHBkZlVVSUQpOwogI2VuZGlmCiAKQEAgLTE3OTEsNiArMTgwMSwxMCBAQCBwcml2YXRl
OgogCiAgICAgV2ViQ29yZTo6Q29sb3IgbV91bmRlcmxheUNvbG9yOwogCisjaWYgRU5BQkxFKFVJ
X1BST0NFU1NfUERGX0hVRCkKKyAgICBIYXNoTWFwPFBERlBsdWdpbklkZW50aWZpZXIsIFdlYWtQ
dHI8UERGUGx1Z2luPj4gbV9wZGZQbHVnSW5zV2l0aEhVRDsKKyNlbmRpZgorCiAgICAgYm9vbCBt
X2lzSW5SZWRvIHsgZmFsc2UgfTsKICAgICBib29sIG1faXNDbG9zZWQgeyBmYWxzZSB9OwogICAg
IGJvb2wgbV90YWJUb0xpbmtzIHsgZmFsc2UgfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjY2
MDkwKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdl
cy5pbgkod29ya2luZyBjb3B5KQpAQCAtNTc2LDYgKzU3NiwxMyBAQCBHZW5lcmF0ZVN5bnRoZXRp
Y0VkaXRpbmdDb21tYW5kKGVudW06dWluCiAKICAgICBTZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVm
ZXJzTG9hZGluZykKIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgWm9vbVBE
RkluKFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQorICAgIFpvb21QREZP
dXQoV2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCisgICAgU2F2ZVBERihX
ZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikgLT4gKFN0cmluZyBmaWxlbmFt
ZSwgVVJMIHVybCwgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEpIEFzeW5jCisgICAgT3BlblBERldp
dGhQcmV2aWV3KFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKSAtPiAoU3Ry
aW5nIGZpbGVuYW1lLCBzdHJ1Y3QgV2ViS2l0OjpGcmFtZUluZm9EYXRhIGZyYW1lSW5mbywgSVBD
OjpEYXRhUmVmZXJlbmNlIGRhdGEsIFN0cmluZyB1dWlkKSBBc3luYworI2VuZGlmCisKICAgICBV
cGRhdGVDdXJyZW50TW9kaWZpZXJTdGF0ZShPcHRpb25TZXQ8V2ViQ29yZTo6UGxhdGZvcm1FdmVu
dDo6TW9kaWZpZXI+IG1vZGlmaWVycykKICAgICBTaW11bGF0ZURldmljZU9yaWVudGF0aW9uQ2hh
bmdlKGRvdWJsZSBhbHBoYSwgZG91YmxlIGJldGEsIGRvdWJsZSBnYW1tYSkKIApJbmRleDogU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0J
KHJldmlzaW9uIDI2NjA5MCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9XZWJQYWdlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW1wb3J0
ICJFZGl0aW5nUmFuZ2UuaCIKICNpbXBvcnQgIkVkaXRvclN0YXRlLmgiCiAjaW1wb3J0ICJGb250
SW5mby5oIgorI2ltcG9ydCAiRnJhbWVJbmZvRGF0YS5oIgogI2ltcG9ydCAiSW5qZWN0ZWRCdW5k
bGVIaXRUZXN0UmVzdWx0LmgiCiAjaW1wb3J0ICJQREZLaXRJbXBvcnRzLmgiCiAjaW1wb3J0ICJQ
REZQbHVnaW4uaCIKQEAgLTEwNTEsNyArMTA1Miw2MiBAQCB2b2lkIFdlYlBhZ2U6OnNldEFjY2Vu
dENvbG9yKFdlYkNvcmU6OkNvCiAgICAgW05TQXBwIF9zZXRBY2NlbnRDb2xvcjpjb2xvci5pc1Zh
bGlkKCkgPyBXZWJDb3JlOjpuc0NvbG9yKGNvbG9yKSA6IG5pbF07CiB9CiAKLSNlbmRpZgorI2Vu
ZGlmIC8vIEhBVkUoQVBQX0FDQ0VOVF9DT0xPUlMpCisKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19Q
REZfSFVEKQorCit2b2lkIFdlYlBhZ2U6Onpvb21QREZJbihQREZQbHVnaW5JZGVudGlmaWVyIGlk
ZW50aWZpZXIpCit7CisgICAgYXV0byBwZGZQbHVnaW4gPSBtX3BkZlBsdWdJbnNXaXRoSFVELmdl
dChpZGVudGlmaWVyKTsKKyAgICBpZiAoIXBkZlBsdWdpbikKKyAgICAgICAgcmV0dXJuOworICAg
IHBkZlBsdWdpbi0+em9vbUluKCk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6em9vbVBERk91dChQREZQ
bHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgYXV0byBwZGZQbHVnaW4gPSBtX3Bk
ZlBsdWdJbnNXaXRoSFVELmdldChpZGVudGlmaWVyKTsKKyAgICBpZiAoIXBkZlBsdWdpbikKKyAg
ICAgICAgcmV0dXJuOworICAgIHBkZlBsdWdpbi0+em9vbU91dCgpOworfQorCit2b2lkIFdlYlBh
Z2U6OnNhdmVQREYoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFVSTCYsIGNvbnN0IElQQzo6RGF0YVJlZmVy
ZW5jZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGF1dG8gcGRmUGx1Z2luID0gbV9w
ZGZQbHVnSW5zV2l0aEhVRC5nZXQoaWRlbnRpZmllcik7CisgICAgaWYgKCFwZGZQbHVnaW4pCisg
ICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0sIHsgfSwgeyB9KTsKKyAgICBwZGZQ
bHVnaW4tPnNhdmUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIFdlYlBh
Z2U6Om9wZW5QREZXaXRoUHJldmlldyhQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJiwgRnJhbWVJbmZvRGF0YSYmLCBjb25z
dCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKK3sKKyAgICBhdXRvIHBkZlBsdWdpbiA9IG1fcGRmUGx1Z0luc1dpdGhIVUQuZ2V0KGlkZW50
aWZpZXIpOworICAgIGlmICghcGRmUGx1Z2luKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhh
bmRsZXIoeyB9LCB7IH0sIHsgfSwgeyB9KTsKKyAgICBwZGZQbHVnaW4tPm9wZW5XaXRoUHJldmll
dyhXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6Y3JlYXRl
UERGSFVEKFBERlBsdWdpbiYgcGx1Z2luLCBjb25zdCBJbnRSZWN0JiBib3VuZGluZ0JveCkKK3sK
KyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fcGRmUGx1Z0luc1dpdGhIVUQuYWRkKHBsdWdpbi5pZGVu
dGlmaWVyKCksIG1ha2VXZWFrUHRyKHBsdWdpbikpOworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdF
bnRyeSkKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDcmVhdGVQREZIVUQo
cGx1Z2luLmlkZW50aWZpZXIoKSwgYm91bmRpbmdCb3gpKTsKK30KKwordm9pZCBXZWJQYWdlOjp1
cGRhdGVQREZIVURMb2NhdGlvbihQREZQbHVnaW4mIHBsdWdpbiwgY29uc3QgSW50UmVjdCYgYm91
bmRpbmdCb3gpCit7CisgICAgaWYgKG1fcGRmUGx1Z0luc1dpdGhIVUQuY29udGFpbnMocGx1Z2lu
LmlkZW50aWZpZXIoKSkpCisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6VXBk
YXRlUERGSFVETG9jYXRpb24ocGx1Z2luLmlkZW50aWZpZXIoKSwgYm91bmRpbmdCb3gpKTsKK30K
Kwordm9pZCBXZWJQYWdlOjpyZW1vdmVQREZIVUQoUERGUGx1Z2luJiBwbHVnaW4pCit7CisgICAg
aWYgKG1fcGRmUGx1Z0luc1dpdGhIVUQucmVtb3ZlKHBsdWdpbi5pZGVudGlmaWVyKCkpKQorICAg
ICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlbW92ZVBERkhVRChwbHVnaW4uaWRl
bnRpZmllcigpKSk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407162</attachid>
            <date>2020-08-24 19:40:31 -0700</date>
            <delta_ts>2020-08-25 07:43:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215780-20200824194030.patch</filename>
            <type>text/plain</type>
            <size>64716</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjYwOTQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA4LTI0ICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBQREYgaGVhZHMtdXAgZGlz
cGxheSB0byBVSSBwcm9jZXNzIG9uIG1hY09TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU3ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU4NzE1
ODQ3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
d3RmL1BsYXRmb3JtSGF2ZS5oOgorCiAyMDIwLTA4LTI0ICBBbGV4IENocmlzdGVuc2VuICA8YWNo
cmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgSW1wbGVtZW50IFJlcXVlc3QvUmVzcG9u
c2UgY29uc3VtaW5nIGFzIEZvcm1EYXRhCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVu
YWJsZUNvY29hLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGVD
b2NvYS5oCShyZXZpc2lvbiAyNjYwOTQpCisrKyBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJs
ZUNvY29hLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw2ICsyMjgsMTAgQEAKICNkZWZpbmUgRU5B
QkxFX0dQVV9EUklWRVJfUFJFV0FSTUlORyAxCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKE1BQykg
JiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAwMDAKKyNkZWZpbmUgRU5B
QkxFX1VJX1BST0NFU1NfUERGX0hVRCAxCisjZW5kaWYKKwogI2lmICFkZWZpbmVkKEVOQUJMRV9J
TkRFWEVEX0RBVEFCQVNFKQogI2RlZmluZSBFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSAxCiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9OU0ltYWdlU1BJLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL05TSW1hZ2VTUEkuaAko
cmV2aXNpb24gMjY2MDk0KQorKysgU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL05TSW1h
Z2VTUEkuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogTlNfQVNTVU1FX05PTk5V
TExfQkVHSU4KIAogQGludGVyZmFjZSBOU0ltYWdlICgpCisrIChpbnN0YW5jZXR5cGUpaW1hZ2VX
aXRoSW1hZ2VSZXA6KE5TSW1hZ2VSZXAgKilpbWFnZVJlcDsKIC0gKHZvaWQpbG9ja0ZvY3VzV2l0
aFJlY3Q6KE5TUmVjdClyZWN0IGNvbnRleHQ6KG51bGxhYmxlIE5TR3JhcGhpY3NDb250ZXh0ICop
Y29udGV4dCBoaW50czoobnVsbGFibGUgTlNEaWN0aW9uYXJ5ICopaGludHMgZmxpcHBlZDooQk9P
TClmbGlwcGVkOwogQGVuZAogCkBAIC00Myw2ICs0NCwxMyBAQCBAaW50ZXJmYWNlIE5TSW1hZ2Ug
KE5TU3lzdGVtU3ltYm9scykKICsgKG51bGxhYmxlIE5TSW1hZ2UgKilfaW1hZ2VXaXRoU3lzdGVt
U3ltYm9sTmFtZTooTlNTdHJpbmcgKikgc3ltYm9sTmFtZTsKIEBlbmQKIAorV1RGX0VYVEVSTl9D
X0JFR0lOCisKK2V4dGVybiBjb25zdCBOU1N0cmluZyAqTlNJbWFnZUFsdGVybmF0ZUNyaXRlcmlv
bkZvbnQ7CitleHRlcm4gY29uc3QgTlNTdHJpbmcgKk5TSW1hZ2VBbHRlcm5hdGVDcml0ZXJpb25T
eW1ib2xTY2FsZTsKKworV1RGX0VYVEVSTl9DX0VORAorCiBOU19BU1NVTUVfTk9OTlVMTF9FTkQK
IAogI2VuZGlmCkBAIC01Niw2ICs2NCw2IEBAIGV4dGVybiBjb25zdCBOU0ltYWdlSGludEtleSBO
U0ltYWdlSGludFMKIAogTlNfQVNTVU1FX05PTk5VTExfRU5ECiAKLSNlbmRpZgorI2VuZGlmIC8v
IEhBVkUoQUxURVJOQVRFX0lDT05TKQogCi0jZW5kaWYKKyNlbmRpZiAvLyBVU0UoQVBQTEVfSU5U
RVJOQUxfU0RLKQpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NjA5OCkKKysrIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTYgQEAKKzIwMjAtMDgtMjQg
IEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBN
b3ZlIFBERiBoZWFkcy11cCBkaXNwbGF5IHRvIFVJIHByb2Nlc3Mgb24gbWFjT1MKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTc4MAorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vNTg3MTU4NDc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBoYXMgbWFueSBiZW5lZml0cyBpbmNsdWRpbmcgdGhlIG9u
ZSBpbiB0aGUgcmFkYXIsIHRlc3RhYmlsaXR5LCBhbmQgbW92aW5nIFdlYktpdC1zcGVjaWZpYyBj
b2RlIGZyb20gUERGS2l0IHRvIFdlYktpdC4KKworICAgICAgICBOb3cgdGhhdCB0aGUgSFVEIGlz
IGRpc3BsYXllZCBpbiB0aGUgVUkgcHJvY2VzcyBpbnN0ZWFkIG9mIGluIHRoZSB3ZWIgY29udGVu
dCwgem9vbWluZyBpbiBrZWVwcyB0aGUgSFVEIHRoZSBzYW1lIHNpemUuCisgICAgICAgIEEgM2Qt
dHJhbnNmb3JtZWQgaWZyYW1lIHdpdGggYSBQREYgaW4gaXQgbm93IHNob3dzIHRoZSBIVUQgaW4g
dGhlIHBsYWNlIHlvdSBjYW4gY2xpY2sgb24gaXQsIGluc3RlYWQgb2YgaW4gdGhlIHRyYW5zZm9y
bWVkIFBERi4KKyAgICAgICAgQWxzbywgbW92aW5nIHRoZSBtb3VzZSB0byB0aGUgSFVEIHdpdGhp
biB0aGUgZmlyc3QgMyBzZWNvbmRzIHByZXZlbnRzIGl0IGZyb20gaGlkaW5nLCB3aGljaCBpdCBk
b2VzIHdoZW4gdGhlIG1vdXNlIGxlYXZlcyB0aGUgSFVELgorICAgICAgICBUaGUgcmVzdCBvZiB0
aGUgYmVoYXZpb3IgSSB0aGluayBzaG91bGQgYmUgdGhlIHNhbWUuICBNb3N0IHVzZXJzIHNob3Vs
ZCBub3Qgbm90aWNlIGFueSBkaWZmZXJlbmNlLgorCisgICAgICAgIEZ1bmN0aW9uYWxpdHkgY292
ZXJlZCBieSBBUEkgdGVzdHMsIHRoZSBmaXJzdCB0ZXN0cyBmb3IgUERGIGNvbnRlbnQgaW50ZXJh
Y3Rpb24hCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tOgorICAgICAgICAoLVtXS1ZpZXcgX2NyZWF0ZVBERkhV
RDpyZWN0Ol0pOgorICAgICAgICAoLVtXS1ZpZXcgX3BkZkhVRDpjaGFuZ2VkTG9jYXRpb246XSk6
CisgICAgICAgICgtW1dLVmlldyBfcmVtb3ZlUERGSFVEOl0pOgorICAgICAgICAoLVtXS1ZpZXcg
X3JlbW92ZUFsbFBERkhVRHNdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZp
ZXdNYWMubW06CisgICAgICAgICgtW1dLV2ViVmlldyBtb3VzZU1vdmVkOl0pOgorICAgICAgICAo
LVtXS1dlYlZpZXcgbW91c2VEb3duOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgbW91c2VVcDpd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jcmVhdGVQREZIVUQ6cmVjdDpdKToKKyAgICAgICAg
KC1bV0tXZWJWaWV3IF9wZGZIVUQ6Y2hhbmdlZExvY2F0aW9uOl0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX3JlbW92ZVBERkhVRDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZW1vdmVBbGxQ
REZIVURzXSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3UHJpdmF0ZUZv
clRlc3RpbmdNYWMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdUZXN0
aW5nTWFjLm1tOgorICAgICAgICAoLVtXS1dlYlZpZXcgcGRmSFVEc10pOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9X
ZWJWaWV3SW1wbC5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNyZWF0ZVBERkhV
RCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVQREZIVURMb2NhdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZW1vdmVQREZIVUQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3SW1wbDo6cmVtb3ZlQWxsUERGSFVEcyk6CisgICAgICAgICogVUlQcm9j
ZXNzL1BhZ2VDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnByb2Nlc3NEaWRUZXJtaW5hdGUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViUGFnZVBy
b3h5SU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNhdmVQREZUb1RlbXBv
cmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6Om9wZW5QREZGcm9tVGVtcG9yYXJ5Rm9sZGVyV2l0aE5h
dGl2ZUFwcGxpY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1BhZ2VD
bGllbnRJbXBsTWFjLmg6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1h
Yy5tbToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNyZWF0ZVBERkhVRCk6Cisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp1cGRhdGVQREZIVURMb2NhdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpyZW1vdmVQREZIVUQpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6cmVtb3ZlQWxsUERGSFVEcyk6CisgICAgICAgICogVUlQ
cm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y3JlYXRlUERGSFVEKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZW1vdmVQREZIVUQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OnVwZGF0ZVBERkhVRExvY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpwZGZab29tSW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OnBkZlpvb21PdXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBkZlNhdmVUb1BE
Rik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGRmT3BlbldpdGhQcmV2aWV3KToK
KyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERkxheWVyQ29udHJvbGxlclNQSS5oOgorICAgICAgICAq
IFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmg6CisgICAgICAgICogV2ViUHJvY2Vz
cy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW06CisgICAgICAgICgtW1dLUERGTGF5ZXJDb250cm9s
bGVyRGVsZWdhdGUgb3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbl0pOgorICAgICAgICAoLVtXS1BE
RkxheWVyQ29udHJvbGxlckRlbGVnYXRlIHNhdmVUb1BERl0pOgorICAgICAgICAoV2ViS2l0OjpQ
REZQbHVnaW46OlBERlBsdWdpbik6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6flBERlBs
dWdpbik6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6ZnJhbWVGb3JIVUQgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmNhbGN1bGF0ZVNpemVzKToKKyAgICAgICAgKFdl
YktpdDo6UERGUGx1Z2luOjpjb252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3IGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjp2aXNpYmlsaXR5RGlkQ2hhbmdlKToKKyAgICAgICAg
KFdlYktpdDo6UERGUGx1Z2luOjp6b29tSW4pOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46
Onpvb21PdXQpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnNhdmUpOgorICAgICAgICAo
V2ViS2l0OjpQREZQbHVnaW46Om9wZW5XaXRoUHJldmlldyk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjp6b29tUERGSW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
Ojp6b29tUERGT3V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2F2ZVBERik6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6Om9wZW5QREZXaXRoUHJldmlldyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OmNyZWF0ZVBERkhVRCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnVw
ZGF0ZVBERkhVRExvY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVtb3ZlUERG
SFVEKToKKwogMjAyMC0wOC0yNCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNv
bT4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXggdGhlIGludGVybmFsIGlPUyAxMy40IGJ1aWxk
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkJKHJldmlzaW9u
IDI2NjA5NCkKKysrIFNvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkJKHdv
cmtpbmcgY29weSkKQEAgLTI0Myw2ICsyNDMsNyBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVf
Zm9yd2FyZF9kZWNsYXJlCiAgICAgICAgICdXZWJLaXQ6Ok1ETlNSZWdpc3RlcklkZW50aWZpZXIn
LAogICAgICAgICAnV2ViS2l0OjpNZWRpYVBsYXllclByaXZhdGVSZW1vdGVJZGVudGlmaWVyJywK
ICAgICAgICAgJ1dlYktpdDo6TWVkaWFSZWNvcmRlcklkZW50aWZpZXInLAorICAgICAgICAnV2Vi
S2l0OjpQREZQbHVnaW5JZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6UGxheWJhY2tTZXNz
aW9uQ29udGV4dElkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpQbHVnaW5Qcm9jZXNzVHlw
ZScsCiAgICAgICAgICdXZWJLaXQ6OlJlbW90ZUF1ZGlvRGVzdGluYXRpb25JZGVudGlmaWVyJywK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHJldmlzaW9uIDI2NjA5NCkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJMYXllclRyZWVDb250
ZXh0LmgiCisjaW5jbHVkZSAiUERGUGx1Z2luSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlNhbWVE
b2N1bWVudE5hdmlnYXRpb25UeXBlLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAj
aW5jbHVkZSAiV2ViQ29sb3JQaWNrZXIuaCIKQEAgLTI0Miw2ICsyNDMsMTMgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkRm9yTWFpbkZyYW1lKCkgeyB9
OwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIGJvb2wgdXNlQ3VzdG9tQ29udGVudFByb3ZpZGVyKSA9IDA7CiAKKyNpZiBF
TkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVQREZIVUQo
UERGUGx1Z2luSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlUERGSFVETG9jYXRpb24oUERGUGx1Z2luSWRlbnRpZmllciwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlUERGSFVE
KFBERlBsdWdpbklkZW50aWZpZXIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQWxsUERG
SFVEcygpID0gMDsKKyNlbmRpZgorICAgIAogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVEb3dubG9h
ZFJlcXVlc3QoRG93bmxvYWRQcm94eSYpID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVS
dW5PcGVuUGFuZWwoV2ViUGFnZVByb3h5KiwgV2ViRnJhbWVQcm94eSosIGNvbnN0IEZyYW1lSW5m
b0RhdGEmLCBBUEk6Ok9wZW5QYW5lbFBhcmFtZXRlcnMqLCBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0
ZW5lclByb3h5KikgeyByZXR1cm4gZmFsc2U7IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gMjY2MDk0KQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc3MiwxNSArNDc3
MiwxNCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lCiAgICAgICAg
ICAgICBtX3BsdWdpblNjYWxlRmFjdG9yID0gMTsKICAgICAgICAgICAgIG1fbWFpbkZyYW1lUGx1
Z2luSGFuZGxlc1BhZ2VTY2FsZUdlc3R1cmUgPSBmYWxzZTsKICAgICAgICAgfQotICAgIH0KLQog
I2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCi0gICAgaWYgKGZyYW1lLT5pc01haW5GcmFtZSgpKQog
ICAgICAgICByZXF1ZXN0UG9pbnRlclVubG9jaygpOwogI2VuZGlmCi0KLSAgICBpZiAoZnJhbWUt
PmlzTWFpbkZyYW1lKCkpCiAgICAgICAgIHBhZ2VDbGllbnQoKS5zZXRNb3VzZUV2ZW50UG9saWN5
KG1vdXNlRXZlbnRQb2xpY3kpOworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAg
ICAgIHBhZ2VDbGllbnQoKS5yZW1vdmVBbGxQREZIVURzKCk7CisjZW5kaWYKKyAgICB9CiAKICAg
ICBtX3BhZ2VMb2FkU3RhdGUuY29tbWl0Q2hhbmdlcygpOwogICAgIGlmIChtX2xvYWRlckNsaWVu
dCkKQEAgLTc0NTEsNiArNzQ1MCw5IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpwcm9jZXNzRGlkVGVy
bWluYXRlKFAKIAogICAgIHJlc2V0U3RhdGVBZnRlclByb2Nlc3NFeGl0ZWQocmVhc29uKTsKICAg
ICBzdG9wQWxsVVJMU2NoZW1lVGFza3MobV9wcm9jZXNzLnB0cigpKTsKKyNpZiBFTkFCTEUoVUlf
UFJPQ0VTU19QREZfSFVEKQorICAgIHBhZ2VDbGllbnQoKS5yZW1vdmVBbGxQREZIVURzKCk7Cisj
ZW5kaWYKIAogICAgIC8vIEZvciBicmluZ3VwIG9mIHByb2Nlc3Mgc3dhcHBpbmcsIE5hdmlnYXRp
b25Td2FwIHRlcm1pbmF0aW9uIHdpbGwgbm90IGdvIG91dCB0byBjbGllbnRzLgogICAgIC8vIElm
IGl0IGRvZXMgKmR1cmluZyogcHJvY2VzcyBzd2FwcGluZywgYW5kIHRoZSBjbGllbnQgdHJpZ2dl
cnMgYSByZWxvYWQsIHRoYXQgY2F1c2VzIGJpemFycmUgV2ViS2l0IHJlLWVudHJ5LgpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDI2NjA5NCkKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgogI2luY2x1ZGUg
Ik1lc3NhZ2VTZW5kZXIuaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXJQcm94eS5oIgorI2luY2x1ZGUgIlBERlBsdWdpbklkZW50aWZpZXIuaCIKICNpbmNs
dWRlICJQYWdlTG9hZFN0YXRlLmgiCiAjaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMu
aCIKICNpbmNsdWRlICJQb2xpY3lEZWNpc2lvbi5oIgpAQCAtMTMxMSwxMCArMTMxMiwxMiBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIHNhdmVEYXRhVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIoU3RyaW5n
JiYgc3VnZ2VzdGVkRmlsZW5hbWUsIFN0cmluZyYmIG1pbWVUeXBlLCBVUkwmJiBvcmlnaW5hdGlu
Z1VSTCwgQVBJOjpEYXRhJik7CiAgICAgdm9pZCBzYXZlUERGVG9GaWxlSW5Eb3dubG9hZHNGb2xk
ZXIoU3RyaW5nJiYgc3VnZ2VzdGVkRmlsZW5hbWUsIFVSTCYmIG9yaWdpbmF0aW5nVVJMLCBjb25z
dCBJUEM6OkRhdGFSZWZlcmVuY2UmKTsKLSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBFTkFCTEUo
UERGS0lUX1BMVUdJTikKICAgICB2b2lkIHNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5X
aXRoTmF0aXZlQXBwbGljYXRpb24oY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgRnJh
bWVJbmZvRGF0YSYmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmIHBk
ZlVVSUQpOworI2lmICFFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQogICAgIHZvaWQgb3BlblBE
RkZyb21UZW1wb3JhcnlGb2xkZXJXaXRoTmF0aXZlQXBwbGljYXRpb24oRnJhbWVJbmZvRGF0YSYm
LCBjb25zdCBTdHJpbmcmIHBkZlVVSUQpOwogI2VuZGlmCisjZW5kaWYKIAogI2lmIEVOQUJMRShQ
REZLSVRfUExVR0lOKQogICAgIHZvaWQgc2hvd1BERkNvbnRleHRNZW51KGNvbnN0IFdlYktpdDo6
UERGQ29udGV4dE1lbnUmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPGludDMyX3Q+
JiYpPiYmKTsKQEAgLTE4MDYsNiArMTgwOSwxNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBjYW5Vc2VD
cmVkZW50aWFsU3RvcmFnZSgpIHsgcmV0dXJuIG1fY2FuVXNlQ3JlZGVudGlhbFN0b3JhZ2U7IH0K
ICAgICB2b2lkIHNldENhblVzZUNyZWRlbnRpYWxTdG9yYWdlKGJvb2wpOwogCisjaWYgRU5BQkxF
KFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICB2b2lkIGNyZWF0ZVBERkhVRChQREZQbHVnaW5JZGVu
dGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCB1cGRhdGVQREZIVURM
b2NhdGlvbihQREZQbHVnaW5JZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Cisg
ICAgdm9pZCByZW1vdmVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllcik7CisgICAgdm9pZCBwZGZa
b29tSW4oUERGUGx1Z2luSWRlbnRpZmllcik7CisgICAgdm9pZCBwZGZab29tT3V0KFBERlBsdWdp
bklkZW50aWZpZXIpOworICAgIHZvaWQgcGRmU2F2ZVRvUERGKFBERlBsdWdpbklkZW50aWZpZXIp
OworICAgIHZvaWQgcGRmT3BlbldpdGhQcmV2aWV3KFBERlBsdWdpbklkZW50aWZpZXIpOworI2Vu
ZGlmCisKIHByaXZhdGU6CiAgICAgV2ViUGFnZVByb3h5KFBhZ2VDbGllbnQmLCBXZWJQcm9jZXNz
UHJveHkmLCBSZWY8QVBJOjpQYWdlQ29uZmlndXJhdGlvbj4mJik7CiAgICAgdm9pZCBwbGF0Zm9y
bUluaXRpYWxpemUoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDI2NjA5NCkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNDMz
LDkgKzQzMyw4IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgU2F2ZVJlY2VudFNl
YXJjaGVzKFN0cmluZyBuYW1lLCBWZWN0b3I8V2ViQ29yZTo6UmVjZW50U2VhcmNoPiBzZWFyY2hJ
dGVtcykKICAgICBMb2FkUmVjZW50U2VhcmNoZXMoU3RyaW5nIG5hbWUpIC0+IChWZWN0b3I8V2Vi
Q29yZTo6UmVjZW50U2VhcmNoPiByZXN1bHQpIFN5bmNocm9ub3VzCiAKKyNpZiBFTkFCTEUoUERG
S0lUX1BMVUdJTikgJiYgIUVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCiAgICAgU2F2ZVBERlRv
RmlsZUluRG93bmxvYWRzRm9sZGVyKFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSwgVVJMIG9yaWdp
bmF0aW5nVVJMLCBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YSkKLQotI2lmIFBMQVRGT1JNKENPQ09B
KQogICAgIFNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRp
b24oU3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1lLCBzdHJ1Y3QgV2ViS2l0OjpGcmFtZUluZm9EYXRh
IHNvdXJjZUZyYW1lSW5mbywgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEsIFN0cmluZyBwZGZVVUlE
KQogICAgIE9wZW5QREZGcm9tVGVtcG9yYXJ5Rm9sZGVyV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKHN0
cnVjdCBXZWJLaXQ6OkZyYW1lSW5mb0RhdGEgc291cmNlRnJhbWVJbmZvLCBTdHJpbmcgcGRmVVVJ
RCkKICNlbmRpZgpAQCAtNTY2LDYgKzU2NSwxMiBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkg
ewogICAgIFNwZWVjaFN5bnRoZXNpc1Jlc3VtZSgpIC0+ICgpIEFzeW5jCiAjZW5kaWYKIAorI2lm
IEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgQ3JlYXRlUERGSFVEKFdlYktpdDo6UERG
UGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJDb3JlOjpJbnRSZWN0IGJvdW5kaW5nQm94
KQorICAgIFVwZGF0ZVBERkhVRExvY2F0aW9uKFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllciBp
ZGVudGlmaWVyLCBXZWJDb3JlOjpJbnRSZWN0IGJvdW5kaW5nQm94KQorICAgIFJlbW92ZVBERkhV
RChXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikKKyNlbmRpZgorCiAgICAg
Q29uZmlndXJlTG9nZ2luZ0NoYW5uZWwoU3RyaW5nIGNoYW5uZWxOYW1lLCBlbnVtOnVpbnQ4X3Qg
V1RGTG9nQ2hhbm5lbFN0YXRlIHN0YXRlLCBlbnVtOnVpbnQ4X3QgV1RGTG9nTGV2ZWwgbGV2ZWwp
CiAKICNpZiBQTEFURk9STShHVEspCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaAkocmV2aXNpb24gMjY2MDk0KQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIzLDExICsyMywxMSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKLSNpbXBvcnQgIldLV2ViVmlld1ByaXZhdGUuaCIKLQorI2lt
cG9ydCAiUERGUGx1Z2luSWRlbnRpZmllci5oIgogI2ltcG9ydCAiU2FtZURvY3VtZW50TmF2aWdh
dGlvblR5cGUuaCIKICNpbXBvcnQgIldLU2hhcmVTaGVldC5oIgogI2ltcG9ydCAiV0tXZWJWaWV3
Q29uZmlndXJhdGlvbi5oIgorI2ltcG9ydCAiV0tXZWJWaWV3UHJpdmF0ZS5oIgogI2ltcG9ydCAi
X1dLQXR0YWNobWVudEludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tXZWJWaWV3UHJpbnRGb3JtYXR0
ZXJJbnRlcm5hbC5oIgogI2ltcG9ydCA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CkBAIC0xMzMs
NyArMTMzLDcgQEAgY2xhc3MgVmlld0dlc3R1cmVDb250cm9sbGVyOwogICAgIC8vIE9ubHkgdXNl
ZCB3aXRoIFVJLXNpZGUgY29tcG9zaXRpbmcuCiAgICAgUmV0YWluUHRyPFdLU2Nyb2xsVmlldz4g
X3Njcm9sbFZpZXc7CiAgICAgUmV0YWluUHRyPFdLQ29udGVudFZpZXc+IF9jb250ZW50VmlldzsK
LSNlbmRpZgorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCiAgICAgUmV0YWluUHRyPFdLU2Nyb2xsVmlldz4gX3Njcm9sbFZpZXc7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nTWFj
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZp
ZXdQcml2YXRlRm9yVGVzdGluZ01hYy5oCShyZXZpc2lvbiAyNjYwOTQpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nTWFjLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgQGludGVyZmFjZSBXS1dlYlZpZXcgKFdLVGVz
dGluZ01hYykKIAogLSAodm9pZClfc2V0SGVhZGVyQmFubmVySGVpZ2h0OihpbnQpaGVpZ2h0Owog
LSAodm9pZClfc2V0Rm9vdGVyQmFubmVySGVpZ2h0OihpbnQpaGVpZ2h0OworLSAoTlNTZXQ8TlNW
aWV3ICo+ICopX3BkZkhVRHM7CiAKIEBlbmQKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL21hYy9XS1dlYlZpZXdUZXN0aW5nTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5tbQkocmV2aXNpb24g
MjY2MDk0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdUZXN0
aW5nTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiArMTAzLDE1IEBAIC0gKHZvaWQpX3Nl
dEZvb3RlckJhbm5lckhlaWdodDooaW50KWhlaWcKICAgICBfcGFnZS0+c2V0Rm9vdGVyQmFubmVy
SGVpZ2h0Rm9yVGVzdGluZyhoZWlnaHQpOwogfQogCistIChOU1NldDxOU1ZpZXcgKj4gKilfcGRm
SFVEcworeworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgcmV0dXJuIF9pbXBs
LT5wZGZIVURzKCk7CisjZWxzZQorICAgIHJldHVybiBuaWw7CisjZW5kaWYKK30KKwogLSAoTlNN
ZW51ICopX2FjdGl2ZU1lbnUKIHsKICAgICAvLyBGSVhNRTogT25seSB0aGUgRE9NIHBhc3RlIGFj
Y2VzcyBtZW51IGlzIHN1cHBvcnRlZCBmb3Igbm93LiBJbiB0aGUgZnV0dXJlLCBpdCBjb3VsZCBi
ZQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5oCShy
ZXZpc2lvbiAyNjYwOTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBQTEFURk9STShN
QUMpCiAKKyNpbmNsdWRlICJQREZQbHVnaW5JZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiUGx1Z2lu
Q29tcGxleFRleHRJbnB1dFN0YXRlLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAj
aW5jbHVkZSAiV0tMYXlvdXRNb2RlLmgiCkBAIC03Niw2ICs3NywxMCBAQCBPQkpDX0NMQVNTIFdL
VGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXI7CiBPQkpDX0NMQVNTIFdlYlBsYXliYWNrQ29udHJv
bHNNYW5hZ2VyOwogI2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFSKQogCisjaWYgRU5BQkxFKFVJX1BS
T0NFU1NfUERGX0hVRCkKK09CSkNfQ0xBU1MgV0tQREZIVURWaWV3OworI2VuZGlmCisKIG5hbWVz
cGFjZSBBUEkgewogY2xhc3MgSGl0VGVzdFJlc3VsdDsKIGNsYXNzIE9iamVjdDsKQEAgLTE5MCw2
ICsxOTUsMTQgQEAgcHVibGljOgogICAgIHZvaWQgdmlld1dpbGxTdGFydExpdmVSZXNpemUoKTsK
ICAgICB2b2lkIHZpZXdEaWRFbmRMaXZlUmVzaXplKCk7CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VT
U19QREZfSFVEKQorICAgIHZvaWQgY3JlYXRlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIHVwZGF0ZVBERkhVRExvY2F0aW9uKFBE
RlBsdWdpbklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIHJl
bW92ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHJlbW92ZUFsbFBERkhV
RHMoKTsKKyAgICBOU1NldCAqcGRmSFVEcygpOworI2VuZGlmCisKICAgICB2b2lkIHJlbmV3R1N0
YXRlKCk7CiAgICAgdm9pZCBzZXRGcmFtZVNpemUoQ0dTaXplKTsKICAgICB2b2lkIGRpc2FibGVG
cmFtZVNpemVVcGRhdGVzKCk7CkBAIC03MjksNyArNzQyLDExIEBAIHByaXZhdGU6CiAjaWYgRU5B
QkxFKEZVTExTQ1JFRU5fQVBJKQogICAgIFJldGFpblB0cjxXS0Z1bGxTY3JlZW5XaW5kb3dDb250
cm9sbGVyPiBtX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyOwogI2VuZGlmCi0gICAgCisKKyNp
ZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIEhhc2hNYXA8V2ViS2l0OjpQREZQbHVn
aW5JZGVudGlmaWVyLCBSZXRhaW5QdHI8V0tQREZIVURWaWV3Pj4gX3BkZkhVRFZpZXdzOworI2Vu
ZGlmCisKICAgICBSZXRhaW5QdHI8V0tTaGFyZVNoZWV0PiBfc2hhcmVTaGVldDsKIAogICAgIFJl
dGFpblB0cjxXS1dpbmRvd1Zpc2liaWxpdHlPYnNlcnZlcj4gbV93aW5kb3dWaXNpYmlsaXR5T2Jz
ZXJ2ZXI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1w
bC5tbQkocmV2aXNpb24gMjY2MDk0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
V2ViVmlld0ltcGwubW0JKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDcgQEAKICNpbXBvcnQg
IldLRXJyb3JJbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxl
ci5oIgogI2ltcG9ydCAiV0tJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLmgiCisjaW1wb3J0ICJX
S1BERkhVRFZpZXcuaCIKICNpbXBvcnQgIldLUHJpbnRpbmdWaWV3LmgiCiAjaW1wb3J0ICJXS1Nh
ZmVCcm93c2luZ1dhcm5pbmcuaCIKICNpbXBvcnQgIldLU2hhcmVTaGVldC5oIgpAQCAtMTcxOCw2
ICsxNzE5LDQ1IEBAIHZvaWQgV2ViVmlld0ltcGw6OnZpZXdEaWRFbmRMaXZlUmVzaXplKCkKICAg
ICBbbV9sYXlvdXRTdHJhdGVneSBkaWRFbmRMaXZlUmVzaXplXTsKIH0KIAorI2lmIEVOQUJMRShV
SV9QUk9DRVNTX1BERl9IVUQpCisKK3ZvaWQgV2ViVmlld0ltcGw6OmNyZWF0ZVBERkhVRChQREZQ
bHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3Qp
Cit7CisgICAgcmVtb3ZlUERGSFVEKGlkZW50aWZpZXIpOworICAgIGF1dG8gaHVkID0gYWRvcHRO
UyhbW1dLUERGSFVEVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpyZWN0IHBsdWdpbklkZW50aWZp
ZXI6aWRlbnRpZmllciBwYWdlOm1fcGFnZS5nZXQoKV0pOworICAgIFttX3ZpZXcgYWRkU3Vidmll
dzpodWQuZ2V0KCldOworICAgIF9wZGZIVURWaWV3cy5hZGQoaWRlbnRpZmllciwgV1RGTW92ZSho
dWQpKTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlUERGSFVETG9jYXRpb24oUERGUGx1
Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQor
eworICAgIGlmIChhdXRvIGh1ZCA9IF9wZGZIVURWaWV3cy5nZXQoaWRlbnRpZmllcikpCisgICAg
ICAgIFtodWQgc2V0RnJhbWU6cmVjdF07Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnJlbW92ZVBE
RkhVRChQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgaWYgKGF1dG8gaHVk
ID0gX3BkZkhVRFZpZXdzLnRha2UoaWRlbnRpZmllcikpCisgICAgICAgIFtodWQgcmVtb3ZlRnJv
bVN1cGVydmlld107Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnJlbW92ZUFsbFBERkhVRHMoKQor
eworICAgIGZvciAoYXV0byYgaHVkIDogX3BkZkhVRFZpZXdzLnZhbHVlcygpKQorICAgICAgICBb
aHVkIHJlbW92ZUZyb21TdXBlcnZpZXddOworICAgIF9wZGZIVURWaWV3cy5jbGVhcigpOworfQor
CitOU1NldCAqV2ViVmlld0ltcGw6OnBkZkhVRHMoKQoreworICAgIE5TTXV0YWJsZVNldDxOU1Zp
ZXcgKj4gKnNldCA9IFtOU011dGFibGVTZXQgc2V0V2l0aENhcGFjaXR5Ol9wZGZIVURWaWV3cy5z
aXplKCldOworICAgIGZvciAoYXV0byYgaHVkIDogX3BkZkhVRFZpZXdzLnZhbHVlcygpKQorICAg
ICAgICBbc2V0IGFkZE9iamVjdDpodWQuZ2V0KCldOworICAgIHJldHVybiBzZXQ7Cit9CisKKyNl
bmRpZiAvLyBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCiB2b2lkIFdlYlZpZXdJbXBsOjpy
ZW5ld0dTdGF0ZSgpCiB7CiAgICAgaWYgKG1fdGV4dEluZGljYXRvcldpbmRvdykKQEAgLTUzOTEs
NiArNTQzMSwxMSBAQCB2b2lkIFdlYlZpZXdJbXBsOjptb3VzZU1vdmVkKE5TRXZlbnQgKmV2CiAg
ICAgaWYgKG1faWdub3Jlc05vbldoZWVsRXZlbnRzKQogICAgICAgICByZXR1cm47CiAKKyNpZiBF
TkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIGZvciAoYXV0byYgaHVkIDogX3BkZkhVRFZp
ZXdzLnZhbHVlcygpKQorICAgICAgICBbaHVkIG1vdXNlTW92ZWQ6ZXZlbnRdOworI2VuZGlmCisK
ICAgICAvLyBXaGVuIGEgdmlldyBpcyBmaXJzdCByZXNwb25kZXIsIGl0IGdldHMgbW91c2UgbW92
ZWQgZXZlbnRzIGV2ZW4gd2hlbiB0aGUgbW91c2UgaXMgb3V0c2lkZSBpdHMgdmlzaWJsZSByZWN0
LgogICAgIGlmIChtX3ZpZXcuZ2V0QXV0b3JlbGVhc2VkKCkgPT0gW21fdmlldyB3aW5kb3ddLmZp
cnN0UmVzcG9uZGVyICYmICFOU1BvaW50SW5SZWN0KFttX3ZpZXcgY29udmVydFBvaW50OltldmVu
dCBsb2NhdGlvbkluV2luZG93XSBmcm9tVmlldzpuaWxdLCBbbV92aWV3IHZpc2libGVSZWN0XSkp
CiAgICAgICAgIHJldHVybjsKQEAgLTU0MzksNiArNTQ4NCwxMSBAQCB2b2lkIFdlYlZpZXdJbXBs
Ojptb3VzZURvd24oTlNFdmVudCAqZXZlCiAgICAgaWYgKG1faWdub3Jlc05vbldoZWVsRXZlbnRz
KQogICAgICAgICByZXR1cm47CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAg
IGZvciAoYXV0byYgaHVkIDogX3BkZkhVRFZpZXdzLnZhbHVlcygpKQorICAgICAgICBbaHVkIG1v
dXNlRG93bjpldmVudF07CisjZW5kaWYKKwogICAgIHNldExhc3RNb3VzZURvd25FdmVudChldmVu
dCk7CiAgICAgc2V0SWdub3Jlc01vdXNlRHJhZ2dlZEV2ZW50cyhmYWxzZSk7CiAKQEAgLTU0NTAs
NiArNTUwMCwxMSBAQCB2b2lkIFdlYlZpZXdJbXBsOjptb3VzZVVwKE5TRXZlbnQgKmV2ZW50CiAg
ICAgaWYgKG1faWdub3Jlc05vbldoZWVsRXZlbnRzKQogICAgICAgICByZXR1cm47CiAKKyNpZiBF
TkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIGZvciAoYXV0byYgaHVkIDogX3BkZkhVRFZp
ZXdzLnZhbHVlcygpKQorICAgICAgICBbaHVkIG1vdXNlVXA6ZXZlbnRdOworI2VuZGlmCisKICAg
ICBzZXRMYXN0TW91c2VEb3duRXZlbnQobmlsKTsKICAgICBtb3VzZVVwSW50ZXJuYWwoZXZlbnQp
OwogfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUERGL1dLUERGSFVEVmlldy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BERi9XS1BERkhVRFZpZXcuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QREYvV0tQREZIVURWaWV3
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFC
TEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCisjaW1wb3J0ICJQREZQbHVnaW5JZGVudGlmaWVyLmgi
CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViUGFnZVByb3h5OworfQorCitAaW50ZXJm
YWNlIFdLUERGSFVEVmlldyA6IE5TVmlldworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFt
ZTooTlNSZWN0KWZyYW1lIHBsdWdpbklkZW50aWZpZXI6KFdlYktpdDo6UERGUGx1Z2luSWRlbnRp
ZmllcilwbHVnaW5JZGVudGlmaWVyIHBhZ2U6KFdlYktpdDo6V2ViUGFnZVByb3h5JilwYWdlOwor
LSAodm9pZClzZXRGcmFtZTooTlNSZWN0KWZyYW1lOworLSAodm9pZCltb3VzZU1vdmVkOihOU0V2
ZW50ICopZXZlbnQ7CistICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50OworLSAodm9p
ZCltb3VzZVVwOihOU0V2ZW50ICopZXZlbnQ7CisKK0BlbmQKKworI2VuZGlmIC8vIEVOQUJMRShV
SV9QUk9DRVNTX1BERl9IVUQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QREYvV0tQ
REZIVURWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BERi9X
S1BERkhVRFZpZXcubW0JKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
UERGL1dLUERGSFVEVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM1MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV0tQREZIVURWaWV3LmgiCisK
KyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCisjaW1wb3J0ICJXZWJQYWdlUHJveHku
aCIKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ0FUcmFuc2FjdGlvbi5oPgorI2ltcG9ydCA8cGFsL3Nw
aS9jb2NvYS9RdWFydHpDb3JlU1BJLmg+CisjaW1wb3J0IDxwYWwvc3BpL21hYy9OU0ltYWdlU1BJ
Lmg+CisjaW1wb3J0IDx3dGYvV2Vha09iakNQdHIuaD4KKworLy8gIFRoZSBIVUQgaXRlbXMgc2hv
dWxkIGhhdmUgdGhlIGZvbGxvd2luZyBzcGFjaW5nOgorLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIHwgICAgICAxMiAgICAgICAgMTIgICAg
ICAxMCAgICAgMTIgICAgICAgIDEyICAgICAgfAorLy8gfCAgICAgLS0tLSAgICAgIC0tLS0gICAg
IHwgICAgIC0tLS0gICAgICAtLS0tICAgICB8CisvLyB8IDEwIHxpY29ufCAxMCB8aWNvbnwgMTAg
fCAxMCB8aWNvbnwgMTAgfGljb258IDEwIHwKKy8vIHwgICAgIC0tLS0gICAgICAtLS0tICAgICB8
ICAgICAtLS0tICAgICAgLS0tLSAgICAgfAorLy8gfCAgICAgIDEyICAgICAgICAxMiAgICAgIDEw
ICAgICAxMiAgICAgICAgMTIgICAgICB8CisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIHdoZXJlIHRoZSAxMiBwb2ludCB2ZXJ0aWNhbCBz
cGFjaW5nIGlzIGFuY2hvcmVkIHRvIHRoZSBzbWFsbGVzdCBpY29uIGltYWdlLAorLy8gIGFuZCBh
bGwgc3Vic2VxdWVudCBpY29ucyB3aXRoIGJlIGNlbnRlcmVkIHZlcnRpY2FsbHkgd2l0aCB0aGUg
c21hbGxlc3QgaWNvbi4KKworc3RhdGljIGNvbnN0IENHRmxvYXQga0xheWVyVmVydGljYWxPZmZz
ZXQgPSA0MDsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGtMYXllckNvcm5lclJhZGl1cyA9IDEyOwor
c3RhdGljIGNvbnN0IENHRmxvYXQga0xheWVyR3JheUNvbXBvbmVudCA9IDA7CitzdGF0aWMgY29u
c3QgQ0dGbG9hdCBrTGF5ZXJBbHBoYSA9IDAuNzU7CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrTGF5
ZXJJbWFnZVNjYWxlID0gMS41Oworc3RhdGljIGNvbnN0IENHRmxvYXQga0xheWVyU2VwZXJhdG9y
Q29udHJvbGxlclNpemUgPSAxLjU7CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrTGF5ZXJDb250cm9s
bGVySG9yaXpvbnRhbE1hcmdpbiA9IDEwLjA7CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrTGF5ZXJJ
bWFnZVZlcnRpY2FsTWFyZ2luID0gMTIuMDsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGtMYXllclNl
cGVyYXRvclZlcnRpY2FsTWFyZ2luID0gMTAuMDsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGtDb250
cm9sTGF5ZXJOb3JtYWxBbHBoYSA9IDAuNzU7CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrQ29udHJv
bExheWVyRG93bkFscGhhID0gMC40NTsKKworc3RhdGljIE5TU3RyaW5nICogY29uc3QgUERGSFVE
Wm9vbUluQ29udHJvbCA9IEAicGx1cy5tYWduaWZ5aW5nZ2xhc3MiOworc3RhdGljIE5TU3RyaW5n
ICogY29uc3QgUERGSFVEWm9vbU91dENvbnRyb2wgPSBAIm1pbnVzLm1hZ25pZnlpbmdnbGFzcyI7
CitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBQREZIVURMYXVuY2hQcmV2aWV3Q29udHJvbCA9IEAi
cHJldmlldyI7CitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBQREZIVURTYXZlUERGQ29udHJvbCA9
IEAiYXJyb3cuZG93bi5jaXJjbGUiOworc3RhdGljIE5TU3RyaW5nICogY29uc3QgUERGSFVEU2Vw
ZXJhdG9yQ29udHJvbCA9IEAiUERGSFVEU2VwZXJhdG9yQ29udHJvbCI7CisKK3N0YXRpYyBjb25z
dCBDR0Zsb2F0IGtMYXllckZhZGVJblRpbWVJbnRlcnZhbCA9IDAuMjU7CitzdGF0aWMgY29uc3Qg
Q0dGbG9hdCBrTGF5ZXJGYWRlT3V0VGltZUludGVydmFsID0gMC41Oworc3RhdGljIGNvbnN0IENH
RmxvYXQga0luaXRpYWxIaWRlVGltZUludGVydmFsID0gMy4wOworCitzdGF0aWMgTlNBcnJheTxO
U1N0cmluZyAqPiAqY29udHJvbEFycmF5KCkKK3sKKyAgICByZXR1cm4gQFsKKyAgICAgICAgUERG
SFVEWm9vbU91dENvbnRyb2wsCisgICAgICAgIFBERkhVRFpvb21JbkNvbnRyb2wsCisgICAgICAg
IFBERkhVRFNlcGVyYXRvckNvbnRyb2wsCisgICAgICAgIFBERkhVRExhdW5jaFByZXZpZXdDb250
cm9sLAorICAgICAgICBQREZIVURTYXZlUERGQ29udHJvbAorICAgIF07Cit9CisKK3N0YXRpYyBO
U0NvbG9yKiBQREZDR0NvbG9yQ3JlYXRlR2VuZXJpY1JHQihDR0Zsb2F0IHJlZCwgQ0dGbG9hdCBn
cmVlbiwgQ0dGbG9hdCBibHVlLCBDR0Zsb2F0IGFscGhhKQoreworICAgIGF1dG8gY29sb3JTcGFj
ZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOworICAgIGNvbnN0IENH
RmxvYXQgY29tcG9uZW50c1s0XSA9IHsgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEgfTsKKyAgICBh
dXRvIGNnQ29sb3IgPSBhZG9wdENGKENHQ29sb3JDcmVhdGUoY29sb3JTcGFjZS5nZXQoKSwgY29t
cG9uZW50cykpOworICAgIHJldHVybiBbTlNDb2xvciBjb2xvcldpdGhDR0NvbG9yOmNnQ29sb3Iu
Z2V0KCldOworfQorCitAaW1wbGVtZW50YXRpb24gV0tQREZIVURWaWV3IHsKK0Bwcml2YXRlCisg
ICAgV2Vha1B0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4gX3BhZ2U7CisgICAgUmV0YWluUHRyPE5T
U3RyaW5nPiBfYWN0aXZlQ29udHJvbDsKKyAgICBXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIg
X3BsdWdpbklkZW50aWZpZXI7CisgICAgQ0dGbG9hdCBfZGV2aWNlU2NhbGVGYWN0b3I7CisgICAg
UmV0YWluUHRyPENBTGF5ZXI+IF9sYXllcjsKKyAgICBSZXRhaW5QdHI8Q0FMYXllcj4gX2FjdGl2
ZUxheWVyOworICAgIENHU2l6ZSBfZnJhbWVTaXplOworICAgIFJldGFpblB0cjxOU011dGFibGVE
aWN0aW9uYXJ5PE5TU3RyaW5nKiwgTlNJbWFnZSo+PiBfY2FjaGVkSWNvbnM7CisgICAgQk9PTCBf
dmlzaWJsZTsKKyAgICBib29sIF9tb3VzZU1vdmVkVG9IVUQ7CisgICAgYm9vbCBfaW5pdGlhbEhp
ZGVUaW1lckZpcmVkOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooTlNSZWN0
KWZyYW1lIHBsdWdpbklkZW50aWZpZXI6KFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllcilwbHVn
aW5JZGVudGlmaWVyIHBhZ2U6KFdlYktpdDo6V2ViUGFnZVByb3h5JilwYWdlCit7CisgICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEZyYW1lOmZyYW1lXSkpCisgICAgICAgIHJldHVybiBu
aWw7CisgICAgCisgICAgc2VsZi53YW50c0xheWVyID0gWUVTOworICAgIF9jYWNoZWRJY29ucyA9
IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7CisgICAgX3BsdWdp
bklkZW50aWZpZXIgPSBwbHVnaW5JZGVudGlmaWVyOworICAgIF9wYWdlID0gbWFrZVdlYWtQdHIo
cGFnZSk7CisgICAgX2RldmljZVNjYWxlRmFjdG9yID0gcGFnZS5kZXZpY2VTY2FsZUZhY3Rvcigp
OworICAgIF92aXNpYmxlID0gWUVTOworICAgIFtzZWxmIF9zZXR1cExheWVyOnNlbGYubGF5ZXJd
OworICAgIFtzZWxmIHNldEZyYW1lOmZyYW1lXTsKKworICAgIFdlYWtPYmpDUHRyPFdLUERGSFVE
Vmlldz4gd2Vha1NlbGYgPSBzZWxmOworICAgIGRpc3BhdGNoX2FmdGVyKGRpc3BhdGNoX3RpbWUo
RElTUEFUQ0hfVElNRV9OT1csIChpbnQ2NF90KShrSW5pdGlhbEhpZGVUaW1lSW50ZXJ2YWwgKiBO
U0VDX1BFUl9TRUMpKSwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgW3dl
YWtTZWxmIF9oaWRlVGltZXJGaXJlZF07CisgICAgfSk7CisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKHZvaWQpZGVhbGxvYworeworICAgIFtfbGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOwor
ICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXRGcmFtZTooTlNSZWN0KXJlY3QK
K3sKKyAgICBbc3VwZXIgc2V0RnJhbWU6cmVjdF07CisgICAgX2ZyYW1lU2l6ZSA9IHJlY3Quc2l6
ZTsKKworICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXRE
aXNhYmxlQWN0aW9uczpZRVNdOworICAgIENHUmVjdCBsYXllckJvdW5kcyA9IFtfbGF5ZXIgYm91
bmRzXTsKKyAgICBbX2xheWVyIHNldEZyYW1lOkNHUmVjdE1ha2UocmVjdC5zaXplLndpZHRoIC8g
Mi4wIC0gbGF5ZXJCb3VuZHMuc2l6ZS53aWR0aCAvIDIuMCwga0xheWVyVmVydGljYWxPZmZzZXQs
IGxheWVyQm91bmRzLnNpemUud2lkdGgsIGxheWVyQm91bmRzLnNpemUuaGVpZ2h0KV07CisgICAg
W0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKK30KKworLSAodm9pZClfaGlkZVRpbWVyRmlyZWQKK3sK
KyAgICBfaW5pdGlhbEhpZGVUaW1lckZpcmVkID0gdHJ1ZTsKKyAgICBpZiAoIV9tb3VzZU1vdmVk
VG9IVUQpCisgICAgICAgIFtzZWxmIF9zZXRWaXNpYmxlOmZhbHNlXTsKK30KKworLSAodm9pZClf
c2V0VmlzaWJsZTooYm9vbClpc1Zpc2libGUKK3sKKyAgICBpZiAoX3Zpc2libGUgPT0gaXNWaXNp
YmxlKQorICAgICAgICByZXR1cm47CisgICAgX3Zpc2libGUgPSBpc1Zpc2libGU7CisgICAgW0NB
VHJhbnNhY3Rpb24gYmVnaW5dOworICAgIFtDQVRyYW5zYWN0aW9uIHNldEFuaW1hdGlvbkR1cmF0
aW9uOiBpc1Zpc2libGUgPyBrTGF5ZXJGYWRlSW5UaW1lSW50ZXJ2YWwgOiBrTGF5ZXJGYWRlT3V0
VGltZUludGVydmFsXTsKKyAgICBbc2VsZiBfc2V0TGF5ZXJPcGFjaXR5OmlzVmlzaWJsZSA/IGtM
YXllckFscGhhIDogMC4wXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworfQorCistICh2
b2lkKW1vdXNlTW92ZWQ6KE5TRXZlbnQgKilldmVudAoreworICAgIGlmIChDR1JlY3RDb250YWlu
c1BvaW50KFtzZWxmIGNvbnZlcnRSZWN0OkNHUmVjdEluc2V0KFtfbGF5ZXIgZnJhbWVdLCAtMTYu
MCwgLTE2LjApIHRvVmlldzpuaWxdLCBOU1BvaW50VG9DR1BvaW50KGV2ZW50LmxvY2F0aW9uSW5X
aW5kb3cpKSkgeworICAgICAgICBbc2VsZiBfc2V0VmlzaWJsZTp0cnVlXTsKKyAgICAgICAgX21v
dXNlTW92ZWRUb0hVRCA9IHRydWU7CisgICAgfSBlbHNlIGlmIChfaW5pdGlhbEhpZGVUaW1lckZp
cmVkKQorICAgICAgICBbc2VsZiBfc2V0VmlzaWJsZTpmYWxzZV07Cit9CisKKy0gKHZvaWQpbW91
c2VEb3duOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBfYWN0aXZlQ29udHJvbCA9IFtzZWxmIF9j
b250cm9sRm9yRXZlbnQ6ZXZlbnRdOworICAgIGlmIChbX2FjdGl2ZUNvbnRyb2wgaXNFcXVhbFRv
U3RyaW5nOlBERkhVRFNlcGVyYXRvckNvbnRyb2xdKQorICAgICAgICBfYWN0aXZlQ29udHJvbCA9
IG5pbDsKKyAgICBpZiAoX2FjdGl2ZUNvbnRyb2wpIHsKKyAgICAgICAgLy8gVXBkYXRlIHJlbmRl
cmluZyB0byBoaWdobGlnaHQgaXQuLgorICAgICAgICBfYWN0aXZlTGF5ZXIgPSBbc2VsZiBfbGF5
ZXJGb3JFdmVudDpldmVudF07CisgICAgICAgIAorICAgICAgICAvLyBVcGRhdGUgbGF5ZXIgaW1h
Z2U7IGRvIG5vdCBhbmltYXRlCisgICAgICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICAg
ICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKKyAgICAgICAgCisgICAg
ICAgIFtfYWN0aXZlTGF5ZXIgc2V0T3BhY2l0eToga0NvbnRyb2xMYXllckRvd25BbHBoYV07Cisg
ICAgICAgIAorICAgICAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworICAgIH0KK30KKworLSAo
dm9pZCltb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBpZiAoIV9hY3RpdmVDb250cm9s
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgTlNTdHJpbmcqIG1vdXNlVXBDb250cm9sID0g
W3NlbGYgX2NvbnRyb2xGb3JFdmVudDpldmVudF07CisgICAgaWYgKFtfYWN0aXZlQ29udHJvbCBp
c0VxdWFsVG9TdHJpbmc6bW91c2VVcENvbnRyb2xdKQorICAgICAgICBbc2VsZiBfcGVyZm9ybUFj
dGlvbkZvckNvbnRyb2w6X2FjdGl2ZUNvbnRyb2wuZ2V0KCldOworICAgIAorICAgIFtDQVRyYW5z
YWN0aW9uIGJlZ2luXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNd
OworICAgIFtfYWN0aXZlTGF5ZXIgc2V0T3BhY2l0eTprQ29udHJvbExheWVyTm9ybWFsQWxwaGFd
OworICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CisKKyAgICBfYWN0aXZlTGF5ZXIgPSBuaWw7
CisgICAgX2FjdGl2ZUNvbnRyb2wgPSBuaWw7Cit9CisKKy0gKE9wdGlvbmFsPE5TVUludGVnZXI+
KV9jb250cm9sSW5kZXhGb3JFdmVudDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgQ0dQb2ludCBp
bml0aWFsUG9pbnQgPSBOU1BvaW50VG9DR1BvaW50KGV2ZW50LmxvY2F0aW9uSW5XaW5kb3cpOwor
ICAgIGluaXRpYWxQb2ludC54IC09IFtfbGF5ZXIgZnJhbWVdLm9yaWdpbi54OworICAgIGluaXRp
YWxQb2ludC55IC09IFtfbGF5ZXIgZnJhbWVdLm9yaWdpbi55OworICAgIGZvciAoTlNVSW50ZWdl
ciBpbmRleCA9IDA7IGluZGV4IDwgW19sYXllciBzdWJsYXllcnNdLmNvdW50OyBpbmRleCsrKSB7
CisgICAgICAgIENBTGF5ZXIgKnN1YkxheWVyID0gW19sYXllciBzdWJsYXllcnNdW2luZGV4XTsK
KyAgICAgICAgTlNSZWN0IHdpbmRvd1NwYWNlUmVjdCA9IFtzZWxmIGNvbnZlcnRSZWN0OnN1Ykxh
eWVyLmZyYW1lIHRvVmlldzpuaWxdOworICAgICAgICBpZiAoQ0dSZWN0Q29udGFpbnNQb2ludCh3
aW5kb3dTcGFjZVJlY3QsIGluaXRpYWxQb2ludCkpCisgICAgICAgICAgICByZXR1cm4gaW5kZXg7
CisgICAgfQorICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKKy0gKE5TU3RyaW5nICopX2Nv
bnRyb2xGb3JFdmVudDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgaWYgKGF1dG8gaW5kZXggPSBb
c2VsZiBfY29udHJvbEluZGV4Rm9yRXZlbnQ6ZXZlbnRdKQorICAgICAgICByZXR1cm4gY29udHJv
bEFycmF5KClbKmluZGV4XTsKKyAgICByZXR1cm4gbmlsOworfQorCistIChDQUxheWVyICopX2xh
eWVyRm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIGlmIChhdXRvIGluZGV4ID0gW3Nl
bGYgX2NvbnRyb2xJbmRleEZvckV2ZW50OmV2ZW50XSkKKyAgICAgICAgcmV0dXJuIFtfbGF5ZXIg
c3VibGF5ZXJzXVsqaW5kZXhdOworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKHZvaWQpX3BlcmZv
cm1BY3Rpb25Gb3JDb250cm9sOihOU1N0cmluZyAqKWNvbnRyb2wKK3sKKyAgICBpZiAoIV92aXNp
YmxlKQorICAgICAgICByZXR1cm47CisgICAgYXV0byogcGFnZSA9IF9wYWdlLmdldCgpOworICAg
IGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChbY29udHJvbCBpc0VxdWFsVG9T
dHJpbmc6UERGSFVEWm9vbUluQ29udHJvbF0pCisgICAgICAgIHBhZ2UtPnBkZlpvb21JbihfcGx1
Z2luSWRlbnRpZmllcik7CisgICAgZWxzZSBpZiAoW2NvbnRyb2wgaXNFcXVhbFRvU3RyaW5nOlBE
RkhVRFpvb21PdXRDb250cm9sXSkKKyAgICAgICAgcGFnZS0+cGRmWm9vbU91dChfcGx1Z2luSWRl
bnRpZmllcik7CisgICAgZWxzZSBpZiAoW2NvbnRyb2wgaXNFcXVhbFRvU3RyaW5nOlBERkhVRFNh
dmVQREZDb250cm9sXSkKKyAgICAgICAgcGFnZS0+cGRmU2F2ZVRvUERGKF9wbHVnaW5JZGVudGlm
aWVyKTsKKyAgICBlbHNlIGlmIChbY29udHJvbCBpc0VxdWFsVG9TdHJpbmc6UERGSFVETGF1bmNo
UHJldmlld0NvbnRyb2xdKQorICAgICAgICBwYWdlLT5wZGZPcGVuV2l0aFByZXZpZXcoX3BsdWdp
bklkZW50aWZpZXIpOworfQorCistICh2b2lkKV9sb2FkSWNvbkltYWdlcworeworICAgIGZvciAo
TlNTdHJpbmcgKmNvbnRyb2xOYW1lIGluIGNvbnRyb2xBcnJheSgpKQorICAgICAgICBbc2VsZiBf
Z2V0SW1hZ2VGb3JDb250cm9sTmFtZTogY29udHJvbE5hbWVdOworfQorCistICh2b2lkKV9zZXR1
cExheWVyOihDQUxheWVyICopcGFyZW50TGF5ZXIKK3sKKyAgICBfbGF5ZXIgPSBhZG9wdE5TKFtb
Q0FMYXllciBhbGxvY10gaW5pdF0pOworICAgIFtfbGF5ZXIgc2V0Q29ybmVyUmFkaXVzOmtMYXll
ckNvcm5lclJhZGl1c107CisgICAgCisgICAgYXV0byBjb2xvciA9IGFkb3B0TlMoUERGQ0dDb2xv
ckNyZWF0ZUdlbmVyaWNSR0Ioa0xheWVyR3JheUNvbXBvbmVudCwga0xheWVyR3JheUNvbXBvbmVu
dCwga0xheWVyR3JheUNvbXBvbmVudCwgMS4wKSk7CisgICAgW19sYXllciBzZXRCYWNrZ3JvdW5k
Q29sb3I6W2NvbG9yIENHQ29sb3JdXTsKKyAgICBbc2VsZiBfc2V0TGF5ZXJPcGFjaXR5OmtMYXll
ckFscGhhXTsKKyAgICAKKyAgICBbc2VsZiBfbG9hZEljb25JbWFnZXNdOworICAgIENHRmxvYXQg
bWluSWNvbkltYWdlSGVpZ2h0ID0gc3RkOjpudW1lcmljX2xpbWl0czxDR0Zsb2F0Pjo6bWF4KCk7
CisgICAgZm9yIChOU0ltYWdlKiBpbWFnZSBpbiBbX2NhY2hlZEljb25zIGFsbFZhbHVlc10pCisg
ICAgICAgIG1pbkljb25JbWFnZUhlaWdodCA9IHN0ZDo6bWluKG1pbkljb25JbWFnZUhlaWdodCwg
KGltYWdlLnNpemUuaGVpZ2h0IC8gX2RldmljZVNjYWxlRmFjdG9yKSk7CisgICAgCisgICAgQ0dG
bG9hdCBkeCA9IGtMYXllckNvbnRyb2xsZXJIb3Jpem9udGFsTWFyZ2luOworICAgIGZvciAoTlNT
dHJpbmcgKmNvbnRyb2xOYW1lIGluIGNvbnRyb2xBcnJheSgpKSB7CisgICAgICAgIGF1dG8gY29u
dHJvbExheWVyID0gYWRvcHROUyhbW0NBTGF5ZXIgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgQ0dG
bG9hdCBkeSA9IDAuMDsKKyAgICAgICAgQ0dGbG9hdCBjb250cm9sbGVyV2lkdGggPSAwLjA7Cisg
ICAgICAgIENHRmxvYXQgY29udHJvbGxlckhlaWdodCA9IDAuMDsKKworICAgICAgICBpZiAoW2Nv
bnRyb2xOYW1lIGlzRXF1YWxUb1N0cmluZzogUERGSFVEU2VwZXJhdG9yQ29udHJvbF0pIHsKKyAg
ICAgICAgICAgIGR5ID0ga0xheWVyU2VwZXJhdG9yVmVydGljYWxNYXJnaW47CisgICAgICAgICAg
ICBjb250cm9sbGVyV2lkdGggPSBrTGF5ZXJTZXBlcmF0b3JDb250cm9sbGVyU2l6ZTsKKyAgICAg
ICAgICAgIGNvbnRyb2xsZXJIZWlnaHQgPSBtaW5JY29uSW1hZ2VIZWlnaHQgKyAoMi4wICoga0xh
eWVySW1hZ2VWZXJ0aWNhbE1hcmdpbikgLSAoMi4wICoga0xheWVyU2VwZXJhdG9yVmVydGljYWxN
YXJnaW4pOworICAgICAgICAgICAgCisgICAgICAgICAgICBbY29udHJvbExheWVyIHNldEJhY2tn
cm91bmRDb2xvcjogW1tOU0NvbG9yIGxpZ2h0R3JheUNvbG9yXSBDR0NvbG9yXV07CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBOU0ltYWdlKiBjb250cm9sSW1hZ2UgPSBbc2VsZiBfZ2V0
SW1hZ2VGb3JDb250cm9sTmFtZTpjb250cm9sTmFtZV07CisgICAgICAgICAgICBbY29udHJvbExh
eWVyIHNldENvbnRlbnRzOiBjb250cm9sSW1hZ2VdOworICAgICAgICAgICAgW2NvbnRyb2xMYXll
ciBzZXRPcGFjaXR5OiBrQ29udHJvbExheWVyTm9ybWFsQWxwaGFdOworCisgICAgICAgICAgICBk
eSA9IGtMYXllckltYWdlVmVydGljYWxNYXJnaW47CisgICAgICAgICAgICBjb250cm9sbGVyV2lk
dGggPSBbY29udHJvbEltYWdlIHNpemVdLndpZHRoIC8gX2RldmljZVNjYWxlRmFjdG9yOworICAg
ICAgICAgICAgY29udHJvbGxlckhlaWdodCA9IFtjb250cm9sSW1hZ2Ugc2l6ZV0uaGVpZ2h0IC8g
X2RldmljZVNjYWxlRmFjdG9yOworICAgICAgICAgICAgCisgICAgICAgICAgICBkeSAtPSAoY29u
dHJvbGxlckhlaWdodCAtIG1pbkljb25JbWFnZUhlaWdodCkgLyAyLjA7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIFtjb250cm9sTGF5ZXIgc2V0RmlsdGVyczpAW1tDQUZpbHRlciBmaWx0ZXJX
aXRoVHlwZTprQ0FGaWx0ZXJDb2xvckludmVydF1dXTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgW2NvbnRyb2xMYXllciBzZXRGcmFtZTpDR1JlY3RNYWtlKGR4LCBkeSwgY29udHJvbGxl
cldpZHRoLCBjb250cm9sbGVySGVpZ2h0KV07CisgICAgICAgIFtfbGF5ZXIgYWRkU3VibGF5ZXI6
Y29udHJvbExheWVyLmdldCgpXTsKKyAgICAgICAgCisgICAgICAgIGR4ICs9IGNvbnRyb2xsZXJX
aWR0aCArIGtMYXllckNvbnRyb2xsZXJIb3Jpem9udGFsTWFyZ2luOworICAgIH0KKyAgICAKKyAg
ICBbX2xheWVyIHNldEZyYW1lOkNHUmVjdE1ha2UoMCwga0xheWVyVmVydGljYWxPZmZzZXQsIGR4
LCBtaW5JY29uSW1hZ2VIZWlnaHQgKyAyLjAgKiBrTGF5ZXJJbWFnZVZlcnRpY2FsTWFyZ2luKV07
CisgICAgW3BhcmVudExheWVyIGFkZFN1YmxheWVyOiBfbGF5ZXIuZ2V0KCldOworfQorCistICh2
b2lkKV9yZWRyYXdMYXllcgoreworICAgIFtfY2FjaGVkSWNvbnMgcmVtb3ZlQWxsT2JqZWN0c107
CisgICAgQ0FMYXllciAqcGFyZW50TGF5ZXIgPSBbX2xheWVyIHN1cGVybGF5ZXJdOworICAgIFtf
bGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAgIFtzZWxmIF9zZXR1cExheWVyOnBhcmVu
dExheWVyXTsKKyAgICBbc2VsZiBzZXRGcmFtZVNpemU6X2ZyYW1lU2l6ZV07Cit9CisKKy0gKE5T
SW1hZ2UqKV9nZXRJbWFnZUZvckNvbnRyb2xOYW1lOihOU1N0cmluZyAqKWNvbnRyb2wKK3sKKyAg
ICBOU0ltYWdlKiBpY29uSW1hZ2UgPSBfY2FjaGVkSWNvbnMuZ2V0KClbY29udHJvbF07CisgICAg
aWYgKGljb25JbWFnZSkKKyAgICAgICAgcmV0dXJuIGljb25JbWFnZTsKKworICAgIGljb25JbWFn
ZSA9IFtOU0ltYWdlIF9pbWFnZVdpdGhTeXN0ZW1TeW1ib2xOYW1lOiBjb250cm9sXTsKKyAgICBp
ZiAoIWljb25JbWFnZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIGljb25JbWFnZSA9IFtp
Y29uSW1hZ2UgX2ltYWdlV2l0aENvbmZpZ3VyYXRpb246QHsKKyAgICAgICAgTlNJbWFnZUFsdGVy
bmF0ZUNyaXRlcmlvbkZvbnQgOiBbTlNGb250IHByZWZlcnJlZEZvbnRGb3JUZXh0U3R5bGU6TlNG
b250VGV4dFN0eWxlVGl0bGUyIG9wdGlvbnM6QHsgfV0sCisgICAgICAgIE5TSW1hZ2VBbHRlcm5h
dGVDcml0ZXJpb25TeW1ib2xTY2FsZSA6IEAoTlNJbWFnZVN5bWJvbFNjYWxlTGFyZ2UpCisgICAg
fV07CisgICAgICAgIAorICAgIE5TUmVjdCBpY29uSW1hZ2VSZWN0ID0gTlNNYWtlUmVjdCgwLCAw
LCBbaWNvbkltYWdlIHNpemVdLndpZHRoICoga0xheWVySW1hZ2VTY2FsZSAqIF9kZXZpY2VTY2Fs
ZUZhY3RvciwgW2ljb25JbWFnZSBzaXplXS5oZWlnaHQgKiBrTGF5ZXJJbWFnZVNjYWxlICogX2Rl
dmljZVNjYWxlRmFjdG9yKTsKKyAgICBOU0ltYWdlUmVwKiBpY29uSW1hZ2VSZXAgPSBbaWNvbklt
YWdlIGJlc3RSZXByZXNlbnRhdGlvbkZvclJlY3Q6aWNvbkltYWdlUmVjdCBjb250ZXh0Om5pbCBo
aW50czpuaWxdOworICAgIGljb25JbWFnZSA9IFtOU0ltYWdlIGltYWdlV2l0aEltYWdlUmVwOiBp
Y29uSW1hZ2VSZXBdOworICAgIAorICAgIF9jYWNoZWRJY29ucy5nZXQoKVtjb250cm9sXSA9IGlj
b25JbWFnZTsKKyAgICByZXR1cm4gaWNvbkltYWdlOworfQorCistICh2b2lkKV9zZXRMYXllck9w
YWNpdHk6KENHRmxvYXQpYWxwaGEKK3sKKyAgICBbX2xheWVyIHNldE9wYWNpdHk6YWxwaGFdOwor
ICAgIGZvciAoQ0FMYXllciAqc3ViTGF5ZXIgaW4gW19sYXllciBzdWJsYXllcnNdKQorICAgICAg
ICBbc3ViTGF5ZXIgc2V0T3BhY2l0eTphbHBoYV07Cit9CisKK0BlbmQKKworI2VuZGlmIC8vIEVO
QUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvV2ViUGFnZVByb3h5SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0JKHJldmlzaW9uIDI2NjA5NCkKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0JKHdvcmtpbmcgY29weSkKQEAg
LTEwODgsMTYgKzEwODgsNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUGVyZm9ybURpY3Rpb25h
cnlMCiAgICAgcGFnZUNsaWVudCgpLmRpZFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwKGRpY3Rpb25h
cnlQb3B1cEluZm8pOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6c2F2ZVBERlRvVGVtcG9yYXJ5
Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbihjb25zdCBTdHJpbmcmLCBGcmFtZUlu
Zm9EYXRhJiYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYsIGNvbnN0IFN0cmluZyYpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJQYWdlUHJveHk6Om9wZW5QREZGcm9t
VGVtcG9yYXJ5Rm9sZGVyV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKEZyYW1lSW5mb0RhdGEmJiwgY29u
c3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB2b2lkIFdlYlBhZ2VQ
cm94eTo6c2V0UmVtb3RlTGF5ZXJUcmVlUm9vdE5vZGUoUmVtb3RlTGF5ZXJUcmVlTm9kZSogcm9v
dE5vZGUpCiB7CiAgICAgcGFnZUNsaWVudCgpLnNldFJlbW90ZUxheWVyVHJlZVJvb3ROb2RlKHJv
b3ROb2RlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1w
bE1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xp
ZW50SW1wbE1hYy5oCShyZXZpc2lvbiAyNjYwOTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9tYWMvUGFnZUNsaWVudEltcGxNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDYgKzE5MCwx
MyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCByZWdpc3Rlckluc2VydGlvblVuZG9Hcm91cGluZygp
IG92ZXJyaWRlOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICB2b2lkIGNy
ZWF0ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikg
b3ZlcnJpZGU7CisgICAgdm9pZCB1cGRhdGVQREZIVURMb2NhdGlvbihQREZQbHVnaW5JZGVudGlm
aWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCByZW1vdmVQ
REZIVUQoUERGUGx1Z2luSWRlbnRpZmllcikgb3ZlcnJpZGU7CisgICAgdm9pZCByZW1vdmVBbGxQ
REZIVURzKCkgb3ZlcnJpZGU7CisjZW5kaWYKKwogICAgIC8vIEF1eGlsaWFyeSBDbGllbnQgQ3Jl
YXRpb24KICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgV2ViRnVsbFNjcmVlbk1hbmFn
ZXJQcm94eUNsaWVudCYgZnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudCgpIG92ZXJyaWRlOwpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1h
Yy5tbQkocmV2aXNpb24gMjY2MDk0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1Bh
Z2VDbGllbnRJbXBsTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNDksNiArMzQ5LDMwIEBAIHZv
aWQgUGFnZUNsaWVudEltcGw6OnJlZ2lzdGVySW5zZXJ0aW9uVW4KICAgICByZWdpc3Rlckluc2Vy
dGlvblVuZG9Hcm91cGluZ1dpdGhVbmRvTWFuYWdlcihbbV92aWV3IHVuZG9NYW5hZ2VyXSk7CiB9
CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCit2b2lkIFBhZ2VDbGllbnRJbXBs
OjpjcmVhdGVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIG1faW1wbC0+Y3JlYXRlUERGSFVEKGlkZW50aWZp
ZXIsIHJlY3QpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjp1cGRhdGVQREZIVURMb2NhdGlv
bihQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IHJlY3QpCit7CisgICAgbV9pbXBsLT51cGRhdGVQREZIVURMb2NhdGlvbihpZGVudGlmaWVyLCBy
ZWN0KTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVtb3ZlUERGSFVEKFBERlBsdWdpbklk
ZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBtX2ltcGwtPnJlbW92ZVBERkhVRChpZGVudGlm
aWVyKTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVtb3ZlQWxsUERGSFVEcygpCit7Cisg
ICAgbV9pbXBsLT5yZW1vdmVBbGxQREZIVURzKCk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoVUlf
UFJPQ0VTU19QREZfSFVEKQorCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpjbGVhckFsbEVkaXRDb21t
YW5kcygpCiB7CiAgICAgbV9pbXBsLT5jbGVhckFsbEVkaXRDb21tYW5kcygpOwpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCShyZXZpc2lv
biAyNjYwOTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NzUsOCArNDc1LDYgQEAgc3RhdGljIE5TU3RyaW5nICpw
YXRoVG9QREZPbkRpc2soY29uc3QgUwogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2F2ZVBERlRvVGVt
cG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbihjb25zdCBTdHJpbmcmIHN1
Z2dlc3RlZEZpbGVuYW1lLCBGcmFtZUluZm9EYXRhJiYgZnJhbWVJbmZvLCBjb25zdCBJUEM6OkRh
dGFSZWZlcmVuY2UmIGRhdGEsIGNvbnN0IFN0cmluZyYgcGRmVVVJRCkKIHsKLSAgICBNRVNTQUdF
X0NIRUNLKFRlbXBvcmFyeVBERkZpbGVNYXA6OmlzVmFsaWRLZXkocGRmVVVJRCkpOwotCiAgICAg
aWYgKGRhdGEuaXNFbXB0eSgpKSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiQ2Fubm90IHNhdmUg
ZW1wdHkgUERGIGZpbGUgdG8gdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkuIik7CiAgICAgICAgIHJl
dHVybjsKQEAgLTUwNCw3ICs1MDIsOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2F2ZVBERlRvVGVt
cG9yYXJ5Rm9sCiAgICAgYXV0byBvcmlnaW5hdGluZ1VSTFN0cmluZyA9IGZyYW1lSW5mby5yZXF1
ZXN0LnVybCgpLnN0cmluZygpOwogICAgIEZpbGVTeXN0ZW06OnNldE1ldGFkYXRhVVJMKG5zUGF0
aC5nZXQoKSwgb3JpZ2luYXRpbmdVUkxTdHJpbmcpOwogCi0gICAgbV90ZW1wb3JhcnlQREZGaWxl
cy5hZGQocGRmVVVJRCwgbnNQYXRoLmdldCgpKTsKKyAgICBpZiAoVGVtcG9yYXJ5UERGRmlsZU1h
cDo6aXNWYWxpZEtleShwZGZVVUlEKSkKKyAgICAgICAgbV90ZW1wb3JhcnlQREZGaWxlcy5hZGQo
cGRmVVVJRCwgbnNQYXRoLmdldCgpKTsKIAogICAgIGF1dG8gcGRmRmlsZVVSTCA9IFVSTDo6Zmls
ZVVSTFdpdGhGaWxlU3lzdGVtUGF0aChTdHJpbmcobnNQYXRoLmdldCgpKSk7CiAgICAgbV91aUNs
aWVudC0+Y29uZmlybVBERk9wZW5pbmcoKnRoaXMsIHBkZkZpbGVVUkwsIFdURk1vdmUoZnJhbWVJ
bmZvKSwgW3BkZkZpbGVVUkxdIChib29sIGFsbG93ZWQpIHsKQEAgLTUxNCw2ICs1MTMsNyBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sCiAgICAgfSk7CiB9CiAKKyNp
ZiBFTkFCTEUoUERGS0lUX1BMVUdJTikgJiYgIUVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCiB2
b2lkIFdlYlBhZ2VQcm94eTo6b3BlblBERkZyb21UZW1wb3JhcnlGb2xkZXJXaXRoTmF0aXZlQXBw
bGljYXRpb24oRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywgY29uc3QgU3RyaW5nJiBwZGZVVUlE
KQogewogICAgIE1FU1NBR0VfQ0hFQ0soVGVtcG9yYXJ5UERGRmlsZU1hcDo6aXNWYWxpZEtleShw
ZGZVVUlEKSk7CkBAIC01MzAsNiArNTMwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6Om9wZW5QREZG
cm9tVGVtcG9yYXJ5RgogICAgICAgICBbW05TV29ya3NwYWNlIHNoYXJlZFdvcmtzcGFjZV0gb3Bl
blVSTDpwZGZGaWxlVVJMXTsKICAgICB9KTsKIH0KKyNlbmRpZgogCiAjaWYgRU5BQkxFKFBERktJ
VF9QTFVHSU4pCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2hvd1BERkNvbnRleHRNZW51KGNvbnN0IFdl
YktpdDo6UERGQ29udGV4dE1lbnUmIGNvbnRleHRNZW51LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KE9wdGlvbmFsPGludDMyX3Q+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtNjczLDYgKzY3
NCw0OSBAQCBQbGF0Zm9ybVZpZXcqIFdlYlBhZ2VQcm94eTo6cGxhdGZvcm1WaWV3CiAgICAgcmV0
dXJuIFtwYWdlQ2xpZW50KCkucGxhdGZvcm1XaW5kb3coKSBjb250ZW50Vmlld107CiB9CiAKKyNp
ZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCit2b2lkIFdlYlBhZ2VQcm94eTo6Y3JlYXRl
UERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgcmVjdCkKK3sKKyAgICBwYWdlQ2xpZW50KCkuY3JlYXRlUERGSFVEKGlkZW50aWZpZXIs
IHJlY3QpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6cmVtb3ZlUERGSFVEKFBERlBsdWdpbklk
ZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBwYWdlQ2xpZW50KCkucmVtb3ZlUERGSFVEKGlk
ZW50aWZpZXIpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6dXBkYXRlUERGSFVETG9jYXRpb24o
UERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBy
ZWN0KQoreworICAgIHBhZ2VDbGllbnQoKS51cGRhdGVQREZIVURMb2NhdGlvbihpZGVudGlmaWVy
LCByZWN0KTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnBkZlpvb21JbihQREZQbHVnaW5JZGVu
dGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Wm9vbVBE
RkluKGlkZW50aWZpZXIpKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnBkZlpvb21PdXQoUERG
UGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6Olpvb21QREZPdXQoaWRlbnRpZmllcikpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6cGRm
U2F2ZVRvUERGKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBzZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OlNhdmVQREYoaWRlbnRpZmllciksIFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIChTdHJpbmcmJiBzdWdnZXN0ZWRGaWxl
bmFtZSwgVVJMJiYgb3JpZ2luYXRpbmdVUkwsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0
YVJlZmVyZW5jZSkgeworICAgICAgICBzYXZlUERGVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIoV1RG
TW92ZShzdWdnZXN0ZWRGaWxlbmFtZSksIFdURk1vdmUob3JpZ2luYXRpbmdVUkwpLCBkYXRhUmVm
ZXJlbmNlKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnBkZk9wZW5XaXRoUHJl
dmlldyhQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgc2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJQYWdlOjpPcGVuUERGV2l0aFByZXZpZXcoaWRlbnRpZmllciks
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIChTdHJpbmcmJiBzdWdnZXN0
ZWRGaWxlbmFtZSwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywgY29uc3QgSVBDOjpEYXRhUmVm
ZXJlbmNlJiBkYXRhLCBjb25zdCBTdHJpbmcmIHBkZlVVSUQpIHsKKyAgICAgICAgc2F2ZVBERlRv
VGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbihXVEZNb3ZlKHN1Z2dl
c3RlZEZpbGVuYW1lKSwgV1RGTW92ZShmcmFtZUluZm8pLCBkYXRhLCBwZGZVVUlEKTsKKyAgICB9
KTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpJbmRleDogU291cmNlL1dl
YktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNjYw
OTQpCisrKyBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzkwLDYgKzE3OTAsNyBAQAogCQlEM0I5NDg0OTExRkY0QjY1MDAw
MzJCMzkgLyogV2ViU2VhcmNoUG9wdXBNZW51LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBEM0I5NDg0NTExRkY0QjY1MDAwMzJCMzkgLyogV2ViU2VhcmNo
UG9wdXBNZW51LmggKi87IH07CiAJCURGNDYyRTBGMjNGMjJGNTUwMEVGRjM1RiAvKiBXS0hUVFBD
b29raWVTdG9yZVByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IERGNDYyRTBFMjNGMjJGNTMwMEVGRjM1RiAvKiBXS0hUVFBDb29raWVTdG9yZVBy
aXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlERjQ2MkUxMjIzRjMzOEJFMDBFRkYzNUYgLyogV0tDb250ZW50V29ybGRQcml2YXRlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERjQ2MkUxMTIzRjMz
OEFEMDBFRkYzNUYgLyogV0tDb250ZW50V29ybGRQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJREY4NENFRTQyNDlBQTI0RDAwOTA5NkY2
IC8qIFdLUERGSFVEVmlldy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IERGODRDRUUyMjQ5QUEyMUYwMDkwOTZGNiAvKiBXS1BERkhVRFZpZXcubW0gKi87
IH07CiAJCUUxMDVGRTU0MThEN0I5REUwMDhGNTdBOCAvKiBFZGl0aW5nUmFuZ2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMDVGRTUzMThEN0I5REUw
MDhGNTdBOCAvKiBFZGl0aW5nUmFuZ2UuaCAqLzsgfTsKIAkJRTExRDM1QUUxNkI2M0QxQjAwNkQy
M0Q3IC8qIGNvbS5hcHBsZS5XZWJQcm9jZXNzLnNiIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTk2N0UzNzE1MEFCNUUyMDBDNzMxNjkgLyogY29tLmFw
cGxlLldlYlByb2Nlc3Muc2IgKi87IH07CiAJCUUxNEE5NTRBMTZFMDE2QTQwMDY4REU4MiAvKiBO
ZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE0QTk1NDgxNkUwMTZBNDAwNjhERTgyIC8qIE5ldHdv
cmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzLmggKi87IH07CkBAIC01Mjc5LDYgKzUyODAsOSBA
QAogCQlERjQ2MkUxMTIzRjMzOEFEMDBFRkYzNUYgLyogV0tDb250ZW50V29ybGRQcml2YXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQ29udGVudFdvcmxkUHJpdmF0ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERjU4QzYzMTEzNzFBQzU4MDBGOUEzN0Mg
LyogTmF0aXZlV2ViV2hlZWxFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBOYXRpdmVXZWJXaGVlbEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURG
NThDNjM1MTM3MUFDQTAwMEY5QTM3QyAvKiBOYXRpdmVXZWJXaGVlbEV2ZW50TWFjLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTmF0aXZlV2ViV2hlZWxFdmVudE1h
Yy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREY3NDI3NUMyNEY0OTU1MDAwRjhB
QkU5IC8qIFBERlBsdWdpbklkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUERGUGx1Z2luSWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlERjg0Q0VFMjI0OUFBMjFGMDA5MDk2RjYgLyogV0tQREZIVURWaWV3Lm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tQREZIVURWaWV3Lm1tOyBwYXRoID0gUERG
L1dLUERGSFVEVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREY4NENFRTMy
NDlBQTIxRjAwOTA5NkY2IC8qIFdLUERGSFVEVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBXS1BERkhVRFZpZXcuaDsgcGF0aCA9IFBERi9XS1BERkhVRFZpZXcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEwNUZFNTMxOEQ3QjlERTAwOEY1N0E4IC8qIEVk
aXRpbmdSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFZGl0aW5nUmFu
Z2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTExNUM3MTUxOTBGOEEyNTAwRUND
NTE2IC8qIGNvbS5hcHBsZS5XZWJLaXQuU3RvcmFnZS5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUg
PSBjb20uYXBwbGUuV2ViS2l0LlN0b3JhZ2Uuc2I7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJL
aXQyL2NvbS5hcHBsZS5XZWJLaXQuU3RvcmFnZS5zYjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RV
Q1RTX0RJUjsgfTsKIAkJRTEzM0ZEODkxNDIzREQ3RjAwRkM3QkZCIC8qIFdlYktpdC5pY25zICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gaW1hZ2UuaWNu
czsgbmFtZSA9IFdlYktpdC5pY25zOyBwYXRoID0gUmVzb3VyY2VzL1dlYktpdC5pY25zOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTkwMCw2ICs1OTA0LDcgQEAKIAkJCWNoaWxkcmVu
ID0gKAogCQkJCTFBNkZCOTA4MTFFNjZGQjEwMERCMTM3MSAvKiBOZXRzY2FwZSAqLywKIAkJCQlF
MTk5ODc1QjE0MkJGOUNGMDBCQjJERTcgLyogUERGICovLAorCQkJCURGNzQyNzVDMjRGNDk1NTAw
MEY4QUJFOSAvKiBQREZQbHVnaW5JZGVudGlmaWVyLmggKi8sCiAJCQkJMUE2RkI3RDAxMUU2NTFF
MjAwREIxMzcxIC8qIFBsdWdpbi5jcHAgKi8sCiAJCQkJMUE2RkI3RDExMUU2NTFFMjAwREIxMzcx
IC8qIFBsdWdpbi5oICovLAogCQkJCTFBQTU2RjI4MTFFOTJCQzgwMDYxQjg4MiAvKiBQbHVnaW5D
b250cm9sbGVyLmggKi8sCkBAIC04OTYzLDYgKzg5NjgsNyBAQAogCQkJCUNENDU3MEQ4MjQ0NENB
MTcwMEEzRENFQiAvKiBNZWRpYSAqLywKIAkJCQk1MTBDQzdFNzE2MTM4RTcyMDBEMDNFRDMgLyog
TmV0d29yayAqLywKIAkJCQkzMUEyRUM0MDE0ODk5NzM3MDA4MTBENzEgLyogTm90aWZpY2F0aW9u
cyAqLywKKwkJCQlERjg0Q0VFMTI0OUFBMjAwMDA5MDk2RjYgLyogUERGICovLAogCQkJCTFBRUZD
QzA1MTFEMDFGMzQwMDgyMTlEMyAvKiBQbHVnaW5zICovLAogCQkJCTJEMTU1MUE5MUY1QTlCNDIw
MDA2RTNGRSAvKiBSZW1vdGVMYXllclRyZWUgKi8sCiAJCQkJMUFBRjA4OUUxOTI2ODFBQzAwQjYz
OTBDIC8qIFVzZXJDb250ZW50ICovLApAQCAtMTA0NTEsNiArMTA0NTcsMTUgQEAKIAkJCXBhdGgg
PSBpb3M7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQlERjg0Q0VFMTI0OUFB
MjAwMDA5MDk2RjYgLyogUERGICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJl
biA9ICgKKwkJCQlERjg0Q0VFMzI0OUFBMjFGMDA5MDk2RjYgLyogV0tQREZIVURWaWV3LmggKi8s
CisJCQkJREY4NENFRTIyNDlBQTIxRjAwOTA5NkY2IC8qIFdLUERGSFVEVmlldy5tbSAqLywKKwkJ
CSk7CisJCQluYW1lID0gUERGOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJ
RTE3MDg3NkQxNkQ2Q0E3MjAwRjk5MjI2IC8qIEZpbGVBUEkgKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMTMxNDIsNiArMTMxNTcsNyBAQAogCQkJCTYzNzI4
MUEzMjFBREM3NDQwMDlFMERFNiAvKiBXS0Rvd25sb2FkUHJvZ3Jlc3MubW0gaW4gU291cmNlcyAq
LywKIAkJCQk1Q0U5MTIwRDIyOTNDMjE5MDA1QkVDNzggLyogV0tNYWluLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNDY1N0Q4OEEyMjY2NEEyRjAwNURFODIzIC8qIFdLT3JpZW50YXRpb25BY2Nlc3NB
bGVydC5tbSBpbiBTb3VyY2VzICovLAorCQkJCURGODRDRUU0MjQ5QUEyNEQwMDkwOTZGNiAvKiBX
S1BERkhVRFZpZXcubW0gaW4gU291cmNlcyAqLywKIAkJCQk1Q0EyNkQ4MzIxN0FEMUI4MDBGOTdB
MzUgLyogV0tTYWZlQnJvd3NpbmdXYXJuaW5nLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMURCMDE5
NDQyMTFDRjAwNTAwOUZCM0U4IC8qIFdLU2hhcmVTaGVldC5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTdBNzhGRjMzMjI0MTkxOUIwMDk2NDgzRSAvKiBXS1N0b3JhZ2VBY2Nlc3NBbGVydC5tbSBpbiBT
b3VyY2VzICovLApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGUGx1
Z2luSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BERlBsdWdpbklkZW50aWZpZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREZQbHVnaW5JZGVudGlmaWVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKKyNpZiBF
TkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorZW51bSBQREZQbHVnaW5JZGVudGlmaWVyVHlwZSB7
IH07Cit1c2luZyBQREZQbHVnaW5JZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxQREZQbHVn
aW5JZGVudGlmaWVyVHlwZT47CisjZW5kaWYKKworfQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1BsdWdpbnMvUERGL1BERkxheWVyQ29udHJvbGxlclNQSS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZMYXllckNvbnRyb2xsZXJT
UEkuaAkocmV2aXNpb24gMjY2MDk0KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdp
bnMvUERGL1BERkxheWVyQ29udHJvbGxlclNQSS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4
NywxMiBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBQREZMYXllckNvbnRyCiAKIC0gKHZv
aWQpc25hcHNob3RJbkNvbnRleHQ6KENHQ29udGV4dFJlZiljb250ZXh0OwogCisjaWYgRU5BQkxF
KFVJX1BST0NFU1NfUERGX0hVRCkKKy0gKHZvaWQpc2V0RGlzcGxheXNQREZIVURDb250cm9sbGVy
OihCT09MKWRpc3BsYXlzQ29udHJvbGxlcjsKKy0gKHZvaWQpem9vbUluOihpZClhdFBvaW50Owor
LSAodm9pZCl6b29tT3V0OihpZClhdFBvaW50OworI2VuZGlmCisKIC0gKHZvaWQpbWFnbmlmeVdp
dGhNYWduaWZpY2F0aW9uOihDR0Zsb2F0KW1hZ25pZmljYXRpb24gYXRQb2ludDooQ0dQb2ludClw
b2ludCBpbW1lZGlhdGVseTooQk9PTClpbW1lZGlhdGVseTsKIAogLSAoQ0dQb2ludClzY3JvbGxQ
b3NpdGlvbjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQ
bHVnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9Q
REYvUERGUGx1Z2luLmgJKHJldmlzaW9uIDI2NjA5NCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgs
NyBAQAogI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQogCiAjaW5jbHVkZSAiUERGS2l0SW1wb3J0
cy5oIgorI2luY2x1ZGUgIlBERlBsdWdpbklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJQbHVnaW4u
aCIKICNpbmNsdWRlICJXZWJFdmVudC5oIgogI2luY2x1ZGUgIldlYkhpdFRlc3RSZXN1bHREYXRh
LmgiCkBAIC01MCw2ICs1MSw3IEBAIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTVmFsdWUq
IEpTVmEKIE9CSkNfQ0xBU1MgTlNBcnJheTsKIE9CSkNfQ0xBU1MgTlNBdHRyaWJ1dGVkU3RyaW5n
OwogT0JKQ19DTEFTUyBOU0RhdGE7CitPQkpDX0NMQVNTIE5TRXZlbnQ7CiBPQkpDX0NMQVNTIE5T
U3RyaW5nOwogT0JKQ19DTEFTUyBQREZBbm5vdGF0aW9uOwogT0JKQ19DTEFTUyBQREZMYXllckNv
bnRyb2xsZXI7CkBAIC03Nyw4ICs3OSw5IEBAIGNsYXNzIFBERlBsdWdpbkFubm90YXRpb247CiBj
bGFzcyBQREZQbHVnaW5QYXNzd29yZEZpZWxkOwogY2xhc3MgUGx1Z2luVmlldzsKIGNsYXNzIFdl
YkZyYW1lOworc3RydWN0IEZyYW1lSW5mb0RhdGE7CiAKLWNsYXNzIFBERlBsdWdpbiBmaW5hbCA6
IHB1YmxpYyBQbHVnaW4sIHByaXZhdGUgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEKK2NsYXNzIFBE
RlBsdWdpbiBmaW5hbCA6IHB1YmxpYyBQbHVnaW4sIHB1YmxpYyBXZWJDb3JlOjpTY3JvbGxhYmxl
QXJlYQogI2lmIEhBVkUoSU5DUkVNRU5UQUxfUERGX0FQSVMpCiAgICAgLCBwcml2YXRlIFdlYkNv
cmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50CiAjZW5kaWYKQEAgLTEwMyw5ICsx
MDYsMTkgQEAgcHVibGljOgogICAgIHZvaWQgbm90aWZ5U2VsZWN0aW9uQ2hhbmdlZChQREZTZWxl
Y3Rpb24gKik7CiAgICAgdm9pZCBub3RpZnlDdXJzb3JDaGFuZ2VkKHVpbnQ2NF90IC8qIFBERkxh
eWVyQ29udHJvbGxlckN1cnNvclR5cGUgKi8pOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERG
X0hVRCkKKyAgICB2b2lkIHpvb21JbigpOworICAgIHZvaWQgem9vbU91dCgpOworICAgIHZvaWQg
c2F2ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFVSTCYsIGNv
bnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpPiYmKTsKKyAgICB2b2lkIG9wZW5XaXRoUHJldmlldyhD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYsIEZyYW1lSW5mb0RhdGEmJiwgY29u
c3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwgY29uc3QgU3RyaW5nJik+JiYpOworICAgIFBERlBsdWdp
bklkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQor
I2VuZGlmCisKICAgICB2b2lkIGNsaWNrZWRMaW5rKE5TVVJMICopOworI2lmICFFTkFCTEUoVUlf
UFJPQ0VTU19QREZfSFVEKQogICAgIHZvaWQgc2F2ZVRvUERGKCk7CiAgICAgdm9pZCBvcGVuV2l0
aE5hdGl2ZUFwcGxpY2F0aW9uKCk7CisjZW5kaWYKICAgICB2b2lkIHdyaXRlSXRlbXNUb1Bhc3Rl
Ym9hcmQoTlNTdHJpbmcgKnBhc3RlYm9hcmROYW1lLCBOU0FycmF5ICppdGVtcywgTlNBcnJheSAq
dHlwZXMpOwogICAgIHZvaWQgc2hvd0RlZmluaXRpb25Gb3JBdHRyaWJ1dGVkU3RyaW5nKE5TQXR0
cmlidXRlZFN0cmluZyAqLCBDR1BvaW50KTsKICAgICB2b2lkIHBlcmZvcm1XZWJTZWFyY2goTlNT
dHJpbmcgKik7CkBAIC0xMTgsNyArMTMxLDEwIEBAIHB1YmxpYzoKIAogICAgIFdlYkNvcmU6OkZs
b2F0UmVjdCBjb252ZXJ0RnJvbVBERlZpZXdUb1NjcmVlbihjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmKSBjb25zdDsKICAgICBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbVJvb3RWaWV3VG9Q
REZWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7CisgICAgV2ViQ29yZTo6SW50
UG9pbnQgY29udmVydEZyb21QREZWaWV3VG9Sb290Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFJlY3QgY29udmVydEZyb21QREZWaWV3VG9Sb290
Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Q7CiAgICAgV2ViQ29yZTo6SW50UmVj
dCBib3VuZHNPblNjcmVlbigpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFJlY3QgZnJhbWVGb3JI
VUQoKSBjb25zdDsKIAogICAgIGJvb2wgc2hvd0NvbnRleHRNZW51QXRQb2ludChjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYpOwogCkBAIC0xNTksNyArMTc1LDcgQEAgcHJpdmF0ZToKICAgICBib29s
IHdhbnRzV2hlZWxFdmVudHMoKSBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAgICAgdm9pZCBnZW9t
ZXRyeURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBwbHVnaW5TaXplLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3Jt
JiBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtKSBmaW5hbDsKICAgICB2b2lkIGNvbnRlbnRzU2Nh
bGVGYWN0b3JDaGFuZ2VkKGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHZpc2liaWxpdHlEaWRDaGFu
Z2UoYm9vbCkgZmluYWwgeyB9CisgICAgdm9pZCB2aXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wpIGZp
bmFsOwogICAgIHZvaWQgZnJhbWVEaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHJlcXVlc3RJRCkg
ZmluYWw7CiAgICAgdm9pZCBmcmFtZURpZEZhaWwodWludDY0X3QgcmVxdWVzdElELCBib29sIHdh
c0NhbmNlbGxlZCkgZmluYWw7CiAgICAgdm9pZCBkaWRFdmFsdWF0ZUphdmFTY3JpcHQodWludDY0
X3QgcmVxdWVzdElELCBjb25zdCBTdHJpbmcmIHJlc3VsdCkgZmluYWw7CkBAIC0yNjMsNyArMjc5
LDYgQEAgcHJpdmF0ZToKICAgICBOU0V2ZW50ICpuc0V2ZW50Rm9yV2ViTW91c2VFdmVudChjb25z
dCBXZWJNb3VzZUV2ZW50Jik7CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZyb21QbHVn
aW5Ub1BERlZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKICAgICBXZWJDb3Jl
OjpJbnRQb2ludCBjb252ZXJ0RnJvbVJvb3RWaWV3VG9QbHVnaW4oY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmKSBjb25zdDsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbVBERlZpZXdU
b1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7CiAgICAgCiAgICAgYm9v
bCBzdXBwb3J0c0Zvcm1zKCk7CiAgICAgYm9vbCBpc0Z1bGxGcmFtZVBsdWdpbigpIGNvbnN0OwpA
QCAtNDAzLDYgKzQxOCw5IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2VuZGlmIC8vIEhBVkUoSU5D
UkVNRU5UQUxfUERGX0FQSVMpCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBQ
REZQbHVnaW5JZGVudGlmaWVyIG1faWRlbnRpZmllcjsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYv
UERGUGx1Z2luLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BERi9QREZQbHVnaW4ubW0JKHJldmlzaW9uIDI2NjA5NCkKKysrIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0JKHdvcmtpbmcgY29weSkKQEAgLTQz
MywxMiArNDMzLDE2IEBAIC0gKHZvaWQpcGVyZm9ybVNwb3RsaWdodFNlYXJjaDooTlNTdHJpbmcK
IAogLSAodm9pZClvcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uCiB7CisjaWYgIUVOQUJMRShVSV9Q
Uk9DRVNTX1BERl9IVUQpCiAgICAgX3BkZlBsdWdpbi0+b3BlbldpdGhOYXRpdmVBcHBsaWNhdGlv
bigpOworI2VuZGlmCiB9CiAKIC0gKHZvaWQpc2F2ZVRvUERGCiB7CisjaWYgIUVOQUJMRShVSV9Q
Uk9DRVNTX1BERl9IVUQpCiAgICAgX3BkZlBsdWdpbi0+c2F2ZVRvUERGKCk7CisjZW5kaWYKIH0K
IAogLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxh
eWVyQ29udHJvbGxlciBjbGlja2VkTGlua1dpdGhVUkw6KE5TVVJMICopdXJsCkBAIC02MDAsNyAr
NjA0LDEzIEBAIGlubGluZSBQREZQbHVnaW46OlBERlBsdWdpbihXZWJGcmFtZSYgZnIKICNpZiBI
QVZFKElOQ1JFTUVOVEFMX1BERl9BUElTKQogICAgICwgbV9pbmNyZW1lbnRhbFBERkxvYWRpbmdF
bmFibGVkKFdlYkNvcmU6OlJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
aW5jcmVtZW50YWxQREZMb2FkaW5nRW5hYmxlZCgpKQogI2VuZGlmCisjaWYgRU5BQkxFKFVJX1BS
T0NFU1NfUERGX0hVRCkKKyAgICAsIG1faWRlbnRpZmllcihQREZQbHVnaW5JZGVudGlmaWVyOjpn
ZW5lcmF0ZSgpKQorI2VuZGlmCiB7CisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAg
ICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2V0RGlzcGxheXNQREZIVURDb250cm9sbGVyOk5PXTsK
KyNlbmRpZgogICAgIG1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpLmRlbGVnYXRlID0gbV9wZGZM
YXllckNvbnRyb2xsZXJEZWxlZ2F0ZS5nZXQoKTsKICAgICBtX3BkZkxheWVyQ29udHJvbGxlci5n
ZXQoKS5wYXJlbnRMYXllciA9IG1fY29udGVudExheWVyLmdldCgpOwogCkBAIC02NDAsNiArNjUw
LDEwIEBAIGlubGluZSBQREZQbHVnaW46OlBERlBsdWdpbihXZWJGcmFtZSYgZnIKIAogUERGUGx1
Z2luOjp+UERGUGx1Z2luKCkKIHsKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAg
IGlmIChhdXRvKiBwYWdlID0gbV9mcmFtZS5wYWdlKCkpCisgICAgICAgIHBhZ2UtPnJlbW92ZVBE
RkhVRCgqdGhpcyk7CisjZW5kaWYKIH0KIAogI2lmIEhBVkUoSU5DUkVNRU5UQUxfUERGX0FQSVMp
CkBAIC0xNzcyLDYgKzE3ODYsMTEgQEAgdm9pZCBQREZQbHVnaW46OmNvbnRlbnRzU2NhbGVGYWN0
b3JDaGFuZwogICAgIHVwZGF0ZVBhZ2VBbmREZXZpY2VTY2FsZUZhY3RvcnMoKTsKIH0KIAorSW50
UmVjdCBQREZQbHVnaW46OmZyYW1lRm9ySFVEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29udmVy
dEZyb21QREZWaWV3VG9Sb290VmlldyhJbnRSZWN0KEludFBvaW50KCksIHNpemUoKSkpOworfQor
CiB2b2lkIFBERlBsdWdpbjo6Y2FsY3VsYXRlU2l6ZXMoKQogewogICAgIGlmIChbbV9wZGZEb2N1
bWVudCBpc0xvY2tlZF0pIHsKQEAgLTE3ODIsNiArMTgwMSwxMCBAQCB2b2lkIFBERlBsdWdpbjo6
Y2FsY3VsYXRlU2l6ZXMoKQogCiAgICAgbV9maXJzdFBhZ2VIZWlnaHQgPSBbbV9wZGZEb2N1bWVu
dCBwYWdlQ291bnRdID8gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KENHQ2VpbGluZyhbW21fcGRmRG9j
dW1lbnQgcGFnZUF0SW5kZXg6MF0gYm91bmRzRm9yQm94OmtQREZEaXNwbGF5Qm94Q3JvcEJveF0u
c2l6ZS5oZWlnaHQpKSA6IDA7CiAgICAgc2V0UERGRG9jdW1lbnRTaXplKEludFNpemUoW21fcGRm
TGF5ZXJDb250cm9sbGVyIGNvbnRlbnRTaXplUmVzcGVjdGluZ1pvb21dKSk7CisKKyNpZiBFTkFC
TEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIG1fZnJhbWUucGFnZSgpLT51cGRhdGVQREZIVURM
b2NhdGlvbigqdGhpcywgZnJhbWVGb3JIVUQoKSk7CisjZW5kaWYKIH0KIAogYm9vbCBQREZQbHVn
aW46OmluaXRpYWxpemUoY29uc3QgUGFyYW1ldGVycyYgcGFyYW1ldGVycykKQEAgLTE5MTYsNyAr
MTkzOSwxMyBAQCBJbnRQb2ludCBQREZQbHVnaW46OmNvbnZlcnRGcm9tUERGVmlld1RvCiAgICAg
SW50UG9pbnQgcG9pbnRJblBsdWdpbkNvb3JkaW5hdGVzKHBvaW50LngoKSwgc2l6ZSgpLmhlaWdo
dCgpIC0gcG9pbnQueSgpKTsKICAgICByZXR1cm4gbV9yb290Vmlld1RvUGx1Z2luVHJhbnNmb3Jt
LmludmVyc2UoKS52YWx1ZU9yKEFmZmluZVRyYW5zZm9ybSgpKS5tYXBQb2ludChwb2ludEluUGx1
Z2luQ29vcmRpbmF0ZXMpOwogfQotICAgIAorCitJbnRSZWN0IFBERlBsdWdpbjo6Y29udmVydEZy
b21QREZWaWV3VG9Sb290Vmlldyhjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAoreworICAgIElu
dFJlY3QgcmVjdEluUGx1Z2luQ29vcmRpbmF0ZXMocmVjdC54KCksIHJlY3QueSgpLCByZWN0Lndp
ZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIHJldHVybiBtX3Jvb3RWaWV3VG9QbHVnaW5UcmFu
c2Zvcm0uaW52ZXJzZSgpLnZhbHVlT3IoQWZmaW5lVHJhbnNmb3JtKCkpLm1hcFJlY3QocmVjdElu
UGx1Z2luQ29vcmRpbmF0ZXMpOworfQorCiBJbnRQb2ludCBQREZQbHVnaW46OmNvbnZlcnRGcm9t
Um9vdFZpZXdUb1BERlZpZXcoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAogewogICAgIElu
dFBvaW50IHBvaW50SW5QbHVnaW5Db29yZGluYXRlcyA9IG1fcm9vdFZpZXdUb1BsdWdpblRyYW5z
Zm9ybS5tYXBQb2ludChwb2ludCk7CkBAIC0xOTQ3LDYgKzE5NzYsMTggQEAgSW50UmVjdCBQREZQ
bHVnaW46OmJvdW5kc09uU2NyZWVuKCkgY29ucwogICAgIHJldHVybiBmcmFtZVZpZXctPmNvbnRl
bnRzVG9TY3JlZW4oZW5jbG9zaW5nSW50UmVjdChyZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKSk7
CiB9CiAKK3ZvaWQgUERGUGx1Z2luOjp2aXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wgdmlzaWJsZSkK
K3sKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIGlmICh2aXNpYmxlKQorICAg
ICAgICBtX2ZyYW1lLnBhZ2UoKS0+Y3JlYXRlUERGSFVEKCp0aGlzLCBmcmFtZUZvckhVRCgpKTsK
KyAgICBlbHNlCisgICAgICAgIG1fZnJhbWUucGFnZSgpLT5yZW1vdmVQREZIVUQoKnRoaXMpOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odmlzaWJsZSk7CisjZW5kaWYKK30KKwogdm9pZCBQREZQ
bHVnaW46Omdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIHBsdWdpblNpemUsIGNvbnN0
IEludFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zv
cm0pCiB7CiAgICAgaWYgKHNpemUoKSA9PSBwbHVnaW5TaXplICYmIHBsdWdpblZpZXcoKS0+cGFn
ZVNjYWxlRmFjdG9yKCkgPT0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGNvbnRlbnRTY2FsZUZhY3Rv
cl0pCkBAIC0yMzkyLDYgKzI0MzMsMzEgQEAgYm9vbCBQREZQbHVnaW46OnBsdWdpbkhhbmRsZXND
b250ZW50T2ZmcwogICAgIHJldHVybiB0cnVlOwogfQogCisjaWYgRU5BQkxFKFVJX1BST0NFU1Nf
UERGX0hVRCkKKwordm9pZCBQREZQbHVnaW46Onpvb21JbigpCit7CisgICAgW21fcGRmTGF5ZXJD
b250cm9sbGVyIHpvb21JbjpuaWxdOworfQorCit2b2lkIFBERlBsdWdpbjo6em9vbU91dCgpCit7
CisgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHpvb21PdXQ6bmlsXTsKK30KKwordm9pZCBQREZQ
bHVnaW46OnNhdmUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmLCBjb25zdCBV
UkwmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sK
KyAgICBOU0RhdGEgKmRhdGEgPSBsaXZlRGF0YSgpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKG1f
c3VnZ2VzdGVkRmlsZW5hbWUsIG1fZnJhbWUudXJsKCksIElQQzo6IERhdGFSZWZlcmVuY2Uoc3Rh
dGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxlbmd0aCkpOworfQor
Cit2b2lkIFBERlBsdWdpbjo6b3BlbldpdGhQcmV2aWV3KENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Y29uc3QgU3RyaW5nJiwgRnJhbWVJbmZvRGF0YSYmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2Um
LCBjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBOU0RhdGEgKmRh
dGEgPSBsaXZlRGF0YSgpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fc3VnZ2VzdGVkRmlsZW5h
bWUsIG1fZnJhbWUuaW5mbygpLCBJUEM6OiBEYXRhUmVmZXJlbmNlIHsgc3RhdGljX2Nhc3Q8Y29u
c3QgdWludDhfdCo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxlbmd0aCB9LCBjcmVhdGVDYW5vbmljYWxV
VUlEU3RyaW5nKCkpOworfQorCisjZWxzZSAvLyBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQog
ICAgIAogdm9pZCBQREZQbHVnaW46OnNhdmVUb1BERigpCiB7CkBAIC0yNDI0LDYgKzI0OTAsOCBA
QCB2b2lkIFBERlBsdWdpbjo6b3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvCiAgICAgbV9mcmFtZS5w
YWdlKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6T3BlblBERkZyb21UZW1wb3JhcnlG
b2xkZXJXaXRoTmF0aXZlQXBwbGljYXRpb24obV9mcmFtZS5pbmZvKCksIG1fdGVtcG9yYXJ5UERG
VVVJRCkpOwogfQogCisjZW5kaWYgLy8gRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKwogdm9p
ZCBQREZQbHVnaW46OndyaXRlSXRlbXNUb1Bhc3RlYm9hcmQoTlNTdHJpbmcgKnBhc3RlYm9hcmRO
YW1lLCBOU0FycmF5ICppdGVtcywgTlNBcnJheSAqdHlwZXMpCiB7CiAgICAgYXV0byBwYXN0ZWJv
YXJkVHlwZXMgPSBtYWtlVmVjdG9yPFN0cmluZz4odHlwZXMpOwpJbmRleDogU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDI2NjA5NCkKKysr
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MTIzLDEyICs1MTIzLDEyIEBAIHZvaWQgV2ViUGFnZTo6ZGlkRmluaXNoUHJpbnRP
cGVyYXRpb24oY28KIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pICYmICFF
TkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQogdm9pZCBXZWJQYWdlOjpzYXZlUERGVG9GaWxlSW5E
b3dubG9hZHNGb2xkZXIoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgY29uc3QgVVJM
JiBvcmlnaW5hdGluZ1VSTCwgY29uc3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgbG9uZyBzaXpl
KQogewogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2F2ZVBERlRvRmlsZUluRG93
bmxvYWRzRm9sZGVyKHN1Z2dlc3RlZEZpbGVuYW1lLCBvcmlnaW5hdGluZ1VSTCwgSVBDOjpEYXRh
UmVmZXJlbmNlKGRhdGEsIHNpemUpKSk7CiB9CiAKLSNpZiBQTEFURk9STShDT0NPQSkKIHZvaWQg
V2ViUGFnZTo6c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNh
dGlvbihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBGcmFtZUluZm9EYXRhJiYgZnJh
bWVJbmZvLCBjb25zdCB1aW50OF90KiBkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUsIGNvbnN0IFN0
cmluZyYgcGRmVVVJRCkKIHsKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNhdmVQ
REZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oc3VnZ2VzdGVk
RmlsZW5hbWUsIGZyYW1lSW5mbywgSVBDOjpEYXRhUmVmZXJlbmNlKGRhdGEsIHNpemUpLCBwZGZV
VUlEKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
CShyZXZpc2lvbiAyNjYwOTQpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJNZXNz
YWdlUmVjZWl2ZXIuaCIKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCiAjaW5jbHVkZSAiT3B0
aW9uYWxDYWxsYmFja0lELmgiCisjaW5jbHVkZSAiUERGUGx1Z2luSWRlbnRpZmllci5oIgogI2lu
Y2x1ZGUgIlBsdWdpbi5oIgogI2luY2x1ZGUgIlBvbGljeURlY2lzaW9uLmgiCiAjaW5jbHVkZSAi
U2FuZGJveEV4dGVuc2lvbi5oIgpAQCAtMzQ1LDYgKzM0NiwxNiBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGNlbnRlclNlbGVjdGlvbkluVmlzaWJsZUFyZWEoKTsKIAorI2lmIEVOQUJMRShVSV9QUk9D
RVNTX1BERl9IVUQpCisgICAgdm9pZCBjcmVhdGVQREZIVUQoUERGUGx1Z2luJiwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgdXBkYXRlUERGSFVETG9jYXRpb24oUERGUGx1Z2lu
JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgcmVtb3ZlUERGSFVEKFBERlBs
dWdpbiYpOworICAgIHZvaWQgem9vbVBERkluKFBERlBsdWdpbklkZW50aWZpZXIpOworICAgIHZv
aWQgem9vbVBERk91dChQREZQbHVnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHNhdmVQREYoUERG
UGx1Z2luSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmLCBj
b25zdCBVUkwmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKT4mJik7CisgICAgdm9pZCBvcGVu
UERGV2l0aFByZXZpZXcoUERGUGx1Z2luSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChjb25zdCBTdHJpbmcmLCBGcmFtZUluZm9EYXRhJiYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5j
ZSYsIGNvbnN0IFN0cmluZyYpPiYmKTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAg
ICAgdm9pZCB3aWxsQ29tbWl0TGF5ZXJUcmVlKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJik7
CiAgICAgdm9pZCBkaWRGbHVzaExheWVyVHJlZUF0VGltZShNb25vdG9uaWNUaW1lKTsKQEAgLTEw
NzQsOSArMTA4NSw4IEBAIHB1YmxpYzoKICAgICBOU0RpY3Rpb25hcnkgKmRhdGFEZXRlY3Rpb25D
b250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhRGV0ZWN0aW9uQ29udGV4dC5nZXQoKTsgfQog
I2VuZGlmCiAKKyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikgJiYgIUVOQUJMRShVSV9QUk9DRVNT
X1BERl9IVUQpCiAgICAgdm9pZCBzYXZlUERGVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIoY29uc3Qg
U3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgY29uc3QgVVJMJiBvcmlnaW5hdGluZ1VSTCwgY29u
c3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKTsKLQotI2lmIFBMQVRGT1JNKENP
Q09BKQogICAgIHZvaWQgc2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVB
cHBsaWNhdGlvbihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBGcmFtZUluZm9EYXRh
JiYsIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgY29uc3QgU3RyaW5n
JiBwZGZVVUlEKTsKICNlbmRpZgogCkBAIC0xNzkxLDYgKzE4MDEsMTAgQEAgcHJpdmF0ZToKIAog
ICAgIFdlYkNvcmU6OkNvbG9yIG1fdW5kZXJsYXlDb2xvcjsKIAorI2lmIEVOQUJMRShVSV9QUk9D
RVNTX1BERl9IVUQpCisgICAgSGFzaE1hcDxQREZQbHVnaW5JZGVudGlmaWVyLCBXZWFrUHRyPFBE
RlBsdWdpbj4+IG1fcGRmUGx1Z0luc1dpdGhIVUQ7CisjZW5kaWYKKwogICAgIGJvb2wgbV9pc0lu
UmVkbyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzQ2xvc2VkIHsgZmFsc2UgfTsKICAgICBib29s
IG1fdGFiVG9MaW5rcyB7IGZhbHNlIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHJldmlzaW9uIDI2NjA5NCkK
KysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4J
KHdvcmtpbmcgY29weSkKQEAgLTU3Niw2ICs1NzYsMTMgQEAgR2VuZXJhdGVTeW50aGV0aWNFZGl0
aW5nQ29tbWFuZChlbnVtOnVpbgogCiAgICAgU2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVyc0xv
YWRpbmcpCiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIFpvb21QREZJbihX
ZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikKKyAgICBab29tUERGT3V0KFdl
YktpdDo6UERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQorICAgIFNhdmVQREYoV2ViS2l0
OjpQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpIC0+IChTdHJpbmcgZmlsZW5hbWUsIFVS
TCB1cmwsIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhKSBBc3luYworICAgIE9wZW5QREZXaXRoUHJl
dmlldyhXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikgLT4gKFN0cmluZyBm
aWxlbmFtZSwgc3RydWN0IFdlYktpdDo6RnJhbWVJbmZvRGF0YSBmcmFtZUluZm8sIElQQzo6RGF0
YVJlZmVyZW5jZSBkYXRhLCBTdHJpbmcgdXVpZCkgQXN5bmMKKyNlbmRpZgorCiAgICAgVXBkYXRl
Q3VycmVudE1vZGlmaWVyU3RhdGUoT3B0aW9uU2V0PFdlYkNvcmU6OlBsYXRmb3JtRXZlbnQ6Ok1v
ZGlmaWVyPiBtb2RpZmllcnMpCiAgICAgU2ltdWxhdGVEZXZpY2VPcmllbnRhdGlvbkNoYW5nZShk
b3VibGUgYWxwaGEsIGRvdWJsZSBiZXRhLCBkb3VibGUgZ2FtbWEpCiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCShyZXZp
c2lvbiAyNjYwOTQpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2Vi
UGFnZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2ltcG9ydCAiRWRp
dGluZ1JhbmdlLmgiCiAjaW1wb3J0ICJFZGl0b3JTdGF0ZS5oIgogI2ltcG9ydCAiRm9udEluZm8u
aCIKKyNpbXBvcnQgIkZyYW1lSW5mb0RhdGEuaCIKICNpbXBvcnQgIkluamVjdGVkQnVuZGxlSGl0
VGVzdFJlc3VsdC5oIgogI2ltcG9ydCAiUERGS2l0SW1wb3J0cy5oIgogI2ltcG9ydCAiUERGUGx1
Z2luLmgiCkBAIC0xMDUxLDcgKzEwNTIsNjIgQEAgdm9pZCBXZWJQYWdlOjpzZXRBY2NlbnRDb2xv
cihXZWJDb3JlOjpDbwogICAgIFtOU0FwcCBfc2V0QWNjZW50Q29sb3I6Y29sb3IuaXNWYWxpZCgp
ID8gV2ViQ29yZTo6bnNDb2xvcihjb2xvcikgOiBuaWxdOwogfQogCi0jZW5kaWYKKyNlbmRpZiAv
LyBIQVZFKEFQUF9BQ0NFTlRfQ09MT1JTKQorCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hV
RCkKKwordm9pZCBXZWJQYWdlOjp6b29tUERGSW4oUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlm
aWVyKQoreworICAgIGF1dG8gcGRmUGx1Z2luID0gbV9wZGZQbHVnSW5zV2l0aEhVRC5nZXQoaWRl
bnRpZmllcik7CisgICAgaWYgKCFwZGZQbHVnaW4pCisgICAgICAgIHJldHVybjsKKyAgICBwZGZQ
bHVnaW4tPnpvb21JbigpOworfQorCit2b2lkIFdlYlBhZ2U6Onpvb21QREZPdXQoUERGUGx1Z2lu
SWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIGF1dG8gcGRmUGx1Z2luID0gbV9wZGZQbHVn
SW5zV2l0aEhVRC5nZXQoaWRlbnRpZmllcik7CisgICAgaWYgKCFwZGZQbHVnaW4pCisgICAgICAg
IHJldHVybjsKKyAgICBwZGZQbHVnaW4tPnpvb21PdXQoKTsKK30KKwordm9pZCBXZWJQYWdlOjpz
YXZlUERGKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChjb25zdCBTdHJpbmcmLCBjb25zdCBVUkwmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2Um
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBhdXRvIHBkZlBsdWdpbiA9IG1fcGRmUGx1
Z0luc1dpdGhIVUQuZ2V0KGlkZW50aWZpZXIpOworICAgIGlmICghcGRmUGx1Z2luKQorICAgICAg
ICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9LCB7IH0sIHsgfSk7CisgICAgcGRmUGx1Z2lu
LT5zYXZlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBXZWJQYWdlOjpv
cGVuUERGV2l0aFByZXZpZXcoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYsIEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgSVBD
OjpEYXRhUmVmZXJlbmNlJiwgY29uc3QgU3RyaW5nJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7
CisgICAgYXV0byBwZGZQbHVnaW4gPSBtX3BkZlBsdWdJbnNXaXRoSFVELmdldChpZGVudGlmaWVy
KTsKKyAgICBpZiAoIXBkZlBsdWdpbikKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVy
KHsgfSwgeyB9LCB7IH0sIHsgfSk7CisgICAgcGRmUGx1Z2luLT5vcGVuV2l0aFByZXZpZXcoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIFdlYlBhZ2U6OmNyZWF0ZVBERkhV
RChQREZQbHVnaW4mIHBsdWdpbiwgY29uc3QgSW50UmVjdCYgYm91bmRpbmdCb3gpCit7CisgICAg
YXV0byBhZGRSZXN1bHQgPSBtX3BkZlBsdWdJbnNXaXRoSFVELmFkZChwbHVnaW4uaWRlbnRpZmll
cigpLCBtYWtlV2Vha1B0cihwbHVnaW4pKTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkp
CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Q3JlYXRlUERGSFVEKHBsdWdp
bi5pZGVudGlmaWVyKCksIGJvdW5kaW5nQm94KSk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6dXBkYXRl
UERGSFVETG9jYXRpb24oUERGUGx1Z2luJiBwbHVnaW4sIGNvbnN0IEludFJlY3QmIGJvdW5kaW5n
Qm94KQoreworICAgIGlmIChtX3BkZlBsdWdJbnNXaXRoSFVELmNvbnRhaW5zKHBsdWdpbi5pZGVu
dGlmaWVyKCkpKQorICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlVwZGF0ZVBE
RkhVRExvY2F0aW9uKHBsdWdpbi5pZGVudGlmaWVyKCksIGJvdW5kaW5nQm94KSk7Cit9CisKK3Zv
aWQgV2ViUGFnZTo6cmVtb3ZlUERGSFVEKFBERlBsdWdpbiYgcGx1Z2luKQoreworICAgIGlmICht
X3BkZlBsdWdJbnNXaXRoSFVELnJlbW92ZShwbHVnaW4uaWRlbnRpZmllcigpKSkKKyAgICAgICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSZW1vdmVQREZIVUQocGx1Z2luLmlkZW50aWZp
ZXIoKSkpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407188</attachid>
            <date>2020-08-25 07:43:13 -0700</date>
            <delta_ts>2020-08-25 18:37:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215780-20200825074312.patch</filename>
            <type>text/plain</type>
            <size>64848</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjYxMTApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA4LTI1ICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBQREYgaGVhZHMtdXAgZGlz
cGxheSB0byBVSSBwcm9jZXNzIG9uIG1hY09TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU3ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU4NzE1
ODQ3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
d3RmL1BsYXRmb3JtSGF2ZS5oOgorCiAyMDIwLTA4LTI0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAg
PGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBJbXBsZW1lbnQgcmVuZGVyaW5n
IGZyYW1lcyB0aW1lbGluZSBwYW5lbCBmb3IgR1RLKyBwb3J0CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybUVuYWJsZUNvY29hLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGxh
dGZvcm1FbmFibGVDb2NvYS5oCShyZXZpc2lvbiAyNjYxMTApCisrKyBTb3VyY2UvV1RGL3d0Zi9Q
bGF0Zm9ybUVuYWJsZUNvY29hLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw2ICsyMjgsMTAgQEAK
ICNkZWZpbmUgRU5BQkxFX0dQVV9EUklWRVJfUFJFV0FSTUlORyAxCiAjZW5kaWYKIAorI2lmIFBM
QVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAwMDAK
KyNkZWZpbmUgRU5BQkxFX1VJX1BST0NFU1NfUERGX0hVRCAxCisjZW5kaWYKKwogI2lmICFkZWZp
bmVkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKQogI2RlZmluZSBFTkFCTEVfSU5ERVhFRF9EQVRB
QkFTRSAxCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9OU0lt
YWdlU1BJLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL05T
SW1hZ2VTUEkuaAkocmV2aXNpb24gMjY2MTEwKQorKysgU291cmNlL1dlYkNvcmUvUEFML3BhbC9z
cGkvbWFjL05TSW1hZ2VTUEkuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsOCBAQAogTlNf
QVNTVU1FX05PTk5VTExfQkVHSU4KIAogQGludGVyZmFjZSBOU0ltYWdlICgpCisrIChpbnN0YW5j
ZXR5cGUpaW1hZ2VXaXRoSW1hZ2VSZXA6KE5TSW1hZ2VSZXAgKilpbWFnZVJlcDsKKy0gKGluc3Rh
bmNldHlwZSlfaW1hZ2VXaXRoQ29uZmlndXJhdGlvbjooTlNEaWN0aW9uYXJ5ICopY29uZmlndXJh
dGlvbjsKIC0gKHZvaWQpbG9ja0ZvY3VzV2l0aFJlY3Q6KE5TUmVjdClyZWN0IGNvbnRleHQ6KG51
bGxhYmxlIE5TR3JhcGhpY3NDb250ZXh0ICopY29udGV4dCBoaW50czoobnVsbGFibGUgTlNEaWN0
aW9uYXJ5ICopaGludHMgZmxpcHBlZDooQk9PTClmbGlwcGVkOwogQGVuZAogCkBAIC00Myw2ICs0
NSwxMyBAQCBAaW50ZXJmYWNlIE5TSW1hZ2UgKE5TU3lzdGVtU3ltYm9scykKICsgKG51bGxhYmxl
IE5TSW1hZ2UgKilfaW1hZ2VXaXRoU3lzdGVtU3ltYm9sTmFtZTooTlNTdHJpbmcgKikgc3ltYm9s
TmFtZTsKIEBlbmQKIAorV1RGX0VYVEVSTl9DX0JFR0lOCisKK2V4dGVybiBjb25zdCBOU1N0cmlu
ZyAqTlNJbWFnZUFsdGVybmF0ZUNyaXRlcmlvbkZvbnQ7CitleHRlcm4gY29uc3QgTlNTdHJpbmcg
Kk5TSW1hZ2VBbHRlcm5hdGVDcml0ZXJpb25TeW1ib2xTY2FsZTsKKworV1RGX0VYVEVSTl9DX0VO
RAorCiBOU19BU1NVTUVfTk9OTlVMTF9FTkQKIAogI2VuZGlmCkBAIC01Niw2ICs2NSw2IEBAIGV4
dGVybiBjb25zdCBOU0ltYWdlSGludEtleSBOU0ltYWdlSGludFMKIAogTlNfQVNTVU1FX05PTk5V
TExfRU5ECiAKLSNlbmRpZgorI2VuZGlmIC8vIEhBVkUoQUxURVJOQVRFX0lDT05TKQogCi0jZW5k
aWYKKyNlbmRpZiAvLyBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQpJbmRleDogU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlz
aW9uIDI2NjExMCkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTYgQEAKKzIwMjAtMDgtMjUgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5z
ZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBNb3ZlIFBERiBoZWFkcy11cCBkaXNwbGF5IHRvIFVJ
IHByb2Nlc3Mgb24gbWFjT1MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIxNTc4MAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTg3MTU4NDc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBoYXMgbWFu
eSBiZW5lZml0cyBpbmNsdWRpbmcgdGhlIG9uZSBpbiB0aGUgcmFkYXIsIHRlc3RhYmlsaXR5LCBh
bmQgbW92aW5nIFdlYktpdC1zcGVjaWZpYyBjb2RlIGZyb20gUERGS2l0IHRvIFdlYktpdC4KKwor
ICAgICAgICBOb3cgdGhhdCB0aGUgSFVEIGlzIGRpc3BsYXllZCBpbiB0aGUgVUkgcHJvY2VzcyBp
bnN0ZWFkIG9mIGluIHRoZSB3ZWIgY29udGVudCwgem9vbWluZyBpbiBrZWVwcyB0aGUgSFVEIHRo
ZSBzYW1lIHNpemUuCisgICAgICAgIEEgM2QtdHJhbnNmb3JtZWQgaWZyYW1lIHdpdGggYSBQREYg
aW4gaXQgbm93IHNob3dzIHRoZSBIVUQgaW4gdGhlIHBsYWNlIHlvdSBjYW4gY2xpY2sgb24gaXQs
IGluc3RlYWQgb2YgaW4gdGhlIHRyYW5zZm9ybWVkIFBERi4KKyAgICAgICAgQWxzbywgbW92aW5n
IHRoZSBtb3VzZSB0byB0aGUgSFVEIHdpdGhpbiB0aGUgZmlyc3QgMyBzZWNvbmRzIHByZXZlbnRz
IGl0IGZyb20gaGlkaW5nLCB3aGljaCBpdCBkb2VzIHdoZW4gdGhlIG1vdXNlIGxlYXZlcyB0aGUg
SFVELgorICAgICAgICBUaGUgcmVzdCBvZiB0aGUgYmVoYXZpb3IgSSB0aGluayBzaG91bGQgYmUg
dGhlIHNhbWUuICBNb3N0IHVzZXJzIHNob3VsZCBub3Qgbm90aWNlIGFueSBkaWZmZXJlbmNlLgor
CisgICAgICAgIEZ1bmN0aW9uYWxpdHkgY292ZXJlZCBieSBBUEkgdGVzdHMsIHRoZSBmaXJzdCB0
ZXN0cyBmb3IgUERGIGNvbnRlbnQgaW50ZXJhY3Rpb24hCisKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdC9tZXNzYWdlcy5weToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmll
d0ludGVybmFsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tOgorICAg
ICAgICAoLVtXS1ZpZXcgX2NyZWF0ZVBERkhVRDpyZWN0Ol0pOgorICAgICAgICAoLVtXS1ZpZXcg
X3BkZkhVRDpjaGFuZ2VkTG9jYXRpb246XSk6CisgICAgICAgICgtW1dLVmlldyBfcmVtb3ZlUERG
SFVEOl0pOgorICAgICAgICAoLVtXS1ZpZXcgX3JlbW92ZUFsbFBERkhVRHNdKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdNYWMubW06CisgICAgICAgICgtW1dLV2ViVmll
dyBtb3VzZU1vdmVkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgbW91c2VEb3duOl0pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgbW91c2VVcDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jcmVh
dGVQREZIVUQ6cmVjdDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9wZGZIVUQ6Y2hhbmdlZExv
Y2F0aW9uOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3JlbW92ZVBERkhVRDpdKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9yZW1vdmVBbGxQREZIVURzXSk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9tYWMvV0tXZWJWaWV3UHJpdmF0ZUZvclRlc3RpbmdNYWMuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdUZXN0aW5nTWFjLm1tOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgcGRmSFVEc10pOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OmNyZWF0ZVBERkhVRCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJ
bXBsOjp1cGRhdGVQREZIVURMb2NhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBs
OjpyZW1vdmVQREZIVUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cmVtb3ZlQWxs
UERGSFVEcyk6CisgICAgICAgICogVUlQcm9jZXNzL1BhZ2VDbGllbnQuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpkaWRDb21taXRMb2FkRm9yRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OnByb2Nlc3NEaWRUZXJtaW5hdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OnNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBw
bGljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6Om9wZW5Q
REZGcm9tVGVtcG9yYXJ5Rm9sZGVyV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNs
aWVudEltcGw6OmNyZWF0ZVBERkhVRCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBs
Ojp1cGRhdGVQREZIVURMb2NhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBs
OjpyZW1vdmVQREZIVUQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6cmVtb3Zl
QWxsUERGSFVEcyk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW06
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVy
QW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6Y3JlYXRlUERGSFVEKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZW1v
dmVQREZIVUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnVwZGF0ZVBERkhVRExv
Y2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZGZab29tSW4pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBkZlpvb21PdXQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OnBkZlNhdmVUb1BERik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6cGRmT3BlbldpdGhQcmV2aWV3KToKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERkxheWVy
Q29udHJvbGxlclNQSS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1
Z2luLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW06Cisg
ICAgICAgICgtW1dLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgb3BlbldpdGhOYXRpdmVBcHBs
aWNhdGlvbl0pOgorICAgICAgICAoLVtXS1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlIHNhdmVU
b1BERl0pOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OlBERlBsdWdpbik6CisgICAgICAg
IChXZWJLaXQ6OlBERlBsdWdpbjo6flBERlBsdWdpbik6CisgICAgICAgIChXZWJLaXQ6OlBERlBs
dWdpbjo6ZnJhbWVGb3JIVUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmNh
bGN1bGF0ZVNpemVzKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpjb252ZXJ0RnJvbVBE
RlZpZXdUb1Jvb3RWaWV3IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjp2aXNp
YmlsaXR5RGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjp6b29tSW4pOgor
ICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46Onpvb21PdXQpOgorICAgICAgICAoV2ViS2l0OjpQ
REZQbHVnaW46OnNhdmUpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46Om9wZW5XaXRoUHJl
dmlldyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp6b29tUERGSW4p
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp6b29tUERGT3V0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6c2F2ZVBERik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6Om9wZW5QREZX
aXRoUHJldmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNyZWF0ZVBERkhVRCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnVwZGF0ZVBERkhVRExvY2F0aW9uKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6cmVtb3ZlUERGSFVEKToKKwogMjAyMC0wOC0yNCAgQnJhZHkgRWlk
c29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgQ3Jhc2hUcmFjZXI6IGNvbS5hcHBs
ZS5XZWJLaXQuV2ViQ29udGVudCBhdCBjb20uYXBwbGUuV2ViS2l0OiBXZWJLaXQ6OlBERlBsdWdp
bjo6Y3JlYXRlU2Nyb2xsYmFyCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21l
c3NhZ2VzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVz
c2FnZXMucHkJKHJldmlzaW9uIDI2NjExMCkKKysrIFNvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJr
aXQvbWVzc2FnZXMucHkJKHdvcmtpbmcgY29weSkKQEAgLTI0Myw2ICsyNDMsNyBAQCBkZWYgdHlw
ZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlCiAgICAgICAgICdXZWJLaXQ6Ok1ETlNS
ZWdpc3RlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpNZWRpYVBsYXllclByaXZhdGVS
ZW1vdGVJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6TWVkaWFSZWNvcmRlcklkZW50aWZp
ZXInLAorICAgICAgICAnV2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVyJywKICAgICAgICAgJ1dl
YktpdDo6UGxheWJhY2tTZXNzaW9uQ29udGV4dElkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0
OjpQbHVnaW5Qcm9jZXNzVHlwZScsCiAgICAgICAgICdXZWJLaXQ6OlJlbW90ZUF1ZGlvRGVzdGlu
YXRpb25JZGVudGlmaWVyJywKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BhZ2VDbGll
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJ
KHJldmlzaW9uIDI2NjExMCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BhZ2VDbGllbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlICJMYXllclRyZWVDb250ZXh0LmgiCisjaW5jbHVkZSAiUERGUGx1Z2luSWRlbnRpZmllci5o
IgogI2luY2x1ZGUgIlNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlLmgiCiAjaW5jbHVkZSAiU2hh
cmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSAiV2ViQ29sb3JQaWNrZXIuaCIKQEAgLTI0Miw2ICsy
NDMsMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsUHJvdmlzaW9uYWxMb2Fk
Rm9yTWFpbkZyYW1lKCkgeyB9OwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRMb2FkRm9yTWFp
bkZyYW1lKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgdXNlQ3VzdG9tQ29udGVudFByb3Zp
ZGVyKSA9IDA7CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIHZpcnR1YWwg
dm9pZCBjcmVhdGVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUERGSFVETG9jYXRpb24oUERGUGx1
Z2luSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlQWxsUERGSFVEcygpID0gMDsKKyNlbmRpZgorICAgIAogICAgIHZpcnR1YWwg
dm9pZCBoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSYpID0gMDsKIAogICAgIHZp
cnR1YWwgYm9vbCBoYW5kbGVSdW5PcGVuUGFuZWwoV2ViUGFnZVByb3h5KiwgV2ViRnJhbWVQcm94
eSosIGNvbnN0IEZyYW1lSW5mb0RhdGEmLCBBUEk6Ok9wZW5QYW5lbFBhcmFtZXRlcnMqLCBXZWJP
cGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5KikgeyByZXR1cm4gZmFsc2U7IH0KSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gMjY2MTEwKQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDc3MiwxNSArNDc3MiwxNCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9h
ZEZvckZyYW1lCiAgICAgICAgICAgICBtX3BsdWdpblNjYWxlRmFjdG9yID0gMTsKICAgICAgICAg
ICAgIG1fbWFpbkZyYW1lUGx1Z2luSGFuZGxlc1BhZ2VTY2FsZUdlc3R1cmUgPSBmYWxzZTsKICAg
ICAgICAgfQotICAgIH0KLQogI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCi0gICAgaWYgKGZyYW1l
LT5pc01haW5GcmFtZSgpKQogICAgICAgICByZXF1ZXN0UG9pbnRlclVubG9jaygpOwogI2VuZGlm
Ci0KLSAgICBpZiAoZnJhbWUtPmlzTWFpbkZyYW1lKCkpCiAgICAgICAgIHBhZ2VDbGllbnQoKS5z
ZXRNb3VzZUV2ZW50UG9saWN5KG1vdXNlRXZlbnRQb2xpY3kpOworI2lmIEVOQUJMRShVSV9QUk9D
RVNTX1BERl9IVUQpCisgICAgICAgIHBhZ2VDbGllbnQoKS5yZW1vdmVBbGxQREZIVURzKCk7Cisj
ZW5kaWYKKyAgICB9CiAKICAgICBtX3BhZ2VMb2FkU3RhdGUuY29tbWl0Q2hhbmdlcygpOwogICAg
IGlmIChtX2xvYWRlckNsaWVudCkKQEAgLTc0NTEsNiArNzQ1MCw5IEBAIHZvaWQgV2ViUGFnZVBy
b3h5Ojpwcm9jZXNzRGlkVGVybWluYXRlKFAKIAogICAgIHJlc2V0U3RhdGVBZnRlclByb2Nlc3NF
eGl0ZWQocmVhc29uKTsKICAgICBzdG9wQWxsVVJMU2NoZW1lVGFza3MobV9wcm9jZXNzLnB0cigp
KTsKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIHBhZ2VDbGllbnQoKS5yZW1v
dmVBbGxQREZIVURzKCk7CisjZW5kaWYKIAogICAgIC8vIEZvciBicmluZ3VwIG9mIHByb2Nlc3Mg
c3dhcHBpbmcsIE5hdmlnYXRpb25Td2FwIHRlcm1pbmF0aW9uIHdpbGwgbm90IGdvIG91dCB0byBj
bGllbnRzLgogICAgIC8vIElmIGl0IGRvZXMgKmR1cmluZyogcHJvY2VzcyBzd2FwcGluZywgYW5k
IHRoZSBjbGllbnQgdHJpZ2dlcnMgYSByZWxvYWQsIHRoYXQgY2F1c2VzIGJpemFycmUgV2ViS2l0
IHJlLWVudHJ5LgpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJl
dmlzaW9uIDI2NjExMCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29u
dGV4dC5oIgogI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKICNpbmNsdWRlICJOb3RpZmljYXRp
b25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5oIgorI2luY2x1ZGUgIlBERlBsdWdpbklk
ZW50aWZpZXIuaCIKICNpbmNsdWRlICJQYWdlTG9hZFN0YXRlLmgiCiAjaW5jbHVkZSAiUGx1Z2lu
UHJvY2Vzc0F0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJQb2xpY3lEZWNpc2lvbi5oIgpAQCAtMTMx
MSwxMCArMTMxMiwxMiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNhdmVEYXRhVG9GaWxlSW5Eb3du
bG9hZHNGb2xkZXIoU3RyaW5nJiYgc3VnZ2VzdGVkRmlsZW5hbWUsIFN0cmluZyYmIG1pbWVUeXBl
LCBVUkwmJiBvcmlnaW5hdGluZ1VSTCwgQVBJOjpEYXRhJik7CiAgICAgdm9pZCBzYXZlUERGVG9G
aWxlSW5Eb3dubG9hZHNGb2xkZXIoU3RyaW5nJiYgc3VnZ2VzdGVkRmlsZW5hbWUsIFVSTCYmIG9y
aWdpbmF0aW5nVVJMLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKTsKLSNpZiBQTEFURk9STShD
T0NPQSkKKyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKICAgICB2b2lkIHNhdmVQREZUb1RlbXBv
cmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oY29uc3QgU3RyaW5nJiBzdWdn
ZXN0ZWRGaWxlbmFtZSwgRnJhbWVJbmZvRGF0YSYmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2Um
LCBjb25zdCBTdHJpbmcmIHBkZlVVSUQpOworI2lmICFFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVE
KQogICAgIHZvaWQgb3BlblBERkZyb21UZW1wb3JhcnlGb2xkZXJXaXRoTmF0aXZlQXBwbGljYXRp
b24oRnJhbWVJbmZvRGF0YSYmLCBjb25zdCBTdHJpbmcmIHBkZlVVSUQpOwogI2VuZGlmCisjZW5k
aWYKIAogI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQogICAgIHZvaWQgc2hvd1BERkNvbnRleHRN
ZW51KGNvbnN0IFdlYktpdDo6UERGQ29udGV4dE1lbnUmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KE9wdGlvbmFsPGludDMyX3Q+JiYpPiYmKTsKQEAgLTE4MDYsNiArMTgwOSwxNiBAQCBwdWJsaWM6
CiAgICAgYm9vbCBjYW5Vc2VDcmVkZW50aWFsU3RvcmFnZSgpIHsgcmV0dXJuIG1fY2FuVXNlQ3Jl
ZGVudGlhbFN0b3JhZ2U7IH0KICAgICB2b2lkIHNldENhblVzZUNyZWRlbnRpYWxTdG9yYWdlKGJv
b2wpOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICB2b2lkIGNyZWF0ZVBE
RkhVRChQREZQbHVnaW5JZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAg
dm9pZCB1cGRhdGVQREZIVURMb2NhdGlvbihQREZQbHVnaW5JZGVudGlmaWVyLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCByZW1vdmVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmll
cik7CisgICAgdm9pZCBwZGZab29tSW4oUERGUGx1Z2luSWRlbnRpZmllcik7CisgICAgdm9pZCBw
ZGZab29tT3V0KFBERlBsdWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgcGRmU2F2ZVRvUERGKFBE
RlBsdWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgcGRmT3BlbldpdGhQcmV2aWV3KFBERlBsdWdp
bklkZW50aWZpZXIpOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgV2ViUGFnZVByb3h5KFBhZ2VD
bGllbnQmLCBXZWJQcm9jZXNzUHJveHkmLCBSZWY8QVBJOjpQYWdlQ29uZmlndXJhdGlvbj4mJik7
CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDI2NjExMCkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkod29y
a2luZyBjb3B5KQpAQCAtNDMzLDkgKzQzMyw4IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7
CiAgICAgU2F2ZVJlY2VudFNlYXJjaGVzKFN0cmluZyBuYW1lLCBWZWN0b3I8V2ViQ29yZTo6UmVj
ZW50U2VhcmNoPiBzZWFyY2hJdGVtcykKICAgICBMb2FkUmVjZW50U2VhcmNoZXMoU3RyaW5nIG5h
bWUpIC0+IChWZWN0b3I8V2ViQ29yZTo6UmVjZW50U2VhcmNoPiByZXN1bHQpIFN5bmNocm9ub3Vz
CiAKKyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikgJiYgIUVOQUJMRShVSV9QUk9DRVNTX1BERl9I
VUQpCiAgICAgU2F2ZVBERlRvRmlsZUluRG93bmxvYWRzRm9sZGVyKFN0cmluZyBzdWdnZXN0ZWRG
aWxlbmFtZSwgVVJMIG9yaWdpbmF0aW5nVVJMLCBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YSkKLQot
I2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5X
aXRoTmF0aXZlQXBwbGljYXRpb24oU3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1lLCBzdHJ1Y3QgV2Vi
S2l0OjpGcmFtZUluZm9EYXRhIHNvdXJjZUZyYW1lSW5mbywgSVBDOjpEYXRhUmVmZXJlbmNlIGRh
dGEsIFN0cmluZyBwZGZVVUlEKQogICAgIE9wZW5QREZGcm9tVGVtcG9yYXJ5Rm9sZGVyV2l0aE5h
dGl2ZUFwcGxpY2F0aW9uKHN0cnVjdCBXZWJLaXQ6OkZyYW1lSW5mb0RhdGEgc291cmNlRnJhbWVJ
bmZvLCBTdHJpbmcgcGRmVVVJRCkKICNlbmRpZgpAQCAtNTY2LDYgKzU2NSwxMiBAQCBtZXNzYWdl
cyAtPiBXZWJQYWdlUHJveHkgewogICAgIFNwZWVjaFN5bnRoZXNpc1Jlc3VtZSgpIC0+ICgpIEFz
eW5jCiAjZW5kaWYKIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgQ3JlYXRl
UERGSFVEKFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJDb3JlOjpJ
bnRSZWN0IGJvdW5kaW5nQm94KQorICAgIFVwZGF0ZVBERkhVRExvY2F0aW9uKFdlYktpdDo6UERG
UGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJDb3JlOjpJbnRSZWN0IGJvdW5kaW5nQm94
KQorICAgIFJlbW92ZVBERkhVRChXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmll
cikKKyNlbmRpZgorCiAgICAgQ29uZmlndXJlTG9nZ2luZ0NoYW5uZWwoU3RyaW5nIGNoYW5uZWxO
YW1lLCBlbnVtOnVpbnQ4X3QgV1RGTG9nQ2hhbm5lbFN0YXRlIHN0YXRlLCBlbnVtOnVpbnQ4X3Qg
V1RGTG9nTGV2ZWwgbGV2ZWwpCiAKICNpZiBQTEFURk9STShHVEspCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaAko
cmV2aXNpb24gMjY2MTEwKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2ViVmlld0ludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDExICsyMywxMSBAQAogICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbXBvcnQgIldLV2ViVmll
d1ByaXZhdGUuaCIKLQorI2ltcG9ydCAiUERGUGx1Z2luSWRlbnRpZmllci5oIgogI2ltcG9ydCAi
U2FtZURvY3VtZW50TmF2aWdhdGlvblR5cGUuaCIKICNpbXBvcnQgIldLU2hhcmVTaGVldC5oIgog
I2ltcG9ydCAiV0tXZWJWaWV3Q29uZmlndXJhdGlvbi5oIgorI2ltcG9ydCAiV0tXZWJWaWV3UHJp
dmF0ZS5oIgogI2ltcG9ydCAiX1dLQXR0YWNobWVudEludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tX
ZWJWaWV3UHJpbnRGb3JtYXR0ZXJJbnRlcm5hbC5oIgogI2ltcG9ydCA8d3RmL0NvbXBsZXRpb25I
YW5kbGVyLmg+CkBAIC0xMzMsNyArMTMzLDcgQEAgY2xhc3MgVmlld0dlc3R1cmVDb250cm9sbGVy
OwogICAgIC8vIE9ubHkgdXNlZCB3aXRoIFVJLXNpZGUgY29tcG9zaXRpbmcuCiAgICAgUmV0YWlu
UHRyPFdLU2Nyb2xsVmlldz4gX3Njcm9sbFZpZXc7CiAgICAgUmV0YWluUHRyPFdLQ29udGVudFZp
ZXc+IF9jb250ZW50VmlldzsKLSNlbmRpZgorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgUmV0YWluUHRyPFdLU2Nyb2xsVmlldz4gX3Njcm9s
bFZpZXc7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1By
aXZhdGVGb3JUZXN0aW5nTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL21hYy9XS1dlYlZpZXdQcml2YXRlRm9yVGVzdGluZ01hYy5oCShyZXZpc2lvbiAyNjYx
MTApCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1ByaXZhdGVG
b3JUZXN0aW5nTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgQGludGVyZmFj
ZSBXS1dlYlZpZXcgKFdLVGVzdGluZ01hYykKIAogLSAodm9pZClfc2V0SGVhZGVyQmFubmVySGVp
Z2h0OihpbnQpaGVpZ2h0OwogLSAodm9pZClfc2V0Rm9vdGVyQmFubmVySGVpZ2h0OihpbnQpaGVp
Z2h0OworLSAoTlNTZXQ8TlNWaWV3ICo+ICopX3BkZkhVRHM7CiAKIEBlbmQKIApJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdUZXN0aW5nTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGlu
Z01hYy5tbQkocmV2aXNpb24gMjY2MTEwKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L21hYy9XS1dlYlZpZXdUZXN0aW5nTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiArMTAz
LDE1IEBAIC0gKHZvaWQpX3NldEZvb3RlckJhbm5lckhlaWdodDooaW50KWhlaWcKICAgICBfcGFn
ZS0+c2V0Rm9vdGVyQmFubmVySGVpZ2h0Rm9yVGVzdGluZyhoZWlnaHQpOwogfQogCistIChOU1Nl
dDxOU1ZpZXcgKj4gKilfcGRmSFVEcworeworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQp
CisgICAgcmV0dXJuIF9pbXBsLT5wZGZIVURzKCk7CisjZWxzZQorICAgIHJldHVybiBuaWw7Cisj
ZW5kaWYKK30KKwogLSAoTlNNZW51ICopX2FjdGl2ZU1lbnUKIHsKICAgICAvLyBGSVhNRTogT25s
eSB0aGUgRE9NIHBhc3RlIGFjY2VzcyBtZW51IGlzIHN1cHBvcnRlZCBmb3Igbm93LiBJbiB0aGUg
ZnV0dXJlLCBpdCBjb3VsZCBiZQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
V2ViVmlld0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9XZWJWaWV3SW1wbC5oCShyZXZpc2lvbiAyNjYxMTApCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBA
CiAKICNpZiBQTEFURk9STShNQUMpCiAKKyNpbmNsdWRlICJQREZQbHVnaW5JZGVudGlmaWVyLmgi
CiAjaW5jbHVkZSAiUGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlLmgiCiAjaW5jbHVkZSAiU2hh
cmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSAiV0tMYXlvdXRNb2RlLmgiCkBAIC03Niw2ICs3Nywx
MCBAQCBPQkpDX0NMQVNTIFdLVGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXI7CiBPQkpDX0NMQVNT
IFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyOwogI2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFSKQog
CisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKK09CSkNfQ0xBU1MgV0tQREZIVURWaWV3
OworI2VuZGlmCisKIG5hbWVzcGFjZSBBUEkgewogY2xhc3MgSGl0VGVzdFJlc3VsdDsKIGNsYXNz
IE9iamVjdDsKQEAgLTE5MCw2ICsxOTUsMTQgQEAgcHVibGljOgogICAgIHZvaWQgdmlld1dpbGxT
dGFydExpdmVSZXNpemUoKTsKICAgICB2b2lkIHZpZXdEaWRFbmRMaXZlUmVzaXplKCk7CiAKKyNp
ZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIHZvaWQgY3JlYXRlUERGSFVEKFBERlBs
dWdpbklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIHVwZGF0
ZVBERkhVRExvY2F0aW9uKFBERlBsdWdpbklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKTsKKyAgICB2b2lkIHJlbW92ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyKTsKKyAgICB2
b2lkIHJlbW92ZUFsbFBERkhVRHMoKTsKKyAgICBOU1NldCAqcGRmSFVEcygpOworI2VuZGlmCisK
ICAgICB2b2lkIHJlbmV3R1N0YXRlKCk7CiAgICAgdm9pZCBzZXRGcmFtZVNpemUoQ0dTaXplKTsK
ICAgICB2b2lkIGRpc2FibGVGcmFtZVNpemVVcGRhdGVzKCk7CkBAIC03MjksNyArNzQyLDExIEBA
IHByaXZhdGU6CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgIFJldGFpblB0cjxXS0Z1
bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyPiBtX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyOwog
I2VuZGlmCi0gICAgCisKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIEhhc2hN
YXA8V2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVyLCBSZXRhaW5QdHI8V0tQREZIVURWaWV3Pj4g
X3BkZkhVRFZpZXdzOworI2VuZGlmCisKICAgICBSZXRhaW5QdHI8V0tTaGFyZVNoZWV0PiBfc2hh
cmVTaGVldDsKIAogICAgIFJldGFpblB0cjxXS1dpbmRvd1Zpc2liaWxpdHlPYnNlcnZlcj4gbV93
aW5kb3dWaXNpYmlsaXR5T2JzZXJ2ZXI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9XZWJWaWV3SW1wbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9XZWJWaWV3SW1wbC5tbQkocmV2aXNpb24gMjY2MTEwKQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0JKHdvcmtpbmcgY29weSkKQEAgLTYyLDYg
KzYyLDcgQEAKICNpbXBvcnQgIldLRXJyb3JJbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tGdWxsU2Ny
ZWVuV2luZG93Q29udHJvbGxlci5oIgogI2ltcG9ydCAiV0tJbW1lZGlhdGVBY3Rpb25Db250cm9s
bGVyLmgiCisjaW1wb3J0ICJXS1BERkhVRFZpZXcuaCIKICNpbXBvcnQgIldLUHJpbnRpbmdWaWV3
LmgiCiAjaW1wb3J0ICJXS1NhZmVCcm93c2luZ1dhcm5pbmcuaCIKICNpbXBvcnQgIldLU2hhcmVT
aGVldC5oIgpAQCAtMTcxOCw2ICsxNzE5LDQ1IEBAIHZvaWQgV2ViVmlld0ltcGw6OnZpZXdEaWRF
bmRMaXZlUmVzaXplKCkKICAgICBbbV9sYXlvdXRTdHJhdGVneSBkaWRFbmRMaXZlUmVzaXplXTsK
IH0KIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKK3ZvaWQgV2ViVmlld0ltcGw6
OmNyZWF0ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHJlY3QpCit7CisgICAgcmVtb3ZlUERGSFVEKGlkZW50aWZpZXIpOworICAg
IGF1dG8gaHVkID0gYWRvcHROUyhbW1dLUERGSFVEVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpy
ZWN0IHBsdWdpbklkZW50aWZpZXI6aWRlbnRpZmllciBwYWdlOm1fcGFnZS5nZXQoKV0pOworICAg
IFttX3ZpZXcgYWRkU3VidmlldzpodWQuZ2V0KCldOworICAgIF9wZGZIVURWaWV3cy5hZGQoaWRl
bnRpZmllciwgV1RGTW92ZShodWQpKTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlUERG
SFVETG9jYXRpb24oUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChhdXRvIGh1ZCA9IF9wZGZIVURWaWV3cy5nZXQo
aWRlbnRpZmllcikpCisgICAgICAgIFtodWQgc2V0RnJhbWU6cmVjdF07Cit9CisKK3ZvaWQgV2Vi
Vmlld0ltcGw6OnJlbW92ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCit7
CisgICAgaWYgKGF1dG8gaHVkID0gX3BkZkhVRFZpZXdzLnRha2UoaWRlbnRpZmllcikpCisgICAg
ICAgIFtodWQgcmVtb3ZlRnJvbVN1cGVydmlld107Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnJl
bW92ZUFsbFBERkhVRHMoKQoreworICAgIGZvciAoYXV0byYgaHVkIDogX3BkZkhVRFZpZXdzLnZh
bHVlcygpKQorICAgICAgICBbaHVkIHJlbW92ZUZyb21TdXBlcnZpZXddOworICAgIF9wZGZIVURW
aWV3cy5jbGVhcigpOworfQorCitOU1NldCAqV2ViVmlld0ltcGw6OnBkZkhVRHMoKQoreworICAg
IE5TTXV0YWJsZVNldDxOU1ZpZXcgKj4gKnNldCA9IFtOU011dGFibGVTZXQgc2V0V2l0aENhcGFj
aXR5Ol9wZGZIVURWaWV3cy5zaXplKCldOworICAgIGZvciAoYXV0byYgaHVkIDogX3BkZkhVRFZp
ZXdzLnZhbHVlcygpKQorICAgICAgICBbc2V0IGFkZE9iamVjdDpodWQuZ2V0KCldOworICAgIHJl
dHVybiBzZXQ7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCiB2
b2lkIFdlYlZpZXdJbXBsOjpyZW5ld0dTdGF0ZSgpCiB7CiAgICAgaWYgKG1fdGV4dEluZGljYXRv
cldpbmRvdykKQEAgLTUzOTEsNiArNTQzMSwxMSBAQCB2b2lkIFdlYlZpZXdJbXBsOjptb3VzZU1v
dmVkKE5TRXZlbnQgKmV2CiAgICAgaWYgKG1faWdub3Jlc05vbldoZWVsRXZlbnRzKQogICAgICAg
ICByZXR1cm47CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIGZvciAoYXV0
byYgaHVkIDogX3BkZkhVRFZpZXdzLnZhbHVlcygpKQorICAgICAgICBbaHVkIG1vdXNlTW92ZWQ6
ZXZlbnRdOworI2VuZGlmCisKICAgICAvLyBXaGVuIGEgdmlldyBpcyBmaXJzdCByZXNwb25kZXIs
IGl0IGdldHMgbW91c2UgbW92ZWQgZXZlbnRzIGV2ZW4gd2hlbiB0aGUgbW91c2UgaXMgb3V0c2lk
ZSBpdHMgdmlzaWJsZSByZWN0LgogICAgIGlmIChtX3ZpZXcuZ2V0QXV0b3JlbGVhc2VkKCkgPT0g
W21fdmlldyB3aW5kb3ddLmZpcnN0UmVzcG9uZGVyICYmICFOU1BvaW50SW5SZWN0KFttX3ZpZXcg
Y29udmVydFBvaW50OltldmVudCBsb2NhdGlvbkluV2luZG93XSBmcm9tVmlldzpuaWxdLCBbbV92
aWV3IHZpc2libGVSZWN0XSkpCiAgICAgICAgIHJldHVybjsKQEAgLTU0MzksNiArNTQ4NCwxMSBA
QCB2b2lkIFdlYlZpZXdJbXBsOjptb3VzZURvd24oTlNFdmVudCAqZXZlCiAgICAgaWYgKG1faWdu
b3Jlc05vbldoZWVsRXZlbnRzKQogICAgICAgICByZXR1cm47CiAKKyNpZiBFTkFCTEUoVUlfUFJP
Q0VTU19QREZfSFVEKQorICAgIGZvciAoYXV0byYgaHVkIDogX3BkZkhVRFZpZXdzLnZhbHVlcygp
KQorICAgICAgICBbaHVkIG1vdXNlRG93bjpldmVudF07CisjZW5kaWYKKwogICAgIHNldExhc3RN
b3VzZURvd25FdmVudChldmVudCk7CiAgICAgc2V0SWdub3Jlc01vdXNlRHJhZ2dlZEV2ZW50cyhm
YWxzZSk7CiAKQEAgLTU0NTAsNiArNTUwMCwxMSBAQCB2b2lkIFdlYlZpZXdJbXBsOjptb3VzZVVw
KE5TRXZlbnQgKmV2ZW50CiAgICAgaWYgKG1faWdub3Jlc05vbldoZWVsRXZlbnRzKQogICAgICAg
ICByZXR1cm47CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIGZvciAoYXV0
byYgaHVkIDogX3BkZkhVRFZpZXdzLnZhbHVlcygpKQorICAgICAgICBbaHVkIG1vdXNlVXA6ZXZl
bnRdOworI2VuZGlmCisKICAgICBzZXRMYXN0TW91c2VEb3duRXZlbnQobmlsKTsKICAgICBtb3Vz
ZVVwSW50ZXJuYWwoZXZlbnQpOwogfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUERG
L1dLUERGSFVEVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BE
Ri9XS1BERkhVRFZpZXcuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9QREYvV0tQREZIVURWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCisjaW1wb3J0ICJQREZQ
bHVnaW5JZGVudGlmaWVyLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViUGFnZVBy
b3h5OworfQorCitAaW50ZXJmYWNlIFdLUERGSFVEVmlldyA6IE5TVmlldworCistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIHBsdWdpbklkZW50aWZpZXI6KFdlYktp
dDo6UERGUGx1Z2luSWRlbnRpZmllcilwbHVnaW5JZGVudGlmaWVyIHBhZ2U6KFdlYktpdDo6V2Vi
UGFnZVByb3h5JilwYWdlOworLSAodm9pZClzZXRGcmFtZTooTlNSZWN0KWZyYW1lOworLSAodm9p
ZCltb3VzZU1vdmVkOihOU0V2ZW50ICopZXZlbnQ7CistICh2b2lkKW1vdXNlRG93bjooTlNFdmVu
dCAqKWV2ZW50OworLSAodm9pZCltb3VzZVVwOihOU0V2ZW50ICopZXZlbnQ7CisKK0BlbmQKKwor
I2VuZGlmIC8vIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9QREYvV0tQREZIVURWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1BERi9XS1BERkhVRFZpZXcubW0JKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvUERGL1dLUERGSFVEVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDM1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAi
V0tQREZIVURWaWV3LmgiCisKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCisjaW1w
b3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ0FUcmFuc2FjdGlvbi5o
PgorI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9RdWFydHpDb3JlU1BJLmg+CisjaW1wb3J0IDxwYWwv
c3BpL21hYy9OU0ltYWdlU1BJLmg+CisjaW1wb3J0IDx3dGYvV2Vha09iakNQdHIuaD4KKworLy8g
IFRoZSBIVUQgaXRlbXMgc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyBzcGFjaW5nOgorLy8gIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIHwgICAg
ICAxMiAgICAgICAgMTIgICAgICAxMCAgICAgMTIgICAgICAgIDEyICAgICAgfAorLy8gfCAgICAg
LS0tLSAgICAgIC0tLS0gICAgIHwgICAgIC0tLS0gICAgICAtLS0tICAgICB8CisvLyB8IDEwIHxp
Y29ufCAxMCB8aWNvbnwgMTAgfCAxMCB8aWNvbnwgMTAgfGljb258IDEwIHwKKy8vIHwgICAgIC0t
LS0gICAgICAtLS0tICAgICB8ICAgICAtLS0tICAgICAgLS0tLSAgICAgfAorLy8gfCAgICAgIDEy
ICAgICAgICAxMiAgICAgIDEwICAgICAxMiAgICAgICAgMTIgICAgICB8CisvLyAgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIHdoZXJlIHRoZSAx
MiBwb2ludCB2ZXJ0aWNhbCBzcGFjaW5nIGlzIGFuY2hvcmVkIHRvIHRoZSBzbWFsbGVzdCBpY29u
IGltYWdlLAorLy8gIGFuZCBhbGwgc3Vic2VxdWVudCBpY29ucyB3aXRoIGJlIGNlbnRlcmVkIHZl
cnRpY2FsbHkgd2l0aCB0aGUgc21hbGxlc3QgaWNvbi4KKworc3RhdGljIGNvbnN0IENHRmxvYXQg
a0xheWVyVmVydGljYWxPZmZzZXQgPSA0MDsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGtMYXllckNv
cm5lclJhZGl1cyA9IDEyOworc3RhdGljIGNvbnN0IENHRmxvYXQga0xheWVyR3JheUNvbXBvbmVu
dCA9IDA7CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrTGF5ZXJBbHBoYSA9IDAuNzU7CitzdGF0aWMg
Y29uc3QgQ0dGbG9hdCBrTGF5ZXJJbWFnZVNjYWxlID0gMS41Oworc3RhdGljIGNvbnN0IENHRmxv
YXQga0xheWVyU2VwZXJhdG9yQ29udHJvbGxlclNpemUgPSAxLjU7CitzdGF0aWMgY29uc3QgQ0dG
bG9hdCBrTGF5ZXJDb250cm9sbGVySG9yaXpvbnRhbE1hcmdpbiA9IDEwLjA7CitzdGF0aWMgY29u
c3QgQ0dGbG9hdCBrTGF5ZXJJbWFnZVZlcnRpY2FsTWFyZ2luID0gMTIuMDsKK3N0YXRpYyBjb25z
dCBDR0Zsb2F0IGtMYXllclNlcGVyYXRvclZlcnRpY2FsTWFyZ2luID0gMTAuMDsKK3N0YXRpYyBj
b25zdCBDR0Zsb2F0IGtDb250cm9sTGF5ZXJOb3JtYWxBbHBoYSA9IDAuNzU7CitzdGF0aWMgY29u
c3QgQ0dGbG9hdCBrQ29udHJvbExheWVyRG93bkFscGhhID0gMC40NTsKKworc3RhdGljIE5TU3Ry
aW5nICogY29uc3QgUERGSFVEWm9vbUluQ29udHJvbCA9IEAicGx1cy5tYWduaWZ5aW5nZ2xhc3Mi
Oworc3RhdGljIE5TU3RyaW5nICogY29uc3QgUERGSFVEWm9vbU91dENvbnRyb2wgPSBAIm1pbnVz
Lm1hZ25pZnlpbmdnbGFzcyI7CitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBQREZIVURMYXVuY2hQ
cmV2aWV3Q29udHJvbCA9IEAicHJldmlldyI7CitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBQREZI
VURTYXZlUERGQ29udHJvbCA9IEAiYXJyb3cuZG93bi5jaXJjbGUiOworc3RhdGljIE5TU3RyaW5n
ICogY29uc3QgUERGSFVEU2VwZXJhdG9yQ29udHJvbCA9IEAiUERGSFVEU2VwZXJhdG9yQ29udHJv
bCI7CisKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGtMYXllckZhZGVJblRpbWVJbnRlcnZhbCA9IDAu
MjU7CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrTGF5ZXJGYWRlT3V0VGltZUludGVydmFsID0gMC41
Oworc3RhdGljIGNvbnN0IENHRmxvYXQga0luaXRpYWxIaWRlVGltZUludGVydmFsID0gMy4wOwor
CitzdGF0aWMgTlNBcnJheTxOU1N0cmluZyAqPiAqY29udHJvbEFycmF5KCkKK3sKKyAgICByZXR1
cm4gQFsKKyAgICAgICAgUERGSFVEWm9vbU91dENvbnRyb2wsCisgICAgICAgIFBERkhVRFpvb21J
bkNvbnRyb2wsCisgICAgICAgIFBERkhVRFNlcGVyYXRvckNvbnRyb2wsCisgICAgICAgIFBERkhV
RExhdW5jaFByZXZpZXdDb250cm9sLAorICAgICAgICBQREZIVURTYXZlUERGQ29udHJvbAorICAg
IF07Cit9CisKK3N0YXRpYyBOU0NvbG9yKiBQREZDR0NvbG9yQ3JlYXRlR2VuZXJpY1JHQihDR0Zs
b2F0IHJlZCwgQ0dGbG9hdCBncmVlbiwgQ0dGbG9hdCBibHVlLCBDR0Zsb2F0IGFscGhhKQorewor
ICAgIGF1dG8gY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdC
KCkpOworICAgIGNvbnN0IENHRmxvYXQgY29tcG9uZW50c1s0XSA9IHsgcmVkLCBncmVlbiwgYmx1
ZSwgYWxwaGEgfTsKKyAgICBhdXRvIGNnQ29sb3IgPSBhZG9wdENGKENHQ29sb3JDcmVhdGUoY29s
b3JTcGFjZS5nZXQoKSwgY29tcG9uZW50cykpOworICAgIHJldHVybiBbTlNDb2xvciBjb2xvcldp
dGhDR0NvbG9yOmNnQ29sb3IuZ2V0KCldOworfQorCitAaW1wbGVtZW50YXRpb24gV0tQREZIVURW
aWV3IHsKK0Bwcml2YXRlCisgICAgV2Vha1B0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4gX3BhZ2U7
CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBfYWN0aXZlQ29udHJvbDsKKyAgICBXZWJLaXQ6OlBE
RlBsdWdpbklkZW50aWZpZXIgX3BsdWdpbklkZW50aWZpZXI7CisgICAgQ0dGbG9hdCBfZGV2aWNl
U2NhbGVGYWN0b3I7CisgICAgUmV0YWluUHRyPENBTGF5ZXI+IF9sYXllcjsKKyAgICBSZXRhaW5Q
dHI8Q0FMYXllcj4gX2FjdGl2ZUxheWVyOworICAgIENHU2l6ZSBfZnJhbWVTaXplOworICAgIFJl
dGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PE5TU3RyaW5nKiwgTlNJbWFnZSo+PiBfY2FjaGVk
SWNvbnM7CisgICAgQk9PTCBfdmlzaWJsZTsKKyAgICBib29sIF9tb3VzZU1vdmVkVG9IVUQ7Cisg
ICAgYm9vbCBfaW5pdGlhbEhpZGVUaW1lckZpcmVkOworfQorCistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIHBsdWdpbklkZW50aWZpZXI6KFdlYktpdDo6UERGUGx1
Z2luSWRlbnRpZmllcilwbHVnaW5JZGVudGlmaWVyIHBhZ2U6KFdlYktpdDo6V2ViUGFnZVByb3h5
JilwYWdlCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEZyYW1lOmZyYW1lXSkp
CisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgc2VsZi53YW50c0xheWVyID0gWUVTOwor
ICAgIF9jYWNoZWRJY29ucyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBp
bml0XSk7CisgICAgX3BsdWdpbklkZW50aWZpZXIgPSBwbHVnaW5JZGVudGlmaWVyOworICAgIF9w
YWdlID0gbWFrZVdlYWtQdHIocGFnZSk7CisgICAgX2RldmljZVNjYWxlRmFjdG9yID0gcGFnZS5k
ZXZpY2VTY2FsZUZhY3RvcigpOworICAgIF92aXNpYmxlID0gWUVTOworICAgIFtzZWxmIF9zZXR1
cExheWVyOnNlbGYubGF5ZXJdOworICAgIFtzZWxmIHNldEZyYW1lOmZyYW1lXTsKKworICAgIFdl
YWtPYmpDUHRyPFdLUERGSFVEVmlldz4gd2Vha1NlbGYgPSBzZWxmOworICAgIGRpc3BhdGNoX2Fm
dGVyKGRpc3BhdGNoX3RpbWUoRElTUEFUQ0hfVElNRV9OT1csIChpbnQ2NF90KShrSW5pdGlhbEhp
ZGVUaW1lSW50ZXJ2YWwgKiBOU0VDX1BFUl9TRUMpKSwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUo
KSwgXnsKKyAgICAgICAgW3dlYWtTZWxmIF9oaWRlVGltZXJGaXJlZF07CisgICAgfSk7CisgICAg
cmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfbGF5ZXIgcmVtb3Zl
RnJvbVN1cGVybGF5ZXJdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXRG
cmFtZTooTlNSZWN0KXJlY3QKK3sKKyAgICBbc3VwZXIgc2V0RnJhbWU6cmVjdF07CisgICAgX2Zy
YW1lU2l6ZSA9IHJlY3Quc2l6ZTsKKworICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICBb
Q0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOworICAgIENHUmVjdCBsYXllckJv
dW5kcyA9IFtfbGF5ZXIgYm91bmRzXTsKKyAgICBbX2xheWVyIHNldEZyYW1lOkNHUmVjdE1ha2Uo
cmVjdC5zaXplLndpZHRoIC8gMi4wIC0gbGF5ZXJCb3VuZHMuc2l6ZS53aWR0aCAvIDIuMCwga0xh
eWVyVmVydGljYWxPZmZzZXQsIGxheWVyQm91bmRzLnNpemUud2lkdGgsIGxheWVyQm91bmRzLnNp
emUuaGVpZ2h0KV07CisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKK30KKworLSAodm9pZClf
aGlkZVRpbWVyRmlyZWQKK3sKKyAgICBfaW5pdGlhbEhpZGVUaW1lckZpcmVkID0gdHJ1ZTsKKyAg
ICBpZiAoIV9tb3VzZU1vdmVkVG9IVUQpCisgICAgICAgIFtzZWxmIF9zZXRWaXNpYmxlOmZhbHNl
XTsKK30KKworLSAodm9pZClfc2V0VmlzaWJsZTooYm9vbClpc1Zpc2libGUKK3sKKyAgICBpZiAo
X3Zpc2libGUgPT0gaXNWaXNpYmxlKQorICAgICAgICByZXR1cm47CisgICAgX3Zpc2libGUgPSBp
c1Zpc2libGU7CisgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAgIFtDQVRyYW5zYWN0aW9u
IHNldEFuaW1hdGlvbkR1cmF0aW9uOiBpc1Zpc2libGUgPyBrTGF5ZXJGYWRlSW5UaW1lSW50ZXJ2
YWwgOiBrTGF5ZXJGYWRlT3V0VGltZUludGVydmFsXTsKKyAgICBbc2VsZiBfc2V0TGF5ZXJPcGFj
aXR5OmlzVmlzaWJsZSA/IGtMYXllckFscGhhIDogMC4wXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBj
b21taXRdOworfQorCistICh2b2lkKW1vdXNlTW92ZWQ6KE5TRXZlbnQgKilldmVudAoreworICAg
IGlmIChDR1JlY3RDb250YWluc1BvaW50KFtzZWxmIGNvbnZlcnRSZWN0OkNHUmVjdEluc2V0KFtf
bGF5ZXIgZnJhbWVdLCAtMTYuMCwgLTE2LjApIHRvVmlldzpuaWxdLCBOU1BvaW50VG9DR1BvaW50
KGV2ZW50LmxvY2F0aW9uSW5XaW5kb3cpKSkgeworICAgICAgICBbc2VsZiBfc2V0VmlzaWJsZTp0
cnVlXTsKKyAgICAgICAgX21vdXNlTW92ZWRUb0hVRCA9IHRydWU7CisgICAgfSBlbHNlIGlmIChf
aW5pdGlhbEhpZGVUaW1lckZpcmVkKQorICAgICAgICBbc2VsZiBfc2V0VmlzaWJsZTpmYWxzZV07
Cit9CisKKy0gKHZvaWQpbW91c2VEb3duOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBfYWN0aXZl
Q29udHJvbCA9IFtzZWxmIF9jb250cm9sRm9yRXZlbnQ6ZXZlbnRdOworICAgIGlmIChbX2FjdGl2
ZUNvbnRyb2wgaXNFcXVhbFRvU3RyaW5nOlBERkhVRFNlcGVyYXRvckNvbnRyb2xdKQorICAgICAg
ICBfYWN0aXZlQ29udHJvbCA9IG5pbDsKKyAgICBpZiAoX2FjdGl2ZUNvbnRyb2wpIHsKKyAgICAg
ICAgLy8gVXBkYXRlIHJlbmRlcmluZyB0byBoaWdobGlnaHQgaXQuLgorICAgICAgICBfYWN0aXZl
TGF5ZXIgPSBbc2VsZiBfbGF5ZXJGb3JFdmVudDpldmVudF07CisgICAgICAgIAorICAgICAgICAv
LyBVcGRhdGUgbGF5ZXIgaW1hZ2U7IGRvIG5vdCBhbmltYXRlCisgICAgICAgIFtDQVRyYW5zYWN0
aW9uIGJlZ2luXTsKKyAgICAgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVT
XTsKKyAgICAgICAgCisgICAgICAgIFtfYWN0aXZlTGF5ZXIgc2V0T3BhY2l0eToga0NvbnRyb2xM
YXllckRvd25BbHBoYV07CisgICAgICAgIAorICAgICAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRd
OworICAgIH0KK30KKworLSAodm9pZCltb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBp
ZiAoIV9hY3RpdmVDb250cm9sKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgTlNTdHJpbmcq
IG1vdXNlVXBDb250cm9sID0gW3NlbGYgX2NvbnRyb2xGb3JFdmVudDpldmVudF07CisgICAgaWYg
KFtfYWN0aXZlQ29udHJvbCBpc0VxdWFsVG9TdHJpbmc6bW91c2VVcENvbnRyb2xdKQorICAgICAg
ICBbc2VsZiBfcGVyZm9ybUFjdGlvbkZvckNvbnRyb2w6X2FjdGl2ZUNvbnRyb2wuZ2V0KCldOwor
ICAgIAorICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXRE
aXNhYmxlQWN0aW9uczpZRVNdOworICAgIFtfYWN0aXZlTGF5ZXIgc2V0T3BhY2l0eTprQ29udHJv
bExheWVyTm9ybWFsQWxwaGFdOworICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CisKKyAgICBf
YWN0aXZlTGF5ZXIgPSBuaWw7CisgICAgX2FjdGl2ZUNvbnRyb2wgPSBuaWw7Cit9CisKKy0gKE9w
dGlvbmFsPE5TVUludGVnZXI+KV9jb250cm9sSW5kZXhGb3JFdmVudDooTlNFdmVudCAqKWV2ZW50
Cit7CisgICAgQ0dQb2ludCBpbml0aWFsUG9pbnQgPSBOU1BvaW50VG9DR1BvaW50KGV2ZW50Lmxv
Y2F0aW9uSW5XaW5kb3cpOworICAgIGluaXRpYWxQb2ludC54IC09IFtfbGF5ZXIgZnJhbWVdLm9y
aWdpbi54OworICAgIGluaXRpYWxQb2ludC55IC09IFtfbGF5ZXIgZnJhbWVdLm9yaWdpbi55Owor
ICAgIGZvciAoTlNVSW50ZWdlciBpbmRleCA9IDA7IGluZGV4IDwgW19sYXllciBzdWJsYXllcnNd
LmNvdW50OyBpbmRleCsrKSB7CisgICAgICAgIENBTGF5ZXIgKnN1YkxheWVyID0gW19sYXllciBz
dWJsYXllcnNdW2luZGV4XTsKKyAgICAgICAgTlNSZWN0IHdpbmRvd1NwYWNlUmVjdCA9IFtzZWxm
IGNvbnZlcnRSZWN0OnN1YkxheWVyLmZyYW1lIHRvVmlldzpuaWxdOworICAgICAgICBpZiAoQ0dS
ZWN0Q29udGFpbnNQb2ludCh3aW5kb3dTcGFjZVJlY3QsIGluaXRpYWxQb2ludCkpCisgICAgICAg
ICAgICByZXR1cm4gaW5kZXg7CisgICAgfQorICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisK
Ky0gKE5TU3RyaW5nICopX2NvbnRyb2xGb3JFdmVudDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAg
aWYgKGF1dG8gaW5kZXggPSBbc2VsZiBfY29udHJvbEluZGV4Rm9yRXZlbnQ6ZXZlbnRdKQorICAg
ICAgICByZXR1cm4gY29udHJvbEFycmF5KClbKmluZGV4XTsKKyAgICByZXR1cm4gbmlsOworfQor
CistIChDQUxheWVyICopX2xheWVyRm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIGlm
IChhdXRvIGluZGV4ID0gW3NlbGYgX2NvbnRyb2xJbmRleEZvckV2ZW50OmV2ZW50XSkKKyAgICAg
ICAgcmV0dXJuIFtfbGF5ZXIgc3VibGF5ZXJzXVsqaW5kZXhdOworICAgIHJldHVybiBuaWw7Cit9
CisKKy0gKHZvaWQpX3BlcmZvcm1BY3Rpb25Gb3JDb250cm9sOihOU1N0cmluZyAqKWNvbnRyb2wK
K3sKKyAgICBpZiAoIV92aXNpYmxlKQorICAgICAgICByZXR1cm47CisgICAgYXV0byogcGFnZSA9
IF9wYWdlLmdldCgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChb
Y29udHJvbCBpc0VxdWFsVG9TdHJpbmc6UERGSFVEWm9vbUluQ29udHJvbF0pCisgICAgICAgIHBh
Z2UtPnBkZlpvb21JbihfcGx1Z2luSWRlbnRpZmllcik7CisgICAgZWxzZSBpZiAoW2NvbnRyb2wg
aXNFcXVhbFRvU3RyaW5nOlBERkhVRFpvb21PdXRDb250cm9sXSkKKyAgICAgICAgcGFnZS0+cGRm
Wm9vbU91dChfcGx1Z2luSWRlbnRpZmllcik7CisgICAgZWxzZSBpZiAoW2NvbnRyb2wgaXNFcXVh
bFRvU3RyaW5nOlBERkhVRFNhdmVQREZDb250cm9sXSkKKyAgICAgICAgcGFnZS0+cGRmU2F2ZVRv
UERGKF9wbHVnaW5JZGVudGlmaWVyKTsKKyAgICBlbHNlIGlmIChbY29udHJvbCBpc0VxdWFsVG9T
dHJpbmc6UERGSFVETGF1bmNoUHJldmlld0NvbnRyb2xdKQorICAgICAgICBwYWdlLT5wZGZPcGVu
V2l0aFByZXZpZXcoX3BsdWdpbklkZW50aWZpZXIpOworfQorCistICh2b2lkKV9sb2FkSWNvbklt
YWdlcworeworICAgIGZvciAoTlNTdHJpbmcgKmNvbnRyb2xOYW1lIGluIGNvbnRyb2xBcnJheSgp
KQorICAgICAgICBbc2VsZiBfZ2V0SW1hZ2VGb3JDb250cm9sTmFtZTogY29udHJvbE5hbWVdOwor
fQorCistICh2b2lkKV9zZXR1cExheWVyOihDQUxheWVyICopcGFyZW50TGF5ZXIKK3sKKyAgICBf
bGF5ZXIgPSBhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0pOworICAgIFtfbGF5ZXIgc2V0
Q29ybmVyUmFkaXVzOmtMYXllckNvcm5lclJhZGl1c107CisgICAgCisgICAgYXV0byBjb2xvciA9
IGFkb3B0TlMoUERGQ0dDb2xvckNyZWF0ZUdlbmVyaWNSR0Ioa0xheWVyR3JheUNvbXBvbmVudCwg
a0xheWVyR3JheUNvbXBvbmVudCwga0xheWVyR3JheUNvbXBvbmVudCwgMS4wKSk7CisgICAgW19s
YXllciBzZXRCYWNrZ3JvdW5kQ29sb3I6W2NvbG9yIENHQ29sb3JdXTsKKyAgICBbc2VsZiBfc2V0
TGF5ZXJPcGFjaXR5OmtMYXllckFscGhhXTsKKyAgICAKKyAgICBbc2VsZiBfbG9hZEljb25JbWFn
ZXNdOworICAgIENHRmxvYXQgbWluSWNvbkltYWdlSGVpZ2h0ID0gc3RkOjpudW1lcmljX2xpbWl0
czxDR0Zsb2F0Pjo6bWF4KCk7CisgICAgZm9yIChOU0ltYWdlKiBpbWFnZSBpbiBbX2NhY2hlZElj
b25zIGFsbFZhbHVlc10pCisgICAgICAgIG1pbkljb25JbWFnZUhlaWdodCA9IHN0ZDo6bWluKG1p
bkljb25JbWFnZUhlaWdodCwgKGltYWdlLnNpemUuaGVpZ2h0IC8gX2RldmljZVNjYWxlRmFjdG9y
KSk7CisgICAgCisgICAgQ0dGbG9hdCBkeCA9IGtMYXllckNvbnRyb2xsZXJIb3Jpem9udGFsTWFy
Z2luOworICAgIGZvciAoTlNTdHJpbmcgKmNvbnRyb2xOYW1lIGluIGNvbnRyb2xBcnJheSgpKSB7
CisgICAgICAgIGF1dG8gY29udHJvbExheWVyID0gYWRvcHROUyhbW0NBTGF5ZXIgYWxsb2NdIGlu
aXRdKTsKKyAgICAgICAgQ0dGbG9hdCBkeSA9IDAuMDsKKyAgICAgICAgQ0dGbG9hdCBjb250cm9s
bGVyV2lkdGggPSAwLjA7CisgICAgICAgIENHRmxvYXQgY29udHJvbGxlckhlaWdodCA9IDAuMDsK
KworICAgICAgICBpZiAoW2NvbnRyb2xOYW1lIGlzRXF1YWxUb1N0cmluZzogUERGSFVEU2VwZXJh
dG9yQ29udHJvbF0pIHsKKyAgICAgICAgICAgIGR5ID0ga0xheWVyU2VwZXJhdG9yVmVydGljYWxN
YXJnaW47CisgICAgICAgICAgICBjb250cm9sbGVyV2lkdGggPSBrTGF5ZXJTZXBlcmF0b3JDb250
cm9sbGVyU2l6ZTsKKyAgICAgICAgICAgIGNvbnRyb2xsZXJIZWlnaHQgPSBtaW5JY29uSW1hZ2VI
ZWlnaHQgKyAoMi4wICoga0xheWVySW1hZ2VWZXJ0aWNhbE1hcmdpbikgLSAoMi4wICoga0xheWVy
U2VwZXJhdG9yVmVydGljYWxNYXJnaW4pOworICAgICAgICAgICAgCisgICAgICAgICAgICBbY29u
dHJvbExheWVyIHNldEJhY2tncm91bmRDb2xvcjogW1tOU0NvbG9yIGxpZ2h0R3JheUNvbG9yXSBD
R0NvbG9yXV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBOU0ltYWdlKiBjb250cm9s
SW1hZ2UgPSBbc2VsZiBfZ2V0SW1hZ2VGb3JDb250cm9sTmFtZTpjb250cm9sTmFtZV07CisgICAg
ICAgICAgICBbY29udHJvbExheWVyIHNldENvbnRlbnRzOiBjb250cm9sSW1hZ2VdOworICAgICAg
ICAgICAgW2NvbnRyb2xMYXllciBzZXRPcGFjaXR5OiBrQ29udHJvbExheWVyTm9ybWFsQWxwaGFd
OworCisgICAgICAgICAgICBkeSA9IGtMYXllckltYWdlVmVydGljYWxNYXJnaW47CisgICAgICAg
ICAgICBjb250cm9sbGVyV2lkdGggPSBbY29udHJvbEltYWdlIHNpemVdLndpZHRoIC8gX2Rldmlj
ZVNjYWxlRmFjdG9yOworICAgICAgICAgICAgY29udHJvbGxlckhlaWdodCA9IFtjb250cm9sSW1h
Z2Ugc2l6ZV0uaGVpZ2h0IC8gX2RldmljZVNjYWxlRmFjdG9yOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBkeSAtPSAoY29udHJvbGxlckhlaWdodCAtIG1pbkljb25JbWFnZUhlaWdodCkgLyAy
LjA7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFtjb250cm9sTGF5ZXIgc2V0RmlsdGVyczpA
W1tDQUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJDb2xvckludmVydF1dXTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgW2NvbnRyb2xMYXllciBzZXRGcmFtZTpDR1JlY3RNYWtl
KGR4LCBkeSwgY29udHJvbGxlcldpZHRoLCBjb250cm9sbGVySGVpZ2h0KV07CisgICAgICAgIFtf
bGF5ZXIgYWRkU3VibGF5ZXI6Y29udHJvbExheWVyLmdldCgpXTsKKyAgICAgICAgCisgICAgICAg
IGR4ICs9IGNvbnRyb2xsZXJXaWR0aCArIGtMYXllckNvbnRyb2xsZXJIb3Jpem9udGFsTWFyZ2lu
OworICAgIH0KKyAgICAKKyAgICBbX2xheWVyIHNldEZyYW1lOkNHUmVjdE1ha2UoMCwga0xheWVy
VmVydGljYWxPZmZzZXQsIGR4LCBtaW5JY29uSW1hZ2VIZWlnaHQgKyAyLjAgKiBrTGF5ZXJJbWFn
ZVZlcnRpY2FsTWFyZ2luKV07CisgICAgW3BhcmVudExheWVyIGFkZFN1YmxheWVyOiBfbGF5ZXIu
Z2V0KCldOworfQorCistICh2b2lkKV9yZWRyYXdMYXllcgoreworICAgIFtfY2FjaGVkSWNvbnMg
cmVtb3ZlQWxsT2JqZWN0c107CisgICAgQ0FMYXllciAqcGFyZW50TGF5ZXIgPSBbX2xheWVyIHN1
cGVybGF5ZXJdOworICAgIFtfbGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAgIFtzZWxm
IF9zZXR1cExheWVyOnBhcmVudExheWVyXTsKKyAgICBbc2VsZiBzZXRGcmFtZVNpemU6X2ZyYW1l
U2l6ZV07Cit9CisKKy0gKE5TSW1hZ2UqKV9nZXRJbWFnZUZvckNvbnRyb2xOYW1lOihOU1N0cmlu
ZyAqKWNvbnRyb2wKK3sKKyAgICBOU0ltYWdlKiBpY29uSW1hZ2UgPSBfY2FjaGVkSWNvbnMuZ2V0
KClbY29udHJvbF07CisgICAgaWYgKGljb25JbWFnZSkKKyAgICAgICAgcmV0dXJuIGljb25JbWFn
ZTsKKworICAgIGljb25JbWFnZSA9IFtOU0ltYWdlIF9pbWFnZVdpdGhTeXN0ZW1TeW1ib2xOYW1l
OiBjb250cm9sXTsKKyAgICBpZiAoIWljb25JbWFnZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKwor
ICAgIGljb25JbWFnZSA9IFtpY29uSW1hZ2UgX2ltYWdlV2l0aENvbmZpZ3VyYXRpb246QHsKKyAg
ICAgICAgTlNJbWFnZUFsdGVybmF0ZUNyaXRlcmlvbkZvbnQgOiBbTlNGb250IHByZWZlcnJlZEZv
bnRGb3JUZXh0U3R5bGU6TlNGb250VGV4dFN0eWxlVGl0bGUyIG9wdGlvbnM6QHsgfV0sCisgICAg
ICAgIE5TSW1hZ2VBbHRlcm5hdGVDcml0ZXJpb25TeW1ib2xTY2FsZSA6IEAoTlNJbWFnZVN5bWJv
bFNjYWxlTGFyZ2UpCisgICAgfV07CisgICAgICAgIAorICAgIE5TUmVjdCBpY29uSW1hZ2VSZWN0
ID0gTlNNYWtlUmVjdCgwLCAwLCBbaWNvbkltYWdlIHNpemVdLndpZHRoICoga0xheWVySW1hZ2VT
Y2FsZSAqIF9kZXZpY2VTY2FsZUZhY3RvciwgW2ljb25JbWFnZSBzaXplXS5oZWlnaHQgKiBrTGF5
ZXJJbWFnZVNjYWxlICogX2RldmljZVNjYWxlRmFjdG9yKTsKKyAgICBOU0ltYWdlUmVwKiBpY29u
SW1hZ2VSZXAgPSBbaWNvbkltYWdlIGJlc3RSZXByZXNlbnRhdGlvbkZvclJlY3Q6aWNvbkltYWdl
UmVjdCBjb250ZXh0Om5pbCBoaW50czpuaWxdOworICAgIGljb25JbWFnZSA9IFtOU0ltYWdlIGlt
YWdlV2l0aEltYWdlUmVwOiBpY29uSW1hZ2VSZXBdOworICAgIAorICAgIF9jYWNoZWRJY29ucy5n
ZXQoKVtjb250cm9sXSA9IGljb25JbWFnZTsKKyAgICByZXR1cm4gaWNvbkltYWdlOworfQorCist
ICh2b2lkKV9zZXRMYXllck9wYWNpdHk6KENHRmxvYXQpYWxwaGEKK3sKKyAgICBbX2xheWVyIHNl
dE9wYWNpdHk6YWxwaGFdOworICAgIGZvciAoQ0FMYXllciAqc3ViTGF5ZXIgaW4gW19sYXllciBz
dWJsYXllcnNdKQorICAgICAgICBbc3ViTGF5ZXIgc2V0T3BhY2l0eTphbHBoYV07Cit9CisKK0Bl
bmQKKworI2VuZGlmIC8vIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0JKHJldmlzaW9uIDI2
NjExMCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0J
KHdvcmtpbmcgY29weSkKQEAgLTEwODgsMTYgKzEwODgsNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
ZGlkUGVyZm9ybURpY3Rpb25hcnlMCiAgICAgcGFnZUNsaWVudCgpLmRpZFBlcmZvcm1EaWN0aW9u
YXJ5TG9va3VwKGRpY3Rpb25hcnlQb3B1cEluZm8pOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6
c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbihjb25z
dCBTdHJpbmcmLCBGcmFtZUluZm9EYXRhJiYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYsIGNv
bnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJQYWdl
UHJveHk6Om9wZW5QREZGcm9tVGVtcG9yYXJ5Rm9sZGVyV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKEZy
YW1lSW5mb0RhdGEmJiwgY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0UmVtb3RlTGF5ZXJUcmVlUm9vdE5vZGUoUmVtb3Rl
TGF5ZXJUcmVlTm9kZSogcm9vdE5vZGUpCiB7CiAgICAgcGFnZUNsaWVudCgpLnNldFJlbW90ZUxh
eWVyVHJlZVJvb3ROb2RlKHJvb3ROb2RlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9QYWdlQ2xpZW50SW1wbE1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5oCShyZXZpc2lvbiAyNjYxMTApCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTkwLDYgKzE5MCwxMyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCByZWdpc3Rlckluc2Vy
dGlvblVuZG9Hcm91cGluZygpIG92ZXJyaWRlOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERG
X0hVRCkKKyAgICB2b2lkIGNyZWF0ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCB1cGRhdGVQREZIVURMb2NhdGlv
bihQREZQbHVnaW5JZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7
CisgICAgdm9pZCByZW1vdmVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllcikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCByZW1vdmVBbGxQREZIVURzKCkgb3ZlcnJpZGU7CisjZW5kaWYKKwogICAgIC8vIEF1
eGlsaWFyeSBDbGllbnQgQ3JlYXRpb24KICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAg
V2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudCYgZnVsbFNjcmVlbk1hbmFnZXJQcm94eUNs
aWVudCgpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VD
bGllbnRJbXBsTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21h
Yy9QYWdlQ2xpZW50SW1wbE1hYy5tbQkocmV2aXNpb24gMjY2MTEwKQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0z
NDksNiArMzQ5LDMwIEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OnJlZ2lzdGVySW5zZXJ0aW9uVW4K
ICAgICByZWdpc3Rlckluc2VydGlvblVuZG9Hcm91cGluZ1dpdGhVbmRvTWFuYWdlcihbbV92aWV3
IHVuZG9NYW5hZ2VyXSk7CiB9CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCit2
b2lkIFBhZ2VDbGllbnRJbXBsOjpjcmVhdGVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllciBpZGVu
dGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIG1faW1wbC0+Y3Jl
YXRlUERGSFVEKGlkZW50aWZpZXIsIHJlY3QpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjp1
cGRhdGVQREZIVURMb2NhdGlvbihQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCit7CisgICAgbV9pbXBsLT51cGRhdGVQREZIVURMb2Nh
dGlvbihpZGVudGlmaWVyLCByZWN0KTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVtb3Zl
UERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBtX2ltcGwtPnJl
bW92ZVBERkhVRChpZGVudGlmaWVyKTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVtb3Zl
QWxsUERGSFVEcygpCit7CisgICAgbV9pbXBsLT5yZW1vdmVBbGxQREZIVURzKCk7Cit9CisKKyNl
bmRpZiAvLyBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCiB2b2lkIFBhZ2VDbGllbnRJbXBs
OjpjbGVhckFsbEVkaXRDb21tYW5kcygpCiB7CiAgICAgbV9pbXBsLT5jbGVhckFsbEVkaXRDb21t
YW5kcygpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVBy
b3h5TWFjLm1tCShyZXZpc2lvbiAyNjYxMTApCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9t
YWMvV2ViUGFnZVByb3h5TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NzUsOCArNDc1LDYgQEAg
c3RhdGljIE5TU3RyaW5nICpwYXRoVG9QREZPbkRpc2soY29uc3QgUwogCiB2b2lkIFdlYlBhZ2VQ
cm94eTo6c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlv
bihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBGcmFtZUluZm9EYXRhJiYgZnJhbWVJ
bmZvLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGEsIGNvbnN0IFN0cmluZyYgcGRmVVVJ
RCkKIHsKLSAgICBNRVNTQUdFX0NIRUNLKFRlbXBvcmFyeVBERkZpbGVNYXA6OmlzVmFsaWRLZXko
cGRmVVVJRCkpOwotCiAgICAgaWYgKGRhdGEuaXNFbXB0eSgpKSB7CiAgICAgICAgIFdURkxvZ0Fs
d2F5cygiQ2Fubm90IHNhdmUgZW1wdHkgUERGIGZpbGUgdG8gdGhlIHRlbXBvcmFyeSBkaXJlY3Rv
cnkuIik7CiAgICAgICAgIHJldHVybjsKQEAgLTUwNCw3ICs1MDIsOCBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sCiAgICAgYXV0byBvcmlnaW5hdGluZ1VSTFN0cmlu
ZyA9IGZyYW1lSW5mby5yZXF1ZXN0LnVybCgpLnN0cmluZygpOwogICAgIEZpbGVTeXN0ZW06OnNl
dE1ldGFkYXRhVVJMKG5zUGF0aC5nZXQoKSwgb3JpZ2luYXRpbmdVUkxTdHJpbmcpOwogCi0gICAg
bV90ZW1wb3JhcnlQREZGaWxlcy5hZGQocGRmVVVJRCwgbnNQYXRoLmdldCgpKTsKKyAgICBpZiAo
VGVtcG9yYXJ5UERGRmlsZU1hcDo6aXNWYWxpZEtleShwZGZVVUlEKSkKKyAgICAgICAgbV90ZW1w
b3JhcnlQREZGaWxlcy5hZGQocGRmVVVJRCwgbnNQYXRoLmdldCgpKTsKIAogICAgIGF1dG8gcGRm
RmlsZVVSTCA9IFVSTDo6ZmlsZVVSTFdpdGhGaWxlU3lzdGVtUGF0aChTdHJpbmcobnNQYXRoLmdl
dCgpKSk7CiAgICAgbV91aUNsaWVudC0+Y29uZmlybVBERk9wZW5pbmcoKnRoaXMsIHBkZkZpbGVV
UkwsIFdURk1vdmUoZnJhbWVJbmZvKSwgW3BkZkZpbGVVUkxdIChib29sIGFsbG93ZWQpIHsKQEAg
LTUxNCw2ICs1MTMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2F2ZVBERlRvVGVtcG9yYXJ5Rm9s
CiAgICAgfSk7CiB9CiAKKyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikgJiYgIUVOQUJMRShVSV9Q
Uk9DRVNTX1BERl9IVUQpCiB2b2lkIFdlYlBhZ2VQcm94eTo6b3BlblBERkZyb21UZW1wb3JhcnlG
b2xkZXJXaXRoTmF0aXZlQXBwbGljYXRpb24oRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywgY29u
c3QgU3RyaW5nJiBwZGZVVUlEKQogewogICAgIE1FU1NBR0VfQ0hFQ0soVGVtcG9yYXJ5UERGRmls
ZU1hcDo6aXNWYWxpZEtleShwZGZVVUlEKSk7CkBAIC01MzAsNiArNTMwLDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6Om9wZW5QREZGcm9tVGVtcG9yYXJ5RgogICAgICAgICBbW05TV29ya3NwYWNlIHNo
YXJlZFdvcmtzcGFjZV0gb3BlblVSTDpwZGZGaWxlVVJMXTsKICAgICB9KTsKIH0KKyNlbmRpZgog
CiAjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2hvd1BERkNv
bnRleHRNZW51KGNvbnN0IFdlYktpdDo6UERGQ29udGV4dE1lbnUmIGNvbnRleHRNZW51LCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPGludDMyX3Q+JiYpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtNjczLDYgKzY3NCw0OSBAQCBQbGF0Zm9ybVZpZXcqIFdlYlBhZ2VQcm94eTo6cGxh
dGZvcm1WaWV3CiAgICAgcmV0dXJuIFtwYWdlQ2xpZW50KCkucGxhdGZvcm1XaW5kb3coKSBjb250
ZW50Vmlld107CiB9CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCit2b2lkIFdl
YlBhZ2VQcm94eTo6Y3JlYXRlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBwYWdlQ2xpZW50KCkuY3JlYXRl
UERGSFVEKGlkZW50aWZpZXIsIHJlY3QpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6cmVtb3Zl
UERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBwYWdlQ2xpZW50
KCkucmVtb3ZlUERGSFVEKGlkZW50aWZpZXIpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6dXBk
YXRlUERGSFVETG9jYXRpb24oUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIHBhZ2VDbGllbnQoKS51cGRhdGVQREZIVURM
b2NhdGlvbihpZGVudGlmaWVyLCByZWN0KTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnBkZlpv
b21JbihQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgc2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6Wm9vbVBERkluKGlkZW50aWZpZXIpKTsKK30KKwordm9pZCBXZWJQYWdlUHJv
eHk6OnBkZlpvb21PdXQoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIHNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6Olpvb21QREZPdXQoaWRlbnRpZmllcikpOworfQorCit2b2lk
IFdlYlBhZ2VQcm94eTo6cGRmU2F2ZVRvUERGKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmll
cikKK3sKKyAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OlNhdmVQREYo
aWRlbnRpZmllciksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIChTdHJp
bmcmJiBzdWdnZXN0ZWRGaWxlbmFtZSwgVVJMJiYgb3JpZ2luYXRpbmdVUkwsIGNvbnN0IElQQzo6
RGF0YVJlZmVyZW5jZSYgZGF0YVJlZmVyZW5jZSkgeworICAgICAgICBzYXZlUERGVG9GaWxlSW5E
b3dubG9hZHNGb2xkZXIoV1RGTW92ZShzdWdnZXN0ZWRGaWxlbmFtZSksIFdURk1vdmUob3JpZ2lu
YXRpbmdVUkwpLCBkYXRhUmVmZXJlbmNlKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJQYWdlUHJv
eHk6OnBkZk9wZW5XaXRoUHJldmlldyhQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCit7
CisgICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJQYWdlOjpPcGVuUERGV2l0aFBy
ZXZpZXcoaWRlbnRpZmllciksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyld
IChTdHJpbmcmJiBzdWdnZXN0ZWRGaWxlbmFtZSwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywg
Y29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhLCBjb25zdCBTdHJpbmcmIHBkZlVVSUQpIHsK
KyAgICAgICAgc2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNh
dGlvbihXVEZNb3ZlKHN1Z2dlc3RlZEZpbGVuYW1lKSwgV1RGTW92ZShmcmFtZUluZm8pLCBkYXRh
LCBwZGZVVUlEKTsKKyAgICB9KTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShVSV9QUk9DRVNTX1BE
Rl9IVUQpCisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFD
KQpJbmRleDogU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAyNjYxMTApCisrKyBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNzkwLDYgKzE3OTAsNyBAQAogCQlE
M0I5NDg0OTExRkY0QjY1MDAwMzJCMzkgLyogV2ViU2VhcmNoUG9wdXBNZW51LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0I5NDg0NTExRkY0QjY1MDAw
MzJCMzkgLyogV2ViU2VhcmNoUG9wdXBNZW51LmggKi87IH07CiAJCURGNDYyRTBGMjNGMjJGNTUw
MEVGRjM1RiAvKiBXS0hUVFBDb29raWVTdG9yZVByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERGNDYyRTBFMjNGMjJGNTMwMEVGRjM1RiAvKiBX
S0hUVFBDb29raWVTdG9yZVByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlERjQ2MkUxMjIzRjMzOEJFMDBFRkYzNUYgLyogV0tDb250ZW50
V29ybGRQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBERjQ2MkUxMTIzRjMzOEFEMDBFRkYzNUYgLyogV0tDb250ZW50V29ybGRQcml2YXRlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJREY4NENF
RTQyNDlBQTI0RDAwOTA5NkY2IC8qIFdLUERGSFVEVmlldy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERGODRDRUUyMjQ5QUEyMUYwMDkwOTZGNiAvKiBX
S1BERkhVRFZpZXcubW0gKi87IH07CiAJCUUxMDVGRTU0MThEN0I5REUwMDhGNTdBOCAvKiBFZGl0
aW5nUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxMDVGRTUzMThEN0I5REUwMDhGNTdBOCAvKiBFZGl0aW5nUmFuZ2UuaCAqLzsgfTsKIAkJRTEx
RDM1QUUxNkI2M0QxQjAwNkQyM0Q3IC8qIGNvbS5hcHBsZS5XZWJQcm9jZXNzLnNiIGluIFJlc291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTk2N0UzNzE1MEFCNUUy
MDBDNzMxNjkgLyogY29tLmFwcGxlLldlYlByb2Nlc3Muc2IgKi87IH07CiAJCUUxNEE5NTRBMTZF
MDE2QTQwMDY4REU4MiAvKiBOZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE0QTk1NDgxNkUwMTZB
NDAwNjhERTgyIC8qIE5ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzLmggKi87IH07CkBA
IC01Mjc5LDYgKzUyODAsOSBAQAogCQlERjQ2MkUxMTIzRjMzOEFEMDBFRkYzNUYgLyogV0tDb250
ZW50V29ybGRQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQ29u
dGVudFdvcmxkUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERjU4QzYz
MTEzNzFBQzU4MDBGOUEzN0MgLyogTmF0aXZlV2ViV2hlZWxFdmVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBOYXRpdmVXZWJXaGVlbEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCURGNThDNjM1MTM3MUFDQTAwMEY5QTM3QyAvKiBOYXRpdmVXZWJXaGVl
bEV2ZW50TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTmF0
aXZlV2ViV2hlZWxFdmVudE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREY3
NDI3NUMyNEY0OTU1MDAwRjhBQkU5IC8qIFBERlBsdWdpbklkZW50aWZpZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUERGUGx1Z2luSWRlbnRpZmllci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlERjg0Q0VFMjI0OUFBMjFGMDA5MDk2RjYgLyogV0tQREZIVURW
aWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tQREZIVURW
aWV3Lm1tOyBwYXRoID0gUERGL1dLUERGSFVEVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJREY4NENFRTMyNDlBQTIxRjAwOTA5NkY2IC8qIFdLUERGSFVEVmlldy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS1BERkhVRFZpZXcuaDsgcGF0aCA9IFBERi9X
S1BERkhVRFZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEwNUZFNTMxOEQ3
QjlERTAwOEY1N0E4IC8qIEVkaXRpbmdSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBFZGl0aW5nUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEx
NUM3MTUxOTBGOEEyNTAwRUNDNTE2IC8qIGNvbS5hcHBsZS5XZWJLaXQuU3RvcmFnZS5zYiAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IG5hbWUgPSBjb20uYXBwbGUuV2ViS2l0LlN0b3JhZ2Uuc2I7IHBhdGggPSBE
ZXJpdmVkU291cmNlcy9XZWJLaXQyL2NvbS5hcHBsZS5XZWJLaXQuU3RvcmFnZS5zYjsgc291cmNl
VHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJRTEzM0ZEODkxNDIzREQ3RjAwRkM3QkZC
IC8qIFdlYktpdC5pY25zICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gaW1hZ2UuaWNuczsgbmFtZSA9IFdlYktpdC5pY25zOyBwYXRoID0gUmVzb3VyY2Vz
L1dlYktpdC5pY25zOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTkwMCw2ICs1OTA0
LDcgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTFBNkZCOTA4MTFFNjZGQjEwMERCMTM3MSAvKiBO
ZXRzY2FwZSAqLywKIAkJCQlFMTk5ODc1QjE0MkJGOUNGMDBCQjJERTcgLyogUERGICovLAorCQkJ
CURGNzQyNzVDMjRGNDk1NTAwMEY4QUJFOSAvKiBQREZQbHVnaW5JZGVudGlmaWVyLmggKi8sCiAJ
CQkJMUE2RkI3RDAxMUU2NTFFMjAwREIxMzcxIC8qIFBsdWdpbi5jcHAgKi8sCiAJCQkJMUE2RkI3
RDExMUU2NTFFMjAwREIxMzcxIC8qIFBsdWdpbi5oICovLAogCQkJCTFBQTU2RjI4MTFFOTJCQzgw
MDYxQjg4MiAvKiBQbHVnaW5Db250cm9sbGVyLmggKi8sCkBAIC04OTYzLDYgKzg5NjgsNyBAQAog
CQkJCUNENDU3MEQ4MjQ0NENBMTcwMEEzRENFQiAvKiBNZWRpYSAqLywKIAkJCQk1MTBDQzdFNzE2
MTM4RTcyMDBEMDNFRDMgLyogTmV0d29yayAqLywKIAkJCQkzMUEyRUM0MDE0ODk5NzM3MDA4MTBE
NzEgLyogTm90aWZpY2F0aW9ucyAqLywKKwkJCQlERjg0Q0VFMTI0OUFBMjAwMDA5MDk2RjYgLyog
UERGICovLAogCQkJCTFBRUZDQzA1MTFEMDFGMzQwMDgyMTlEMyAvKiBQbHVnaW5zICovLAogCQkJ
CTJEMTU1MUE5MUY1QTlCNDIwMDA2RTNGRSAvKiBSZW1vdGVMYXllclRyZWUgKi8sCiAJCQkJMUFB
RjA4OUUxOTI2ODFBQzAwQjYzOTBDIC8qIFVzZXJDb250ZW50ICovLApAQCAtMTA0NTEsNiArMTA0
NTcsMTUgQEAKIAkJCXBhdGggPSBpb3M7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9
OworCQlERjg0Q0VFMTI0OUFBMjAwMDA5MDk2RjYgLyogUERGICovID0geworCQkJaXNhID0gUEJY
R3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlERjg0Q0VFMzI0OUFBMjFGMDA5MDk2RjYgLyog
V0tQREZIVURWaWV3LmggKi8sCisJCQkJREY4NENFRTIyNDlBQTIxRjAwOTA5NkY2IC8qIFdLUERG
SFVEVmlldy5tbSAqLywKKwkJCSk7CisJCQluYW1lID0gUERGOworCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKKwkJfTsKIAkJRTE3MDg3NkQxNkQ2Q0E3MjAwRjk5MjI2IC8qIEZpbGVBUEkgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMTMxNDIsNiArMTMx
NTcsNyBAQAogCQkJCTYzNzI4MUEzMjFBREM3NDQwMDlFMERFNiAvKiBXS0Rvd25sb2FkUHJvZ3Jl
c3MubW0gaW4gU291cmNlcyAqLywKIAkJCQk1Q0U5MTIwRDIyOTNDMjE5MDA1QkVDNzggLyogV0tN
YWluLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDY1N0Q4OEEyMjY2NEEyRjAwNURFODIzIC8qIFdL
T3JpZW50YXRpb25BY2Nlc3NBbGVydC5tbSBpbiBTb3VyY2VzICovLAorCQkJCURGODRDRUU0MjQ5
QUEyNEQwMDkwOTZGNiAvKiBXS1BERkhVRFZpZXcubW0gaW4gU291cmNlcyAqLywKIAkJCQk1Q0Ey
NkQ4MzIxN0FEMUI4MDBGOTdBMzUgLyogV0tTYWZlQnJvd3NpbmdXYXJuaW5nLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMURCMDE5NDQyMTFDRjAwNTAwOUZCM0U4IC8qIFdLU2hhcmVTaGVldC5tbSBp
biBTb3VyY2VzICovLAogCQkJCTdBNzhGRjMzMjI0MTkxOUIwMDk2NDgzRSAvKiBXS1N0b3JhZ2VB
Y2Nlc3NBbGVydC5tbSBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1BsdWdpbnMvUERGUGx1Z2luSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERlBsdWdpbklkZW50aWZpZXIuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREZQbHVnaW5JZGVudGlm
aWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorZW51bSBQREZQbHVn
aW5JZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBQREZQbHVnaW5JZGVudGlmaWVyID0gT2JqZWN0
SWRlbnRpZmllcjxQREZQbHVnaW5JZGVudGlmaWVyVHlwZT47CisjZW5kaWYKKworfQpJbmRleDog
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERkxheWVyQ29udHJvbGxlclNQ
SS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9Q
REZMYXllckNvbnRyb2xsZXJTUEkuaAkocmV2aXNpb24gMjY2MTEwKQorKysgU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERkxheWVyQ29udHJvbGxlclNQSS5oCSh3b3JraW5n
IGNvcHkpCkBAIC04Nyw2ICs4NywxMiBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBQREZM
YXllckNvbnRyCiAKIC0gKHZvaWQpc25hcHNob3RJbkNvbnRleHQ6KENHQ29udGV4dFJlZiljb250
ZXh0OwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKy0gKHZvaWQpc2V0RGlzcGxh
eXNQREZIVURDb250cm9sbGVyOihCT09MKWRpc3BsYXlzQ29udHJvbGxlcjsKKy0gKHZvaWQpem9v
bUluOihpZClhdFBvaW50OworLSAodm9pZCl6b29tT3V0OihpZClhdFBvaW50OworI2VuZGlmCisK
IC0gKHZvaWQpbWFnbmlmeVdpdGhNYWduaWZpY2F0aW9uOihDR0Zsb2F0KW1hZ25pZmljYXRpb24g
YXRQb2ludDooQ0dQb2ludClwb2ludCBpbW1lZGlhdGVseTooQk9PTClpbW1lZGlhdGVseTsKIAog
LSAoQ0dQb2ludClzY3JvbGxQb3NpdGlvbjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmgJKHJldmlzaW9uIDI2NjExMCkKKysrIFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQogCiAjaW5j
bHVkZSAiUERGS2l0SW1wb3J0cy5oIgorI2luY2x1ZGUgIlBERlBsdWdpbklkZW50aWZpZXIuaCIK
ICNpbmNsdWRlICJQbHVnaW4uaCIKICNpbmNsdWRlICJXZWJFdmVudC5oIgogI2luY2x1ZGUgIldl
YkhpdFRlc3RSZXN1bHREYXRhLmgiCkBAIC01MCw2ICs1MSw3IEBAIHR5cGVkZWYgY29uc3Qgc3Ry
dWN0IE9wYXF1ZUpTVmFsdWUqIEpTVmEKIE9CSkNfQ0xBU1MgTlNBcnJheTsKIE9CSkNfQ0xBU1Mg
TlNBdHRyaWJ1dGVkU3RyaW5nOwogT0JKQ19DTEFTUyBOU0RhdGE7CitPQkpDX0NMQVNTIE5TRXZl
bnQ7CiBPQkpDX0NMQVNTIE5TU3RyaW5nOwogT0JKQ19DTEFTUyBQREZBbm5vdGF0aW9uOwogT0JK
Q19DTEFTUyBQREZMYXllckNvbnRyb2xsZXI7CkBAIC03Nyw4ICs3OSw5IEBAIGNsYXNzIFBERlBs
dWdpbkFubm90YXRpb247CiBjbGFzcyBQREZQbHVnaW5QYXNzd29yZEZpZWxkOwogY2xhc3MgUGx1
Z2luVmlldzsKIGNsYXNzIFdlYkZyYW1lOworc3RydWN0IEZyYW1lSW5mb0RhdGE7CiAKLWNsYXNz
IFBERlBsdWdpbiBmaW5hbCA6IHB1YmxpYyBQbHVnaW4sIHByaXZhdGUgV2ViQ29yZTo6U2Nyb2xs
YWJsZUFyZWEKK2NsYXNzIFBERlBsdWdpbiBmaW5hbCA6IHB1YmxpYyBQbHVnaW4sIHB1YmxpYyBX
ZWJDb3JlOjpTY3JvbGxhYmxlQXJlYQogI2lmIEhBVkUoSU5DUkVNRU5UQUxfUERGX0FQSVMpCiAg
ICAgLCBwcml2YXRlIFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50CiAj
ZW5kaWYKQEAgLTEwMyw5ICsxMDYsMTkgQEAgcHVibGljOgogICAgIHZvaWQgbm90aWZ5U2VsZWN0
aW9uQ2hhbmdlZChQREZTZWxlY3Rpb24gKik7CiAgICAgdm9pZCBub3RpZnlDdXJzb3JDaGFuZ2Vk
KHVpbnQ2NF90IC8qIFBERkxheWVyQ29udHJvbGxlckN1cnNvclR5cGUgKi8pOwogCisjaWYgRU5B
QkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICB2b2lkIHpvb21JbigpOworICAgIHZvaWQgem9v
bU91dCgpOworICAgIHZvaWQgc2F2ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFVSTCYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpPiYmKTsKKyAgICB2b2lk
IG9wZW5XaXRoUHJldmlldyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYsIEZy
YW1lSW5mb0RhdGEmJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwgY29uc3QgU3RyaW5nJik+
JiYpOworICAgIFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJu
IG1faWRlbnRpZmllcjsgfQorI2VuZGlmCisKICAgICB2b2lkIGNsaWNrZWRMaW5rKE5TVVJMICop
OworI2lmICFFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQogICAgIHZvaWQgc2F2ZVRvUERGKCk7
CiAgICAgdm9pZCBvcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKCk7CisjZW5kaWYKICAgICB2b2lk
IHdyaXRlSXRlbXNUb1Bhc3RlYm9hcmQoTlNTdHJpbmcgKnBhc3RlYm9hcmROYW1lLCBOU0FycmF5
ICppdGVtcywgTlNBcnJheSAqdHlwZXMpOwogICAgIHZvaWQgc2hvd0RlZmluaXRpb25Gb3JBdHRy
aWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0cmluZyAqLCBDR1BvaW50KTsKICAgICB2b2lkIHBl
cmZvcm1XZWJTZWFyY2goTlNTdHJpbmcgKik7CkBAIC0xMTgsNyArMTMxLDEwIEBAIHB1YmxpYzoK
IAogICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0RnJvbVBERlZpZXdUb1NjcmVlbihjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBjb25zdDsKICAgICBXZWJDb3JlOjpJbnRQb2ludCBjb252
ZXJ0RnJvbVJvb3RWaWV3VG9QREZWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7
CisgICAgV2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZyb21QREZWaWV3VG9Sb290Vmlldyhjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFJlY3QgY29udmVy
dEZyb21QREZWaWV3VG9Sb290Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Q7CiAg
ICAgV2ViQ29yZTo6SW50UmVjdCBib3VuZHNPblNjcmVlbigpIGNvbnN0OworICAgIFdlYkNvcmU6
OkludFJlY3QgZnJhbWVGb3JIVUQoKSBjb25zdDsKIAogICAgIGJvb2wgc2hvd0NvbnRleHRNZW51
QXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwogCkBAIC0xNTksNyArMTc1LDcgQEAg
cHJpdmF0ZToKICAgICBib29sIHdhbnRzV2hlZWxFdmVudHMoKSBmaW5hbCB7IHJldHVybiB0cnVl
OyB9CiAgICAgdm9pZCBnZW9tZXRyeURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBw
bHVnaW5TaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCwgY29uc3QgV2ViQ29y
ZTo6QWZmaW5lVHJhbnNmb3JtJiBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtKSBmaW5hbDsKICAg
ICB2b2lkIGNvbnRlbnRzU2NhbGVGYWN0b3JDaGFuZ2VkKGZsb2F0KSBmaW5hbDsKLSAgICB2b2lk
IHZpc2liaWxpdHlEaWRDaGFuZ2UoYm9vbCkgZmluYWwgeyB9CisgICAgdm9pZCB2aXNpYmlsaXR5
RGlkQ2hhbmdlKGJvb2wpIGZpbmFsOwogICAgIHZvaWQgZnJhbWVEaWRGaW5pc2hMb2FkaW5nKHVp
bnQ2NF90IHJlcXVlc3RJRCkgZmluYWw7CiAgICAgdm9pZCBmcmFtZURpZEZhaWwodWludDY0X3Qg
cmVxdWVzdElELCBib29sIHdhc0NhbmNlbGxlZCkgZmluYWw7CiAgICAgdm9pZCBkaWRFdmFsdWF0
ZUphdmFTY3JpcHQodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBTdHJpbmcmIHJlc3VsdCkgZmlu
YWw7CkBAIC0yNjMsNyArMjc5LDYgQEAgcHJpdmF0ZToKICAgICBOU0V2ZW50ICpuc0V2ZW50Rm9y
V2ViTW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7CiAgICAgV2ViQ29yZTo6SW50UG9p
bnQgY29udmVydEZyb21QbHVnaW5Ub1BERlZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBj
b25zdDsKICAgICBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbVJvb3RWaWV3VG9QbHVnaW4o
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCBj
b252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29u
c3Q7CiAgICAgCiAgICAgYm9vbCBzdXBwb3J0c0Zvcm1zKCk7CiAgICAgYm9vbCBpc0Z1bGxGcmFt
ZVBsdWdpbigpIGNvbnN0OwpAQCAtNDAzLDYgKzQxOCw5IEBAIHByaXZhdGU6CiAjZW5kaWYKIAog
I2VuZGlmIC8vIEhBVkUoSU5DUkVNRU5UQUxfUERGX0FQSVMpCisjaWYgRU5BQkxFKFVJX1BST0NF
U1NfUERGX0hVRCkKKyAgICBQREZQbHVnaW5JZGVudGlmaWVyIG1faWRlbnRpZmllcjsKKyNlbmRp
ZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0JKHJldmlzaW9uIDI2NjExMCkK
KysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0JKHdv
cmtpbmcgY29weSkKQEAgLTQzMywxMiArNDMzLDE2IEBAIC0gKHZvaWQpcGVyZm9ybVNwb3RsaWdo
dFNlYXJjaDooTlNTdHJpbmcKIAogLSAodm9pZClvcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uCiB7
CisjaWYgIUVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCiAgICAgX3BkZlBsdWdpbi0+b3Blbldp
dGhOYXRpdmVBcHBsaWNhdGlvbigpOworI2VuZGlmCiB9CiAKIC0gKHZvaWQpc2F2ZVRvUERGCiB7
CisjaWYgIUVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCiAgICAgX3BkZlBsdWdpbi0+c2F2ZVRv
UERGKCk7CisjZW5kaWYKIH0KIAogLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVy
Q29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBjbGlja2VkTGlua1dpdGhVUkw6KE5TVVJM
ICopdXJsCkBAIC02MDAsNyArNjA0LDEzIEBAIGlubGluZSBQREZQbHVnaW46OlBERlBsdWdpbihX
ZWJGcmFtZSYgZnIKICNpZiBIQVZFKElOQ1JFTUVOVEFMX1BERl9BUElTKQogICAgICwgbV9pbmNy
ZW1lbnRhbFBERkxvYWRpbmdFbmFibGVkKFdlYkNvcmU6OlJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkuaW5jcmVtZW50YWxQREZMb2FkaW5nRW5hYmxlZCgpKQogI2VuZGlm
CisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICAsIG1faWRlbnRpZmllcihQREZQ
bHVnaW5JZGVudGlmaWVyOjpnZW5lcmF0ZSgpKQorI2VuZGlmCiB7CisjaWYgRU5BQkxFKFVJX1BS
T0NFU1NfUERGX0hVRCkKKyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2V0RGlzcGxheXNQREZI
VURDb250cm9sbGVyOk5PXTsKKyNlbmRpZgogICAgIG1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgp
LmRlbGVnYXRlID0gbV9wZGZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZS5nZXQoKTsKICAgICBtX3Bk
ZkxheWVyQ29udHJvbGxlci5nZXQoKS5wYXJlbnRMYXllciA9IG1fY29udGVudExheWVyLmdldCgp
OwogCkBAIC02NDAsNiArNjUwLDEwIEBAIGlubGluZSBQREZQbHVnaW46OlBERlBsdWdpbihXZWJG
cmFtZSYgZnIKIAogUERGUGx1Z2luOjp+UERGUGx1Z2luKCkKIHsKKyNpZiBFTkFCTEUoVUlfUFJP
Q0VTU19QREZfSFVEKQorICAgIGlmIChhdXRvKiBwYWdlID0gbV9mcmFtZS5wYWdlKCkpCisgICAg
ICAgIHBhZ2UtPnJlbW92ZVBERkhVRCgqdGhpcyk7CisjZW5kaWYKIH0KIAogI2lmIEhBVkUoSU5D
UkVNRU5UQUxfUERGX0FQSVMpCkBAIC0xNzgwLDYgKzE3OTQsMTEgQEAgdm9pZCBQREZQbHVnaW46
OmNvbnRlbnRzU2NhbGVGYWN0b3JDaGFuZwogICAgIHVwZGF0ZVBhZ2VBbmREZXZpY2VTY2FsZUZh
Y3RvcnMoKTsKIH0KIAorSW50UmVjdCBQREZQbHVnaW46OmZyYW1lRm9ySFVEKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gY29udmVydEZyb21QREZWaWV3VG9Sb290VmlldyhJbnRSZWN0KEludFBvaW50
KCksIHNpemUoKSkpOworfQorCiB2b2lkIFBERlBsdWdpbjo6Y2FsY3VsYXRlU2l6ZXMoKQogewog
ICAgIGlmIChbbV9wZGZEb2N1bWVudCBpc0xvY2tlZF0pIHsKQEAgLTE3OTAsNiArMTgwOSwxMCBA
QCB2b2lkIFBERlBsdWdpbjo6Y2FsY3VsYXRlU2l6ZXMoKQogCiAgICAgbV9maXJzdFBhZ2VIZWln
aHQgPSBbbV9wZGZEb2N1bWVudCBwYWdlQ291bnRdID8gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KENH
Q2VpbGluZyhbW21fcGRmRG9jdW1lbnQgcGFnZUF0SW5kZXg6MF0gYm91bmRzRm9yQm94OmtQREZE
aXNwbGF5Qm94Q3JvcEJveF0uc2l6ZS5oZWlnaHQpKSA6IDA7CiAgICAgc2V0UERGRG9jdW1lbnRT
aXplKEludFNpemUoW21fcGRmTGF5ZXJDb250cm9sbGVyIGNvbnRlbnRTaXplUmVzcGVjdGluZ1pv
b21dKSk7CisKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIG1fZnJhbWUucGFn
ZSgpLT51cGRhdGVQREZIVURMb2NhdGlvbigqdGhpcywgZnJhbWVGb3JIVUQoKSk7CisjZW5kaWYK
IH0KIAogYm9vbCBQREZQbHVnaW46OmluaXRpYWxpemUoY29uc3QgUGFyYW1ldGVycyYgcGFyYW1l
dGVycykKQEAgLTE5MjQsNyArMTk0NywxMyBAQCBJbnRQb2ludCBQREZQbHVnaW46OmNvbnZlcnRG
cm9tUERGVmlld1RvCiAgICAgSW50UG9pbnQgcG9pbnRJblBsdWdpbkNvb3JkaW5hdGVzKHBvaW50
LngoKSwgc2l6ZSgpLmhlaWdodCgpIC0gcG9pbnQueSgpKTsKICAgICByZXR1cm4gbV9yb290Vmll
d1RvUGx1Z2luVHJhbnNmb3JtLmludmVyc2UoKS52YWx1ZU9yKEFmZmluZVRyYW5zZm9ybSgpKS5t
YXBQb2ludChwb2ludEluUGx1Z2luQ29vcmRpbmF0ZXMpOwogfQotICAgIAorCitJbnRSZWN0IFBE
RlBsdWdpbjo6Y29udmVydEZyb21QREZWaWV3VG9Sb290Vmlldyhjb25zdCBJbnRSZWN0JiByZWN0
KSBjb25zdAoreworICAgIEludFJlY3QgcmVjdEluUGx1Z2luQ29vcmRpbmF0ZXMocmVjdC54KCks
IHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIHJldHVybiBtX3Jv
b3RWaWV3VG9QbHVnaW5UcmFuc2Zvcm0uaW52ZXJzZSgpLnZhbHVlT3IoQWZmaW5lVHJhbnNmb3Jt
KCkpLm1hcFJlY3QocmVjdEluUGx1Z2luQ29vcmRpbmF0ZXMpOworfQorCiBJbnRQb2ludCBQREZQ
bHVnaW46OmNvbnZlcnRGcm9tUm9vdFZpZXdUb1BERlZpZXcoY29uc3QgSW50UG9pbnQmIHBvaW50
KSBjb25zdAogewogICAgIEludFBvaW50IHBvaW50SW5QbHVnaW5Db29yZGluYXRlcyA9IG1fcm9v
dFZpZXdUb1BsdWdpblRyYW5zZm9ybS5tYXBQb2ludChwb2ludCk7CkBAIC0xOTU1LDYgKzE5ODQs
MTggQEAgSW50UmVjdCBQREZQbHVnaW46OmJvdW5kc09uU2NyZWVuKCkgY29ucwogICAgIHJldHVy
biBmcmFtZVZpZXctPmNvbnRlbnRzVG9TY3JlZW4oZW5jbG9zaW5nSW50UmVjdChyZWN0SW5Sb290
Vmlld0Nvb3JkaW5hdGVzKSk7CiB9CiAKK3ZvaWQgUERGUGx1Z2luOjp2aXNpYmlsaXR5RGlkQ2hh
bmdlKGJvb2wgdmlzaWJsZSkKK3sKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAg
IGlmICh2aXNpYmxlKQorICAgICAgICBtX2ZyYW1lLnBhZ2UoKS0+Y3JlYXRlUERGSFVEKCp0aGlz
LCBmcmFtZUZvckhVRCgpKTsKKyAgICBlbHNlCisgICAgICAgIG1fZnJhbWUucGFnZSgpLT5yZW1v
dmVQREZIVUQoKnRoaXMpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odmlzaWJsZSk7CisjZW5k
aWYKK30KKwogdm9pZCBQREZQbHVnaW46Omdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IEludFNpemUm
IHBsdWdpblNpemUsIGNvbnN0IEludFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBsdWdp
blRvUm9vdFZpZXdUcmFuc2Zvcm0pCiB7CiAgICAgaWYgKHNpemUoKSA9PSBwbHVnaW5TaXplICYm
IHBsdWdpblZpZXcoKS0+cGFnZVNjYWxlRmFjdG9yKCkgPT0gW21fcGRmTGF5ZXJDb250cm9sbGVy
IGNvbnRlbnRTY2FsZUZhY3Rvcl0pCkBAIC0yNDAwLDYgKzI0NDEsMzEgQEAgYm9vbCBQREZQbHVn
aW46OnBsdWdpbkhhbmRsZXNDb250ZW50T2ZmcwogICAgIHJldHVybiB0cnVlOwogfQogCisjaWYg
RU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKwordm9pZCBQREZQbHVnaW46Onpvb21JbigpCit7
CisgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHpvb21JbjpuaWxdOworfQorCit2b2lkIFBERlBs
dWdpbjo6em9vbU91dCgpCit7CisgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHpvb21PdXQ6bmls
XTsKK30KKwordm9pZCBQREZQbHVnaW46OnNhdmUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25z
dCBTdHJpbmcmLCBjb25zdCBVUkwmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKK3sKKyAgICBOU0RhdGEgKmRhdGEgPSBsaXZlRGF0YSgpOworICAgIGNv
bXBsZXRpb25IYW5kbGVyKG1fc3VnZ2VzdGVkRmlsZW5hbWUsIG1fZnJhbWUudXJsKCksIElQQzo6
IERhdGFSZWZlcmVuY2Uoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuYnl0ZXMpLCBk
YXRhLmxlbmd0aCkpOworfQorCit2b2lkIFBERlBsdWdpbjo6b3BlbldpdGhQcmV2aWV3KENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJiwgRnJhbWVJbmZvRGF0YSYmLCBjb25zdCBJ
UEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
K3sKKyAgICBOU0RhdGEgKmRhdGEgPSBsaXZlRGF0YSgpOworICAgIGNvbXBsZXRpb25IYW5kbGVy
KG1fc3VnZ2VzdGVkRmlsZW5hbWUsIG1fZnJhbWUuaW5mbygpLCBJUEM6OiBEYXRhUmVmZXJlbmNl
IHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxlbmd0aCB9
LCBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCkpOworfQorCisjZWxzZSAvLyBFTkFCTEUoVUlf
UFJPQ0VTU19QREZfSFVEKQogICAgIAogdm9pZCBQREZQbHVnaW46OnNhdmVUb1BERigpCiB7CkBA
IC0yNDMyLDYgKzI0OTgsOCBAQCB2b2lkIFBERlBsdWdpbjo6b3BlbldpdGhOYXRpdmVBcHBsaWNh
dGlvCiAgICAgbV9mcmFtZS5wYWdlKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6T3Bl
blBERkZyb21UZW1wb3JhcnlGb2xkZXJXaXRoTmF0aXZlQXBwbGljYXRpb24obV9mcmFtZS5pbmZv
KCksIG1fdGVtcG9yYXJ5UERGVVVJRCkpOwogfQogCisjZW5kaWYgLy8gRU5BQkxFKFVJX1BST0NF
U1NfUERGX0hVRCkKKwogdm9pZCBQREZQbHVnaW46OndyaXRlSXRlbXNUb1Bhc3RlYm9hcmQoTlNT
dHJpbmcgKnBhc3RlYm9hcmROYW1lLCBOU0FycmF5ICppdGVtcywgTlNBcnJheSAqdHlwZXMpCiB7
CiAgICAgYXV0byBwYXN0ZWJvYXJkVHlwZXMgPSBtYWtlVmVjdG9yPFN0cmluZz4odHlwZXMpOwpJ
bmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJl
dmlzaW9uIDI2NjExMCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTIzLDEyICs1MTIzLDEyIEBAIHZvaWQgV2ViUGFn
ZTo6ZGlkRmluaXNoUHJpbnRPcGVyYXRpb24oY28KIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKFBE
RktJVF9QTFVHSU4pICYmICFFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQogdm9pZCBXZWJQYWdl
OjpzYXZlUERGVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRG
aWxlbmFtZSwgY29uc3QgVVJMJiBvcmlnaW5hdGluZ1VSTCwgY29uc3QgdWludDhfdCogZGF0YSwg
dW5zaWduZWQgbG9uZyBzaXplKQogewogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
U2F2ZVBERlRvRmlsZUluRG93bmxvYWRzRm9sZGVyKHN1Z2dlc3RlZEZpbGVuYW1lLCBvcmlnaW5h
dGluZ1VSTCwgSVBDOjpEYXRhUmVmZXJlbmNlKGRhdGEsIHNpemUpKSk7CiB9CiAKLSNpZiBQTEFU
Rk9STShDT0NPQSkKIHZvaWQgV2ViUGFnZTo6c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3Bl
bldpdGhOYXRpdmVBcHBsaWNhdGlvbihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBG
cmFtZUluZm9EYXRhJiYgZnJhbWVJbmZvLCBjb25zdCB1aW50OF90KiBkYXRhLCB1bnNpZ25lZCBs
b25nIHNpemUsIGNvbnN0IFN0cmluZyYgcGRmVVVJRCkKIHsKICAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBw
bGljYXRpb24oc3VnZ2VzdGVkRmlsZW5hbWUsIGZyYW1lSW5mbywgSVBDOjpEYXRhUmVmZXJlbmNl
KGRhdGEsIHNpemUpLCBwZGZVVUlEKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZpc2lvbiAyNjYxMTApCisrKyBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcg
QEAKICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVy
LmgiCiAjaW5jbHVkZSAiT3B0aW9uYWxDYWxsYmFja0lELmgiCisjaW5jbHVkZSAiUERGUGx1Z2lu
SWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlBsdWdpbi5oIgogI2luY2x1ZGUgIlBvbGljeURlY2lz
aW9uLmgiCiAjaW5jbHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgpAQCAtMzQ1LDYgKzM0NiwxNiBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGNlbnRlclNlbGVjdGlvbkluVmlzaWJsZUFyZWEoKTsKIAor
I2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgdm9pZCBjcmVhdGVQREZIVUQoUERG
UGx1Z2luJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgdXBkYXRlUERGSFVE
TG9jYXRpb24oUERGUGx1Z2luJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQg
cmVtb3ZlUERGSFVEKFBERlBsdWdpbiYpOworICAgIHZvaWQgem9vbVBERkluKFBERlBsdWdpbklk
ZW50aWZpZXIpOworICAgIHZvaWQgem9vbVBERk91dChQREZQbHVnaW5JZGVudGlmaWVyKTsKKyAg
ICB2b2lkIHNhdmVQREYoUERGUGx1Z2luSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChjb25zdCBTdHJpbmcmLCBjb25zdCBVUkwmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKT4m
Jik7CisgICAgdm9pZCBvcGVuUERGV2l0aFByZXZpZXcoUERGUGx1Z2luSWRlbnRpZmllciwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmLCBGcmFtZUluZm9EYXRhJiYsIGNvbnN0
IElQQzo6RGF0YVJlZmVyZW5jZSYsIGNvbnN0IFN0cmluZyYpPiYmKTsKKyNlbmRpZgorCiAjaWYg
UExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCB3aWxsQ29tbWl0TGF5ZXJUcmVlKFJlbW90ZUxheWVy
VHJlZVRyYW5zYWN0aW9uJik7CiAgICAgdm9pZCBkaWRGbHVzaExheWVyVHJlZUF0VGltZShNb25v
dG9uaWNUaW1lKTsKQEAgLTEwNzQsOSArMTA4NSw4IEBAIHB1YmxpYzoKICAgICBOU0RpY3Rpb25h
cnkgKmRhdGFEZXRlY3Rpb25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhRGV0ZWN0aW9u
Q29udGV4dC5nZXQoKTsgfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikgJiYg
IUVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCiAgICAgdm9pZCBzYXZlUERGVG9GaWxlSW5Eb3du
bG9hZHNGb2xkZXIoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgY29uc3QgVVJMJiBv
cmlnaW5hdGluZ1VSTCwgY29uc3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKTsK
LQotI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgc2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVy
QW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVu
YW1lLCBGcmFtZUluZm9EYXRhJiYsIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxvbmcg
c2l6ZSwgY29uc3QgU3RyaW5nJiBwZGZVVUlEKTsKICNlbmRpZgogCkBAIC0xNzkxLDYgKzE4MDEs
MTAgQEAgcHJpdmF0ZToKIAogICAgIFdlYkNvcmU6OkNvbG9yIG1fdW5kZXJsYXlDb2xvcjsKIAor
I2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgSGFzaE1hcDxQREZQbHVnaW5JZGVu
dGlmaWVyLCBXZWFrUHRyPFBERlBsdWdpbj4+IG1fcGRmUGx1Z0luc1dpdGhIVUQ7CisjZW5kaWYK
KwogICAgIGJvb2wgbV9pc0luUmVkbyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzQ2xvc2VkIHsg
ZmFsc2UgfTsKICAgICBib29sIG1fdGFiVG9MaW5rcyB7IGZhbHNlIH07CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4J
KHJldmlzaW9uIDI2NjExMCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTU3Niw2ICs1NzYsMTMgQEAgR2Vu
ZXJhdGVTeW50aGV0aWNFZGl0aW5nQ29tbWFuZChlbnVtOnVpbgogCiAgICAgU2V0RGVmZXJzTG9h
ZGluZyhib29sIGRlZmVyc0xvYWRpbmcpCiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVE
KQorICAgIFpvb21QREZJbihXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikK
KyAgICBab29tUERGT3V0KFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQor
ICAgIFNhdmVQREYoV2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpIC0+IChT
dHJpbmcgZmlsZW5hbWUsIFVSTCB1cmwsIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhKSBBc3luYwor
ICAgIE9wZW5QREZXaXRoUHJldmlldyhXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRp
ZmllcikgLT4gKFN0cmluZyBmaWxlbmFtZSwgc3RydWN0IFdlYktpdDo6RnJhbWVJbmZvRGF0YSBm
cmFtZUluZm8sIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhLCBTdHJpbmcgdXVpZCkgQXN5bmMKKyNl
bmRpZgorCiAgICAgVXBkYXRlQ3VycmVudE1vZGlmaWVyU3RhdGUoT3B0aW9uU2V0PFdlYkNvcmU6
OlBsYXRmb3JtRXZlbnQ6Ok1vZGlmaWVyPiBtb2RpZmllcnMpCiAgICAgU2ltdWxhdGVEZXZpY2VP
cmllbnRhdGlvbkNoYW5nZShkb3VibGUgYWxwaGEsIGRvdWJsZSBiZXRhLCBkb3VibGUgZ2FtbWEp
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9X
ZWJQYWdlTWFjLm1tCShyZXZpc2lvbiAyNjYxMTApCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMs
NyBAQAogI2ltcG9ydCAiRWRpdGluZ1JhbmdlLmgiCiAjaW1wb3J0ICJFZGl0b3JTdGF0ZS5oIgog
I2ltcG9ydCAiRm9udEluZm8uaCIKKyNpbXBvcnQgIkZyYW1lSW5mb0RhdGEuaCIKICNpbXBvcnQg
IkluamVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdC5oIgogI2ltcG9ydCAiUERGS2l0SW1wb3J0cy5o
IgogI2ltcG9ydCAiUERGUGx1Z2luLmgiCkBAIC0xMDUxLDcgKzEwNTIsNjIgQEAgdm9pZCBXZWJQ
YWdlOjpzZXRBY2NlbnRDb2xvcihXZWJDb3JlOjpDbwogICAgIFtOU0FwcCBfc2V0QWNjZW50Q29s
b3I6Y29sb3IuaXNWYWxpZCgpID8gV2ViQ29yZTo6bnNDb2xvcihjb2xvcikgOiBuaWxdOwogfQog
Ci0jZW5kaWYKKyNlbmRpZiAvLyBIQVZFKEFQUF9BQ0NFTlRfQ09MT1JTKQorCisjaWYgRU5BQkxF
KFVJX1BST0NFU1NfUERGX0hVRCkKKwordm9pZCBXZWJQYWdlOjp6b29tUERGSW4oUERGUGx1Z2lu
SWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIGF1dG8gcGRmUGx1Z2luID0gbV9wZGZQbHVn
SW5zV2l0aEhVRC5nZXQoaWRlbnRpZmllcik7CisgICAgaWYgKCFwZGZQbHVnaW4pCisgICAgICAg
IHJldHVybjsKKyAgICBwZGZQbHVnaW4tPnpvb21JbigpOworfQorCit2b2lkIFdlYlBhZ2U6Onpv
b21QREZPdXQoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIGF1dG8gcGRm
UGx1Z2luID0gbV9wZGZQbHVnSW5zV2l0aEhVRC5nZXQoaWRlbnRpZmllcik7CisgICAgaWYgKCFw
ZGZQbHVnaW4pCisgICAgICAgIHJldHVybjsKKyAgICBwZGZQbHVnaW4tPnpvb21PdXQoKTsKK30K
Kwordm9pZCBXZWJQYWdlOjpzYXZlUERGKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmLCBjb25zdCBVUkwmLCBjb25zdCBJ
UEM6OkRhdGFSZWZlcmVuY2UmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBhdXRvIHBk
ZlBsdWdpbiA9IG1fcGRmUGx1Z0luc1dpdGhIVUQuZ2V0KGlkZW50aWZpZXIpOworICAgIGlmICgh
cGRmUGx1Z2luKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9LCB7IH0sIHsg
fSk7CisgICAgcGRmUGx1Z2luLT5zYXZlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30K
Kwordm9pZCBXZWJQYWdlOjpvcGVuUERGV2l0aFByZXZpZXcoUERGUGx1Z2luSWRlbnRpZmllciBp
ZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYsIEZyYW1lSW5m
b0RhdGEmJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwgY29uc3QgU3RyaW5nJik+JiYgY29t
cGxldGlvbkhhbmRsZXIpCit7CisgICAgYXV0byBwZGZQbHVnaW4gPSBtX3BkZlBsdWdJbnNXaXRo
SFVELmdldChpZGVudGlmaWVyKTsKKyAgICBpZiAoIXBkZlBsdWdpbikKKyAgICAgICAgcmV0dXJu
IGNvbXBsZXRpb25IYW5kbGVyKHsgfSwgeyB9LCB7IH0sIHsgfSk7CisgICAgcGRmUGx1Z2luLT5v
cGVuV2l0aFByZXZpZXcoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIFdl
YlBhZ2U6OmNyZWF0ZVBERkhVRChQREZQbHVnaW4mIHBsdWdpbiwgY29uc3QgSW50UmVjdCYgYm91
bmRpbmdCb3gpCit7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX3BkZlBsdWdJbnNXaXRoSFVELmFk
ZChwbHVnaW4uaWRlbnRpZmllcigpLCBtYWtlV2Vha1B0cihwbHVnaW4pKTsKKyAgICBpZiAoYWRk
UmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
Q3JlYXRlUERGSFVEKHBsdWdpbi5pZGVudGlmaWVyKCksIGJvdW5kaW5nQm94KSk7Cit9CisKK3Zv
aWQgV2ViUGFnZTo6dXBkYXRlUERGSFVETG9jYXRpb24oUERGUGx1Z2luJiBwbHVnaW4sIGNvbnN0
IEludFJlY3QmIGJvdW5kaW5nQm94KQoreworICAgIGlmIChtX3BkZlBsdWdJbnNXaXRoSFVELmNv
bnRhaW5zKHBsdWdpbi5pZGVudGlmaWVyKCkpKQorICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OlVwZGF0ZVBERkhVRExvY2F0aW9uKHBsdWdpbi5pZGVudGlmaWVyKCksIGJvdW5k
aW5nQm94KSk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6cmVtb3ZlUERGSFVEKFBERlBsdWdpbiYgcGx1
Z2luKQoreworICAgIGlmIChtX3BkZlBsdWdJbnNXaXRoSFVELnJlbW92ZShwbHVnaW4uaWRlbnRp
ZmllcigpKSkKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSZW1vdmVQREZI
VUQocGx1Z2luLmlkZW50aWZpZXIoKSkpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKFVJX1BST0NF
U1NfUERGX0hVRCkKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407255</attachid>
            <date>2020-08-25 18:37:14 -0700</date>
            <delta_ts>2020-08-25 19:38:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215780-20200825183713.patch</filename>
            <type>text/plain</type>
            <size>79969</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjYxNTQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA4LTI1ICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBQREYgaGVhZHMtdXAgZGlz
cGxheSB0byBVSSBwcm9jZXNzIG9uIG1hY09TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU3ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU4NzE1
ODQ3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
d3RmL1BsYXRmb3JtSGF2ZS5oOgorCiAyMDIwLTA4LTI1ICBQZXIgQXJuZSBWb2xsYW4gIDxwdm9s
bGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luXSBBc3NlcnQgZmFpbHVyZSB1bmRlciBSdW5M
b29wOjpSdW5Mb29wCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZUNvY29hLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGVDb2NvYS5oCShyZXZp
c2lvbiAyNjYxNTQpCisrKyBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZUNvY29hLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIyOCw2ICsyMjgsMTAgQEAKICNkZWZpbmUgRU5BQkxFX0dQVV9EUklW
RVJfUFJFV0FSTUlORyAxCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1Nf
WF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAwMDAKKyNkZWZpbmUgRU5BQkxFX1VJX1BST0NF
U1NfUERGX0hVRCAxCisjZW5kaWYKKwogI2lmICFkZWZpbmVkKEVOQUJMRV9JTkRFWEVEX0RBVEFC
QVNFKQogI2RlZmluZSBFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSAxCiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9OU0ltYWdlU1BJLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL05TSW1hZ2VTUEkuaAkocmV2aXNpb24gMjY2
MTU0KQorKysgU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL05TSW1hZ2VTUEkuaAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNiArMzYsOCBAQAogTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KIAog
QGludGVyZmFjZSBOU0ltYWdlICgpCisrIChpbnN0YW5jZXR5cGUpaW1hZ2VXaXRoSW1hZ2VSZXA6
KE5TSW1hZ2VSZXAgKilpbWFnZVJlcDsKKy0gKGluc3RhbmNldHlwZSlfaW1hZ2VXaXRoQ29uZmln
dXJhdGlvbjooTlNEaWN0aW9uYXJ5ICopY29uZmlndXJhdGlvbjsKIC0gKHZvaWQpbG9ja0ZvY3Vz
V2l0aFJlY3Q6KE5TUmVjdClyZWN0IGNvbnRleHQ6KG51bGxhYmxlIE5TR3JhcGhpY3NDb250ZXh0
ICopY29udGV4dCBoaW50czoobnVsbGFibGUgTlNEaWN0aW9uYXJ5ICopaGludHMgZmxpcHBlZDoo
Qk9PTClmbGlwcGVkOwogQGVuZAogCkBAIC00Myw2ICs0NSwxMyBAQCBAaW50ZXJmYWNlIE5TSW1h
Z2UgKE5TU3lzdGVtU3ltYm9scykKICsgKG51bGxhYmxlIE5TSW1hZ2UgKilfaW1hZ2VXaXRoU3lz
dGVtU3ltYm9sTmFtZTooTlNTdHJpbmcgKikgc3ltYm9sTmFtZTsKIEBlbmQKIAorV1RGX0VYVEVS
Tl9DX0JFR0lOCisKK2V4dGVybiBjb25zdCBOU1N0cmluZyAqTlNJbWFnZUFsdGVybmF0ZUNyaXRl
cmlvbkZvbnQ7CitleHRlcm4gY29uc3QgTlNTdHJpbmcgKk5TSW1hZ2VBbHRlcm5hdGVDcml0ZXJp
b25TeW1ib2xTY2FsZTsKKworV1RGX0VYVEVSTl9DX0VORAorCiBOU19BU1NVTUVfTk9OTlVMTF9F
TkQKIAogI2VuZGlmCkBAIC01Niw2ICs2NSw2IEBAIGV4dGVybiBjb25zdCBOU0ltYWdlSGludEtl
eSBOU0ltYWdlSGludFMKIAogTlNfQVNTVU1FX05PTk5VTExfRU5ECiAKLSNlbmRpZgorI2VuZGlm
IC8vIEhBVkUoQUxURVJOQVRFX0lDT05TKQogCi0jZW5kaWYKKyNlbmRpZiAvLyBVU0UoQVBQTEVf
SU5URVJOQUxfU0RLKQpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NjE1NCkKKysrIFNvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTYgQEAKKzIwMjAtMDgt
MjUgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAg
ICBNb3ZlIFBERiBoZWFkcy11cCBkaXNwbGF5IHRvIFVJIHByb2Nlc3Mgb24gbWFjT1MKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTc4MAorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vNTg3MTU4NDc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBoYXMgbWFueSBiZW5lZml0cyBpbmNsdWRpbmcgdGhl
IG9uZSBpbiB0aGUgcmFkYXIsIHRlc3RhYmlsaXR5LCBhbmQgbW92aW5nIFdlYktpdC1zcGVjaWZp
YyBjb2RlIGZyb20gUERGS2l0IHRvIFdlYktpdC4KKworICAgICAgICBOb3cgdGhhdCB0aGUgSFVE
IGlzIGRpc3BsYXllZCBpbiB0aGUgVUkgcHJvY2VzcyBpbnN0ZWFkIG9mIGluIHRoZSB3ZWIgY29u
dGVudCwgem9vbWluZyBpbiBrZWVwcyB0aGUgSFVEIHRoZSBzYW1lIHNpemUuCisgICAgICAgIEEg
M2QtdHJhbnNmb3JtZWQgaWZyYW1lIHdpdGggYSBQREYgaW4gaXQgbm93IHNob3dzIHRoZSBIVUQg
aW4gdGhlIHBsYWNlIHlvdSBjYW4gY2xpY2sgb24gaXQsIGluc3RlYWQgb2YgaW4gdGhlIHRyYW5z
Zm9ybWVkIFBERi4KKyAgICAgICAgQWxzbywgbW92aW5nIHRoZSBtb3VzZSB0byB0aGUgSFVEIHdp
dGhpbiB0aGUgZmlyc3QgMyBzZWNvbmRzIHByZXZlbnRzIGl0IGZyb20gaGlkaW5nLCB3aGljaCBp
dCBkb2VzIHdoZW4gdGhlIG1vdXNlIGxlYXZlcyB0aGUgSFVELgorICAgICAgICBUaGUgcmVzdCBv
ZiB0aGUgYmVoYXZpb3IgSSB0aGluayBzaG91bGQgYmUgdGhlIHNhbWUuICBNb3N0IHVzZXJzIHNo
b3VsZCBub3Qgbm90aWNlIGFueSBkaWZmZXJlbmNlLgorCisgICAgICAgIEZ1bmN0aW9uYWxpdHkg
Y292ZXJlZCBieSBBUEkgdGVzdHMsIHRoZSBmaXJzdCB0ZXN0cyBmb3IgUERGIGNvbnRlbnQgaW50
ZXJhY3Rpb24hCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmg6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tOgorICAgICAgICAoLVtXS1ZpZXcgX2NyZWF0ZVBE
RkhVRDpyZWN0Ol0pOgorICAgICAgICAoLVtXS1ZpZXcgX3BkZkhVRDpjaGFuZ2VkTG9jYXRpb246
XSk6CisgICAgICAgICgtW1dLVmlldyBfcmVtb3ZlUERGSFVEOl0pOgorICAgICAgICAoLVtXS1Zp
ZXcgX3JlbW92ZUFsbFBERkhVRHNdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1dl
YlZpZXdNYWMubW06CisgICAgICAgICgtW1dLV2ViVmlldyBtb3VzZU1vdmVkOl0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgbW91c2VEb3duOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgbW91c2VV
cDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jcmVhdGVQREZIVUQ6cmVjdDpdKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9wZGZIVUQ6Y2hhbmdlZExvY2F0aW9uOl0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgX3JlbW92ZVBERkhVRDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZW1vdmVB
bGxQREZIVURzXSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3UHJpdmF0
ZUZvclRlc3RpbmdNYWMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdU
ZXN0aW5nTWFjLm1tOgorICAgICAgICAoLVtXS1dlYlZpZXcgcGRmSFVEc10pOgorICAgICAgICAq
IFVJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2Nv
YS9XZWJWaWV3SW1wbC5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNyZWF0ZVBE
RkhVRCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVQREZIVURMb2NhdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZW1vdmVQREZIVUQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cmVtb3ZlQWxsUERGSFVEcyk6CisgICAgICAgICogVUlQ
cm9jZXNzL1BhZ2VDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnByb2Nlc3NEaWRUZXJtaW5hdGUpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViUGFn
ZVByb3h5SU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNhdmVQREZUb1Rl
bXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24pOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6Om9wZW5QREZGcm9tVGVtcG9yYXJ5Rm9sZGVyV2l0
aE5hdGl2ZUFwcGxpY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1Bh
Z2VDbGllbnRJbXBsTWFjLmg6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1w
bE1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNyZWF0ZVBERkhVRCk6
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp1cGRhdGVQREZIVURMb2NhdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpyZW1vdmVQREZIVUQpOgorICAgICAg
ICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6cmVtb3ZlQWxsUERGSFVEcyk6CisgICAgICAgICog
VUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNh
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y3JlYXRlUERGSFVEKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZW1vdmVQREZIVUQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnVwZGF0ZVBERkhVRExvY2F0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpwZGZab29tSW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OnBkZlpvb21PdXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBkZlNhdmVU
b1BERik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGRmT3BlbldpdGhQcmV2aWV3
KToKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERkxheWVyQ29udHJvbGxlclNQSS5oOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmg6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW06CisgICAgICAgICgtW1dLUERGTGF5ZXJDb250
cm9sbGVyRGVsZWdhdGUgb3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbl0pOgorICAgICAgICAoLVtX
S1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlIHNhdmVUb1BERl0pOgorICAgICAgICAoV2ViS2l0
OjpQREZQbHVnaW46OlBERlBsdWdpbik6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6flBE
RlBsdWdpbik6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6ZnJhbWVGb3JIVUQgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmNhbGN1bGF0ZVNpemVzKToKKyAgICAgICAg
KFdlYktpdDo6UERGUGx1Z2luOjpjb252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3IGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjp2aXNpYmlsaXR5RGlkQ2hhbmdlKToKKyAgICAg
ICAgKFdlYktpdDo6UERGUGx1Z2luOjp6b29tSW4pOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVn
aW46Onpvb21PdXQpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnNhdmUpOgorICAgICAg
ICAoV2ViS2l0OjpQREZQbHVnaW46Om9wZW5XaXRoUHJldmlldyk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMu
aW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlOjp6b29tUERGSW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjp6b29tUERGT3V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2F2ZVBERik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6Om9wZW5QREZXaXRoUHJldmlldyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6OmNyZWF0ZVBERkhVRCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6
OnVwZGF0ZVBERkhVRExvY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVtb3Zl
UERGSFVEKToKKwogMjAyMC0wOC0yNSAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxl
LmNvbT4KIAogICAgICAgICBXZWIgU2hhcmUgQVBJIGNhbiBzaGFyZSBub24tSFRUUChTKSBVUkxz
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkJKHJldmlzaW9u
IDI2NjE1NCkKKysrIFNvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkJKHdv
cmtpbmcgY29weSkKQEAgLTI0Myw2ICsyNDMsNyBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVf
Zm9yd2FyZF9kZWNsYXJlCiAgICAgICAgICdXZWJLaXQ6Ok1ETlNSZWdpc3RlcklkZW50aWZpZXIn
LAogICAgICAgICAnV2ViS2l0OjpNZWRpYVBsYXllclByaXZhdGVSZW1vdGVJZGVudGlmaWVyJywK
ICAgICAgICAgJ1dlYktpdDo6TWVkaWFSZWNvcmRlcklkZW50aWZpZXInLAorICAgICAgICAnV2Vi
S2l0OjpQREZQbHVnaW5JZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6UGxheWJhY2tTZXNz
aW9uQ29udGV4dElkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpQbHVnaW5Qcm9jZXNzVHlw
ZScsCiAgICAgICAgICdXZWJLaXQ6OlJlbW90ZUF1ZGlvRGVzdGluYXRpb25JZGVudGlmaWVyJywK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHJldmlzaW9uIDI2NjE1NCkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJMYXllclRyZWVDb250
ZXh0LmgiCisjaW5jbHVkZSAiUERGUGx1Z2luSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlNhbWVE
b2N1bWVudE5hdmlnYXRpb25UeXBlLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAj
aW5jbHVkZSAiV2ViQ29sb3JQaWNrZXIuaCIKQEAgLTI0Miw2ICsyNDMsMTMgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkRm9yTWFpbkZyYW1lKCkgeyB9
OwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIGJvb2wgdXNlQ3VzdG9tQ29udGVudFByb3ZpZGVyKSA9IDA7CiAKKyNpZiBF
TkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVQREZIVUQo
UERGUGx1Z2luSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlUERGSFVETG9jYXRpb24oUERGUGx1Z2luSWRlbnRpZmllciwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlUERGSFVE
KFBERlBsdWdpbklkZW50aWZpZXIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQWxsUERG
SFVEcygpID0gMDsKKyNlbmRpZgorICAgIAogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVEb3dubG9h
ZFJlcXVlc3QoRG93bmxvYWRQcm94eSYpID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVS
dW5PcGVuUGFuZWwoV2ViUGFnZVByb3h5KiwgV2ViRnJhbWVQcm94eSosIGNvbnN0IEZyYW1lSW5m
b0RhdGEmLCBBUEk6Ok9wZW5QYW5lbFBhcmFtZXRlcnMqLCBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0
ZW5lclByb3h5KikgeyByZXR1cm4gZmFsc2U7IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gMjY2MTU0KQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc3MiwxNSArNDc3
MiwxNCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lCiAgICAgICAg
ICAgICBtX3BsdWdpblNjYWxlRmFjdG9yID0gMTsKICAgICAgICAgICAgIG1fbWFpbkZyYW1lUGx1
Z2luSGFuZGxlc1BhZ2VTY2FsZUdlc3R1cmUgPSBmYWxzZTsKICAgICAgICAgfQotICAgIH0KLQog
I2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCi0gICAgaWYgKGZyYW1lLT5pc01haW5GcmFtZSgpKQog
ICAgICAgICByZXF1ZXN0UG9pbnRlclVubG9jaygpOwogI2VuZGlmCi0KLSAgICBpZiAoZnJhbWUt
PmlzTWFpbkZyYW1lKCkpCiAgICAgICAgIHBhZ2VDbGllbnQoKS5zZXRNb3VzZUV2ZW50UG9saWN5
KG1vdXNlRXZlbnRQb2xpY3kpOworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAg
ICAgIHBhZ2VDbGllbnQoKS5yZW1vdmVBbGxQREZIVURzKCk7CisjZW5kaWYKKyAgICB9CiAKICAg
ICBtX3BhZ2VMb2FkU3RhdGUuY29tbWl0Q2hhbmdlcygpOwogICAgIGlmIChtX2xvYWRlckNsaWVu
dCkKQEAgLTc0NTIsNiArNzQ1MSw5IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpwcm9jZXNzRGlkVGVy
bWluYXRlKFAKIAogICAgIHJlc2V0U3RhdGVBZnRlclByb2Nlc3NFeGl0ZWQocmVhc29uKTsKICAg
ICBzdG9wQWxsVVJMU2NoZW1lVGFza3MobV9wcm9jZXNzLnB0cigpKTsKKyNpZiBFTkFCTEUoVUlf
UFJPQ0VTU19QREZfSFVEKQorICAgIHBhZ2VDbGllbnQoKS5yZW1vdmVBbGxQREZIVURzKCk7Cisj
ZW5kaWYKIAogICAgIC8vIEZvciBicmluZ3VwIG9mIHByb2Nlc3Mgc3dhcHBpbmcsIE5hdmlnYXRp
b25Td2FwIHRlcm1pbmF0aW9uIHdpbGwgbm90IGdvIG91dCB0byBjbGllbnRzLgogICAgIC8vIElm
IGl0IGRvZXMgKmR1cmluZyogcHJvY2VzcyBzd2FwcGluZywgYW5kIHRoZSBjbGllbnQgdHJpZ2dl
cnMgYSByZWxvYWQsIHRoYXQgY2F1c2VzIGJpemFycmUgV2ViS2l0IHJlLWVudHJ5LgpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDI2NjE1NCkKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgogI2luY2x1ZGUg
Ik1lc3NhZ2VTZW5kZXIuaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXJQcm94eS5oIgorI2luY2x1ZGUgIlBERlBsdWdpbklkZW50aWZpZXIuaCIKICNpbmNs
dWRlICJQYWdlTG9hZFN0YXRlLmgiCiAjaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMu
aCIKICNpbmNsdWRlICJQb2xpY3lEZWNpc2lvbi5oIgpAQCAtMTMxMSwxMCArMTMxMiwxMiBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIHNhdmVEYXRhVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIoU3RyaW5n
JiYgc3VnZ2VzdGVkRmlsZW5hbWUsIFN0cmluZyYmIG1pbWVUeXBlLCBVUkwmJiBvcmlnaW5hdGlu
Z1VSTCwgQVBJOjpEYXRhJik7CiAgICAgdm9pZCBzYXZlUERGVG9GaWxlSW5Eb3dubG9hZHNGb2xk
ZXIoU3RyaW5nJiYgc3VnZ2VzdGVkRmlsZW5hbWUsIFVSTCYmIG9yaWdpbmF0aW5nVVJMLCBjb25z
dCBJUEM6OkRhdGFSZWZlcmVuY2UmKTsKLSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBFTkFCTEUo
UERGS0lUX1BMVUdJTikKICAgICB2b2lkIHNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5X
aXRoTmF0aXZlQXBwbGljYXRpb24oY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgRnJh
bWVJbmZvRGF0YSYmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmIHBk
ZlVVSUQpOworI2lmICFFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQogICAgIHZvaWQgb3BlblBE
RkZyb21UZW1wb3JhcnlGb2xkZXJXaXRoTmF0aXZlQXBwbGljYXRpb24oRnJhbWVJbmZvRGF0YSYm
LCBjb25zdCBTdHJpbmcmIHBkZlVVSUQpOwogI2VuZGlmCisjZW5kaWYKIAogI2lmIEVOQUJMRShQ
REZLSVRfUExVR0lOKQogICAgIHZvaWQgc2hvd1BERkNvbnRleHRNZW51KGNvbnN0IFdlYktpdDo6
UERGQ29udGV4dE1lbnUmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPGludDMyX3Q+
JiYpPiYmKTsKQEAgLTE4MDYsNiArMTgwOSwxNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBjYW5Vc2VD
cmVkZW50aWFsU3RvcmFnZSgpIHsgcmV0dXJuIG1fY2FuVXNlQ3JlZGVudGlhbFN0b3JhZ2U7IH0K
ICAgICB2b2lkIHNldENhblVzZUNyZWRlbnRpYWxTdG9yYWdlKGJvb2wpOwogCisjaWYgRU5BQkxF
KFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICB2b2lkIGNyZWF0ZVBERkhVRChQREZQbHVnaW5JZGVu
dGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCB1cGRhdGVQREZIVURM
b2NhdGlvbihQREZQbHVnaW5JZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Cisg
ICAgdm9pZCByZW1vdmVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllcik7CisgICAgdm9pZCBwZGZa
b29tSW4oUERGUGx1Z2luSWRlbnRpZmllcik7CisgICAgdm9pZCBwZGZab29tT3V0KFBERlBsdWdp
bklkZW50aWZpZXIpOworICAgIHZvaWQgcGRmU2F2ZVRvUERGKFBERlBsdWdpbklkZW50aWZpZXIp
OworICAgIHZvaWQgcGRmT3BlbldpdGhQcmV2aWV3KFBERlBsdWdpbklkZW50aWZpZXIpOworI2Vu
ZGlmCisKIHByaXZhdGU6CiAgICAgV2ViUGFnZVByb3h5KFBhZ2VDbGllbnQmLCBXZWJQcm9jZXNz
UHJveHkmLCBSZWY8QVBJOjpQYWdlQ29uZmlndXJhdGlvbj4mJik7CiAgICAgdm9pZCBwbGF0Zm9y
bUluaXRpYWxpemUoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDI2NjE1NCkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNDMz
LDkgKzQzMyw4IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgU2F2ZVJlY2VudFNl
YXJjaGVzKFN0cmluZyBuYW1lLCBWZWN0b3I8V2ViQ29yZTo6UmVjZW50U2VhcmNoPiBzZWFyY2hJ
dGVtcykKICAgICBMb2FkUmVjZW50U2VhcmNoZXMoU3RyaW5nIG5hbWUpIC0+IChWZWN0b3I8V2Vi
Q29yZTo6UmVjZW50U2VhcmNoPiByZXN1bHQpIFN5bmNocm9ub3VzCiAKKyNpZiBFTkFCTEUoUERG
S0lUX1BMVUdJTikgJiYgIUVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCiAgICAgU2F2ZVBERlRv
RmlsZUluRG93bmxvYWRzRm9sZGVyKFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSwgVVJMIG9yaWdp
bmF0aW5nVVJMLCBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YSkKLQotI2lmIFBMQVRGT1JNKENPQ09B
KQogICAgIFNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRp
b24oU3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1lLCBzdHJ1Y3QgV2ViS2l0OjpGcmFtZUluZm9EYXRh
IHNvdXJjZUZyYW1lSW5mbywgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEsIFN0cmluZyBwZGZVVUlE
KQogICAgIE9wZW5QREZGcm9tVGVtcG9yYXJ5Rm9sZGVyV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKHN0
cnVjdCBXZWJLaXQ6OkZyYW1lSW5mb0RhdGEgc291cmNlRnJhbWVJbmZvLCBTdHJpbmcgcGRmVVVJ
RCkKICNlbmRpZgpAQCAtNTY2LDYgKzU2NSwxMiBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkg
ewogICAgIFNwZWVjaFN5bnRoZXNpc1Jlc3VtZSgpIC0+ICgpIEFzeW5jCiAjZW5kaWYKIAorI2lm
IEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgQ3JlYXRlUERGSFVEKFdlYktpdDo6UERG
UGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJDb3JlOjpJbnRSZWN0IGJvdW5kaW5nQm94
KQorICAgIFVwZGF0ZVBERkhVRExvY2F0aW9uKFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllciBp
ZGVudGlmaWVyLCBXZWJDb3JlOjpJbnRSZWN0IGJvdW5kaW5nQm94KQorICAgIFJlbW92ZVBERkhV
RChXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikKKyNlbmRpZgorCiAgICAg
Q29uZmlndXJlTG9nZ2luZ0NoYW5uZWwoU3RyaW5nIGNoYW5uZWxOYW1lLCBlbnVtOnVpbnQ4X3Qg
V1RGTG9nQ2hhbm5lbFN0YXRlIHN0YXRlLCBlbnVtOnVpbnQ4X3QgV1RGTG9nTGV2ZWwgbGV2ZWwp
CiAKICNpZiBQTEFURk9STShHVEspCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaAkocmV2aXNpb24gMjY2MTU0KQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIzLDExICsyMywxMSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKLSNpbXBvcnQgIldLV2ViVmlld1ByaXZhdGUuaCIKLQorI2lt
cG9ydCAiUERGUGx1Z2luSWRlbnRpZmllci5oIgogI2ltcG9ydCAiU2FtZURvY3VtZW50TmF2aWdh
dGlvblR5cGUuaCIKICNpbXBvcnQgIldLU2hhcmVTaGVldC5oIgogI2ltcG9ydCAiV0tXZWJWaWV3
Q29uZmlndXJhdGlvbi5oIgorI2ltcG9ydCAiV0tXZWJWaWV3UHJpdmF0ZS5oIgogI2ltcG9ydCAi
X1dLQXR0YWNobWVudEludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tXZWJWaWV3UHJpbnRGb3JtYXR0
ZXJJbnRlcm5hbC5oIgogI2ltcG9ydCA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CkBAIC0xMzMs
NyArMTMzLDcgQEAgY2xhc3MgVmlld0dlc3R1cmVDb250cm9sbGVyOwogICAgIC8vIE9ubHkgdXNl
ZCB3aXRoIFVJLXNpZGUgY29tcG9zaXRpbmcuCiAgICAgUmV0YWluUHRyPFdLU2Nyb2xsVmlldz4g
X3Njcm9sbFZpZXc7CiAgICAgUmV0YWluUHRyPFdLQ29udGVudFZpZXc+IF9jb250ZW50VmlldzsK
LSNlbmRpZgorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCiAgICAgUmV0YWluUHRyPFdLU2Nyb2xsVmlldz4gX3Njcm9sbFZpZXc7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nTWFj
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZp
ZXdQcml2YXRlRm9yVGVzdGluZ01hYy5oCShyZXZpc2lvbiAyNjYxNTQpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nTWFjLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgQGludGVyZmFjZSBXS1dlYlZpZXcgKFdLVGVz
dGluZ01hYykKIAogLSAodm9pZClfc2V0SGVhZGVyQmFubmVySGVpZ2h0OihpbnQpaGVpZ2h0Owog
LSAodm9pZClfc2V0Rm9vdGVyQmFubmVySGVpZ2h0OihpbnQpaGVpZ2h0OworLSAoTlNTZXQ8TlNW
aWV3ICo+ICopX3BkZkhVRHM7CiAKIEBlbmQKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL21hYy9XS1dlYlZpZXdUZXN0aW5nTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5tbQkocmV2aXNpb24g
MjY2MTU0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdUZXN0
aW5nTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiArMTAzLDE1IEBAIC0gKHZvaWQpX3Nl
dEZvb3RlckJhbm5lckhlaWdodDooaW50KWhlaWcKICAgICBfcGFnZS0+c2V0Rm9vdGVyQmFubmVy
SGVpZ2h0Rm9yVGVzdGluZyhoZWlnaHQpOwogfQogCistIChOU1NldDxOU1ZpZXcgKj4gKilfcGRm
SFVEcworeworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgcmV0dXJuIF9pbXBs
LT5wZGZIVURzKCk7CisjZWxzZQorICAgIHJldHVybiBuaWw7CisjZW5kaWYKK30KKwogLSAoTlNN
ZW51ICopX2FjdGl2ZU1lbnUKIHsKICAgICAvLyBGSVhNRTogT25seSB0aGUgRE9NIHBhc3RlIGFj
Y2VzcyBtZW51IGlzIHN1cHBvcnRlZCBmb3Igbm93LiBJbiB0aGUgZnV0dXJlLCBpdCBjb3VsZCBi
ZQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5oCShy
ZXZpc2lvbiAyNjYxNTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBQTEFURk9STShN
QUMpCiAKKyNpbmNsdWRlICJQREZQbHVnaW5JZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiUGx1Z2lu
Q29tcGxleFRleHRJbnB1dFN0YXRlLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAj
aW5jbHVkZSAiV0tMYXlvdXRNb2RlLmgiCkBAIC03Niw2ICs3NywxMCBAQCBPQkpDX0NMQVNTIFdL
VGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXI7CiBPQkpDX0NMQVNTIFdlYlBsYXliYWNrQ29udHJv
bHNNYW5hZ2VyOwogI2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFSKQogCisjaWYgRU5BQkxFKFVJX1BS
T0NFU1NfUERGX0hVRCkKK09CSkNfQ0xBU1MgV0tQREZIVURWaWV3OworI2VuZGlmCisKIG5hbWVz
cGFjZSBBUEkgewogY2xhc3MgSGl0VGVzdFJlc3VsdDsKIGNsYXNzIE9iamVjdDsKQEAgLTE5MCw2
ICsxOTUsMTQgQEAgcHVibGljOgogICAgIHZvaWQgdmlld1dpbGxTdGFydExpdmVSZXNpemUoKTsK
ICAgICB2b2lkIHZpZXdEaWRFbmRMaXZlUmVzaXplKCk7CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VT
U19QREZfSFVEKQorICAgIHZvaWQgY3JlYXRlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIHVwZGF0ZVBERkhVRExvY2F0aW9uKFBE
RlBsdWdpbklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIHJl
bW92ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHJlbW92ZUFsbFBERkhV
RHMoKTsKKyAgICBOU1NldCAqcGRmSFVEcygpOworI2VuZGlmCisKICAgICB2b2lkIHJlbmV3R1N0
YXRlKCk7CiAgICAgdm9pZCBzZXRGcmFtZVNpemUoQ0dTaXplKTsKICAgICB2b2lkIGRpc2FibGVG
cmFtZVNpemVVcGRhdGVzKCk7CkBAIC03MjksNyArNzQyLDExIEBAIHByaXZhdGU6CiAjaWYgRU5B
QkxFKEZVTExTQ1JFRU5fQVBJKQogICAgIFJldGFpblB0cjxXS0Z1bGxTY3JlZW5XaW5kb3dDb250
cm9sbGVyPiBtX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyOwogI2VuZGlmCi0gICAgCisKKyNp
ZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIEhhc2hNYXA8V2ViS2l0OjpQREZQbHVn
aW5JZGVudGlmaWVyLCBSZXRhaW5QdHI8V0tQREZIVURWaWV3Pj4gX3BkZkhVRFZpZXdzOworI2Vu
ZGlmCisKICAgICBSZXRhaW5QdHI8V0tTaGFyZVNoZWV0PiBfc2hhcmVTaGVldDsKIAogICAgIFJl
dGFpblB0cjxXS1dpbmRvd1Zpc2liaWxpdHlPYnNlcnZlcj4gbV93aW5kb3dWaXNpYmlsaXR5T2Jz
ZXJ2ZXI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1w
bC5tbQkocmV2aXNpb24gMjY2MTU0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
V2ViVmlld0ltcGwubW0JKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDcgQEAKICNpbXBvcnQg
IldLRXJyb3JJbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxl
ci5oIgogI2ltcG9ydCAiV0tJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLmgiCisjaW1wb3J0ICJX
S1BERkhVRFZpZXcuaCIKICNpbXBvcnQgIldLUHJpbnRpbmdWaWV3LmgiCiAjaW1wb3J0ICJXS1Nh
ZmVCcm93c2luZ1dhcm5pbmcuaCIKICNpbXBvcnQgIldLU2hhcmVTaGVldC5oIgpAQCAtMTcxOCw2
ICsxNzE5LDQ1IEBAIHZvaWQgV2ViVmlld0ltcGw6OnZpZXdEaWRFbmRMaXZlUmVzaXplKCkKICAg
ICBbbV9sYXlvdXRTdHJhdGVneSBkaWRFbmRMaXZlUmVzaXplXTsKIH0KIAorI2lmIEVOQUJMRShV
SV9QUk9DRVNTX1BERl9IVUQpCisKK3ZvaWQgV2ViVmlld0ltcGw6OmNyZWF0ZVBERkhVRChQREZQ
bHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3Qp
Cit7CisgICAgcmVtb3ZlUERGSFVEKGlkZW50aWZpZXIpOworICAgIGF1dG8gaHVkID0gYWRvcHRO
UyhbW1dLUERGSFVEVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpyZWN0IHBsdWdpbklkZW50aWZp
ZXI6aWRlbnRpZmllciBwYWdlOm1fcGFnZS5nZXQoKV0pOworICAgIFttX3ZpZXcgYWRkU3Vidmll
dzpodWQuZ2V0KCldOworICAgIF9wZGZIVURWaWV3cy5hZGQoaWRlbnRpZmllciwgV1RGTW92ZSho
dWQpKTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlUERGSFVETG9jYXRpb24oUERGUGx1
Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQor
eworICAgIGlmIChhdXRvIGh1ZCA9IF9wZGZIVURWaWV3cy5nZXQoaWRlbnRpZmllcikpCisgICAg
ICAgIFtodWQgc2V0RnJhbWU6cmVjdF07Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnJlbW92ZVBE
RkhVRChQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgaWYgKGF1dG8gaHVk
ID0gX3BkZkhVRFZpZXdzLnRha2UoaWRlbnRpZmllcikpCisgICAgICAgIFtodWQgcmVtb3ZlRnJv
bVN1cGVydmlld107Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnJlbW92ZUFsbFBERkhVRHMoKQor
eworICAgIGZvciAoYXV0byYgaHVkIDogX3BkZkhVRFZpZXdzLnZhbHVlcygpKQorICAgICAgICBb
aHVkIHJlbW92ZUZyb21TdXBlcnZpZXddOworICAgIF9wZGZIVURWaWV3cy5jbGVhcigpOworfQor
CitOU1NldCAqV2ViVmlld0ltcGw6OnBkZkhVRHMoKQoreworICAgIE5TTXV0YWJsZVNldDxOU1Zp
ZXcgKj4gKnNldCA9IFtOU011dGFibGVTZXQgc2V0V2l0aENhcGFjaXR5Ol9wZGZIVURWaWV3cy5z
aXplKCldOworICAgIGZvciAoYXV0byYgaHVkIDogX3BkZkhVRFZpZXdzLnZhbHVlcygpKQorICAg
ICAgICBbc2V0IGFkZE9iamVjdDpodWQuZ2V0KCldOworICAgIHJldHVybiBzZXQ7Cit9CisKKyNl
bmRpZiAvLyBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCiB2b2lkIFdlYlZpZXdJbXBsOjpy
ZW5ld0dTdGF0ZSgpCiB7CiAgICAgaWYgKG1fdGV4dEluZGljYXRvcldpbmRvdykKQEAgLTUzOTEs
NiArNTQzMSwxMSBAQCB2b2lkIFdlYlZpZXdJbXBsOjptb3VzZU1vdmVkKE5TRXZlbnQgKmV2CiAg
ICAgaWYgKG1faWdub3Jlc05vbldoZWVsRXZlbnRzKQogICAgICAgICByZXR1cm47CiAKKyNpZiBF
TkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIGZvciAoYXV0byYgaHVkIDogX3BkZkhVRFZp
ZXdzLnZhbHVlcygpKQorICAgICAgICBbaHVkIG1vdXNlTW92ZWQ6ZXZlbnRdOworI2VuZGlmCisK
ICAgICAvLyBXaGVuIGEgdmlldyBpcyBmaXJzdCByZXNwb25kZXIsIGl0IGdldHMgbW91c2UgbW92
ZWQgZXZlbnRzIGV2ZW4gd2hlbiB0aGUgbW91c2UgaXMgb3V0c2lkZSBpdHMgdmlzaWJsZSByZWN0
LgogICAgIGlmIChtX3ZpZXcuZ2V0QXV0b3JlbGVhc2VkKCkgPT0gW21fdmlldyB3aW5kb3ddLmZp
cnN0UmVzcG9uZGVyICYmICFOU1BvaW50SW5SZWN0KFttX3ZpZXcgY29udmVydFBvaW50OltldmVu
dCBsb2NhdGlvbkluV2luZG93XSBmcm9tVmlldzpuaWxdLCBbbV92aWV3IHZpc2libGVSZWN0XSkp
CiAgICAgICAgIHJldHVybjsKQEAgLTU0MzksNiArNTQ4NCwxMSBAQCB2b2lkIFdlYlZpZXdJbXBs
Ojptb3VzZURvd24oTlNFdmVudCAqZXZlCiAgICAgaWYgKG1faWdub3Jlc05vbldoZWVsRXZlbnRz
KQogICAgICAgICByZXR1cm47CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAg
IGZvciAoYXV0byYgaHVkIDogX3BkZkhVRFZpZXdzLnZhbHVlcygpKQorICAgICAgICBbaHVkIG1v
dXNlRG93bjpldmVudF07CisjZW5kaWYKKwogICAgIHNldExhc3RNb3VzZURvd25FdmVudChldmVu
dCk7CiAgICAgc2V0SWdub3Jlc01vdXNlRHJhZ2dlZEV2ZW50cyhmYWxzZSk7CiAKQEAgLTU0NTAs
NiArNTUwMCwxMSBAQCB2b2lkIFdlYlZpZXdJbXBsOjptb3VzZVVwKE5TRXZlbnQgKmV2ZW50CiAg
ICAgaWYgKG1faWdub3Jlc05vbldoZWVsRXZlbnRzKQogICAgICAgICByZXR1cm47CiAKKyNpZiBF
TkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIGZvciAoYXV0byYgaHVkIDogX3BkZkhVRFZp
ZXdzLnZhbHVlcygpKQorICAgICAgICBbaHVkIG1vdXNlVXA6ZXZlbnRdOworI2VuZGlmCisKICAg
ICBzZXRMYXN0TW91c2VEb3duRXZlbnQobmlsKTsKICAgICBtb3VzZVVwSW50ZXJuYWwoZXZlbnQp
OwogfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUERGL1dLUERGSFVEVmlldy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BERi9XS1BERkhVRFZpZXcuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QREYvV0tQREZIVURWaWV3
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFC
TEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCisjaW1wb3J0ICJQREZQbHVnaW5JZGVudGlmaWVyLmgi
CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViUGFnZVByb3h5OworfQorCitAaW50ZXJm
YWNlIFdLUERGSFVEVmlldyA6IE5TVmlldworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFt
ZTooTlNSZWN0KWZyYW1lIHBsdWdpbklkZW50aWZpZXI6KFdlYktpdDo6UERGUGx1Z2luSWRlbnRp
ZmllcilwbHVnaW5JZGVudGlmaWVyIHBhZ2U6KFdlYktpdDo6V2ViUGFnZVByb3h5JilwYWdlOwor
LSAodm9pZClzZXRGcmFtZTooTlNSZWN0KWZyYW1lOworLSAodm9pZCltb3VzZU1vdmVkOihOU0V2
ZW50ICopZXZlbnQ7CistICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50OworLSAodm9p
ZCltb3VzZVVwOihOU0V2ZW50ICopZXZlbnQ7CisKK0BlbmQKKworI2VuZGlmIC8vIEVOQUJMRShV
SV9QUk9DRVNTX1BERl9IVUQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QREYvV0tQ
REZIVURWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BERi9X
S1BERkhVRFZpZXcubW0JKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
UERGL1dLUERGSFVEVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM1MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV0tQREZIVURWaWV3LmgiCisK
KyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCisjaW1wb3J0ICJXZWJQYWdlUHJveHku
aCIKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ0FUcmFuc2FjdGlvbi5oPgorI2ltcG9ydCA8cGFsL3Nw
aS9jb2NvYS9RdWFydHpDb3JlU1BJLmg+CisjaW1wb3J0IDxwYWwvc3BpL21hYy9OU0ltYWdlU1BJ
Lmg+CisjaW1wb3J0IDx3dGYvV2Vha09iakNQdHIuaD4KKworLy8gIFRoZSBIVUQgaXRlbXMgc2hv
dWxkIGhhdmUgdGhlIGZvbGxvd2luZyBzcGFjaW5nOgorLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIHwgICAgICAxMiAgICAgICAgMTIgICAg
ICAxMCAgICAgMTIgICAgICAgIDEyICAgICAgfAorLy8gfCAgICAgLS0tLSAgICAgIC0tLS0gICAg
IHwgICAgIC0tLS0gICAgICAtLS0tICAgICB8CisvLyB8IDEwIHxpY29ufCAxMCB8aWNvbnwgMTAg
fCAxMCB8aWNvbnwgMTAgfGljb258IDEwIHwKKy8vIHwgICAgIC0tLS0gICAgICAtLS0tICAgICB8
ICAgICAtLS0tICAgICAgLS0tLSAgICAgfAorLy8gfCAgICAgIDEyICAgICAgICAxMiAgICAgIDEw
ICAgICAxMiAgICAgICAgMTIgICAgICB8CisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIHdoZXJlIHRoZSAxMiBwb2ludCB2ZXJ0aWNhbCBz
cGFjaW5nIGlzIGFuY2hvcmVkIHRvIHRoZSBzbWFsbGVzdCBpY29uIGltYWdlLAorLy8gIGFuZCBh
bGwgc3Vic2VxdWVudCBpY29ucyB3aXRoIGJlIGNlbnRlcmVkIHZlcnRpY2FsbHkgd2l0aCB0aGUg
c21hbGxlc3QgaWNvbi4KKworc3RhdGljIGNvbnN0IENHRmxvYXQga0xheWVyVmVydGljYWxPZmZz
ZXQgPSA0MDsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGtMYXllckNvcm5lclJhZGl1cyA9IDEyOwor
c3RhdGljIGNvbnN0IENHRmxvYXQga0xheWVyR3JheUNvbXBvbmVudCA9IDA7CitzdGF0aWMgY29u
c3QgQ0dGbG9hdCBrTGF5ZXJBbHBoYSA9IDAuNzU7CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrTGF5
ZXJJbWFnZVNjYWxlID0gMS41Oworc3RhdGljIGNvbnN0IENHRmxvYXQga0xheWVyU2VwZXJhdG9y
Q29udHJvbGxlclNpemUgPSAxLjU7CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrTGF5ZXJDb250cm9s
bGVySG9yaXpvbnRhbE1hcmdpbiA9IDEwLjA7CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrTGF5ZXJJ
bWFnZVZlcnRpY2FsTWFyZ2luID0gMTIuMDsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGtMYXllclNl
cGVyYXRvclZlcnRpY2FsTWFyZ2luID0gMTAuMDsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGtDb250
cm9sTGF5ZXJOb3JtYWxBbHBoYSA9IDAuNzU7CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrQ29udHJv
bExheWVyRG93bkFscGhhID0gMC40NTsKKworc3RhdGljIE5TU3RyaW5nICogY29uc3QgUERGSFVE
Wm9vbUluQ29udHJvbCA9IEAicGx1cy5tYWduaWZ5aW5nZ2xhc3MiOworc3RhdGljIE5TU3RyaW5n
ICogY29uc3QgUERGSFVEWm9vbU91dENvbnRyb2wgPSBAIm1pbnVzLm1hZ25pZnlpbmdnbGFzcyI7
CitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBQREZIVURMYXVuY2hQcmV2aWV3Q29udHJvbCA9IEAi
cHJldmlldyI7CitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBQREZIVURTYXZlUERGQ29udHJvbCA9
IEAiYXJyb3cuZG93bi5jaXJjbGUiOworc3RhdGljIE5TU3RyaW5nICogY29uc3QgUERGSFVEU2Vw
ZXJhdG9yQ29udHJvbCA9IEAiUERGSFVEU2VwZXJhdG9yQ29udHJvbCI7CisKK3N0YXRpYyBjb25z
dCBDR0Zsb2F0IGtMYXllckZhZGVJblRpbWVJbnRlcnZhbCA9IDAuMjU7CitzdGF0aWMgY29uc3Qg
Q0dGbG9hdCBrTGF5ZXJGYWRlT3V0VGltZUludGVydmFsID0gMC41Oworc3RhdGljIGNvbnN0IENH
RmxvYXQga0luaXRpYWxIaWRlVGltZUludGVydmFsID0gMy4wOworCitzdGF0aWMgTlNBcnJheTxO
U1N0cmluZyAqPiAqY29udHJvbEFycmF5KCkKK3sKKyAgICByZXR1cm4gQFsKKyAgICAgICAgUERG
SFVEWm9vbU91dENvbnRyb2wsCisgICAgICAgIFBERkhVRFpvb21JbkNvbnRyb2wsCisgICAgICAg
IFBERkhVRFNlcGVyYXRvckNvbnRyb2wsCisgICAgICAgIFBERkhVRExhdW5jaFByZXZpZXdDb250
cm9sLAorICAgICAgICBQREZIVURTYXZlUERGQ29udHJvbAorICAgIF07Cit9CisKK3N0YXRpYyBO
U0NvbG9yICpQREZDR0NvbG9yQ3JlYXRlR2VuZXJpY1JHQihDR0Zsb2F0IHJlZCwgQ0dGbG9hdCBn
cmVlbiwgQ0dGbG9hdCBibHVlLCBDR0Zsb2F0IGFscGhhKQoreworICAgIGF1dG8gY29sb3JTcGFj
ZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOworICAgIGNvbnN0IENH
RmxvYXQgY29tcG9uZW50c1s0XSA9IHsgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEgfTsKKyAgICBh
dXRvIGNnQ29sb3IgPSBhZG9wdENGKENHQ29sb3JDcmVhdGUoY29sb3JTcGFjZS5nZXQoKSwgY29t
cG9uZW50cykpOworICAgIHJldHVybiBbTlNDb2xvciBjb2xvcldpdGhDR0NvbG9yOmNnQ29sb3Iu
Z2V0KCldOworfQorCitAaW1wbGVtZW50YXRpb24gV0tQREZIVURWaWV3IHsKK0Bwcml2YXRlCisg
ICAgV2Vha1B0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4gX3BhZ2U7CisgICAgUmV0YWluUHRyPE5T
U3RyaW5nPiBfYWN0aXZlQ29udHJvbDsKKyAgICBXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIg
X3BsdWdpbklkZW50aWZpZXI7CisgICAgQ0dGbG9hdCBfZGV2aWNlU2NhbGVGYWN0b3I7CisgICAg
UmV0YWluUHRyPENBTGF5ZXI+IF9sYXllcjsKKyAgICBSZXRhaW5QdHI8Q0FMYXllcj4gX2FjdGl2
ZUxheWVyOworICAgIENHU2l6ZSBfZnJhbWVTaXplOworICAgIFJldGFpblB0cjxOU011dGFibGVE
aWN0aW9uYXJ5PE5TU3RyaW5nICosIE5TSW1hZ2UgKj4+IF9jYWNoZWRJY29uczsKKyAgICBCT09M
IF92aXNpYmxlOworICAgIEJPT0wgX21vdXNlTW92ZWRUb0hVRDsKKyAgICBCT09MIF9pbml0aWFs
SGlkZVRpbWVyRmlyZWQ7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihOU1Jl
Y3QpZnJhbWUgcGx1Z2luSWRlbnRpZmllcjooV2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVyKXBs
dWdpbklkZW50aWZpZXIgcGFnZTooV2ViS2l0OjpXZWJQYWdlUHJveHkmKXBhZ2UKK3sKKyAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoRnJhbWU6ZnJhbWVdKSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICAKKyAgICBzZWxmLndhbnRzTGF5ZXIgPSBZRVM7CisgICAgX2NhY2hlZEljb25z
ID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKKyAgICBfcGx1
Z2luSWRlbnRpZmllciA9IHBsdWdpbklkZW50aWZpZXI7CisgICAgX3BhZ2UgPSBtYWtlV2Vha1B0
cihwYWdlKTsKKyAgICBfZGV2aWNlU2NhbGVGYWN0b3IgPSBwYWdlLmRldmljZVNjYWxlRmFjdG9y
KCk7CisgICAgX3Zpc2libGUgPSBZRVM7CisgICAgW3NlbGYgX3NldHVwTGF5ZXI6c2VsZi5sYXll
cl07CisgICAgW3NlbGYgc2V0RnJhbWU6ZnJhbWVdOworCisgICAgV2Vha09iakNQdHI8V0tQREZI
VURWaWV3PiB3ZWFrU2VsZiA9IHNlbGY7CisgICAgZGlzcGF0Y2hfYWZ0ZXIoZGlzcGF0Y2hfdGlt
ZShESVNQQVRDSF9USU1FX05PVywgKGludDY0X3QpKGtJbml0aWFsSGlkZVRpbWVJbnRlcnZhbCAq
IE5TRUNfUEVSX1NFQykpLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBb
d2Vha1NlbGYgX2hpZGVUaW1lckZpcmVkXTsKKyAgICB9KTsKKyAgICByZXR1cm4gc2VsZjsKK30K
KworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19sYXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07
CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNldEZyYW1lOihOU1JlY3QpcmVj
dAoreworICAgIFtzdXBlciBzZXRGcmFtZTpyZWN0XTsKKyAgICBfZnJhbWVTaXplID0gcmVjdC5z
aXplOworCisgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAgIFtDQVRyYW5zYWN0aW9uIHNl
dERpc2FibGVBY3Rpb25zOllFU107CisgICAgQ0dSZWN0IGxheWVyQm91bmRzID0gW19sYXllciBi
b3VuZHNdOworICAgIFtfbGF5ZXIgc2V0RnJhbWU6Q0dSZWN0TWFrZShyZWN0LnNpemUud2lkdGgg
LyAyLjAgLSBsYXllckJvdW5kcy5zaXplLndpZHRoIC8gMi4wLCBrTGF5ZXJWZXJ0aWNhbE9mZnNl
dCwgbGF5ZXJCb3VuZHMuc2l6ZS53aWR0aCwgbGF5ZXJCb3VuZHMuc2l6ZS5oZWlnaHQpXTsKKyAg
ICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworfQorCistICh2b2lkKV9oaWRlVGltZXJGaXJlZAor
eworICAgIF9pbml0aWFsSGlkZVRpbWVyRmlyZWQgPSBZRVM7CisgICAgaWYgKCFfbW91c2VNb3Zl
ZFRvSFVEKQorICAgICAgICBbc2VsZiBfc2V0VmlzaWJsZTpmYWxzZV07Cit9CisKKy0gKHZvaWQp
X3NldFZpc2libGU6KGJvb2wpaXNWaXNpYmxlCit7CisgICAgaWYgKF92aXNpYmxlID09IGlzVmlz
aWJsZSkKKyAgICAgICAgcmV0dXJuOworICAgIF92aXNpYmxlID0gaXNWaXNpYmxlOworICAgIFtD
QVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXRBbmltYXRpb25EdXJh
dGlvbjogaXNWaXNpYmxlID8ga0xheWVyRmFkZUluVGltZUludGVydmFsIDoga0xheWVyRmFkZU91
dFRpbWVJbnRlcnZhbF07CisgICAgW3NlbGYgX3NldExheWVyT3BhY2l0eTppc1Zpc2libGUgPyBr
TGF5ZXJBbHBoYSA6IDAuMF07CisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKK30KKworLSAo
dm9pZCltb3VzZU1vdmVkOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBpZiAoQ0dSZWN0Q29udGFp
bnNQb2ludChbc2VsZiBjb252ZXJ0UmVjdDpDR1JlY3RJbnNldChbX2xheWVyIGZyYW1lXSwgLTE2
LjAsIC0xNi4wKSB0b1ZpZXc6bmlsXSwgTlNQb2ludFRvQ0dQb2ludChldmVudC5sb2NhdGlvbklu
V2luZG93KSkpIHsKKyAgICAgICAgW3NlbGYgX3NldFZpc2libGU6dHJ1ZV07CisgICAgICAgIF9t
b3VzZU1vdmVkVG9IVUQgPSBZRVM7CisgICAgfSBlbHNlIGlmIChfaW5pdGlhbEhpZGVUaW1lckZp
cmVkKQorICAgICAgICBbc2VsZiBfc2V0VmlzaWJsZTpmYWxzZV07Cit9CisKKy0gKHZvaWQpbW91
c2VEb3duOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBfYWN0aXZlQ29udHJvbCA9IFtzZWxmIF9j
b250cm9sRm9yRXZlbnQ6ZXZlbnRdOworICAgIGlmIChbX2FjdGl2ZUNvbnRyb2wgaXNFcXVhbFRv
U3RyaW5nOlBERkhVRFNlcGVyYXRvckNvbnRyb2xdKQorICAgICAgICBfYWN0aXZlQ29udHJvbCA9
IG5pbDsKKyAgICBpZiAoX2FjdGl2ZUNvbnRyb2wpIHsKKyAgICAgICAgLy8gVXBkYXRlIHJlbmRl
cmluZyB0byBoaWdobGlnaHQgaXQuLgorICAgICAgICBfYWN0aXZlTGF5ZXIgPSBbc2VsZiBfbGF5
ZXJGb3JFdmVudDpldmVudF07CisgICAgICAgIAorICAgICAgICAvLyBVcGRhdGUgbGF5ZXIgaW1h
Z2U7IGRvIG5vdCBhbmltYXRlCisgICAgICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICAg
ICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKKyAgICAgICAgCisgICAg
ICAgIFtfYWN0aXZlTGF5ZXIgc2V0T3BhY2l0eTprQ29udHJvbExheWVyRG93bkFscGhhXTsKKyAg
ICAgICAgCisgICAgICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CisgICAgfQorfQorCistICh2
b2lkKW1vdXNlVXA6KE5TRXZlbnQgKilldmVudAoreworICAgIGlmICghX2FjdGl2ZUNvbnRyb2wp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBOU1N0cmluZyogbW91c2VVcENvbnRyb2wgPSBb
c2VsZiBfY29udHJvbEZvckV2ZW50OmV2ZW50XTsKKyAgICBpZiAoW19hY3RpdmVDb250cm9sIGlz
RXF1YWxUb1N0cmluZzptb3VzZVVwQ29udHJvbF0pCisgICAgICAgIFtzZWxmIF9wZXJmb3JtQWN0
aW9uRm9yQ29udHJvbDpfYWN0aXZlQ29udHJvbC5nZXQoKV07CisgICAgCisgICAgW0NBVHJhbnNh
Y3Rpb24gYmVnaW5dOworICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107
CisgICAgW19hY3RpdmVMYXllciBzZXRPcGFjaXR5OmtDb250cm9sTGF5ZXJOb3JtYWxBbHBoYV07
CisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKKworICAgIF9hY3RpdmVMYXllciA9IG5pbDsK
KyAgICBfYWN0aXZlQ29udHJvbCA9IG5pbDsKK30KKworLSAoT3B0aW9uYWw8TlNVSW50ZWdlcj4p
X2NvbnRyb2xJbmRleEZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBDR1BvaW50IGlu
aXRpYWxQb2ludCA9IE5TUG9pbnRUb0NHUG9pbnQoZXZlbnQubG9jYXRpb25JbldpbmRvdyk7Cisg
ICAgaW5pdGlhbFBvaW50LnggLT0gW19sYXllciBmcmFtZV0ub3JpZ2luLng7CisgICAgaW5pdGlh
bFBvaW50LnkgLT0gW19sYXllciBmcmFtZV0ub3JpZ2luLnk7CisgICAgZm9yIChOU1VJbnRlZ2Vy
IGluZGV4ID0gMDsgaW5kZXggPCBbX2xheWVyIHN1YmxheWVyc10uY291bnQ7IGluZGV4KyspIHsK
KyAgICAgICAgQ0FMYXllciAqc3ViTGF5ZXIgPSBbX2xheWVyIHN1YmxheWVyc11baW5kZXhdOwor
ICAgICAgICBOU1JlY3Qgd2luZG93U3BhY2VSZWN0ID0gW3NlbGYgY29udmVydFJlY3Q6c3ViTGF5
ZXIuZnJhbWUgdG9WaWV3Om5pbF07CisgICAgICAgIGlmIChDR1JlY3RDb250YWluc1BvaW50KHdp
bmRvd1NwYWNlUmVjdCwgaW5pdGlhbFBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiBpbmRleDsK
KyAgICB9CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworLSAoTlNTdHJpbmcgKilfY29u
dHJvbEZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBpZiAoYXV0byBpbmRleCA9IFtz
ZWxmIF9jb250cm9sSW5kZXhGb3JFdmVudDpldmVudF0pCisgICAgICAgIHJldHVybiBjb250cm9s
QXJyYXkoKVsqaW5kZXhdOworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKENBTGF5ZXIgKilfbGF5
ZXJGb3JFdmVudDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgaWYgKGF1dG8gaW5kZXggPSBbc2Vs
ZiBfY29udHJvbEluZGV4Rm9yRXZlbnQ6ZXZlbnRdKQorICAgICAgICByZXR1cm4gW19sYXllciBz
dWJsYXllcnNdWyppbmRleF07CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAodm9pZClfcGVyZm9y
bUFjdGlvbkZvckNvbnRyb2w6KE5TU3RyaW5nICopY29udHJvbAoreworICAgIGlmICghX3Zpc2li
bGUpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBwYWdlID0gX3BhZ2UuZ2V0KCk7CisgICAg
aWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFtjb250cm9sIGlzRXF1YWxUb1N0
cmluZzpQREZIVURab29tSW5Db250cm9sXSkKKyAgICAgICAgcGFnZS0+cGRmWm9vbUluKF9wbHVn
aW5JZGVudGlmaWVyKTsKKyAgICBlbHNlIGlmIChbY29udHJvbCBpc0VxdWFsVG9TdHJpbmc6UERG
SFVEWm9vbU91dENvbnRyb2xdKQorICAgICAgICBwYWdlLT5wZGZab29tT3V0KF9wbHVnaW5JZGVu
dGlmaWVyKTsKKyAgICBlbHNlIGlmIChbY29udHJvbCBpc0VxdWFsVG9TdHJpbmc6UERGSFVEU2F2
ZVBERkNvbnRyb2xdKQorICAgICAgICBwYWdlLT5wZGZTYXZlVG9QREYoX3BsdWdpbklkZW50aWZp
ZXIpOworICAgIGVsc2UgaWYgKFtjb250cm9sIGlzRXF1YWxUb1N0cmluZzpQREZIVURMYXVuY2hQ
cmV2aWV3Q29udHJvbF0pCisgICAgICAgIHBhZ2UtPnBkZk9wZW5XaXRoUHJldmlldyhfcGx1Z2lu
SWRlbnRpZmllcik7Cit9CisKKy0gKHZvaWQpX2xvYWRJY29uSW1hZ2VzCit7CisgICAgZm9yIChO
U1N0cmluZyAqY29udHJvbE5hbWUgaW4gY29udHJvbEFycmF5KCkpCisgICAgICAgIFtzZWxmIF9n
ZXRJbWFnZUZvckNvbnRyb2xOYW1lOmNvbnRyb2xOYW1lXTsKK30KKworLSAodm9pZClfc2V0dXBM
YXllcjooQ0FMYXllciAqKXBhcmVudExheWVyCit7CisgICAgX2xheWVyID0gYWRvcHROUyhbW0NB
TGF5ZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbX2xheWVyIHNldENvcm5lclJhZGl1czprTGF5ZXJD
b3JuZXJSYWRpdXNdOworICAgIAorICAgIGF1dG8gY29sb3IgPSBhZG9wdE5TKFBERkNHQ29sb3JD
cmVhdGVHZW5lcmljUkdCKGtMYXllckdyYXlDb21wb25lbnQsIGtMYXllckdyYXlDb21wb25lbnQs
IGtMYXllckdyYXlDb21wb25lbnQsIDEuMCkpOworICAgIFtfbGF5ZXIgc2V0QmFja2dyb3VuZENv
bG9yOltjb2xvciBDR0NvbG9yXV07CisgICAgW3NlbGYgX3NldExheWVyT3BhY2l0eTprTGF5ZXJB
bHBoYV07CisgICAgCisgICAgW3NlbGYgX2xvYWRJY29uSW1hZ2VzXTsKKyAgICBDR0Zsb2F0IG1p
bkljb25JbWFnZUhlaWdodCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8Q0dGbG9hdD46Om1heCgpOwor
ICAgIGZvciAoTlNJbWFnZSAqaW1hZ2UgaW4gW19jYWNoZWRJY29ucyBhbGxWYWx1ZXNdKQorICAg
ICAgICBtaW5JY29uSW1hZ2VIZWlnaHQgPSBzdGQ6Om1pbihtaW5JY29uSW1hZ2VIZWlnaHQsIChp
bWFnZS5zaXplLmhlaWdodCAvIF9kZXZpY2VTY2FsZUZhY3RvcikpOworICAgIAorICAgIENHRmxv
YXQgZHggPSBrTGF5ZXJDb250cm9sbGVySG9yaXpvbnRhbE1hcmdpbjsKKyAgICBmb3IgKE5TU3Ry
aW5nICpjb250cm9sTmFtZSBpbiBjb250cm9sQXJyYXkoKSkgeworICAgICAgICBhdXRvIGNvbnRy
b2xMYXllciA9IGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0XSk7CisgICAgICAgIENHRmxv
YXQgZHkgPSAwLjA7CisgICAgICAgIENHRmxvYXQgY29udHJvbGxlcldpZHRoID0gMC4wOworICAg
ICAgICBDR0Zsb2F0IGNvbnRyb2xsZXJIZWlnaHQgPSAwLjA7CisKKyAgICAgICAgaWYgKFtjb250
cm9sTmFtZSBpc0VxdWFsVG9TdHJpbmc6IFBERkhVRFNlcGVyYXRvckNvbnRyb2xdKSB7CisgICAg
ICAgICAgICBkeSA9IGtMYXllclNlcGVyYXRvclZlcnRpY2FsTWFyZ2luOworICAgICAgICAgICAg
Y29udHJvbGxlcldpZHRoID0ga0xheWVyU2VwZXJhdG9yQ29udHJvbGxlclNpemU7CisgICAgICAg
ICAgICBjb250cm9sbGVySGVpZ2h0ID0gbWluSWNvbkltYWdlSGVpZ2h0ICsgKDIuMCAqIGtMYXll
ckltYWdlVmVydGljYWxNYXJnaW4pIC0gKDIuMCAqIGtMYXllclNlcGVyYXRvclZlcnRpY2FsTWFy
Z2luKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgW2NvbnRyb2xMYXllciBzZXRCYWNrZ3Jv
dW5kQ29sb3I6IFtbTlNDb2xvciBsaWdodEdyYXlDb2xvcl0gQ0dDb2xvcl1dOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgTlNJbWFnZSAqY29udHJvbEltYWdlID0gW3NlbGYgX2dldElt
YWdlRm9yQ29udHJvbE5hbWU6Y29udHJvbE5hbWVdOworICAgICAgICAgICAgW2NvbnRyb2xMYXll
ciBzZXRDb250ZW50czpjb250cm9sSW1hZ2VdOworICAgICAgICAgICAgW2NvbnRyb2xMYXllciBz
ZXRPcGFjaXR5OmtDb250cm9sTGF5ZXJOb3JtYWxBbHBoYV07CisKKyAgICAgICAgICAgIGR5ID0g
a0xheWVySW1hZ2VWZXJ0aWNhbE1hcmdpbjsKKyAgICAgICAgICAgIGNvbnRyb2xsZXJXaWR0aCA9
IFtjb250cm9sSW1hZ2Ugc2l6ZV0ud2lkdGggLyBfZGV2aWNlU2NhbGVGYWN0b3I7CisgICAgICAg
ICAgICBjb250cm9sbGVySGVpZ2h0ID0gW2NvbnRyb2xJbWFnZSBzaXplXS5oZWlnaHQgLyBfZGV2
aWNlU2NhbGVGYWN0b3I7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGR5IC09IChjb250cm9s
bGVySGVpZ2h0IC0gbWluSWNvbkltYWdlSGVpZ2h0KSAvIDIuMDsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgW2NvbnRyb2xMYXllciBzZXRGaWx0ZXJzOkBbW0NBRmlsdGVyIGZpbHRlcldpdGhU
eXBlOmtDQUZpbHRlckNvbG9ySW52ZXJ0XV1dOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBbY29udHJvbExheWVyIHNldEZyYW1lOkNHUmVjdE1ha2UoZHgsIGR5LCBjb250cm9sbGVyV2lk
dGgsIGNvbnRyb2xsZXJIZWlnaHQpXTsKKyAgICAgICAgW19sYXllciBhZGRTdWJsYXllcjpjb250
cm9sTGF5ZXIuZ2V0KCldOworICAgICAgICAKKyAgICAgICAgZHggKz0gY29udHJvbGxlcldpZHRo
ICsga0xheWVyQ29udHJvbGxlckhvcml6b250YWxNYXJnaW47CisgICAgfQorICAgIAorICAgIFtf
bGF5ZXIgc2V0RnJhbWU6Q0dSZWN0TWFrZSgwLCBrTGF5ZXJWZXJ0aWNhbE9mZnNldCwgZHgsIG1p
bkljb25JbWFnZUhlaWdodCArIDIuMCAqIGtMYXllckltYWdlVmVydGljYWxNYXJnaW4pXTsKKyAg
ICBbcGFyZW50TGF5ZXIgYWRkU3VibGF5ZXI6X2xheWVyLmdldCgpXTsKK30KKworLSAodm9pZClf
cmVkcmF3TGF5ZXIKK3sKKyAgICBbX2NhY2hlZEljb25zIHJlbW92ZUFsbE9iamVjdHNdOworICAg
IENBTGF5ZXIgKnBhcmVudExheWVyID0gW19sYXllciBzdXBlcmxheWVyXTsKKyAgICBbX2xheWVy
IHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICBbc2VsZiBfc2V0dXBMYXllcjpwYXJlbnRMYXll
cl07CisgICAgW3NlbGYgc2V0RnJhbWVTaXplOl9mcmFtZVNpemVdOworfQorCistIChOU0ltYWdl
ICopX2dldEltYWdlRm9yQ29udHJvbE5hbWU6KE5TU3RyaW5nICopY29udHJvbAoreworICAgIE5T
SW1hZ2UgKmljb25JbWFnZSA9IF9jYWNoZWRJY29ucy5nZXQoKVtjb250cm9sXTsKKyAgICBpZiAo
aWNvbkltYWdlKQorICAgICAgICByZXR1cm4gaWNvbkltYWdlOworCisgICAgaWNvbkltYWdlID0g
W05TSW1hZ2UgX2ltYWdlV2l0aFN5c3RlbVN5bWJvbE5hbWU6Y29udHJvbF07CisgICAgaWYgKCFp
Y29uSW1hZ2UpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBpY29uSW1hZ2UgPSBbaWNvbklt
YWdlIF9pbWFnZVdpdGhDb25maWd1cmF0aW9uOkB7CisgICAgICAgIE5TSW1hZ2VBbHRlcm5hdGVD
cml0ZXJpb25Gb250IDogW05TRm9udCBwcmVmZXJyZWRGb250Rm9yVGV4dFN0eWxlOk5TRm9udFRl
eHRTdHlsZVRpdGxlMiBvcHRpb25zOkB7IH1dLAorICAgICAgICBOU0ltYWdlQWx0ZXJuYXRlQ3Jp
dGVyaW9uU3ltYm9sU2NhbGUgOiBAKE5TSW1hZ2VTeW1ib2xTY2FsZUxhcmdlKQorICAgIH1dOwor
ICAgICAgICAKKyAgICBOU1JlY3QgaWNvbkltYWdlUmVjdCA9IE5TTWFrZVJlY3QoMCwgMCwgW2lj
b25JbWFnZSBzaXplXS53aWR0aCAqIGtMYXllckltYWdlU2NhbGUgKiBfZGV2aWNlU2NhbGVGYWN0
b3IsIFtpY29uSW1hZ2Ugc2l6ZV0uaGVpZ2h0ICoga0xheWVySW1hZ2VTY2FsZSAqIF9kZXZpY2VT
Y2FsZUZhY3Rvcik7CisgICAgTlNJbWFnZVJlcCAqaWNvbkltYWdlUmVwID0gW2ljb25JbWFnZSBi
ZXN0UmVwcmVzZW50YXRpb25Gb3JSZWN0Omljb25JbWFnZVJlY3QgY29udGV4dDpuaWwgaGludHM6
bmlsXTsKKyAgICBpY29uSW1hZ2UgPSBbTlNJbWFnZSBpbWFnZVdpdGhJbWFnZVJlcDppY29uSW1h
Z2VSZXBdOworICAgIAorICAgIF9jYWNoZWRJY29ucy5nZXQoKVtjb250cm9sXSA9IGljb25JbWFn
ZTsKKyAgICByZXR1cm4gaWNvbkltYWdlOworfQorCistICh2b2lkKV9zZXRMYXllck9wYWNpdHk6
KENHRmxvYXQpYWxwaGEKK3sKKyAgICBbX2xheWVyIHNldE9wYWNpdHk6YWxwaGFdOworICAgIGZv
ciAoQ0FMYXllciAqc3ViTGF5ZXIgaW4gW19sYXllciBzdWJsYXllcnNdKQorICAgICAgICBbc3Vi
TGF5ZXIgc2V0T3BhY2l0eTphbHBoYV07Cit9CisKK0BlbmQKKworI2VuZGlmIC8vIEVOQUJMRShV
SV9QUk9DRVNTX1BERl9IVUQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2Vi
UGFnZVByb3h5SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9XZWJQYWdlUHJveHlJT1MubW0JKHJldmlzaW9uIDI2NjE1NCkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwODgs
MTYgKzEwODgsNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUGVyZm9ybURpY3Rpb25hcnlMCiAg
ICAgcGFnZUNsaWVudCgpLmRpZFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwKGRpY3Rpb25hcnlQb3B1
cEluZm8pOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVy
QW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbihjb25zdCBTdHJpbmcmLCBGcmFtZUluZm9EYXRh
JiYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJQYWdlUHJveHk6Om9wZW5QREZGcm9tVGVtcG9y
YXJ5Rm9sZGVyV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgU3Ry
aW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB2b2lkIFdlYlBhZ2VQcm94eTo6
c2V0UmVtb3RlTGF5ZXJUcmVlUm9vdE5vZGUoUmVtb3RlTGF5ZXJUcmVlTm9kZSogcm9vdE5vZGUp
CiB7CiAgICAgcGFnZUNsaWVudCgpLnNldFJlbW90ZUxheWVyVHJlZVJvb3ROb2RlKHJvb3ROb2Rl
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1w
bE1hYy5oCShyZXZpc2lvbiAyNjYxNTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMv
UGFnZUNsaWVudEltcGxNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDYgKzE5MCwxMyBAQCBw
cml2YXRlOgogCiAgICAgdm9pZCByZWdpc3Rlckluc2VydGlvblVuZG9Hcm91cGluZygpIG92ZXJy
aWRlOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICB2b2lkIGNyZWF0ZVBE
RkhVRChQREZQbHVnaW5JZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJp
ZGU7CisgICAgdm9pZCB1cGRhdGVQREZIVURMb2NhdGlvbihQREZQbHVnaW5JZGVudGlmaWVyLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCByZW1vdmVQREZIVUQo
UERGUGx1Z2luSWRlbnRpZmllcikgb3ZlcnJpZGU7CisgICAgdm9pZCByZW1vdmVBbGxQREZIVURz
KCkgb3ZlcnJpZGU7CisjZW5kaWYKKwogICAgIC8vIEF1eGlsaWFyeSBDbGllbnQgQ3JlYXRpb24K
ICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94
eUNsaWVudCYgZnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudCgpIG92ZXJyaWRlOwpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQko
cmV2aXNpb24gMjY2MTU0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGll
bnRJbXBsTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNDksNiArMzQ5LDMwIEBAIHZvaWQgUGFn
ZUNsaWVudEltcGw6OnJlZ2lzdGVySW5zZXJ0aW9uVW4KICAgICByZWdpc3Rlckluc2VydGlvblVu
ZG9Hcm91cGluZ1dpdGhVbmRvTWFuYWdlcihbbV92aWV3IHVuZG9NYW5hZ2VyXSk7CiB9CiAKKyNp
ZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpjcmVh
dGVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiByZWN0KQoreworICAgIG1faW1wbC0+Y3JlYXRlUERGSFVEKGlkZW50aWZpZXIsIHJl
Y3QpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjp1cGRhdGVQREZIVURMb2NhdGlvbihQREZQ
bHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3Qp
Cit7CisgICAgbV9pbXBsLT51cGRhdGVQREZIVURMb2NhdGlvbihpZGVudGlmaWVyLCByZWN0KTsK
K30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVtb3ZlUERGSFVEKFBERlBsdWdpbklkZW50aWZp
ZXIgaWRlbnRpZmllcikKK3sKKyAgICBtX2ltcGwtPnJlbW92ZVBERkhVRChpZGVudGlmaWVyKTsK
K30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVtb3ZlQWxsUERGSFVEcygpCit7CisgICAgbV9p
bXBsLT5yZW1vdmVBbGxQREZIVURzKCk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoVUlfUFJPQ0VT
U19QREZfSFVEKQorCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpjbGVhckFsbEVkaXRDb21tYW5kcygp
CiB7CiAgICAgbV9pbXBsLT5jbGVhckFsbEVkaXRDb21tYW5kcygpOwpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCShyZXZpc2lvbiAyNjYx
NTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC00NzUsOCArNDc1LDYgQEAgc3RhdGljIE5TU3RyaW5nICpwYXRoVG9Q
REZPbkRpc2soY29uc3QgUwogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2F2ZVBERlRvVGVtcG9yYXJ5
Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbihjb25zdCBTdHJpbmcmIHN1Z2dlc3Rl
ZEZpbGVuYW1lLCBGcmFtZUluZm9EYXRhJiYgZnJhbWVJbmZvLCBjb25zdCBJUEM6OkRhdGFSZWZl
cmVuY2UmIGRhdGEsIGNvbnN0IFN0cmluZyYgcGRmVVVJRCkKIHsKLSAgICBNRVNTQUdFX0NIRUNL
KFRlbXBvcmFyeVBERkZpbGVNYXA6OmlzVmFsaWRLZXkocGRmVVVJRCkpOwotCiAgICAgaWYgKGRh
dGEuaXNFbXB0eSgpKSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiQ2Fubm90IHNhdmUgZW1wdHkg
UERGIGZpbGUgdG8gdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkuIik7CiAgICAgICAgIHJldHVybjsK
QEAgLTUwNCw3ICs1MDIsOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2F2ZVBERlRvVGVtcG9yYXJ5
Rm9sCiAgICAgYXV0byBvcmlnaW5hdGluZ1VSTFN0cmluZyA9IGZyYW1lSW5mby5yZXF1ZXN0LnVy
bCgpLnN0cmluZygpOwogICAgIEZpbGVTeXN0ZW06OnNldE1ldGFkYXRhVVJMKG5zUGF0aC5nZXQo
KSwgb3JpZ2luYXRpbmdVUkxTdHJpbmcpOwogCi0gICAgbV90ZW1wb3JhcnlQREZGaWxlcy5hZGQo
cGRmVVVJRCwgbnNQYXRoLmdldCgpKTsKKyAgICBpZiAoVGVtcG9yYXJ5UERGRmlsZU1hcDo6aXNW
YWxpZEtleShwZGZVVUlEKSkKKyAgICAgICAgbV90ZW1wb3JhcnlQREZGaWxlcy5hZGQocGRmVVVJ
RCwgbnNQYXRoLmdldCgpKTsKIAogICAgIGF1dG8gcGRmRmlsZVVSTCA9IFVSTDo6ZmlsZVVSTFdp
dGhGaWxlU3lzdGVtUGF0aChTdHJpbmcobnNQYXRoLmdldCgpKSk7CiAgICAgbV91aUNsaWVudC0+
Y29uZmlybVBERk9wZW5pbmcoKnRoaXMsIHBkZkZpbGVVUkwsIFdURk1vdmUoZnJhbWVJbmZvKSwg
W3BkZkZpbGVVUkxdIChib29sIGFsbG93ZWQpIHsKQEAgLTUxNCw2ICs1MTMsNyBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sCiAgICAgfSk7CiB9CiAKKyNpZiBFTkFC
TEUoUERGS0lUX1BMVUdJTikgJiYgIUVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCiB2b2lkIFdl
YlBhZ2VQcm94eTo6b3BlblBERkZyb21UZW1wb3JhcnlGb2xkZXJXaXRoTmF0aXZlQXBwbGljYXRp
b24oRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywgY29uc3QgU3RyaW5nJiBwZGZVVUlEKQogewog
ICAgIE1FU1NBR0VfQ0hFQ0soVGVtcG9yYXJ5UERGRmlsZU1hcDo6aXNWYWxpZEtleShwZGZVVUlE
KSk7CkBAIC01MzAsNiArNTMwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6Om9wZW5QREZGcm9tVGVt
cG9yYXJ5RgogICAgICAgICBbW05TV29ya3NwYWNlIHNoYXJlZFdvcmtzcGFjZV0gb3BlblVSTDpw
ZGZGaWxlVVJMXTsKICAgICB9KTsKIH0KKyNlbmRpZgogCiAjaWYgRU5BQkxFKFBERktJVF9QTFVH
SU4pCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2hvd1BERkNvbnRleHRNZW51KGNvbnN0IFdlYktpdDo6
UERGQ29udGV4dE1lbnUmIGNvbnRleHRNZW51LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlv
bmFsPGludDMyX3Q+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtNjczLDYgKzY3NCw0OSBA
QCBQbGF0Zm9ybVZpZXcqIFdlYlBhZ2VQcm94eTo6cGxhdGZvcm1WaWV3CiAgICAgcmV0dXJuIFtw
YWdlQ2xpZW50KCkucGxhdGZvcm1XaW5kb3coKSBjb250ZW50Vmlld107CiB9CiAKKyNpZiBFTkFC
TEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCit2b2lkIFdlYlBhZ2VQcm94eTo6Y3JlYXRlUERGSFVE
KFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
cmVjdCkKK3sKKyAgICBwYWdlQ2xpZW50KCkuY3JlYXRlUERGSFVEKGlkZW50aWZpZXIsIHJlY3Qp
OworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6cmVtb3ZlUERGSFVEKFBERlBsdWdpbklkZW50aWZp
ZXIgaWRlbnRpZmllcikKK3sKKyAgICBwYWdlQ2xpZW50KCkucmVtb3ZlUERGSFVEKGlkZW50aWZp
ZXIpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6dXBkYXRlUERGSFVETG9jYXRpb24oUERGUGx1
Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQor
eworICAgIHBhZ2VDbGllbnQoKS51cGRhdGVQREZIVURMb2NhdGlvbihpZGVudGlmaWVyLCByZWN0
KTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnBkZlpvb21JbihQREZQbHVnaW5JZGVudGlmaWVy
IGlkZW50aWZpZXIpCit7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Wm9vbVBERkluKGlk
ZW50aWZpZXIpKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnBkZlpvb21PdXQoUERGUGx1Z2lu
SWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Olpv
b21QREZPdXQoaWRlbnRpZmllcikpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6cGRmU2F2ZVRv
UERGKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBzZW5kV2l0aEFzeW5j
UmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OlNhdmVQREYoaWRlbnRpZmllciksIFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIChTdHJpbmcmJiBzdWdnZXN0ZWRGaWxlbmFtZSwg
VVJMJiYgb3JpZ2luYXRpbmdVUkwsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YVJlZmVy
ZW5jZSkgeworICAgICAgICBzYXZlUERGVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIoV1RGTW92ZShz
dWdnZXN0ZWRGaWxlbmFtZSksIFdURk1vdmUob3JpZ2luYXRpbmdVUkwpLCBkYXRhUmVmZXJlbmNl
KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnBkZk9wZW5XaXRoUHJldmlldyhQ
REZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJQYWdlOjpPcGVuUERGV2l0aFByZXZpZXcoaWRlbnRpZmllciksIFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIChTdHJpbmcmJiBzdWdnZXN0ZWRGaWxl
bmFtZSwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNl
JiBkYXRhLCBjb25zdCBTdHJpbmcmIHBkZlVVSUQpIHsKKyAgICAgICAgc2F2ZVBERlRvVGVtcG9y
YXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbihXVEZNb3ZlKHN1Z2dlc3RlZEZp
bGVuYW1lKSwgV1RGTW92ZShmcmFtZUluZm8pLCBkYXRhLCBwZGZVVUlEKTsKKyAgICB9KTsKK30K
KworI2VuZGlmIC8vIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdAogCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpJbmRleDogU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNjYxNTQpCisr
KyBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzkwLDYgKzE3OTAsNyBAQAogCQlEM0I5NDg0OTExRkY0QjY1MDAwMzJCMzkg
LyogV2ViU2VhcmNoUG9wdXBNZW51LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBEM0I5NDg0NTExRkY0QjY1MDAwMzJCMzkgLyogV2ViU2VhcmNoUG9wdXBN
ZW51LmggKi87IH07CiAJCURGNDYyRTBGMjNGMjJGNTUwMEVGRjM1RiAvKiBXS0hUVFBDb29raWVT
dG9yZVByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IERGNDYyRTBFMjNGMjJGNTMwMEVGRjM1RiAvKiBXS0hUVFBDb29raWVTdG9yZVByaXZhdGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlERjQ2
MkUxMjIzRjMzOEJFMDBFRkYzNUYgLyogV0tDb250ZW50V29ybGRQcml2YXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERjQ2MkUxMTIzRjMzOEFEMDBF
RkYzNUYgLyogV0tDb250ZW50V29ybGRQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJREY4NENFRTQyNDlBQTI0RDAwOTA5NkY2IC8qIFdL
UERGSFVEVmlldy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IERGODRDRUUyMjQ5QUEyMUYwMDkwOTZGNiAvKiBXS1BERkhVRFZpZXcubW0gKi87IH07CiAJ
CUUxMDVGRTU0MThEN0I5REUwMDhGNTdBOCAvKiBFZGl0aW5nUmFuZ2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMDVGRTUzMThEN0I5REUwMDhGNTdB
OCAvKiBFZGl0aW5nUmFuZ2UuaCAqLzsgfTsKIAkJRTExRDM1QUUxNkI2M0QxQjAwNkQyM0Q3IC8q
IGNvbS5hcHBsZS5XZWJQcm9jZXNzLnNiIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMTk2N0UzNzE1MEFCNUUyMDBDNzMxNjkgLyogY29tLmFwcGxlLldl
YlByb2Nlc3Muc2IgKi87IH07CiAJCUUxNEE5NTRBMTZFMDE2QTQwMDY4REU4MiAvKiBOZXR3b3Jr
UHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTE0QTk1NDgxNkUwMTZBNDAwNjhERTgyIC8qIE5ldHdvcmtQcm9j
ZXNzUGxhdGZvcm1TdHJhdGVnaWVzLmggKi87IH07CkBAIC01Mjc5LDYgKzUyODAsOSBAQAogCQlE
RjQ2MkUxMTIzRjMzOEFEMDBFRkYzNUYgLyogV0tDb250ZW50V29ybGRQcml2YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQ29udGVudFdvcmxkUHJpdmF0ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERjU4QzYzMTEzNzFBQzU4MDBGOUEzN0MgLyogTmF0
aXZlV2ViV2hlZWxFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXRp
dmVXZWJXaGVlbEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURGNThDNjM1
MTM3MUFDQTAwMEY5QTM3QyAvKiBOYXRpdmVXZWJXaGVlbEV2ZW50TWFjLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTmF0aXZlV2ViV2hlZWxFdmVudE1hYy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREY3NDI3NUMyNEY0OTU1MDAwRjhBQkU5IC8q
IFBERlBsdWdpbklkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UERGUGx1Z2luSWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlERjg0
Q0VFMjI0OUFBMjFGMDA5MDk2RjYgLyogV0tQREZIVURWaWV3Lm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tQREZIVURWaWV3Lm1tOyBwYXRoID0gUERGL1dLUERG
SFVEVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREY4NENFRTMyNDlBQTIx
RjAwOTA5NkY2IC8qIFdLUERGSFVEVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBXS1BERkhVRFZpZXcuaDsgcGF0aCA9IFBERi9XS1BERkhVRFZpZXcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEwNUZFNTMxOEQ3QjlERTAwOEY1N0E4IC8qIEVkaXRpbmdS
YW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFZGl0aW5nUmFuZ2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTExNUM3MTUxOTBGOEEyNTAwRUNDNTE2IC8q
IGNvbS5hcHBsZS5XZWJLaXQuU3RvcmFnZS5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBjb20u
YXBwbGUuV2ViS2l0LlN0b3JhZ2Uuc2I7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL2Nv
bS5hcHBsZS5XZWJLaXQuU3RvcmFnZS5zYjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJ
UjsgfTsKIAkJRTEzM0ZEODkxNDIzREQ3RjAwRkM3QkZCIC8qIFdlYktpdC5pY25zICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gaW1hZ2UuaWNuczsgbmFt
ZSA9IFdlYktpdC5pY25zOyBwYXRoID0gUmVzb3VyY2VzL1dlYktpdC5pY25zOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNTkwMCw2ICs1OTA0LDcgQEAKIAkJCWNoaWxkcmVuID0gKAog
CQkJCTFBNkZCOTA4MTFFNjZGQjEwMERCMTM3MSAvKiBOZXRzY2FwZSAqLywKIAkJCQlFMTk5ODc1
QjE0MkJGOUNGMDBCQjJERTcgLyogUERGICovLAorCQkJCURGNzQyNzVDMjRGNDk1NTAwMEY4QUJF
OSAvKiBQREZQbHVnaW5JZGVudGlmaWVyLmggKi8sCiAJCQkJMUE2RkI3RDAxMUU2NTFFMjAwREIx
MzcxIC8qIFBsdWdpbi5jcHAgKi8sCiAJCQkJMUE2RkI3RDExMUU2NTFFMjAwREIxMzcxIC8qIFBs
dWdpbi5oICovLAogCQkJCTFBQTU2RjI4MTFFOTJCQzgwMDYxQjg4MiAvKiBQbHVnaW5Db250cm9s
bGVyLmggKi8sCkBAIC04OTYzLDYgKzg5NjgsNyBAQAogCQkJCUNENDU3MEQ4MjQ0NENBMTcwMEEz
RENFQiAvKiBNZWRpYSAqLywKIAkJCQk1MTBDQzdFNzE2MTM4RTcyMDBEMDNFRDMgLyogTmV0d29y
ayAqLywKIAkJCQkzMUEyRUM0MDE0ODk5NzM3MDA4MTBENzEgLyogTm90aWZpY2F0aW9ucyAqLywK
KwkJCQlERjg0Q0VFMTI0OUFBMjAwMDA5MDk2RjYgLyogUERGICovLAogCQkJCTFBRUZDQzA1MTFE
MDFGMzQwMDgyMTlEMyAvKiBQbHVnaW5zICovLAogCQkJCTJEMTU1MUE5MUY1QTlCNDIwMDA2RTNG
RSAvKiBSZW1vdGVMYXllclRyZWUgKi8sCiAJCQkJMUFBRjA4OUUxOTI2ODFBQzAwQjYzOTBDIC8q
IFVzZXJDb250ZW50ICovLApAQCAtMTA0NTEsNiArMTA0NTcsMTUgQEAKIAkJCXBhdGggPSBpb3M7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQlERjg0Q0VFMTI0OUFBMjAwMDA5
MDk2RjYgLyogUERGICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgK
KwkJCQlERjg0Q0VFMzI0OUFBMjFGMDA5MDk2RjYgLyogV0tQREZIVURWaWV3LmggKi8sCisJCQkJ
REY4NENFRTIyNDlBQTIxRjAwOTA5NkY2IC8qIFdLUERGSFVEVmlldy5tbSAqLywKKwkJCSk7CisJ
CQluYW1lID0gUERGOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJRTE3MDg3
NkQxNkQ2Q0E3MjAwRjk5MjI2IC8qIEZpbGVBUEkgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKApAQCAtMTMxNDIsNiArMTMxNTcsNyBAQAogCQkJCTYzNzI4MUEzMjFB
REM3NDQwMDlFMERFNiAvKiBXS0Rvd25sb2FkUHJvZ3Jlc3MubW0gaW4gU291cmNlcyAqLywKIAkJ
CQk1Q0U5MTIwRDIyOTNDMjE5MDA1QkVDNzggLyogV0tNYWluLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNDY1N0Q4OEEyMjY2NEEyRjAwNURFODIzIC8qIFdLT3JpZW50YXRpb25BY2Nlc3NBbGVydC5t
bSBpbiBTb3VyY2VzICovLAorCQkJCURGODRDRUU0MjQ5QUEyNEQwMDkwOTZGNiAvKiBXS1BERkhV
RFZpZXcubW0gaW4gU291cmNlcyAqLywKIAkJCQk1Q0EyNkQ4MzIxN0FEMUI4MDBGOTdBMzUgLyog
V0tTYWZlQnJvd3NpbmdXYXJuaW5nLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMURCMDE5NDQyMTFD
RjAwNTAwOUZCM0U4IC8qIFdLU2hhcmVTaGVldC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdBNzhG
RjMzMjI0MTkxOUIwMDk2NDgzRSAvKiBXS1N0b3JhZ2VBY2Nlc3NBbGVydC5tbSBpbiBTb3VyY2Vz
ICovLApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGUGx1Z2luSWRl
bnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BERlBsdWdpbklkZW50aWZpZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvUGx1Z2lucy9QREZQbHVnaW5JZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3Rm
L09iamVjdElkZW50aWZpZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKKyNpZiBFTkFCTEUo
VUlfUFJPQ0VTU19QREZfSFVEKQorZW51bSBQREZQbHVnaW5JZGVudGlmaWVyVHlwZSB7IH07Cit1
c2luZyBQREZQbHVnaW5JZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxQREZQbHVnaW5JZGVu
dGlmaWVyVHlwZT47CisjZW5kaWYKKworfQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1BsdWdpbnMvUERGL1BERkxheWVyQ29udHJvbGxlclNQSS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZMYXllckNvbnRyb2xsZXJTUEkuaAko
cmV2aXNpb24gMjY2MTU0KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERG
L1BERkxheWVyQ29udHJvbGxlclNQSS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4NywxMiBA
QCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBQREZMYXllckNvbnRyCiAKIC0gKHZvaWQpc25h
cHNob3RJbkNvbnRleHQ6KENHQ29udGV4dFJlZiljb250ZXh0OwogCisjaWYgRU5BQkxFKFVJX1BS
T0NFU1NfUERGX0hVRCkKKy0gKHZvaWQpc2V0RGlzcGxheXNQREZIVURDb250cm9sbGVyOihCT09M
KWRpc3BsYXlzQ29udHJvbGxlcjsKKy0gKHZvaWQpem9vbUluOihpZClhdFBvaW50OworLSAodm9p
ZCl6b29tT3V0OihpZClhdFBvaW50OworI2VuZGlmCisKIC0gKHZvaWQpbWFnbmlmeVdpdGhNYWdu
aWZpY2F0aW9uOihDR0Zsb2F0KW1hZ25pZmljYXRpb24gYXRQb2ludDooQ0dQb2ludClwb2ludCBp
bW1lZGlhdGVseTooQk9PTClpbW1lZGlhdGVseTsKIAogLSAoQ0dQb2ludClzY3JvbGxQb3NpdGlv
bjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERG
UGx1Z2luLmgJKHJldmlzaW9uIDI2NjE1NCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BERi9QREZQbHVnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
I2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQogCiAjaW5jbHVkZSAiUERGS2l0SW1wb3J0cy5oIgor
I2luY2x1ZGUgIlBERlBsdWdpbklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJQbHVnaW4uaCIKICNp
bmNsdWRlICJXZWJFdmVudC5oIgogI2luY2x1ZGUgIldlYkhpdFRlc3RSZXN1bHREYXRhLmgiCkBA
IC01MCw2ICs1MSw3IEBAIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTVmFsdWUqIEpTVmEK
IE9CSkNfQ0xBU1MgTlNBcnJheTsKIE9CSkNfQ0xBU1MgTlNBdHRyaWJ1dGVkU3RyaW5nOwogT0JK
Q19DTEFTUyBOU0RhdGE7CitPQkpDX0NMQVNTIE5TRXZlbnQ7CiBPQkpDX0NMQVNTIE5TU3RyaW5n
OwogT0JKQ19DTEFTUyBQREZBbm5vdGF0aW9uOwogT0JKQ19DTEFTUyBQREZMYXllckNvbnRyb2xs
ZXI7CkBAIC03Nyw4ICs3OSw5IEBAIGNsYXNzIFBERlBsdWdpbkFubm90YXRpb247CiBjbGFzcyBQ
REZQbHVnaW5QYXNzd29yZEZpZWxkOwogY2xhc3MgUGx1Z2luVmlldzsKIGNsYXNzIFdlYkZyYW1l
Oworc3RydWN0IEZyYW1lSW5mb0RhdGE7CiAKLWNsYXNzIFBERlBsdWdpbiBmaW5hbCA6IHB1Ymxp
YyBQbHVnaW4sIHByaXZhdGUgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEKK2NsYXNzIFBERlBsdWdp
biBmaW5hbCA6IHB1YmxpYyBQbHVnaW4sIHB1YmxpYyBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYQog
I2lmIEhBVkUoSU5DUkVNRU5UQUxfUERGX0FQSVMpCiAgICAgLCBwcml2YXRlIFdlYkNvcmU6Ok5l
dHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50CiAjZW5kaWYKQEAgLTEwMyw5ICsxMDYsMTkg
QEAgcHVibGljOgogICAgIHZvaWQgbm90aWZ5U2VsZWN0aW9uQ2hhbmdlZChQREZTZWxlY3Rpb24g
Kik7CiAgICAgdm9pZCBub3RpZnlDdXJzb3JDaGFuZ2VkKHVpbnQ2NF90IC8qIFBERkxheWVyQ29u
dHJvbGxlckN1cnNvclR5cGUgKi8pOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkK
KyAgICB2b2lkIHpvb21JbigpOworICAgIHZvaWQgem9vbU91dCgpOworICAgIHZvaWQgc2F2ZShD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFVSTCYsIGNvbnN0IElQ
Qzo6RGF0YVJlZmVyZW5jZSYpPiYmKTsKKyAgICB2b2lkIG9wZW5XaXRoUHJldmlldyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYsIEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgSVBD
OjpEYXRhUmVmZXJlbmNlJiwgY29uc3QgU3RyaW5nJik+JiYpOworICAgIFBERlBsdWdpbklkZW50
aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorI2VuZGlm
CisKICAgICB2b2lkIGNsaWNrZWRMaW5rKE5TVVJMICopOworI2lmICFFTkFCTEUoVUlfUFJPQ0VT
U19QREZfSFVEKQogICAgIHZvaWQgc2F2ZVRvUERGKCk7CiAgICAgdm9pZCBvcGVuV2l0aE5hdGl2
ZUFwcGxpY2F0aW9uKCk7CisjZW5kaWYKICAgICB2b2lkIHdyaXRlSXRlbXNUb1Bhc3RlYm9hcmQo
TlNTdHJpbmcgKnBhc3RlYm9hcmROYW1lLCBOU0FycmF5ICppdGVtcywgTlNBcnJheSAqdHlwZXMp
OwogICAgIHZvaWQgc2hvd0RlZmluaXRpb25Gb3JBdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRl
ZFN0cmluZyAqLCBDR1BvaW50KTsKICAgICB2b2lkIHBlcmZvcm1XZWJTZWFyY2goTlNTdHJpbmcg
Kik7CkBAIC0xMTgsNyArMTMxLDEwIEBAIHB1YmxpYzoKIAogICAgIFdlYkNvcmU6OkZsb2F0UmVj
dCBjb252ZXJ0RnJvbVBERlZpZXdUb1NjcmVlbihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBj
b25zdDsKICAgICBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbVJvb3RWaWV3VG9QREZWaWV3
KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7CisgICAgV2ViQ29yZTo6SW50UG9pbnQg
Y29udmVydEZyb21QREZWaWV3VG9Sb290Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNv
bnN0OworICAgIFdlYkNvcmU6OkludFJlY3QgY29udmVydEZyb21QREZWaWV3VG9Sb290Vmlldyhj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Q7CiAgICAgV2ViQ29yZTo6SW50UmVjdCBib3Vu
ZHNPblNjcmVlbigpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFJlY3QgZnJhbWVGb3JIVUQoKSBj
b25zdDsKIAogICAgIGJvb2wgc2hvd0NvbnRleHRNZW51QXRQb2ludChjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYpOwogCkBAIC0xNTksNyArMTc1LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHdhbnRz
V2hlZWxFdmVudHMoKSBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAgICAgdm9pZCBnZW9tZXRyeURp
ZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBwbHVnaW5TaXplLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBjbGlwUmVjdCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiBwbHVn
aW5Ub1Jvb3RWaWV3VHJhbnNmb3JtKSBmaW5hbDsKICAgICB2b2lkIGNvbnRlbnRzU2NhbGVGYWN0
b3JDaGFuZ2VkKGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHZpc2liaWxpdHlEaWRDaGFuZ2UoYm9v
bCkgZmluYWwgeyB9CisgICAgdm9pZCB2aXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wpIGZpbmFsOwog
ICAgIHZvaWQgZnJhbWVEaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHJlcXVlc3RJRCkgZmluYWw7
CiAgICAgdm9pZCBmcmFtZURpZEZhaWwodWludDY0X3QgcmVxdWVzdElELCBib29sIHdhc0NhbmNl
bGxlZCkgZmluYWw7CiAgICAgdm9pZCBkaWRFdmFsdWF0ZUphdmFTY3JpcHQodWludDY0X3QgcmVx
dWVzdElELCBjb25zdCBTdHJpbmcmIHJlc3VsdCkgZmluYWw7CkBAIC0yNjMsNyArMjc5LDYgQEAg
cHJpdmF0ZToKICAgICBOU0V2ZW50ICpuc0V2ZW50Rm9yV2ViTW91c2VFdmVudChjb25zdCBXZWJN
b3VzZUV2ZW50Jik7CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZyb21QbHVnaW5Ub1BE
RlZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKICAgICBXZWJDb3JlOjpJbnRQ
b2ludCBjb252ZXJ0RnJvbVJvb3RWaWV3VG9QbHVnaW4oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
KSBjb25zdDsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RW
aWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7CiAgICAgCiAgICAgYm9vbCBzdXBw
b3J0c0Zvcm1zKCk7CiAgICAgYm9vbCBpc0Z1bGxGcmFtZVBsdWdpbigpIGNvbnN0OwpAQCAtNDAz
LDYgKzQxOCw5IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2VuZGlmIC8vIEhBVkUoSU5DUkVNRU5U
QUxfUERGX0FQSVMpCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBQREZQbHVn
aW5JZGVudGlmaWVyIG1faWRlbnRpZmllcjsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1
Z2luLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BE
Ri9QREZQbHVnaW4ubW0JKHJldmlzaW9uIDI2NjE1NCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0JKHdvcmtpbmcgY29weSkKQEAgLTQzMywxMiAr
NDMzLDE2IEBAIC0gKHZvaWQpcGVyZm9ybVNwb3RsaWdodFNlYXJjaDooTlNTdHJpbmcKIAogLSAo
dm9pZClvcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uCiB7CisjaWYgIUVOQUJMRShVSV9QUk9DRVNT
X1BERl9IVUQpCiAgICAgX3BkZlBsdWdpbi0+b3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbigpOwor
I2VuZGlmCiB9CiAKIC0gKHZvaWQpc2F2ZVRvUERGCiB7CisjaWYgIUVOQUJMRShVSV9QUk9DRVNT
X1BERl9IVUQpCiAgICAgX3BkZlBsdWdpbi0+c2F2ZVRvUERGKCk7CisjZW5kaWYKIH0KIAogLSAo
dm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29u
dHJvbGxlciBjbGlja2VkTGlua1dpdGhVUkw6KE5TVVJMICopdXJsCkBAIC02MDAsNyArNjA0LDEz
IEBAIGlubGluZSBQREZQbHVnaW46OlBERlBsdWdpbihXZWJGcmFtZSYgZnIKICNpZiBIQVZFKElO
Q1JFTUVOVEFMX1BERl9BUElTKQogICAgICwgbV9pbmNyZW1lbnRhbFBERkxvYWRpbmdFbmFibGVk
KFdlYkNvcmU6OlJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuaW5jcmVt
ZW50YWxQREZMb2FkaW5nRW5hYmxlZCgpKQogI2VuZGlmCisjaWYgRU5BQkxFKFVJX1BST0NFU1Nf
UERGX0hVRCkKKyAgICAsIG1faWRlbnRpZmllcihQREZQbHVnaW5JZGVudGlmaWVyOjpnZW5lcmF0
ZSgpKQorI2VuZGlmCiB7CisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBbbV9w
ZGZMYXllckNvbnRyb2xsZXIgc2V0RGlzcGxheXNQREZIVURDb250cm9sbGVyOk5PXTsKKyNlbmRp
ZgogICAgIG1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpLmRlbGVnYXRlID0gbV9wZGZMYXllckNv
bnRyb2xsZXJEZWxlZ2F0ZS5nZXQoKTsKICAgICBtX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKS5w
YXJlbnRMYXllciA9IG1fY29udGVudExheWVyLmdldCgpOwogCkBAIC02NDAsNiArNjUwLDEwIEBA
IGlubGluZSBQREZQbHVnaW46OlBERlBsdWdpbihXZWJGcmFtZSYgZnIKIAogUERGUGx1Z2luOjp+
UERGUGx1Z2luKCkKIHsKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIGlmIChh
dXRvKiBwYWdlID0gbV9mcmFtZS5wYWdlKCkpCisgICAgICAgIHBhZ2UtPnJlbW92ZVBERkhVRCgq
dGhpcyk7CisjZW5kaWYKIH0KIAogI2lmIEhBVkUoSU5DUkVNRU5UQUxfUERGX0FQSVMpCkBAIC0x
NzgwLDYgKzE3OTQsMTEgQEAgdm9pZCBQREZQbHVnaW46OmNvbnRlbnRzU2NhbGVGYWN0b3JDaGFu
ZwogICAgIHVwZGF0ZVBhZ2VBbmREZXZpY2VTY2FsZUZhY3RvcnMoKTsKIH0KIAorSW50UmVjdCBQ
REZQbHVnaW46OmZyYW1lRm9ySFVEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29udmVydEZyb21Q
REZWaWV3VG9Sb290VmlldyhJbnRSZWN0KEludFBvaW50KCksIHNpemUoKSkpOworfQorCiB2b2lk
IFBERlBsdWdpbjo6Y2FsY3VsYXRlU2l6ZXMoKQogewogICAgIGlmIChbbV9wZGZEb2N1bWVudCBp
c0xvY2tlZF0pIHsKQEAgLTE3OTAsNiArMTgwOSwxMCBAQCB2b2lkIFBERlBsdWdpbjo6Y2FsY3Vs
YXRlU2l6ZXMoKQogCiAgICAgbV9maXJzdFBhZ2VIZWlnaHQgPSBbbV9wZGZEb2N1bWVudCBwYWdl
Q291bnRdID8gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KENHQ2VpbGluZyhbW21fcGRmRG9jdW1lbnQg
cGFnZUF0SW5kZXg6MF0gYm91bmRzRm9yQm94OmtQREZEaXNwbGF5Qm94Q3JvcEJveF0uc2l6ZS5o
ZWlnaHQpKSA6IDA7CiAgICAgc2V0UERGRG9jdW1lbnRTaXplKEludFNpemUoW21fcGRmTGF5ZXJD
b250cm9sbGVyIGNvbnRlbnRTaXplUmVzcGVjdGluZ1pvb21dKSk7CisKKyNpZiBFTkFCTEUoVUlf
UFJPQ0VTU19QREZfSFVEKQorICAgIG1fZnJhbWUucGFnZSgpLT51cGRhdGVQREZIVURMb2NhdGlv
bigqdGhpcywgZnJhbWVGb3JIVUQoKSk7CisjZW5kaWYKIH0KIAogYm9vbCBQREZQbHVnaW46Omlu
aXRpYWxpemUoY29uc3QgUGFyYW1ldGVycyYgcGFyYW1ldGVycykKQEAgLTE5MjQsNyArMTk0Nywx
MyBAQCBJbnRQb2ludCBQREZQbHVnaW46OmNvbnZlcnRGcm9tUERGVmlld1RvCiAgICAgSW50UG9p
bnQgcG9pbnRJblBsdWdpbkNvb3JkaW5hdGVzKHBvaW50LngoKSwgc2l6ZSgpLmhlaWdodCgpIC0g
cG9pbnQueSgpKTsKICAgICByZXR1cm4gbV9yb290Vmlld1RvUGx1Z2luVHJhbnNmb3JtLmludmVy
c2UoKS52YWx1ZU9yKEFmZmluZVRyYW5zZm9ybSgpKS5tYXBQb2ludChwb2ludEluUGx1Z2luQ29v
cmRpbmF0ZXMpOwogfQotICAgIAorCitJbnRSZWN0IFBERlBsdWdpbjo6Y29udmVydEZyb21QREZW
aWV3VG9Sb290Vmlldyhjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAoreworICAgIEludFJlY3Qg
cmVjdEluUGx1Z2luQ29vcmRpbmF0ZXMocmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCks
IHJlY3QuaGVpZ2h0KCkpOworICAgIHJldHVybiBtX3Jvb3RWaWV3VG9QbHVnaW5UcmFuc2Zvcm0u
aW52ZXJzZSgpLnZhbHVlT3IoQWZmaW5lVHJhbnNmb3JtKCkpLm1hcFJlY3QocmVjdEluUGx1Z2lu
Q29vcmRpbmF0ZXMpOworfQorCiBJbnRQb2ludCBQREZQbHVnaW46OmNvbnZlcnRGcm9tUm9vdFZp
ZXdUb1BERlZpZXcoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAogewogICAgIEludFBvaW50
IHBvaW50SW5QbHVnaW5Db29yZGluYXRlcyA9IG1fcm9vdFZpZXdUb1BsdWdpblRyYW5zZm9ybS5t
YXBQb2ludChwb2ludCk7CkBAIC0xOTU1LDYgKzE5ODQsMTggQEAgSW50UmVjdCBQREZQbHVnaW46
OmJvdW5kc09uU2NyZWVuKCkgY29ucwogICAgIHJldHVybiBmcmFtZVZpZXctPmNvbnRlbnRzVG9T
Y3JlZW4oZW5jbG9zaW5nSW50UmVjdChyZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKSk7CiB9CiAK
K3ZvaWQgUERGUGx1Z2luOjp2aXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wgdmlzaWJsZSkKK3sKKyNp
ZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIGlmICh2aXNpYmxlKQorICAgICAgICBt
X2ZyYW1lLnBhZ2UoKS0+Y3JlYXRlUERGSFVEKCp0aGlzLCBmcmFtZUZvckhVRCgpKTsKKyAgICBl
bHNlCisgICAgICAgIG1fZnJhbWUucGFnZSgpLT5yZW1vdmVQREZIVUQoKnRoaXMpOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0odmlzaWJsZSk7CisjZW5kaWYKK30KKwogdm9pZCBQREZQbHVnaW46
Omdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIHBsdWdpblNpemUsIGNvbnN0IEludFJl
Y3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0pCiB7
CiAgICAgaWYgKHNpemUoKSA9PSBwbHVnaW5TaXplICYmIHBsdWdpblZpZXcoKS0+cGFnZVNjYWxl
RmFjdG9yKCkgPT0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGNvbnRlbnRTY2FsZUZhY3Rvcl0pCkBA
IC0yNDAwLDYgKzI0NDEsMzEgQEAgYm9vbCBQREZQbHVnaW46OnBsdWdpbkhhbmRsZXNDb250ZW50
T2ZmcwogICAgIHJldHVybiB0cnVlOwogfQogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hV
RCkKKwordm9pZCBQREZQbHVnaW46Onpvb21JbigpCit7CisgICAgW21fcGRmTGF5ZXJDb250cm9s
bGVyIHpvb21JbjpuaWxdOworfQorCit2b2lkIFBERlBsdWdpbjo6em9vbU91dCgpCit7CisgICAg
W21fcGRmTGF5ZXJDb250cm9sbGVyIHpvb21PdXQ6bmlsXTsKK30KKwordm9pZCBQREZQbHVnaW46
OnNhdmUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmLCBjb25zdCBVUkwmLCBj
b25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBO
U0RhdGEgKmRhdGEgPSBsaXZlRGF0YSgpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fc3VnZ2Vz
dGVkRmlsZW5hbWUsIG1fZnJhbWUudXJsKCksIElQQzo6IERhdGFSZWZlcmVuY2Uoc3RhdGljX2Nh
c3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxlbmd0aCkpOworfQorCit2b2lk
IFBERlBsdWdpbjo6b3BlbldpdGhQcmV2aWV3KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3Qg
U3RyaW5nJiwgRnJhbWVJbmZvRGF0YSYmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25z
dCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBOU0RhdGEgKmRhdGEgPSBs
aXZlRGF0YSgpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fc3VnZ2VzdGVkRmlsZW5hbWUsIG1f
ZnJhbWUuaW5mbygpLCBJUEM6OiBEYXRhUmVmZXJlbmNlIHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxlbmd0aCB9LCBjcmVhdGVDYW5vbmljYWxVVUlEU3Ry
aW5nKCkpOworfQorCisjZWxzZSAvLyBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQogICAgIAog
dm9pZCBQREZQbHVnaW46OnNhdmVUb1BERigpCiB7CkBAIC0yNDMyLDYgKzI0OTgsOCBAQCB2b2lk
IFBERlBsdWdpbjo6b3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvCiAgICAgbV9mcmFtZS5wYWdlKCkt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6T3BlblBERkZyb21UZW1wb3JhcnlGb2xkZXJX
aXRoTmF0aXZlQXBwbGljYXRpb24obV9mcmFtZS5pbmZvKCksIG1fdGVtcG9yYXJ5UERGVVVJRCkp
OwogfQogCisjZW5kaWYgLy8gRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKwogdm9pZCBQREZQ
bHVnaW46OndyaXRlSXRlbXNUb1Bhc3RlYm9hcmQoTlNTdHJpbmcgKnBhc3RlYm9hcmROYW1lLCBO
U0FycmF5ICppdGVtcywgTlNBcnJheSAqdHlwZXMpCiB7CiAgICAgYXV0byBwYXN0ZWJvYXJkVHlw
ZXMgPSBtYWtlVmVjdG9yPFN0cmluZz4odHlwZXMpOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDI2NjE1NCkKKysrIFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MTIzLDEyICs1MTIzLDEyIEBAIHZvaWQgV2ViUGFnZTo6ZGlkRmluaXNoUHJpbnRPcGVyYXRp
b24oY28KIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pICYmICFFTkFCTEUo
VUlfUFJPQ0VTU19QREZfSFVEKQogdm9pZCBXZWJQYWdlOjpzYXZlUERGVG9GaWxlSW5Eb3dubG9h
ZHNGb2xkZXIoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgY29uc3QgVVJMJiBvcmln
aW5hdGluZ1VSTCwgY29uc3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKQogewog
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2F2ZVBERlRvRmlsZUluRG93bmxvYWRz
Rm9sZGVyKHN1Z2dlc3RlZEZpbGVuYW1lLCBvcmlnaW5hdGluZ1VSTCwgSVBDOjpEYXRhUmVmZXJl
bmNlKGRhdGEsIHNpemUpKSk7CiB9CiAKLSNpZiBQTEFURk9STShDT0NPQSkKIHZvaWQgV2ViUGFn
ZTo6c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbihj
b25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBGcmFtZUluZm9EYXRhJiYgZnJhbWVJbmZv
LCBjb25zdCB1aW50OF90KiBkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUsIGNvbnN0IFN0cmluZyYg
cGRmVVVJRCkKIHsKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNhdmVQREZUb1Rl
bXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oc3VnZ2VzdGVkRmlsZW5h
bWUsIGZyYW1lSW5mbywgSVBDOjpEYXRhUmVmZXJlbmNlKGRhdGEsIHNpemUpLCBwZGZVVUlEKSk7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZp
c2lvbiAyNjYxNTQpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJNZXNzYWdlUmVj
ZWl2ZXIuaCIKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCiAjaW5jbHVkZSAiT3B0aW9uYWxD
YWxsYmFja0lELmgiCisjaW5jbHVkZSAiUERGUGx1Z2luSWRlbnRpZmllci5oIgogI2luY2x1ZGUg
IlBsdWdpbi5oIgogI2luY2x1ZGUgIlBvbGljeURlY2lzaW9uLmgiCiAjaW5jbHVkZSAiU2FuZGJv
eEV4dGVuc2lvbi5oIgpAQCAtMzQ1LDYgKzM0NiwxNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNl
bnRlclNlbGVjdGlvbkluVmlzaWJsZUFyZWEoKTsKIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BE
Rl9IVUQpCisgICAgdm9pZCBjcmVhdGVQREZIVUQoUERGUGx1Z2luJiwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpOworICAgIHZvaWQgdXBkYXRlUERGSFVETG9jYXRpb24oUERGUGx1Z2luJiwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgcmVtb3ZlUERGSFVEKFBERlBsdWdpbiYp
OworICAgIHZvaWQgem9vbVBERkluKFBERlBsdWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgem9v
bVBERk91dChQREZQbHVnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHNhdmVQREYoUERGUGx1Z2lu
SWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmLCBjb25zdCBV
UkwmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKT4mJik7CisgICAgdm9pZCBvcGVuUERGV2l0
aFByZXZpZXcoUERGUGx1Z2luSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25z
dCBTdHJpbmcmLCBGcmFtZUluZm9EYXRhJiYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYsIGNv
bnN0IFN0cmluZyYpPiYmKTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9p
ZCB3aWxsQ29tbWl0TGF5ZXJUcmVlKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJik7CiAgICAg
dm9pZCBkaWRGbHVzaExheWVyVHJlZUF0VGltZShNb25vdG9uaWNUaW1lKTsKQEAgLTEwNzQsOSAr
MTA4NSw4IEBAIHB1YmxpYzoKICAgICBOU0RpY3Rpb25hcnkgKmRhdGFEZXRlY3Rpb25Db250ZXh0
KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhRGV0ZWN0aW9uQ29udGV4dC5nZXQoKTsgfQogI2VuZGlm
CiAKKyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikgJiYgIUVOQUJMRShVSV9QUk9DRVNTX1BERl9I
VUQpCiAgICAgdm9pZCBzYXZlUERGVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIoY29uc3QgU3RyaW5n
JiBzdWdnZXN0ZWRGaWxlbmFtZSwgY29uc3QgVVJMJiBvcmlnaW5hdGluZ1VSTCwgY29uc3QgdWlu
dDhfdCogZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQog
ICAgIHZvaWQgc2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNh
dGlvbihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBGcmFtZUluZm9EYXRhJiYsIGNv
bnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgY29uc3QgU3RyaW5nJiBwZGZV
VUlEKTsKICNlbmRpZgogCkBAIC0xNzkxLDYgKzE4MDEsMTAgQEAgcHJpdmF0ZToKIAogICAgIFdl
YkNvcmU6OkNvbG9yIG1fdW5kZXJsYXlDb2xvcjsKIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BE
Rl9IVUQpCisgICAgSGFzaE1hcDxQREZQbHVnaW5JZGVudGlmaWVyLCBXZWFrUHRyPFBERlBsdWdp
bj4+IG1fcGRmUGx1Z0luc1dpdGhIVUQ7CisjZW5kaWYKKwogICAgIGJvb2wgbV9pc0luUmVkbyB7
IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzQ2xvc2VkIHsgZmFsc2UgfTsKICAgICBib29sIG1fdGFi
VG9MaW5rcyB7IGZhbHNlIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHJldmlzaW9uIDI2NjE1NCkKKysrIFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHdvcmtp
bmcgY29weSkKQEAgLTU3Niw2ICs1NzYsMTMgQEAgR2VuZXJhdGVTeW50aGV0aWNFZGl0aW5nQ29t
bWFuZChlbnVtOnVpbgogCiAgICAgU2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVyc0xvYWRpbmcp
CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIFpvb21QREZJbihXZWJLaXQ6
OlBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikKKyAgICBab29tUERGT3V0KFdlYktpdDo6
UERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQorICAgIFNhdmVQREYoV2ViS2l0OjpQREZQ
bHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpIC0+IChTdHJpbmcgZmlsZW5hbWUsIFVSTCB1cmws
IElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhKSBBc3luYworICAgIE9wZW5QREZXaXRoUHJldmlldyhX
ZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikgLT4gKFN0cmluZyBmaWxlbmFt
ZSwgc3RydWN0IFdlYktpdDo6RnJhbWVJbmZvRGF0YSBmcmFtZUluZm8sIElQQzo6RGF0YVJlZmVy
ZW5jZSBkYXRhLCBTdHJpbmcgdXVpZCkgQXN5bmMKKyNlbmRpZgorCiAgICAgVXBkYXRlQ3VycmVu
dE1vZGlmaWVyU3RhdGUoT3B0aW9uU2V0PFdlYkNvcmU6OlBsYXRmb3JtRXZlbnQ6Ok1vZGlmaWVy
PiBtb2RpZmllcnMpCiAgICAgU2ltdWxhdGVEZXZpY2VPcmllbnRhdGlvbkNoYW5nZShkb3VibGUg
YWxwaGEsIGRvdWJsZSBiZXRhLCBkb3VibGUgZ2FtbWEpCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCShyZXZpc2lvbiAy
NjYxNTQpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2ltcG9ydCAiRWRpdGluZ1Jh
bmdlLmgiCiAjaW1wb3J0ICJFZGl0b3JTdGF0ZS5oIgogI2ltcG9ydCAiRm9udEluZm8uaCIKKyNp
bXBvcnQgIkZyYW1lSW5mb0RhdGEuaCIKICNpbXBvcnQgIkluamVjdGVkQnVuZGxlSGl0VGVzdFJl
c3VsdC5oIgogI2ltcG9ydCAiUERGS2l0SW1wb3J0cy5oIgogI2ltcG9ydCAiUERGUGx1Z2luLmgi
CkBAIC0xMDUxLDcgKzEwNTIsNjIgQEAgdm9pZCBXZWJQYWdlOjpzZXRBY2NlbnRDb2xvcihXZWJD
b3JlOjpDbwogICAgIFtOU0FwcCBfc2V0QWNjZW50Q29sb3I6Y29sb3IuaXNWYWxpZCgpID8gV2Vi
Q29yZTo6bnNDb2xvcihjb2xvcikgOiBuaWxdOwogfQogCi0jZW5kaWYKKyNlbmRpZiAvLyBIQVZF
KEFQUF9BQ0NFTlRfQ09MT1JTKQorCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKwor
dm9pZCBXZWJQYWdlOjp6b29tUERGSW4oUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQor
eworICAgIGF1dG8gcGRmUGx1Z2luID0gbV9wZGZQbHVnSW5zV2l0aEhVRC5nZXQoaWRlbnRpZmll
cik7CisgICAgaWYgKCFwZGZQbHVnaW4pCisgICAgICAgIHJldHVybjsKKyAgICBwZGZQbHVnaW4t
Pnpvb21JbigpOworfQorCit2b2lkIFdlYlBhZ2U6Onpvb21QREZPdXQoUERGUGx1Z2luSWRlbnRp
ZmllciBpZGVudGlmaWVyKQoreworICAgIGF1dG8gcGRmUGx1Z2luID0gbV9wZGZQbHVnSW5zV2l0
aEhVRC5nZXQoaWRlbnRpZmllcik7CisgICAgaWYgKCFwZGZQbHVnaW4pCisgICAgICAgIHJldHVy
bjsKKyAgICBwZGZQbHVnaW4tPnpvb21PdXQoKTsKK30KKwordm9pZCBXZWJQYWdlOjpzYXZlUERG
KFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChj
b25zdCBTdHJpbmcmLCBjb25zdCBVUkwmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBhdXRvIHBkZlBsdWdpbiA9IG1fcGRmUGx1Z0luc1dp
dGhIVUQuZ2V0KGlkZW50aWZpZXIpOworICAgIGlmICghcGRmUGx1Z2luKQorICAgICAgICByZXR1
cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9LCB7IH0sIHsgfSk7CisgICAgcGRmUGx1Z2luLT5zYXZl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBXZWJQYWdlOjpvcGVuUERG
V2l0aFByZXZpZXcoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYsIEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgSVBDOjpEYXRh
UmVmZXJlbmNlJiwgY29uc3QgU3RyaW5nJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAg
YXV0byBwZGZQbHVnaW4gPSBtX3BkZlBsdWdJbnNXaXRoSFVELmdldChpZGVudGlmaWVyKTsKKyAg
ICBpZiAoIXBkZlBsdWdpbikKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSwg
eyB9LCB7IH0sIHsgfSk7CisgICAgcGRmUGx1Z2luLT5vcGVuV2l0aFByZXZpZXcoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIFdlYlBhZ2U6OmNyZWF0ZVBERkhVRChQREZQ
bHVnaW4mIHBsdWdpbiwgY29uc3QgSW50UmVjdCYgYm91bmRpbmdCb3gpCit7CisgICAgYXV0byBh
ZGRSZXN1bHQgPSBtX3BkZlBsdWdJbnNXaXRoSFVELmFkZChwbHVnaW4uaWRlbnRpZmllcigpLCBt
YWtlV2Vha1B0cihwbHVnaW4pKTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAg
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Q3JlYXRlUERGSFVEKHBsdWdpbi5pZGVu
dGlmaWVyKCksIGJvdW5kaW5nQm94KSk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6dXBkYXRlUERGSFVE
TG9jYXRpb24oUERGUGx1Z2luJiBwbHVnaW4sIGNvbnN0IEludFJlY3QmIGJvdW5kaW5nQm94KQor
eworICAgIGlmIChtX3BkZlBsdWdJbnNXaXRoSFVELmNvbnRhaW5zKHBsdWdpbi5pZGVudGlmaWVy
KCkpKQorICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlVwZGF0ZVBERkhVRExv
Y2F0aW9uKHBsdWdpbi5pZGVudGlmaWVyKCksIGJvdW5kaW5nQm94KSk7Cit9CisKK3ZvaWQgV2Vi
UGFnZTo6cmVtb3ZlUERGSFVEKFBERlBsdWdpbiYgcGx1Z2luKQoreworICAgIGlmIChtX3BkZlBs
dWdJbnNXaXRoSFVELnJlbW92ZShwbHVnaW4uaWRlbnRpZmllcigpKSkKKyAgICAgICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSZW1vdmVQREZIVUQocGx1Z2luLmlkZW50aWZpZXIoKSkp
OworfQorCisjZW5kaWYgLy8gRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CiAKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NjE1NCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDIwLTA4LTI1ICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBQREYgaGVhZHMtdXAgZGlz
cGxheSB0byBVSSBwcm9jZXNzIG9uIG1hY09TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU3ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU4NzE1
ODQ3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1BERlZpZXcubW06CisgICAgICAgIChw
ZGZEYXRhKToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAoY2hlY2tGcmFtZSk6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0VUlEZWxlZ2F0ZS5oOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvY29jb2EvVGVzdFVJRGVsZWdhdGUubW06CisgICAgICAgICgtW1Rlc3RVSURlbGVn
YXRlIF93ZWJWaWV3OnNhdmVEYXRhVG9GaWxlOnN1Z2dlc3RlZEZpbGVuYW1lOm1pbWVUeXBlOm9y
aWdpbmF0aW5nVVJMOl0pOgorCiAyMDIwLTA4LTI1ICBDYXJsb3MgQWxiZXJ0byBMb3BleiBQZXJl
eiAgPGNsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdW1dQRV0gQWRkIGEgc2NyaXB0
IGZvciBnZW5lcmF0aW5nIE1pbmlCcm93c2VyIGJ1bmRsZXMgKGZvbGxvdy11cCBmaXgpCkluZGV4
OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLUERGVmlldy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLUERGVmll
dy5tbQkocmV2aXNpb24gMjY2MTU0KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9XS1BERlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwyNiBAQAog
I2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKICNpbXBvcnQgIlRlc3QuaCIKICNpbXBvcnQg
IlRlc3ROYXZpZ2F0aW9uRGVsZWdhdGUuaCIKKyNpbXBvcnQgIlRlc3RVSURlbGVnYXRlLmgiCisj
aW1wb3J0ICJUZXN0VVJMU2NoZW1lSGFuZGxlci5oIgorI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5o
IgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlldy5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmll
d0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0
ZUZvclRlc3RpbmcuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAotI2lmIEhBVkUoUERG
S0lUKSAmJiBQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorI2ltcG9ydCA8Q2FyYm9u
L0NhcmJvbi5oPgorI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpIHx8IEVOQUJMRShVSV9QUk9D
RVNTX1BERl9IVUQpCitzdGF0aWMgTlNEYXRhICpwZGZEYXRhKCkKK3sKKyAgICByZXR1cm4gW05T
RGF0YSBkYXRhV2l0aENvbnRlbnRzT2ZVUkw6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JS
ZXNvdXJjZTpAInRlc3QiIHdpdGhFeHRlbnNpb246QCJwZGYiIHN1YmRpcmVjdG9yeTpAIlRlc3RX
ZWJLaXRBUEkucmVzb3VyY2VzIl1dOworfQorI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpCiAK
IEBpbnRlcmZhY2UgUERGSG9zdFZpZXdDb250cm9sbGVyIDogVUlWaWV3Q29udHJvbGxlcgogKyAo
dm9pZCljcmVhdGVIb3N0Vmlldzoodm9pZCheKShpZCBob3N0Vmlld0NvbnRyb2xsZXIpKWNhbGxi
YWNrIGZvckV4dGVuc2lvbklkZW50aWZpZXI6KE5TU3RyaW5nICopZXh0ZW5zaW9uSWRlbnRpZmll
cjsKQEAgLTEwMSw3ICsxMTYsNyBAQCBURVNUKFdlYktpdCwgV0tQREZWaWV3TG9zZXNBcHBsaWNh
dGlvbkZvCiAgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29u
ZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKICAgICAvLyBMb2FkIGEgUERGLCBz
byB3ZSBpbnN0YWxsIGEgV0tQREZWaWV3LgotICAgIFt3ZWJWaWV3IGxvYWREYXRhOltOU0RhdGEg
ZGF0YVdpdGhDb250ZW50c09mVVJMOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3Vy
Y2U6QCJ0ZXN0IiB3aXRoRXh0ZW5zaW9uOkAicGRmIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0
QVBJLnJlc291cmNlcyJdXSBNSU1FVHlwZTpAImFwcGxpY2F0aW9uL3BkZiIgY2hhcmFjdGVyRW5j
b2RpbmdOYW1lOkAiIiBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly93d3cu
YXBwbGUuY29tLzAiXV07CisgICAgW3dlYlZpZXcgbG9hZERhdGE6cGRmRGF0YSBNSU1FVHlwZTpA
ImFwcGxpY2F0aW9uL3BkZiIgY2hhcmFjdGVyRW5jb2RpbmdOYW1lOkAiIiBiYXNlVVJMOltOU1VS
TCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly93d3cuYXBwbGUuY29tLzAiXV07CiAgICAgW3dlYlZp
ZXcgX3Rlc3Rfd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOwogCiAgICAgLy8gR28gaW50byB0
aGUgYmFja2dyb3VuZCBhbmQgcGFyZW50IHRoZSBXS1dlYlZpZXcuCkBAIC0xMzIsMyArMTQ3LDIw
OCBAQCBURVNUKFdlYktpdCwgV0tQREZWaWV3TG9zZXNBcHBsaWNhdGlvbkZvCiB9CiAKICNlbmRp
ZgorCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKworc3RhdGljIHZvaWQgY2hlY2tG
cmFtZShOU1JlY3QgZnJhbWUsIENHRmxvYXQgeCwgQ0dGbG9hdCB5LCBDR0Zsb2F0IHdpZHRoLCBD
R0Zsb2F0IGhlaWdodCkKK3sKKyAgICBFWFBFQ1RfRVEoZnJhbWUub3JpZ2luLngsIHgpOworICAg
IEVYUEVDVF9FUShmcmFtZS5vcmlnaW4ueSwgeSk7CisgICAgRVhQRUNUX0VRKGZyYW1lLnNpemUu
d2lkdGgsIHdpZHRoKTsKKyAgICBFWFBFQ1RfRVEoZnJhbWUuc2l6ZS5oZWlnaHQsIGhlaWdodCk7
Cit9CisKK1RFU1QoUERGSFVELCBNYWluUmVzb3VyY2VQREYpCit7CisgICAgVGVzdFdLV2ViVmll
dyAqd2ViVmlldyA9IFtbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtl
UmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpbW1dLV2ViVmlld0NvbmZpZ3VyYXRp
b24gbmV3XSBhdXRvcmVsZWFzZV1dIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldyBsb2FkRGF0
YTpwZGZEYXRhKCkgTUlNRVR5cGU6QCJhcHBsaWNhdGlvbi9wZGYiIGNoYXJhY3RlckVuY29kaW5n
TmFtZTpAIiIgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHBzOi8vd3d3LmFwcGxl
LmNvbS90ZXN0UGF0aCJdXTsKKyAgICBFWFBFQ1RfRVEod2ViVmlldy5fcGRmSFVEcy5jb3VudCwg
MHUpOworICAgIFt3ZWJWaWV3IF90ZXN0X3dhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKKyAg
ICBFWFBFQ1RfRVEod2ViVmlldy5fcGRmSFVEcy5jb3VudCwgMXUpOworICAgIGNoZWNrRnJhbWUo
d2ViVmlldy5fcGRmSFVEcy5hbnlPYmplY3QuZnJhbWUsIDAsIDAsIDgwMCwgNjAwKTsKKyAgICAK
KyAgICBUZXN0VUlEZWxlZ2F0ZSAqZGVsZWdhdGUgPSBbW1Rlc3RVSURlbGVnYXRlIG5ld10gYXV0
b3JlbGVhc2VdOworICAgIHdlYlZpZXcuVUlEZWxlZ2F0ZSA9IGRlbGVnYXRlOworICAgIF9fYmxv
Y2sgYm9vbCBzYXZlUmVxdWVzdFJlY2VpdmVkID0gZmFsc2U7CisgICAgZGVsZWdhdGUuc2F2ZURh
dGFUb0ZpbGUgPSBeKFdLV2ViVmlldyAqd2ViVmlld0Zyb21EZWxlZ2F0ZSwgTlNEYXRhICpkYXRh
LCBOU1N0cmluZyAqc3VnZ2VzdGVkRmlsZW5hbWUsIE5TU3RyaW5nICptaW1lVHlwZSwgTlNVUkwg
Km9yaWdpbmF0aW5nVVJMKSB7CisgICAgICAgIEVYUEVDVF9FUSh3ZWJWaWV3LCB3ZWJWaWV3RnJv
bURlbGVnYXRlKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoW2RhdGEgaXNFcXVhbFRvRGF0YTpwZGZE
YXRhKCldKTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKHN1Z2dlc3RlZEZpbGVuYW1lLCAidGVz
dFBhdGgucGRmIik7CisgICAgICAgIEVYUEVDVF9XS19TVFJFUShtaW1lVHlwZSwgImFwcGxpY2F0
aW9uL3BkZiIpOworICAgICAgICBzYXZlUmVxdWVzdFJlY2VpdmVkID0gdHJ1ZTsKKyAgICB9Owor
ICAgIFtbd2ViVmlldyBfcGRmSFVEc10uYW55T2JqZWN0IHBlcmZvcm1TZWxlY3RvcjpOU1NlbGVj
dG9yRnJvbVN0cmluZyhAIl9wZXJmb3JtQWN0aW9uRm9yQ29udHJvbDoiKSB3aXRoT2JqZWN0OkAi
YXJyb3cuZG93bi5jaXJjbGUiXTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnNhdmVS
ZXF1ZXN0UmVjZWl2ZWQpOworCisgICAgRVhQRUNUX0VRKHdlYlZpZXcuX3BkZkhVRHMuY291bnQs
IDF1KTsKKyAgICBbd2ViVmlldyBfa2lsbFdlYkNvbnRlbnRQcm9jZXNzXTsKKyAgICB3aGlsZSAo
d2ViVmlldy5fcGRmSFVEcy5jb3VudCkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3Bp
blJ1bkxvb3AoKTsKK30KKworVEVTVChQREZIVUQsIE1vdmVJRnJhbWUpCit7CisgICAgVGVzdFVS
TFNjaGVtZUhhbmRsZXIgKmhhbmRsZXIgPSBbW1Rlc3RVUkxTY2hlbWVIYW5kbGVyIG5ld10gYXV0
b3JlbGVhc2VdOworICAgIGhhbmRsZXIuc3RhcnRVUkxTY2hlbWVUYXNrSGFuZGxlciA9IF4oV0tX
ZWJWaWV3ICosIGlkPFdLVVJMU2NoZW1lVGFzaz4gdGFzaykgeworICAgICAgICBpZiAoW3Rhc2su
cmVxdWVzdC5VUkwucGF0aCBpc0VxdWFsVG9TdHJpbmc6QCIvbWFpbi5odG1sIl0pIHsKKyAgICAg
ICAgICAgIE5TVVJMUmVzcG9uc2UgKnJlc3BvbnNlID0gW1tbTlNVUkxSZXNwb25zZSBhbGxvY10g
aW5pdFdpdGhVUkw6dGFzay5yZXF1ZXN0LlVSTCBNSU1FVHlwZTpAInRleHQvaHRtbCIgZXhwZWN0
ZWRDb250ZW50TGVuZ3RoOjAgdGV4dEVuY29kaW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNlXTsKKyAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIGh0bWwgPSAiPGJyLz48aWZyYW1lIHNyYz0ndGVzdC5wZGYn
IGlkPSdwZGZmcmFtZSc+PC9pZnJhbWU+IjsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVS
ZXNwb25zZTpyZXNwb25zZV07CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpbTlNE
YXRhIGRhdGFXaXRoQnl0ZXM6aHRtbCBsZW5ndGg6c3RybGVuKGh0bWwpXV07CisgICAgICAgICAg
ICBbdGFzayBkaWRGaW5pc2hdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgRVhQRUNU
X1dLX1NUUkVRKHRhc2sucmVxdWVzdC5VUkwucGF0aCwgIi90ZXN0LnBkZiIpOworICAgICAgICAg
ICAgTlNEYXRhICpkYXRhID0gcGRmRGF0YSgpOworICAgICAgICAgICAgTlNVUkxSZXNwb25zZSAq
cmVzcG9uc2UgPSBbW1tOU1VSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0YXNrLnJlcXVl
c3QuVVJMIE1JTUVUeXBlOkAiYXBwbGljYXRpb24vcGRmIiBleHBlY3RlZENvbnRlbnRMZW5ndGg6
ZGF0YS5sZW5ndGggdGV4dEVuY29kaW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAg
ICAgIFt0YXNrIGRpZFJlY2VpdmVSZXNwb25zZTpyZXNwb25zZV07CisgICAgICAgICAgICBbdGFz
ayBkaWRSZWNlaXZlRGF0YTpkYXRhXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZEZpbmlzaF07Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJh
dGlvbiA9IFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBb
Y29uZmlndXJhdGlvbiBzZXRVUkxTY2hlbWVIYW5kbGVyOmhhbmRsZXIgZm9yVVJMU2NoZW1lOkAi
dGVzdCJdOworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcgPSBbW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRp
b246Y29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0
OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJ0ZXN0
Oi8vL21haW4uaHRtbCJdXV07CisgICAgRVhQRUNUX0VRKHdlYlZpZXcuX3BkZkhVRHMuY291bnQs
IDB1KTsKKyAgICBbd2ViVmlldyBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07Cisg
ICAgRVhQRUNUX0VRKHdlYlZpZXcuX3BkZkhVRHMuY291bnQsIDF1KTsKKyAgICBjaGVja0ZyYW1l
KHdlYlZpZXcuX3BkZkhVRHMuYW55T2JqZWN0LmZyYW1lLCAxMCwgMjgsIDMwMCwgMTUwKTsKKwor
ICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAInBkZmZyYW1lLndpZHRoPTQwMCIgY29t
cGxldGlvbkhhbmRsZXI6bmlsXTsKKyAgICB3aGlsZSAod2ViVmlldy5fcGRmSFVEcy5hbnlPYmpl
Y3QuZnJhbWUuc2l6ZS53aWR0aCAhPSA0MDApCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnNwaW5SdW5Mb29wKCk7CisgICAgY2hlY2tGcmFtZSh3ZWJWaWV3Ll9wZGZIVURzLmFueU9iamVj
dC5mcmFtZSwgMTAsIDI4LCA0MDAsIDE1MCk7CisKKyAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFT
Y3JpcHQ6QCJ2YXIgZnJhbWVSZWZlcmVuY2UgPSBwZGZmcmFtZTsgZG9jdW1lbnQuYm9keS5yZW1v
dmVDaGlsZChwZGZmcmFtZSkiIGNvbXBsZXRpb25IYW5kbGVyOm5pbF07CisgICAgd2hpbGUgKHdl
YlZpZXcuX3BkZkhVRHMuY291bnQpCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5S
dW5Mb29wKCk7CisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9k
eS5hcHBlbmRDaGlsZChmcmFtZVJlZmVyZW5jZSkiIGNvbXBsZXRpb25IYW5kbGVyOm5pbF07Cisg
ICAgd2hpbGUgKCF3ZWJWaWV3Ll9wZGZIVURzLmNvdW50KQorICAgICAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpzcGluUnVuTG9vcCgpOworICAgIEVYUEVDVF9FUSh3ZWJWaWV3Ll9wZGZIVURzLmNv
dW50LCAxdSk7CisgICAgY2hlY2tGcmFtZSh3ZWJWaWV3Ll9wZGZIVURzLmFueU9iamVjdC5mcmFt
ZSwgMCwgMCwgMCwgMCk7CisgICAgd2hpbGUgKHdlYlZpZXcuX3BkZkhVRHMuYW55T2JqZWN0LmZy
YW1lLnNpemUud2lkdGggIT0gNDAwKQorICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGlu
UnVuTG9vcCgpOworICAgIEVYUEVDVF9FUSh3ZWJWaWV3Ll9wZGZIVURzLmNvdW50LCAxdSk7Cisg
ICAgY2hlY2tGcmFtZSh3ZWJWaWV3Ll9wZGZIVURzLmFueU9iamVjdC5mcmFtZSwgMTAsIDI4LCA0
MDAsIDE1MCk7CisKKyAgICB3ZWJWaWV3LnBhZ2Vab29tID0gMS40OworICAgIHdoaWxlICh3ZWJW
aWV3Ll9wZGZIVURzLmFueU9iamVjdC5mcmFtZS5zaXplLndpZHRoICE9IDU2MCkKKyAgICAgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoKTsKKyAgICBFWFBFQ1RfRVEod2ViVmll
dy5fcGRmSFVEcy5jb3VudCwgMXUpOworICAgIGNoZWNrRnJhbWUod2ViVmlldy5fcGRmSFVEcy5h
bnlPYmplY3QuZnJhbWUsIDE0LCA0MCwgNTYwLCAyMTApOworfQorCitURVNUKFBERkhVRCwgTmVz
dGVkSUZyYW1lcykKK3sKKyAgICBUZXN0VVJMU2NoZW1lSGFuZGxlciAqaGFuZGxlciA9IFtbVGVz
dFVSTFNjaGVtZUhhbmRsZXIgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgaGFuZGxlci5zdGFydFVS
TFNjaGVtZVRhc2tIYW5kbGVyID0gXihXS1dlYlZpZXcgKiwgaWQ8V0tVUkxTY2hlbWVUYXNrPiB0
YXNrKSB7CisgICAgICAgIE5TVVJMUmVzcG9uc2UgKmh0bWxSZXNwb25zZSA9IFtbW05TVVJMUmVz
cG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVxdWVzdC5VUkwgTUlNRVR5cGU6QCJ0ZXh0
L2h0bWwiIGV4cGVjdGVkQ29udGVudExlbmd0aDowIHRleHRFbmNvZGluZ05hbWU6bmlsXSBhdXRv
cmVsZWFzZV07CisgICAgICAgIGlmIChbdGFzay5yZXF1ZXN0LlVSTC5wYXRoIGlzRXF1YWxUb1N0
cmluZzpAIi9tYWluLmh0bWwiXSkgeworICAgICAgICAgICAgY29uc3QgY2hhciogaHRtbCA9ICI8
aWZyYW1lIHNyYz0nZnJhbWUuaHRtbCcgaWQ9J3BhcmVudGZyYW1lJz48L2lmcmFtZT4iOworICAg
ICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3BvbnNlOmh0bWxSZXNwb25zZV07CisgICAgICAg
ICAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6aHRtbCBsZW5n
dGg6c3RybGVuKGh0bWwpXV07CisgICAgICAgICAgICBbdGFzayBkaWRGaW5pc2hdOworICAgICAg
ICB9IGVsc2UgaWYgKFt0YXNrLnJlcXVlc3QuVVJMLnBhdGggaXNFcXVhbFRvU3RyaW5nOkAiL2Zy
YW1lLmh0bWwiXSkgeworICAgICAgICAgICAgY29uc3QgY2hhciogaHRtbCA9ICI8aWZyYW1lIHNy
Yz0ndGVzdC5wZGYnPjwvaWZyYW1lPiI7CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlUmVz
cG9uc2U6aHRtbFJlc3BvbnNlXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVEYXRhOltO
U0RhdGEgZGF0YVdpdGhCeXRlczpodG1sIGxlbmd0aDpzdHJsZW4oaHRtbCldXTsKKyAgICAgICAg
ICAgIFt0YXNrIGRpZEZpbmlzaF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBFWFBF
Q1RfV0tfU1RSRVEodGFzay5yZXF1ZXN0LlVSTC5wYXRoLCAiL3Rlc3QucGRmIik7CisgICAgICAg
ICAgICBOU0RhdGEgKmRhdGEgPSBwZGZEYXRhKCk7CisgICAgICAgICAgICBOU1VSTFJlc3BvbnNl
ICpyZXNwb25zZSA9IFtbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVx
dWVzdC5VUkwgTUlNRVR5cGU6QCJhcHBsaWNhdGlvbi9wZGYiIGV4cGVjdGVkQ29udGVudExlbmd0
aDpkYXRhLmxlbmd0aCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0gYXV0b3JlbGVhc2VdOworICAgICAg
ICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3BvbnNlOnJlc3BvbnNlXTsKKyAgICAgICAgICAgIFt0
YXNrIGRpZFJlY2VpdmVEYXRhOmRhdGFdOworICAgICAgICAgICAgW3Rhc2sgZGlkRmluaXNoXTsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICBXS1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1
cmF0aW9uID0gW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIG5ld10gYXV0b3JlbGVhc2VdOworICAg
IFtjb25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6aGFuZGxlciBmb3JVUkxTY2hlbWU6
QCJ0ZXN0Il07CisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldyA9IFtbW1Rlc3RXS1dlYlZpZXcg
YWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJh
dGlvbjpjb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZpZXcgbG9hZFJlcXVl
c3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAInRl
c3Q6Ly8vbWFpbi5odG1sIl1dXTsKKyAgICBFWFBFQ1RfRVEod2ViVmlldy5fcGRmSFVEcy5jb3Vu
dCwgMHUpOworICAgIFt3ZWJWaWV3IF90ZXN0X3dhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsK
KyAgICBFWFBFQ1RfRVEod2ViVmlldy5fcGRmSFVEcy5jb3VudCwgMXUpOworICAgIGNoZWNrRnJh
bWUod2ViVmlldy5fcGRmSFVEcy5hbnlPYmplY3QuZnJhbWUsIDIwLCAyMCwgMzAwLCAxNTApOwor
ICAgIAorICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkucmVt
b3ZlQ2hpbGQocGFyZW50ZnJhbWUpIiBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOworICAgIHdoaWxl
ICh3ZWJWaWV3Ll9wZGZIVURzLmNvdW50KQorICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpz
cGluUnVuTG9vcCgpOworfQorCitURVNUKFBERkhVRCwgSUZyYW1lM0RUcmFuc2Zvcm0pCit7Cisg
ICAgVGVzdFVSTFNjaGVtZUhhbmRsZXIgKmhhbmRsZXIgPSBbW1Rlc3RVUkxTY2hlbWVIYW5kbGVy
IG5ld10gYXV0b3JlbGVhc2VdOworICAgIGhhbmRsZXIuc3RhcnRVUkxTY2hlbWVUYXNrSGFuZGxl
ciA9IF4oV0tXZWJWaWV3ICosIGlkPFdLVVJMU2NoZW1lVGFzaz4gdGFzaykgeworICAgICAgICBO
U1VSTFJlc3BvbnNlICpodG1sUmVzcG9uc2UgPSBbW1tOU1VSTFJlc3BvbnNlIGFsbG9jXSBpbml0
V2l0aFVSTDp0YXNrLnJlcXVlc3QuVVJMIE1JTUVUeXBlOkAidGV4dC9odG1sIiBleHBlY3RlZENv
bnRlbnRMZW5ndGg6MCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0gYXV0b3JlbGVhc2VdOworICAgICAg
ICBpZiAoW3Rhc2sucmVxdWVzdC5VUkwucGF0aCBpc0VxdWFsVG9TdHJpbmc6QCIvbWFpbi5odG1s
Il0pIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGh0bWwgPSAiPGlmcmFtZSBzcmM9J3Rlc3Qu
cGRmJyBoZWlnaHQ9NTAwIHdpZHRoPTUwMCBzdHlsZT0ndHJhbnNmb3JtOnJvdGF0ZVkoMjM1ZGVn
KTsnPjwvaWZyYW1lPiI7CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6aHRt
bFJlc3BvbnNlXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVEYXRhOltOU0RhdGEgZGF0
YVdpdGhCeXRlczpodG1sIGxlbmd0aDpzdHJsZW4oaHRtbCldXTsKKyAgICAgICAgICAgIFt0YXNr
IGRpZEZpbmlzaF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBFWFBFQ1RfV0tfU1RS
RVEodGFzay5yZXF1ZXN0LlVSTC5wYXRoLCAiL3Rlc3QucGRmIik7CisgICAgICAgICAgICBOU0Rh
dGEgKmRhdGEgPSBwZGZEYXRhKCk7CisgICAgICAgICAgICBOU1VSTFJlc3BvbnNlICpyZXNwb25z
ZSA9IFtbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVxdWVzdC5VUkwg
TUlNRVR5cGU6QCJhcHBsaWNhdGlvbi9wZGYiIGV4cGVjdGVkQ29udGVudExlbmd0aDpkYXRhLmxl
bmd0aCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0gYXV0b3JlbGVhc2VdOworICAgICAgICAgICAgW3Rh
c2sgZGlkUmVjZWl2ZVJlc3BvbnNlOnJlc3BvbnNlXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJl
Y2VpdmVEYXRhOmRhdGFdOworICAgICAgICAgICAgW3Rhc2sgZGlkRmluaXNoXTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICBXS1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0g
W1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIG5ld10gYXV0b3JlbGVhc2VdOworICAgIFtjb25maWd1
cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6aGFuZGxlciBmb3JVUkxTY2hlbWU6QCJ0ZXN0Il07
CisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldyA9IFtbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25m
aWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJM
UmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAInRlc3Q6Ly8vbWFp
bi5odG1sIl1dXTsKKyAgICBFWFBFQ1RfRVEod2ViVmlldy5fcGRmSFVEcy5jb3VudCwgMHUpOwor
ICAgIFt3ZWJWaWV3IF90ZXN0X3dhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKKyAgICBFWFBF
Q1RfRVEod2ViVmlldy5fcGRmSFVEcy5jb3VudCwgMXUpOworICAgIGNoZWNrRnJhbWUod2ViVmll
dy5fcGRmSFVEcy5hbnlPYmplY3QuZnJhbWUsIDQwMywgMTAsIDUwMCwgNTAwKTsKK30KKworVEVT
VChQREZIVUQsIE11bHRpcGxlSUZyYW1lcykKK3sKKyAgICBUZXN0VVJMU2NoZW1lSGFuZGxlciAq
aGFuZGxlciA9IFtbVGVzdFVSTFNjaGVtZUhhbmRsZXIgbmV3XSBhdXRvcmVsZWFzZV07CisgICAg
aGFuZGxlci5zdGFydFVSTFNjaGVtZVRhc2tIYW5kbGVyID0gXihXS1dlYlZpZXcgKiwgaWQ8V0tV
UkxTY2hlbWVUYXNrPiB0YXNrKSB7CisgICAgICAgIE5TVVJMUmVzcG9uc2UgKmh0bWxSZXNwb25z
ZSA9IFtbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVxdWVzdC5VUkwg
TUlNRVR5cGU6QCJ0ZXh0L2h0bWwiIGV4cGVjdGVkQ29udGVudExlbmd0aDowIHRleHRFbmNvZGlu
Z05hbWU6bmlsXSBhdXRvcmVsZWFzZV07CisgICAgICAgIGlmIChbdGFzay5yZXF1ZXN0LlVSTC5w
YXRoIGlzRXF1YWxUb1N0cmluZzpAIi9tYWluLmh0bWwiXSkgeworICAgICAgICAgICAgY29uc3Qg
Y2hhciogaHRtbCA9ICI8aWZyYW1lIHNyYz0ndGVzdC5wZGYnIGhlaWdodD0xMDAgd2lkdGg9MTUw
PjwvaWZyYW1lPjxpZnJhbWUgc3JjPSd0ZXN0LnBkZicgaGVpZ2h0PTEyMyB3aWR0aD0xMzQ+PC9p
ZnJhbWU+IjsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVSZXNwb25zZTpodG1sUmVzcG9u
c2VdOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZURhdGE6W05TRGF0YSBkYXRhV2l0aEJ5
dGVzOmh0bWwgbGVuZ3RoOnN0cmxlbihodG1sKV1dOworICAgICAgICAgICAgW3Rhc2sgZGlkRmlu
aXNoXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEVYUEVDVF9XS19TVFJFUSh0YXNr
LnJlcXVlc3QuVVJMLnBhdGgsICIvdGVzdC5wZGYiKTsKKyAgICAgICAgICAgIE5TRGF0YSAqZGF0
YSA9IHBkZkRhdGEoKTsKKyAgICAgICAgICAgIE5TVVJMUmVzcG9uc2UgKnJlc3BvbnNlID0gW1tb
TlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGFzay5yZXF1ZXN0LlVSTCBNSU1FVHlw
ZTpAImFwcGxpY2F0aW9uL3BkZiIgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOmRhdGEubGVuZ3RoIHRl
eHRFbmNvZGluZ05hbWU6bmlsXSBhdXRvcmVsZWFzZV07CisgICAgICAgICAgICBbdGFzayBkaWRS
ZWNlaXZlUmVzcG9uc2U6cmVzcG9uc2VdOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZURh
dGE6ZGF0YV07CisgICAgICAgICAgICBbdGFzayBkaWRGaW5pc2hdOworICAgICAgICB9CisgICAg
fTsKKworICAgIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbW1dLV2Vi
Vmlld0NvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07CisgICAgW2NvbmZpZ3VyYXRpb24g
c2V0VVJMU2NoZW1lSGFuZGxlcjpoYW5kbGVyIGZvclVSTFNjaGVtZTpAInRlc3QiXTsKKyAgICBU
ZXN0V0tXZWJWaWV3ICp3ZWJWaWV3ID0gW1tbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRp
b25dIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0
IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAidGVzdDovLy9tYWluLmh0bWwi
XV1dOworICAgIEVYUEVDVF9FUSh3ZWJWaWV3Ll9wZGZIVURzLmNvdW50LCAwdSk7CisgICAgW3dl
YlZpZXcgX3Rlc3Rfd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOworICAgIEVYUEVDVF9FUSh3
ZWJWaWV3Ll9wZGZIVURzLmNvdW50LCAydSk7CisgICAgYm9vbCBoYWRMZWZ0RnJhbWUgPSBmYWxz
ZTsKKyAgICBib29sIGhhZFJpZ2h0RnJhbWUgPSBmYWxzZTsKKyAgICBmb3IgKE5TVmlldyAqaHVk
IGluIHdlYlZpZXcuX3BkZkhVRHMpIHsKKyAgICAgICAgaWYgKGh1ZC5mcmFtZS5vcmlnaW4ueCA9
PSAxMCkgeworICAgICAgICAgICAgY2hlY2tGcmFtZShodWQuZnJhbWUsIDEwLCAzMywgMTUwLCAx
MDApOworICAgICAgICAgICAgaGFkTGVmdEZyYW1lID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGNoZWNrRnJhbWUoaHVkLmZyYW1lLCAxNjQsIDEwLCAxMzQsIDEyMyk7Cisg
ICAgICAgICAgICBoYWRSaWdodEZyYW1lID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBF
WFBFQ1RfVFJVRShoYWRMZWZ0RnJhbWUpOworICAgIEVYUEVDVF9UUlVFKGhhZFJpZ2h0RnJhbWUp
OworfQorCisjZW5kaWYKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFVJRGVs
ZWdhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RVSURl
bGVnYXRlLmgJKHJldmlzaW9uIDI2NjE1NCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2Ev
VGVzdFVJRGVsZWdhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmIFBM
QVRGT1JNKE1BQykKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSB2b2lkICheZ2V0Q29udGV4
dE1lbnVGcm9tUHJvcG9zZWRNZW51KShOU01lbnUgKiwgX1dLQ29udGV4dE1lbnVFbGVtZW50SW5m
byAqLCBpZCA8TlNTZWN1cmVDb2Rpbmc+LCB2b2lkICheKShOU01lbnUgKikpOwogI2VuZGlmCitA
cHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgdm9pZCAoXnNhdmVEYXRhVG9GaWxlKShXS1dlYlZp
ZXcgKiwgTlNEYXRhICosIE5TU3RyaW5nICosIE5TU3RyaW5nICosIE5TVVJMICopOwogCiAtIChO
U1N0cmluZyAqKXdhaXRGb3JBbGVydDsKIApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9jb2Nv
YS9UZXN0VUlEZWxlZ2F0ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL2Nv
Y29hL1Rlc3RVSURlbGVnYXRlLm1tCShyZXZpc2lvbiAyNjYxNTQpCisrKyBUb29scy9UZXN0V2Vi
S2l0QVBJL2NvY29hL1Rlc3RVSURlbGVnYXRlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1
MCwxMiBAQCAtICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGdlCiB9CiAjZW5k
aWYgLy8gUExBVEZPUk0oTUFDKQogCistICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJW
aWV3IHNhdmVEYXRhVG9GaWxlOihOU0RhdGEgKilkYXRhIHN1Z2dlc3RlZEZpbGVuYW1lOihOU1N0
cmluZyAqKXN1Z2dlc3RlZEZpbGVuYW1lIG1pbWVUeXBlOihOU1N0cmluZyAqKW1pbWVUeXBlIG9y
aWdpbmF0aW5nVVJMOihOU1VSTCAqKXVybAoreworICAgIGlmIChfc2F2ZURhdGFUb0ZpbGUpCisg
ICAgICAgIF9zYXZlRGF0YVRvRmlsZSh3ZWJWaWV3LCBkYXRhLCBzdWdnZXN0ZWRGaWxlbmFtZSwg
bWltZVR5cGUsIHVybCk7Cit9CisKIC0gKE5TU3RyaW5nICopd2FpdEZvckFsZXJ0CiB7CiAgICAg
RVhQRUNUX0ZBTFNFKHNlbGYucnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407263</attachid>
            <date>2020-08-25 19:38:32 -0700</date>
            <delta_ts>2020-08-28 11:32:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215780-20200825193831.patch</filename>
            <type>text/plain</type>
            <size>79971</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjYxNTQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA4LTI1ICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBQREYgaGVhZHMtdXAgZGlz
cGxheSB0byBVSSBwcm9jZXNzIG9uIG1hY09TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU3ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU4NzE1
ODQ3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
d3RmL1BsYXRmb3JtSGF2ZS5oOgorCiAyMDIwLTA4LTI1ICBQZXIgQXJuZSBWb2xsYW4gIDxwdm9s
bGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luXSBBc3NlcnQgZmFpbHVyZSB1bmRlciBSdW5M
b29wOjpSdW5Mb29wCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZUNvY29hLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGVDb2NvYS5oCShyZXZp
c2lvbiAyNjYxNTQpCisrKyBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZUNvY29hLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIyOCw2ICsyMjgsMTAgQEAKICNkZWZpbmUgRU5BQkxFX0dQVV9EUklW
RVJfUFJFV0FSTUlORyAxCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1Nf
WF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAwMDAKKyNkZWZpbmUgRU5BQkxFX1VJX1BST0NF
U1NfUERGX0hVRCAxCisjZW5kaWYKKwogI2lmICFkZWZpbmVkKEVOQUJMRV9JTkRFWEVEX0RBVEFC
QVNFKQogI2RlZmluZSBFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSAxCiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9OU0ltYWdlU1BJLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL05TSW1hZ2VTUEkuaAkocmV2aXNpb24gMjY2
MTU0KQorKysgU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvbWFjL05TSW1hZ2VTUEkuaAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNiArMzYsOCBAQAogTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KIAog
QGludGVyZmFjZSBOU0ltYWdlICgpCisrIChpbnN0YW5jZXR5cGUpaW1hZ2VXaXRoSW1hZ2VSZXA6
KE5TSW1hZ2VSZXAgKilpbWFnZVJlcDsKKy0gKGluc3RhbmNldHlwZSlfaW1hZ2VXaXRoQ29uZmln
dXJhdGlvbjooTlNEaWN0aW9uYXJ5ICopY29uZmlndXJhdGlvbjsKIC0gKHZvaWQpbG9ja0ZvY3Vz
V2l0aFJlY3Q6KE5TUmVjdClyZWN0IGNvbnRleHQ6KG51bGxhYmxlIE5TR3JhcGhpY3NDb250ZXh0
ICopY29udGV4dCBoaW50czoobnVsbGFibGUgTlNEaWN0aW9uYXJ5ICopaGludHMgZmxpcHBlZDoo
Qk9PTClmbGlwcGVkOwogQGVuZAogCkBAIC00Myw2ICs0NSwxMyBAQCBAaW50ZXJmYWNlIE5TSW1h
Z2UgKE5TU3lzdGVtU3ltYm9scykKICsgKG51bGxhYmxlIE5TSW1hZ2UgKilfaW1hZ2VXaXRoU3lz
dGVtU3ltYm9sTmFtZTooTlNTdHJpbmcgKikgc3ltYm9sTmFtZTsKIEBlbmQKIAorV1RGX0VYVEVS
Tl9DX0JFR0lOCisKK2V4dGVybiBjb25zdCBOU1N0cmluZyAqTlNJbWFnZUFsdGVybmF0ZUNyaXRl
cmlvbkZvbnQ7CitleHRlcm4gY29uc3QgTlNTdHJpbmcgKk5TSW1hZ2VBbHRlcm5hdGVDcml0ZXJp
b25TeW1ib2xTY2FsZTsKKworV1RGX0VYVEVSTl9DX0VORAorCiBOU19BU1NVTUVfTk9OTlVMTF9F
TkQKIAogI2VuZGlmCkBAIC01Niw2ICs2NSw2IEBAIGV4dGVybiBjb25zdCBOU0ltYWdlSGludEtl
eSBOU0ltYWdlSGludFMKIAogTlNfQVNTVU1FX05PTk5VTExfRU5ECiAKLSNlbmRpZgorI2VuZGlm
IC8vIEhBVkUoQUxURVJOQVRFX0lDT05TKQogCi0jZW5kaWYKKyNlbmRpZiAvLyBVU0UoQVBQTEVf
SU5URVJOQUxfU0RLKQpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NjE1NCkKKysrIFNvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTYgQEAKKzIwMjAtMDgt
MjUgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAg
ICBNb3ZlIFBERiBoZWFkcy11cCBkaXNwbGF5IHRvIFVJIHByb2Nlc3Mgb24gbWFjT1MKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTc4MAorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vNTg3MTU4NDc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBoYXMgbWFueSBiZW5lZml0cyBpbmNsdWRpbmcgdGhl
IG9uZSBpbiB0aGUgcmFkYXIsIHRlc3RhYmlsaXR5LCBhbmQgbW92aW5nIFdlYktpdC1zcGVjaWZp
YyBjb2RlIGZyb20gUERGS2l0IHRvIFdlYktpdC4KKworICAgICAgICBOb3cgdGhhdCB0aGUgSFVE
IGlzIGRpc3BsYXllZCBpbiB0aGUgVUkgcHJvY2VzcyBpbnN0ZWFkIG9mIGluIHRoZSB3ZWIgY29u
dGVudCwgem9vbWluZyBpbiBrZWVwcyB0aGUgSFVEIHRoZSBzYW1lIHNpemUuCisgICAgICAgIEEg
M2QtdHJhbnNmb3JtZWQgaWZyYW1lIHdpdGggYSBQREYgaW4gaXQgbm93IHNob3dzIHRoZSBIVUQg
aW4gdGhlIHBsYWNlIHlvdSBjYW4gY2xpY2sgb24gaXQsIGluc3RlYWQgb2YgaW4gdGhlIHRyYW5z
Zm9ybWVkIFBERi4KKyAgICAgICAgQWxzbywgbW92aW5nIHRoZSBtb3VzZSB0byB0aGUgSFVEIHdp
dGhpbiB0aGUgZmlyc3QgMyBzZWNvbmRzIHByZXZlbnRzIGl0IGZyb20gaGlkaW5nLCB3aGljaCBp
dCBkb2VzIHdoZW4gdGhlIG1vdXNlIGxlYXZlcyB0aGUgSFVELgorICAgICAgICBUaGUgcmVzdCBv
ZiB0aGUgYmVoYXZpb3IgSSB0aGluayBzaG91bGQgYmUgdGhlIHNhbWUuICBNb3N0IHVzZXJzIHNo
b3VsZCBub3Qgbm90aWNlIGFueSBkaWZmZXJlbmNlLgorCisgICAgICAgIEZ1bmN0aW9uYWxpdHkg
Y292ZXJlZCBieSBBUEkgdGVzdHMsIHRoZSBmaXJzdCB0ZXN0cyBmb3IgUERGIGNvbnRlbnQgaW50
ZXJhY3Rpb24hCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmg6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tOgorICAgICAgICAoLVtXS1ZpZXcgX2NyZWF0ZVBE
RkhVRDpyZWN0Ol0pOgorICAgICAgICAoLVtXS1ZpZXcgX3BkZkhVRDpjaGFuZ2VkTG9jYXRpb246
XSk6CisgICAgICAgICgtW1dLVmlldyBfcmVtb3ZlUERGSFVEOl0pOgorICAgICAgICAoLVtXS1Zp
ZXcgX3JlbW92ZUFsbFBERkhVRHNdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1dl
YlZpZXdNYWMubW06CisgICAgICAgICgtW1dLV2ViVmlldyBtb3VzZU1vdmVkOl0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgbW91c2VEb3duOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgbW91c2VV
cDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jcmVhdGVQREZIVUQ6cmVjdDpdKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9wZGZIVUQ6Y2hhbmdlZExvY2F0aW9uOl0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgX3JlbW92ZVBERkhVRDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZW1vdmVB
bGxQREZIVURzXSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3UHJpdmF0
ZUZvclRlc3RpbmdNYWMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdU
ZXN0aW5nTWFjLm1tOgorICAgICAgICAoLVtXS1dlYlZpZXcgcGRmSFVEc10pOgorICAgICAgICAq
IFVJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2Nv
YS9XZWJWaWV3SW1wbC5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNyZWF0ZVBE
RkhVRCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVQREZIVURMb2NhdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZW1vdmVQREZIVUQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cmVtb3ZlQWxsUERGSFVEcyk6CisgICAgICAgICogVUlQ
cm9jZXNzL1BhZ2VDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnByb2Nlc3NEaWRUZXJtaW5hdGUpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViUGFn
ZVByb3h5SU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNhdmVQREZUb1Rl
bXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24pOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6Om9wZW5QREZGcm9tVGVtcG9yYXJ5Rm9sZGVyV2l0
aE5hdGl2ZUFwcGxpY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1Bh
Z2VDbGllbnRJbXBsTWFjLmg6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1w
bE1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNyZWF0ZVBERkhVRCk6
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp1cGRhdGVQREZIVURMb2NhdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpyZW1vdmVQREZIVUQpOgorICAgICAg
ICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6cmVtb3ZlQWxsUERGSFVEcyk6CisgICAgICAgICog
VUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNh
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y3JlYXRlUERGSFVEKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZW1vdmVQREZIVUQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnVwZGF0ZVBERkhVRExvY2F0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpwZGZab29tSW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OnBkZlpvb21PdXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBkZlNhdmVU
b1BERik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGRmT3BlbldpdGhQcmV2aWV3
KToKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERkxheWVyQ29udHJvbGxlclNQSS5oOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmg6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW06CisgICAgICAgICgtW1dLUERGTGF5ZXJDb250
cm9sbGVyRGVsZWdhdGUgb3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbl0pOgorICAgICAgICAoLVtX
S1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlIHNhdmVUb1BERl0pOgorICAgICAgICAoV2ViS2l0
OjpQREZQbHVnaW46OlBERlBsdWdpbik6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6flBE
RlBsdWdpbik6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6ZnJhbWVGb3JIVUQgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmNhbGN1bGF0ZVNpemVzKToKKyAgICAgICAg
KFdlYktpdDo6UERGUGx1Z2luOjpjb252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3IGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjp2aXNpYmlsaXR5RGlkQ2hhbmdlKToKKyAgICAg
ICAgKFdlYktpdDo6UERGUGx1Z2luOjp6b29tSW4pOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVn
aW46Onpvb21PdXQpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnNhdmUpOgorICAgICAg
ICAoV2ViS2l0OjpQREZQbHVnaW46Om9wZW5XaXRoUHJldmlldyk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMu
aW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlOjp6b29tUERGSW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjp6b29tUERGT3V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2F2ZVBERik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6Om9wZW5QREZXaXRoUHJldmlldyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6OmNyZWF0ZVBERkhVRCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6
OnVwZGF0ZVBERkhVRExvY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVtb3Zl
UERGSFVEKToKKwogMjAyMC0wOC0yNSAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxl
LmNvbT4KIAogICAgICAgICBXZWIgU2hhcmUgQVBJIGNhbiBzaGFyZSBub24tSFRUUChTKSBVUkxz
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkJKHJldmlzaW9u
IDI2NjE1NCkKKysrIFNvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkJKHdv
cmtpbmcgY29weSkKQEAgLTI0Myw2ICsyNDMsNyBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVf
Zm9yd2FyZF9kZWNsYXJlCiAgICAgICAgICdXZWJLaXQ6Ok1ETlNSZWdpc3RlcklkZW50aWZpZXIn
LAogICAgICAgICAnV2ViS2l0OjpNZWRpYVBsYXllclByaXZhdGVSZW1vdGVJZGVudGlmaWVyJywK
ICAgICAgICAgJ1dlYktpdDo6TWVkaWFSZWNvcmRlcklkZW50aWZpZXInLAorICAgICAgICAnV2Vi
S2l0OjpQREZQbHVnaW5JZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6UGxheWJhY2tTZXNz
aW9uQ29udGV4dElkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpQbHVnaW5Qcm9jZXNzVHlw
ZScsCiAgICAgICAgICdXZWJLaXQ6OlJlbW90ZUF1ZGlvRGVzdGluYXRpb25JZGVudGlmaWVyJywK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHJldmlzaW9uIDI2NjE1NCkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJMYXllclRyZWVDb250
ZXh0LmgiCisjaW5jbHVkZSAiUERGUGx1Z2luSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlNhbWVE
b2N1bWVudE5hdmlnYXRpb25UeXBlLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAj
aW5jbHVkZSAiV2ViQ29sb3JQaWNrZXIuaCIKQEAgLTI0Miw2ICsyNDMsMTMgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkRm9yTWFpbkZyYW1lKCkgeyB9
OwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIGJvb2wgdXNlQ3VzdG9tQ29udGVudFByb3ZpZGVyKSA9IDA7CiAKKyNpZiBF
TkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVQREZIVUQo
UERGUGx1Z2luSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlUERGSFVETG9jYXRpb24oUERGUGx1Z2luSWRlbnRpZmllciwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlUERGSFVE
KFBERlBsdWdpbklkZW50aWZpZXIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQWxsUERG
SFVEcygpID0gMDsKKyNlbmRpZgorICAgIAogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVEb3dubG9h
ZFJlcXVlc3QoRG93bmxvYWRQcm94eSYpID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVS
dW5PcGVuUGFuZWwoV2ViUGFnZVByb3h5KiwgV2ViRnJhbWVQcm94eSosIGNvbnN0IEZyYW1lSW5m
b0RhdGEmLCBBUEk6Ok9wZW5QYW5lbFBhcmFtZXRlcnMqLCBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0
ZW5lclByb3h5KikgeyByZXR1cm4gZmFsc2U7IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gMjY2MTU0KQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc3MiwxNSArNDc3
MiwxNCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lCiAgICAgICAg
ICAgICBtX3BsdWdpblNjYWxlRmFjdG9yID0gMTsKICAgICAgICAgICAgIG1fbWFpbkZyYW1lUGx1
Z2luSGFuZGxlc1BhZ2VTY2FsZUdlc3R1cmUgPSBmYWxzZTsKICAgICAgICAgfQotICAgIH0KLQog
I2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCi0gICAgaWYgKGZyYW1lLT5pc01haW5GcmFtZSgpKQog
ICAgICAgICByZXF1ZXN0UG9pbnRlclVubG9jaygpOwogI2VuZGlmCi0KLSAgICBpZiAoZnJhbWUt
PmlzTWFpbkZyYW1lKCkpCiAgICAgICAgIHBhZ2VDbGllbnQoKS5zZXRNb3VzZUV2ZW50UG9saWN5
KG1vdXNlRXZlbnRQb2xpY3kpOworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAg
ICAgIHBhZ2VDbGllbnQoKS5yZW1vdmVBbGxQREZIVURzKCk7CisjZW5kaWYKKyAgICB9CiAKICAg
ICBtX3BhZ2VMb2FkU3RhdGUuY29tbWl0Q2hhbmdlcygpOwogICAgIGlmIChtX2xvYWRlckNsaWVu
dCkKQEAgLTc0NTIsNiArNzQ1MSw5IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpwcm9jZXNzRGlkVGVy
bWluYXRlKFAKIAogICAgIHJlc2V0U3RhdGVBZnRlclByb2Nlc3NFeGl0ZWQocmVhc29uKTsKICAg
ICBzdG9wQWxsVVJMU2NoZW1lVGFza3MobV9wcm9jZXNzLnB0cigpKTsKKyNpZiBFTkFCTEUoVUlf
UFJPQ0VTU19QREZfSFVEKQorICAgIHBhZ2VDbGllbnQoKS5yZW1vdmVBbGxQREZIVURzKCk7Cisj
ZW5kaWYKIAogICAgIC8vIEZvciBicmluZ3VwIG9mIHByb2Nlc3Mgc3dhcHBpbmcsIE5hdmlnYXRp
b25Td2FwIHRlcm1pbmF0aW9uIHdpbGwgbm90IGdvIG91dCB0byBjbGllbnRzLgogICAgIC8vIElm
IGl0IGRvZXMgKmR1cmluZyogcHJvY2VzcyBzd2FwcGluZywgYW5kIHRoZSBjbGllbnQgdHJpZ2dl
cnMgYSByZWxvYWQsIHRoYXQgY2F1c2VzIGJpemFycmUgV2ViS2l0IHJlLWVudHJ5LgpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDI2NjE1NCkKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgogI2luY2x1ZGUg
Ik1lc3NhZ2VTZW5kZXIuaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXJQcm94eS5oIgorI2luY2x1ZGUgIlBERlBsdWdpbklkZW50aWZpZXIuaCIKICNpbmNs
dWRlICJQYWdlTG9hZFN0YXRlLmgiCiAjaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMu
aCIKICNpbmNsdWRlICJQb2xpY3lEZWNpc2lvbi5oIgpAQCAtMTMxMSwxMCArMTMxMiwxMiBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIHNhdmVEYXRhVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIoU3RyaW5n
JiYgc3VnZ2VzdGVkRmlsZW5hbWUsIFN0cmluZyYmIG1pbWVUeXBlLCBVUkwmJiBvcmlnaW5hdGlu
Z1VSTCwgQVBJOjpEYXRhJik7CiAgICAgdm9pZCBzYXZlUERGVG9GaWxlSW5Eb3dubG9hZHNGb2xk
ZXIoU3RyaW5nJiYgc3VnZ2VzdGVkRmlsZW5hbWUsIFVSTCYmIG9yaWdpbmF0aW5nVVJMLCBjb25z
dCBJUEM6OkRhdGFSZWZlcmVuY2UmKTsKLSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBFTkFCTEUo
UERGS0lUX1BMVUdJTikKICAgICB2b2lkIHNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5X
aXRoTmF0aXZlQXBwbGljYXRpb24oY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgRnJh
bWVJbmZvRGF0YSYmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmIHBk
ZlVVSUQpOworI2lmICFFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQogICAgIHZvaWQgb3BlblBE
RkZyb21UZW1wb3JhcnlGb2xkZXJXaXRoTmF0aXZlQXBwbGljYXRpb24oRnJhbWVJbmZvRGF0YSYm
LCBjb25zdCBTdHJpbmcmIHBkZlVVSUQpOwogI2VuZGlmCisjZW5kaWYKIAogI2lmIEVOQUJMRShQ
REZLSVRfUExVR0lOKQogICAgIHZvaWQgc2hvd1BERkNvbnRleHRNZW51KGNvbnN0IFdlYktpdDo6
UERGQ29udGV4dE1lbnUmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPGludDMyX3Q+
JiYpPiYmKTsKQEAgLTE4MDYsNiArMTgwOSwxNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBjYW5Vc2VD
cmVkZW50aWFsU3RvcmFnZSgpIHsgcmV0dXJuIG1fY2FuVXNlQ3JlZGVudGlhbFN0b3JhZ2U7IH0K
ICAgICB2b2lkIHNldENhblVzZUNyZWRlbnRpYWxTdG9yYWdlKGJvb2wpOwogCisjaWYgRU5BQkxF
KFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICB2b2lkIGNyZWF0ZVBERkhVRChQREZQbHVnaW5JZGVu
dGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCB1cGRhdGVQREZIVURM
b2NhdGlvbihQREZQbHVnaW5JZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Cisg
ICAgdm9pZCByZW1vdmVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllcik7CisgICAgdm9pZCBwZGZa
b29tSW4oUERGUGx1Z2luSWRlbnRpZmllcik7CisgICAgdm9pZCBwZGZab29tT3V0KFBERlBsdWdp
bklkZW50aWZpZXIpOworICAgIHZvaWQgcGRmU2F2ZVRvUERGKFBERlBsdWdpbklkZW50aWZpZXIp
OworICAgIHZvaWQgcGRmT3BlbldpdGhQcmV2aWV3KFBERlBsdWdpbklkZW50aWZpZXIpOworI2Vu
ZGlmCisKIHByaXZhdGU6CiAgICAgV2ViUGFnZVByb3h5KFBhZ2VDbGllbnQmLCBXZWJQcm9jZXNz
UHJveHkmLCBSZWY8QVBJOjpQYWdlQ29uZmlndXJhdGlvbj4mJik7CiAgICAgdm9pZCBwbGF0Zm9y
bUluaXRpYWxpemUoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDI2NjE1NCkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNDMz
LDkgKzQzMyw4IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgU2F2ZVJlY2VudFNl
YXJjaGVzKFN0cmluZyBuYW1lLCBWZWN0b3I8V2ViQ29yZTo6UmVjZW50U2VhcmNoPiBzZWFyY2hJ
dGVtcykKICAgICBMb2FkUmVjZW50U2VhcmNoZXMoU3RyaW5nIG5hbWUpIC0+IChWZWN0b3I8V2Vi
Q29yZTo6UmVjZW50U2VhcmNoPiByZXN1bHQpIFN5bmNocm9ub3VzCiAKKyNpZiBFTkFCTEUoUERG
S0lUX1BMVUdJTikgJiYgIUVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCiAgICAgU2F2ZVBERlRv
RmlsZUluRG93bmxvYWRzRm9sZGVyKFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSwgVVJMIG9yaWdp
bmF0aW5nVVJMLCBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YSkKLQotI2lmIFBMQVRGT1JNKENPQ09B
KQogICAgIFNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRp
b24oU3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1lLCBzdHJ1Y3QgV2ViS2l0OjpGcmFtZUluZm9EYXRh
IHNvdXJjZUZyYW1lSW5mbywgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEsIFN0cmluZyBwZGZVVUlE
KQogICAgIE9wZW5QREZGcm9tVGVtcG9yYXJ5Rm9sZGVyV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKHN0
cnVjdCBXZWJLaXQ6OkZyYW1lSW5mb0RhdGEgc291cmNlRnJhbWVJbmZvLCBTdHJpbmcgcGRmVVVJ
RCkKICNlbmRpZgpAQCAtNTY2LDYgKzU2NSwxMiBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkg
ewogICAgIFNwZWVjaFN5bnRoZXNpc1Jlc3VtZSgpIC0+ICgpIEFzeW5jCiAjZW5kaWYKIAorI2lm
IEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgQ3JlYXRlUERGSFVEKFdlYktpdDo6UERG
UGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJDb3JlOjpJbnRSZWN0IGJvdW5kaW5nQm94
KQorICAgIFVwZGF0ZVBERkhVRExvY2F0aW9uKFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllciBp
ZGVudGlmaWVyLCBXZWJDb3JlOjpJbnRSZWN0IGJvdW5kaW5nQm94KQorICAgIFJlbW92ZVBERkhV
RChXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikKKyNlbmRpZgorCiAgICAg
Q29uZmlndXJlTG9nZ2luZ0NoYW5uZWwoU3RyaW5nIGNoYW5uZWxOYW1lLCBlbnVtOnVpbnQ4X3Qg
V1RGTG9nQ2hhbm5lbFN0YXRlIHN0YXRlLCBlbnVtOnVpbnQ4X3QgV1RGTG9nTGV2ZWwgbGV2ZWwp
CiAKICNpZiBQTEFURk9STShHVEspCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaAkocmV2aXNpb24gMjY2MTU0KQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIzLDExICsyMywxMSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKLSNpbXBvcnQgIldLV2ViVmlld1ByaXZhdGUuaCIKLQorI2lt
cG9ydCAiUERGUGx1Z2luSWRlbnRpZmllci5oIgogI2ltcG9ydCAiU2FtZURvY3VtZW50TmF2aWdh
dGlvblR5cGUuaCIKICNpbXBvcnQgIldLU2hhcmVTaGVldC5oIgogI2ltcG9ydCAiV0tXZWJWaWV3
Q29uZmlndXJhdGlvbi5oIgorI2ltcG9ydCAiV0tXZWJWaWV3UHJpdmF0ZS5oIgogI2ltcG9ydCAi
X1dLQXR0YWNobWVudEludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tXZWJWaWV3UHJpbnRGb3JtYXR0
ZXJJbnRlcm5hbC5oIgogI2ltcG9ydCA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CkBAIC0xMzMs
NyArMTMzLDcgQEAgY2xhc3MgVmlld0dlc3R1cmVDb250cm9sbGVyOwogICAgIC8vIE9ubHkgdXNl
ZCB3aXRoIFVJLXNpZGUgY29tcG9zaXRpbmcuCiAgICAgUmV0YWluUHRyPFdLU2Nyb2xsVmlldz4g
X3Njcm9sbFZpZXc7CiAgICAgUmV0YWluUHRyPFdLQ29udGVudFZpZXc+IF9jb250ZW50VmlldzsK
LSNlbmRpZgorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCiAgICAgUmV0YWluUHRyPFdLU2Nyb2xsVmlldz4gX3Njcm9sbFZpZXc7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nTWFj
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZp
ZXdQcml2YXRlRm9yVGVzdGluZ01hYy5oCShyZXZpc2lvbiAyNjYxNTQpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nTWFjLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgQGludGVyZmFjZSBXS1dlYlZpZXcgKFdLVGVz
dGluZ01hYykKIAogLSAodm9pZClfc2V0SGVhZGVyQmFubmVySGVpZ2h0OihpbnQpaGVpZ2h0Owog
LSAodm9pZClfc2V0Rm9vdGVyQmFubmVySGVpZ2h0OihpbnQpaGVpZ2h0OworLSAoTlNTZXQ8TlNW
aWV3ICo+ICopX3BkZkhVRHM7CiAKIEBlbmQKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL21hYy9XS1dlYlZpZXdUZXN0aW5nTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5tbQkocmV2aXNpb24g
MjY2MTU0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdUZXN0
aW5nTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiArMTAzLDE1IEBAIC0gKHZvaWQpX3Nl
dEZvb3RlckJhbm5lckhlaWdodDooaW50KWhlaWcKICAgICBfcGFnZS0+c2V0Rm9vdGVyQmFubmVy
SGVpZ2h0Rm9yVGVzdGluZyhoZWlnaHQpOwogfQogCistIChOU1NldDxOU1ZpZXcgKj4gKilfcGRm
SFVEcworeworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgcmV0dXJuIF9pbXBs
LT5wZGZIVURzKCk7CisjZWxzZQorICAgIHJldHVybiBuaWw7CisjZW5kaWYKK30KKwogLSAoTlNN
ZW51ICopX2FjdGl2ZU1lbnUKIHsKICAgICAvLyBGSVhNRTogT25seSB0aGUgRE9NIHBhc3RlIGFj
Y2VzcyBtZW51IGlzIHN1cHBvcnRlZCBmb3Igbm93LiBJbiB0aGUgZnV0dXJlLCBpdCBjb3VsZCBi
ZQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5oCShy
ZXZpc2lvbiAyNjYxNTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBQTEFURk9STShN
QUMpCiAKKyNpbmNsdWRlICJQREZQbHVnaW5JZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiUGx1Z2lu
Q29tcGxleFRleHRJbnB1dFN0YXRlLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAj
aW5jbHVkZSAiV0tMYXlvdXRNb2RlLmgiCkBAIC03Niw2ICs3NywxMCBAQCBPQkpDX0NMQVNTIFdL
VGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXI7CiBPQkpDX0NMQVNTIFdlYlBsYXliYWNrQ29udHJv
bHNNYW5hZ2VyOwogI2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFSKQogCisjaWYgRU5BQkxFKFVJX1BS
T0NFU1NfUERGX0hVRCkKK09CSkNfQ0xBU1MgV0tQREZIVURWaWV3OworI2VuZGlmCisKIG5hbWVz
cGFjZSBBUEkgewogY2xhc3MgSGl0VGVzdFJlc3VsdDsKIGNsYXNzIE9iamVjdDsKQEAgLTE5MCw2
ICsxOTUsMTQgQEAgcHVibGljOgogICAgIHZvaWQgdmlld1dpbGxTdGFydExpdmVSZXNpemUoKTsK
ICAgICB2b2lkIHZpZXdEaWRFbmRMaXZlUmVzaXplKCk7CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VT
U19QREZfSFVEKQorICAgIHZvaWQgY3JlYXRlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIHVwZGF0ZVBERkhVRExvY2F0aW9uKFBE
RlBsdWdpbklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIHJl
bW92ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHJlbW92ZUFsbFBERkhV
RHMoKTsKKyAgICBOU1NldCAqcGRmSFVEcygpOworI2VuZGlmCisKICAgICB2b2lkIHJlbmV3R1N0
YXRlKCk7CiAgICAgdm9pZCBzZXRGcmFtZVNpemUoQ0dTaXplKTsKICAgICB2b2lkIGRpc2FibGVG
cmFtZVNpemVVcGRhdGVzKCk7CkBAIC03MjksNyArNzQyLDExIEBAIHByaXZhdGU6CiAjaWYgRU5B
QkxFKEZVTExTQ1JFRU5fQVBJKQogICAgIFJldGFpblB0cjxXS0Z1bGxTY3JlZW5XaW5kb3dDb250
cm9sbGVyPiBtX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyOwogI2VuZGlmCi0gICAgCisKKyNp
ZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIEhhc2hNYXA8V2ViS2l0OjpQREZQbHVn
aW5JZGVudGlmaWVyLCBSZXRhaW5QdHI8V0tQREZIVURWaWV3Pj4gX3BkZkhVRFZpZXdzOworI2Vu
ZGlmCisKICAgICBSZXRhaW5QdHI8V0tTaGFyZVNoZWV0PiBfc2hhcmVTaGVldDsKIAogICAgIFJl
dGFpblB0cjxXS1dpbmRvd1Zpc2liaWxpdHlPYnNlcnZlcj4gbV93aW5kb3dWaXNpYmlsaXR5T2Jz
ZXJ2ZXI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1w
bC5tbQkocmV2aXNpb24gMjY2MTU0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
V2ViVmlld0ltcGwubW0JKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDcgQEAKICNpbXBvcnQg
IldLRXJyb3JJbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxl
ci5oIgogI2ltcG9ydCAiV0tJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLmgiCisjaW1wb3J0ICJX
S1BERkhVRFZpZXcuaCIKICNpbXBvcnQgIldLUHJpbnRpbmdWaWV3LmgiCiAjaW1wb3J0ICJXS1Nh
ZmVCcm93c2luZ1dhcm5pbmcuaCIKICNpbXBvcnQgIldLU2hhcmVTaGVldC5oIgpAQCAtMTcxOCw2
ICsxNzE5LDQ1IEBAIHZvaWQgV2ViVmlld0ltcGw6OnZpZXdEaWRFbmRMaXZlUmVzaXplKCkKICAg
ICBbbV9sYXlvdXRTdHJhdGVneSBkaWRFbmRMaXZlUmVzaXplXTsKIH0KIAorI2lmIEVOQUJMRShV
SV9QUk9DRVNTX1BERl9IVUQpCisKK3ZvaWQgV2ViVmlld0ltcGw6OmNyZWF0ZVBERkhVRChQREZQ
bHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3Qp
Cit7CisgICAgcmVtb3ZlUERGSFVEKGlkZW50aWZpZXIpOworICAgIGF1dG8gaHVkID0gYWRvcHRO
UyhbW1dLUERGSFVEVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpyZWN0IHBsdWdpbklkZW50aWZp
ZXI6aWRlbnRpZmllciBwYWdlOm1fcGFnZS5nZXQoKV0pOworICAgIFttX3ZpZXcgYWRkU3Vidmll
dzpodWQuZ2V0KCldOworICAgIF9wZGZIVURWaWV3cy5hZGQoaWRlbnRpZmllciwgV1RGTW92ZSho
dWQpKTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlUERGSFVETG9jYXRpb24oUERGUGx1
Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQor
eworICAgIGlmIChhdXRvIGh1ZCA9IF9wZGZIVURWaWV3cy5nZXQoaWRlbnRpZmllcikpCisgICAg
ICAgIFtodWQgc2V0RnJhbWU6cmVjdF07Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnJlbW92ZVBE
RkhVRChQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgaWYgKGF1dG8gaHVk
ID0gX3BkZkhVRFZpZXdzLnRha2UoaWRlbnRpZmllcikpCisgICAgICAgIFtodWQgcmVtb3ZlRnJv
bVN1cGVydmlld107Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnJlbW92ZUFsbFBERkhVRHMoKQor
eworICAgIGZvciAoYXV0byYgaHVkIDogX3BkZkhVRFZpZXdzLnZhbHVlcygpKQorICAgICAgICBb
aHVkIHJlbW92ZUZyb21TdXBlcnZpZXddOworICAgIF9wZGZIVURWaWV3cy5jbGVhcigpOworfQor
CitOU1NldCAqV2ViVmlld0ltcGw6OnBkZkhVRHMoKQoreworICAgIE5TTXV0YWJsZVNldDxOU1Zp
ZXcgKj4gKnNldCA9IFtOU011dGFibGVTZXQgc2V0V2l0aENhcGFjaXR5Ol9wZGZIVURWaWV3cy5z
aXplKCldOworICAgIGZvciAoYXV0byYgaHVkIDogX3BkZkhVRFZpZXdzLnZhbHVlcygpKQorICAg
ICAgICBbc2V0IGFkZE9iamVjdDpodWQuZ2V0KCldOworICAgIHJldHVybiBzZXQ7Cit9CisKKyNl
bmRpZiAvLyBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCiB2b2lkIFdlYlZpZXdJbXBsOjpy
ZW5ld0dTdGF0ZSgpCiB7CiAgICAgaWYgKG1fdGV4dEluZGljYXRvcldpbmRvdykKQEAgLTUzOTEs
NiArNTQzMSwxMSBAQCB2b2lkIFdlYlZpZXdJbXBsOjptb3VzZU1vdmVkKE5TRXZlbnQgKmV2CiAg
ICAgaWYgKG1faWdub3Jlc05vbldoZWVsRXZlbnRzKQogICAgICAgICByZXR1cm47CiAKKyNpZiBF
TkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIGZvciAoYXV0byYgaHVkIDogX3BkZkhVRFZp
ZXdzLnZhbHVlcygpKQorICAgICAgICBbaHVkIG1vdXNlTW92ZWQ6ZXZlbnRdOworI2VuZGlmCisK
ICAgICAvLyBXaGVuIGEgdmlldyBpcyBmaXJzdCByZXNwb25kZXIsIGl0IGdldHMgbW91c2UgbW92
ZWQgZXZlbnRzIGV2ZW4gd2hlbiB0aGUgbW91c2UgaXMgb3V0c2lkZSBpdHMgdmlzaWJsZSByZWN0
LgogICAgIGlmIChtX3ZpZXcuZ2V0QXV0b3JlbGVhc2VkKCkgPT0gW21fdmlldyB3aW5kb3ddLmZp
cnN0UmVzcG9uZGVyICYmICFOU1BvaW50SW5SZWN0KFttX3ZpZXcgY29udmVydFBvaW50OltldmVu
dCBsb2NhdGlvbkluV2luZG93XSBmcm9tVmlldzpuaWxdLCBbbV92aWV3IHZpc2libGVSZWN0XSkp
CiAgICAgICAgIHJldHVybjsKQEAgLTU0MzksNiArNTQ4NCwxMSBAQCB2b2lkIFdlYlZpZXdJbXBs
Ojptb3VzZURvd24oTlNFdmVudCAqZXZlCiAgICAgaWYgKG1faWdub3Jlc05vbldoZWVsRXZlbnRz
KQogICAgICAgICByZXR1cm47CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAg
IGZvciAoYXV0byYgaHVkIDogX3BkZkhVRFZpZXdzLnZhbHVlcygpKQorICAgICAgICBbaHVkIG1v
dXNlRG93bjpldmVudF07CisjZW5kaWYKKwogICAgIHNldExhc3RNb3VzZURvd25FdmVudChldmVu
dCk7CiAgICAgc2V0SWdub3Jlc01vdXNlRHJhZ2dlZEV2ZW50cyhmYWxzZSk7CiAKQEAgLTU0NTAs
NiArNTUwMCwxMSBAQCB2b2lkIFdlYlZpZXdJbXBsOjptb3VzZVVwKE5TRXZlbnQgKmV2ZW50CiAg
ICAgaWYgKG1faWdub3Jlc05vbldoZWVsRXZlbnRzKQogICAgICAgICByZXR1cm47CiAKKyNpZiBF
TkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIGZvciAoYXV0byYgaHVkIDogX3BkZkhVRFZp
ZXdzLnZhbHVlcygpKQorICAgICAgICBbaHVkIG1vdXNlVXA6ZXZlbnRdOworI2VuZGlmCisKICAg
ICBzZXRMYXN0TW91c2VEb3duRXZlbnQobmlsKTsKICAgICBtb3VzZVVwSW50ZXJuYWwoZXZlbnQp
OwogfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUERGL1dLUERGSFVEVmlldy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BERi9XS1BERkhVRFZpZXcuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QREYvV0tQREZIVURWaWV3
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFC
TEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCisjaW1wb3J0ICJQREZQbHVnaW5JZGVudGlmaWVyLmgi
CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViUGFnZVByb3h5OworfQorCitAaW50ZXJm
YWNlIFdLUERGSFVEVmlldyA6IE5TVmlldworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFt
ZTooTlNSZWN0KWZyYW1lIHBsdWdpbklkZW50aWZpZXI6KFdlYktpdDo6UERGUGx1Z2luSWRlbnRp
ZmllcilwbHVnaW5JZGVudGlmaWVyIHBhZ2U6KFdlYktpdDo6V2ViUGFnZVByb3h5JilwYWdlOwor
LSAodm9pZClzZXRGcmFtZTooTlNSZWN0KWZyYW1lOworLSAodm9pZCltb3VzZU1vdmVkOihOU0V2
ZW50ICopZXZlbnQ7CistICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50OworLSAodm9p
ZCltb3VzZVVwOihOU0V2ZW50ICopZXZlbnQ7CisKK0BlbmQKKworI2VuZGlmIC8vIEVOQUJMRShV
SV9QUk9DRVNTX1BERl9IVUQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QREYvV0tQ
REZIVURWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BERi9X
S1BERkhVRFZpZXcubW0JKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
UERGL1dLUERGSFVEVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM1MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV0tQREZIVURWaWV3LmgiCisK
KyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCisjaW1wb3J0ICJXZWJQYWdlUHJveHku
aCIKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ0FUcmFuc2FjdGlvbi5oPgorI2ltcG9ydCA8cGFsL3Nw
aS9jb2NvYS9RdWFydHpDb3JlU1BJLmg+CisjaW1wb3J0IDxwYWwvc3BpL21hYy9OU0ltYWdlU1BJ
Lmg+CisjaW1wb3J0IDx3dGYvV2Vha09iakNQdHIuaD4KKworLy8gIFRoZSBIVUQgaXRlbXMgc2hv
dWxkIGhhdmUgdGhlIGZvbGxvd2luZyBzcGFjaW5nOgorLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIHwgICAgICAxMiAgICAgICAgMTIgICAg
ICAxMCAgICAgMTIgICAgICAgIDEyICAgICAgfAorLy8gfCAgICAgLS0tLSAgICAgIC0tLS0gICAg
IHwgICAgIC0tLS0gICAgICAtLS0tICAgICB8CisvLyB8IDEwIHxpY29ufCAxMCB8aWNvbnwgMTAg
fCAxMCB8aWNvbnwgMTAgfGljb258IDEwIHwKKy8vIHwgICAgIC0tLS0gICAgICAtLS0tICAgICB8
ICAgICAtLS0tICAgICAgLS0tLSAgICAgfAorLy8gfCAgICAgIDEyICAgICAgICAxMiAgICAgIDEw
ICAgICAxMiAgICAgICAgMTIgICAgICB8CisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIHdoZXJlIHRoZSAxMiBwb2ludCB2ZXJ0aWNhbCBz
cGFjaW5nIGlzIGFuY2hvcmVkIHRvIHRoZSBzbWFsbGVzdCBpY29uIGltYWdlLAorLy8gIGFuZCBh
bGwgc3Vic2VxdWVudCBpY29ucyB3aXRoIGJlIGNlbnRlcmVkIHZlcnRpY2FsbHkgd2l0aCB0aGUg
c21hbGxlc3QgaWNvbi4KKworc3RhdGljIGNvbnN0IENHRmxvYXQga0xheWVyVmVydGljYWxPZmZz
ZXQgPSA0MDsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGtMYXllckNvcm5lclJhZGl1cyA9IDEyOwor
c3RhdGljIGNvbnN0IENHRmxvYXQga0xheWVyR3JheUNvbXBvbmVudCA9IDA7CitzdGF0aWMgY29u
c3QgQ0dGbG9hdCBrTGF5ZXJBbHBoYSA9IDAuNzU7CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrTGF5
ZXJJbWFnZVNjYWxlID0gMS41Oworc3RhdGljIGNvbnN0IENHRmxvYXQga0xheWVyU2VwZXJhdG9y
Q29udHJvbGxlclNpemUgPSAxLjU7CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrTGF5ZXJDb250cm9s
bGVySG9yaXpvbnRhbE1hcmdpbiA9IDEwLjA7CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrTGF5ZXJJ
bWFnZVZlcnRpY2FsTWFyZ2luID0gMTIuMDsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGtMYXllclNl
cGVyYXRvclZlcnRpY2FsTWFyZ2luID0gMTAuMDsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGtDb250
cm9sTGF5ZXJOb3JtYWxBbHBoYSA9IDAuNzU7CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBrQ29udHJv
bExheWVyRG93bkFscGhhID0gMC40NTsKKworc3RhdGljIE5TU3RyaW5nICogY29uc3QgUERGSFVE
Wm9vbUluQ29udHJvbCA9IEAicGx1cy5tYWduaWZ5aW5nZ2xhc3MiOworc3RhdGljIE5TU3RyaW5n
ICogY29uc3QgUERGSFVEWm9vbU91dENvbnRyb2wgPSBAIm1pbnVzLm1hZ25pZnlpbmdnbGFzcyI7
CitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBQREZIVURMYXVuY2hQcmV2aWV3Q29udHJvbCA9IEAi
cHJldmlldyI7CitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBQREZIVURTYXZlUERGQ29udHJvbCA9
IEAiYXJyb3cuZG93bi5jaXJjbGUiOworc3RhdGljIE5TU3RyaW5nICogY29uc3QgUERGSFVEU2Vw
ZXJhdG9yQ29udHJvbCA9IEAiUERGSFVEU2VwZXJhdG9yQ29udHJvbCI7CisKK3N0YXRpYyBjb25z
dCBDR0Zsb2F0IGtMYXllckZhZGVJblRpbWVJbnRlcnZhbCA9IDAuMjU7CitzdGF0aWMgY29uc3Qg
Q0dGbG9hdCBrTGF5ZXJGYWRlT3V0VGltZUludGVydmFsID0gMC41Oworc3RhdGljIGNvbnN0IENH
RmxvYXQga0luaXRpYWxIaWRlVGltZUludGVydmFsID0gMy4wOworCitzdGF0aWMgTlNBcnJheTxO
U1N0cmluZyAqPiAqY29udHJvbEFycmF5KCkKK3sKKyAgICByZXR1cm4gQFsKKyAgICAgICAgUERG
SFVEWm9vbU91dENvbnRyb2wsCisgICAgICAgIFBERkhVRFpvb21JbkNvbnRyb2wsCisgICAgICAg
IFBERkhVRFNlcGVyYXRvckNvbnRyb2wsCisgICAgICAgIFBERkhVRExhdW5jaFByZXZpZXdDb250
cm9sLAorICAgICAgICBQREZIVURTYXZlUERGQ29udHJvbAorICAgIF07Cit9CisKK3N0YXRpYyBO
U0NvbG9yICpQREZDR0NvbG9yQ3JlYXRlR2VuZXJpY1JHQihDR0Zsb2F0IHJlZCwgQ0dGbG9hdCBn
cmVlbiwgQ0dGbG9hdCBibHVlLCBDR0Zsb2F0IGFscGhhKQoreworICAgIGF1dG8gY29sb3JTcGFj
ZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOworICAgIGNvbnN0IENH
RmxvYXQgY29tcG9uZW50c1s0XSA9IHsgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEgfTsKKyAgICBh
dXRvIGNnQ29sb3IgPSBhZG9wdENGKENHQ29sb3JDcmVhdGUoY29sb3JTcGFjZS5nZXQoKSwgY29t
cG9uZW50cykpOworICAgIHJldHVybiBbTlNDb2xvciBjb2xvcldpdGhDR0NvbG9yOmNnQ29sb3Iu
Z2V0KCldOworfQorCitAaW1wbGVtZW50YXRpb24gV0tQREZIVURWaWV3IHsKK0Bwcml2YXRlCisg
ICAgV2Vha1B0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4gX3BhZ2U7CisgICAgUmV0YWluUHRyPE5T
U3RyaW5nPiBfYWN0aXZlQ29udHJvbDsKKyAgICBXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIg
X3BsdWdpbklkZW50aWZpZXI7CisgICAgQ0dGbG9hdCBfZGV2aWNlU2NhbGVGYWN0b3I7CisgICAg
UmV0YWluUHRyPENBTGF5ZXI+IF9sYXllcjsKKyAgICBSZXRhaW5QdHI8Q0FMYXllcj4gX2FjdGl2
ZUxheWVyOworICAgIENHU2l6ZSBfZnJhbWVTaXplOworICAgIFJldGFpblB0cjxOU011dGFibGVE
aWN0aW9uYXJ5PE5TU3RyaW5nICosIE5TSW1hZ2UgKj4+IF9jYWNoZWRJY29uczsKKyAgICBCT09M
IF92aXNpYmxlOworICAgIEJPT0wgX21vdXNlTW92ZWRUb0hVRDsKKyAgICBCT09MIF9pbml0aWFs
SGlkZVRpbWVyRmlyZWQ7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihOU1Jl
Y3QpZnJhbWUgcGx1Z2luSWRlbnRpZmllcjooV2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVyKXBs
dWdpbklkZW50aWZpZXIgcGFnZTooV2ViS2l0OjpXZWJQYWdlUHJveHkmKXBhZ2UKK3sKKyAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoRnJhbWU6ZnJhbWVdKSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICAKKyAgICBzZWxmLndhbnRzTGF5ZXIgPSBZRVM7CisgICAgX2NhY2hlZEljb25z
ID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKKyAgICBfcGx1
Z2luSWRlbnRpZmllciA9IHBsdWdpbklkZW50aWZpZXI7CisgICAgX3BhZ2UgPSBtYWtlV2Vha1B0
cihwYWdlKTsKKyAgICBfZGV2aWNlU2NhbGVGYWN0b3IgPSBwYWdlLmRldmljZVNjYWxlRmFjdG9y
KCk7CisgICAgX3Zpc2libGUgPSBZRVM7CisgICAgW3NlbGYgX3NldHVwTGF5ZXI6c2VsZi5sYXll
cl07CisgICAgW3NlbGYgc2V0RnJhbWU6ZnJhbWVdOworCisgICAgV2Vha09iakNQdHI8V0tQREZI
VURWaWV3PiB3ZWFrU2VsZiA9IHNlbGY7CisgICAgZGlzcGF0Y2hfYWZ0ZXIoZGlzcGF0Y2hfdGlt
ZShESVNQQVRDSF9USU1FX05PVywgKGludDY0X3QpKGtJbml0aWFsSGlkZVRpbWVJbnRlcnZhbCAq
IE5TRUNfUEVSX1NFQykpLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBb
d2Vha1NlbGYgX2hpZGVUaW1lckZpcmVkXTsKKyAgICB9KTsKKyAgICByZXR1cm4gc2VsZjsKK30K
KworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19sYXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07
CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNldEZyYW1lOihOU1JlY3QpcmVj
dAoreworICAgIFtzdXBlciBzZXRGcmFtZTpyZWN0XTsKKyAgICBfZnJhbWVTaXplID0gcmVjdC5z
aXplOworCisgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAgIFtDQVRyYW5zYWN0aW9uIHNl
dERpc2FibGVBY3Rpb25zOllFU107CisgICAgQ0dSZWN0IGxheWVyQm91bmRzID0gW19sYXllciBi
b3VuZHNdOworICAgIFtfbGF5ZXIgc2V0RnJhbWU6Q0dSZWN0TWFrZShyZWN0LnNpemUud2lkdGgg
LyAyLjAgLSBsYXllckJvdW5kcy5zaXplLndpZHRoIC8gMi4wLCBrTGF5ZXJWZXJ0aWNhbE9mZnNl
dCwgbGF5ZXJCb3VuZHMuc2l6ZS53aWR0aCwgbGF5ZXJCb3VuZHMuc2l6ZS5oZWlnaHQpXTsKKyAg
ICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworfQorCistICh2b2lkKV9oaWRlVGltZXJGaXJlZAor
eworICAgIF9pbml0aWFsSGlkZVRpbWVyRmlyZWQgPSBZRVM7CisgICAgaWYgKCFfbW91c2VNb3Zl
ZFRvSFVEKQorICAgICAgICBbc2VsZiBfc2V0VmlzaWJsZTpmYWxzZV07Cit9CisKKy0gKHZvaWQp
X3NldFZpc2libGU6KGJvb2wpaXNWaXNpYmxlCit7CisgICAgaWYgKF92aXNpYmxlID09IGlzVmlz
aWJsZSkKKyAgICAgICAgcmV0dXJuOworICAgIF92aXNpYmxlID0gaXNWaXNpYmxlOworICAgIFtD
QVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXRBbmltYXRpb25EdXJh
dGlvbjogaXNWaXNpYmxlID8ga0xheWVyRmFkZUluVGltZUludGVydmFsIDoga0xheWVyRmFkZU91
dFRpbWVJbnRlcnZhbF07CisgICAgW3NlbGYgX3NldExheWVyT3BhY2l0eTppc1Zpc2libGUgPyBr
TGF5ZXJBbHBoYSA6IDAuMF07CisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKK30KKworLSAo
dm9pZCltb3VzZU1vdmVkOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBpZiAoQ0dSZWN0Q29udGFp
bnNQb2ludChbc2VsZiBjb252ZXJ0UmVjdDpDR1JlY3RJbnNldChbX2xheWVyIGZyYW1lXSwgLTE2
LjAsIC0xNi4wKSB0b1ZpZXc6bmlsXSwgTlNQb2ludFRvQ0dQb2ludChldmVudC5sb2NhdGlvbklu
V2luZG93KSkpIHsKKyAgICAgICAgW3NlbGYgX3NldFZpc2libGU6dHJ1ZV07CisgICAgICAgIF9t
b3VzZU1vdmVkVG9IVUQgPSBZRVM7CisgICAgfSBlbHNlIGlmIChfaW5pdGlhbEhpZGVUaW1lckZp
cmVkKQorICAgICAgICBbc2VsZiBfc2V0VmlzaWJsZTpmYWxzZV07Cit9CisKKy0gKHZvaWQpbW91
c2VEb3duOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBfYWN0aXZlQ29udHJvbCA9IFtzZWxmIF9j
b250cm9sRm9yRXZlbnQ6ZXZlbnRdOworICAgIGlmIChbX2FjdGl2ZUNvbnRyb2wgaXNFcXVhbFRv
U3RyaW5nOlBERkhVRFNlcGVyYXRvckNvbnRyb2xdKQorICAgICAgICBfYWN0aXZlQ29udHJvbCA9
IG5pbDsKKyAgICBpZiAoX2FjdGl2ZUNvbnRyb2wpIHsKKyAgICAgICAgLy8gVXBkYXRlIHJlbmRl
cmluZyB0byBoaWdobGlnaHQgaXQuLgorICAgICAgICBfYWN0aXZlTGF5ZXIgPSBbc2VsZiBfbGF5
ZXJGb3JFdmVudDpldmVudF07CisgICAgICAgIAorICAgICAgICAvLyBVcGRhdGUgbGF5ZXIgaW1h
Z2U7IGRvIG5vdCBhbmltYXRlCisgICAgICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICAg
ICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKKyAgICAgICAgCisgICAg
ICAgIFtfYWN0aXZlTGF5ZXIgc2V0T3BhY2l0eTprQ29udHJvbExheWVyRG93bkFscGhhXTsKKyAg
ICAgICAgCisgICAgICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CisgICAgfQorfQorCistICh2
b2lkKW1vdXNlVXA6KE5TRXZlbnQgKilldmVudAoreworICAgIGlmICghX2FjdGl2ZUNvbnRyb2wp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBOU1N0cmluZyogbW91c2VVcENvbnRyb2wgPSBb
c2VsZiBfY29udHJvbEZvckV2ZW50OmV2ZW50XTsKKyAgICBpZiAoW19hY3RpdmVDb250cm9sIGlz
RXF1YWxUb1N0cmluZzptb3VzZVVwQ29udHJvbF0pCisgICAgICAgIFtzZWxmIF9wZXJmb3JtQWN0
aW9uRm9yQ29udHJvbDpfYWN0aXZlQ29udHJvbC5nZXQoKV07CisgICAgCisgICAgW0NBVHJhbnNh
Y3Rpb24gYmVnaW5dOworICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107
CisgICAgW19hY3RpdmVMYXllciBzZXRPcGFjaXR5OmtDb250cm9sTGF5ZXJOb3JtYWxBbHBoYV07
CisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKKworICAgIF9hY3RpdmVMYXllciA9IG5pbDsK
KyAgICBfYWN0aXZlQ29udHJvbCA9IG5pbDsKK30KKworLSAoT3B0aW9uYWw8TlNVSW50ZWdlcj4p
X2NvbnRyb2xJbmRleEZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBDR1BvaW50IGlu
aXRpYWxQb2ludCA9IE5TUG9pbnRUb0NHUG9pbnQoZXZlbnQubG9jYXRpb25JbldpbmRvdyk7Cisg
ICAgaW5pdGlhbFBvaW50LnggLT0gW19sYXllciBmcmFtZV0ub3JpZ2luLng7CisgICAgaW5pdGlh
bFBvaW50LnkgLT0gW19sYXllciBmcmFtZV0ub3JpZ2luLnk7CisgICAgZm9yIChOU1VJbnRlZ2Vy
IGluZGV4ID0gMDsgaW5kZXggPCBbX2xheWVyIHN1YmxheWVyc10uY291bnQ7IGluZGV4KyspIHsK
KyAgICAgICAgQ0FMYXllciAqc3ViTGF5ZXIgPSBbX2xheWVyIHN1YmxheWVyc11baW5kZXhdOwor
ICAgICAgICBOU1JlY3Qgd2luZG93U3BhY2VSZWN0ID0gW3NlbGYgY29udmVydFJlY3Q6c3ViTGF5
ZXIuZnJhbWUgdG9WaWV3Om5pbF07CisgICAgICAgIGlmIChDR1JlY3RDb250YWluc1BvaW50KHdp
bmRvd1NwYWNlUmVjdCwgaW5pdGlhbFBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiBpbmRleDsK
KyAgICB9CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworLSAoTlNTdHJpbmcgKilfY29u
dHJvbEZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBpZiAoYXV0byBpbmRleCA9IFtz
ZWxmIF9jb250cm9sSW5kZXhGb3JFdmVudDpldmVudF0pCisgICAgICAgIHJldHVybiBjb250cm9s
QXJyYXkoKVsqaW5kZXhdOworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKENBTGF5ZXIgKilfbGF5
ZXJGb3JFdmVudDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgaWYgKGF1dG8gaW5kZXggPSBbc2Vs
ZiBfY29udHJvbEluZGV4Rm9yRXZlbnQ6ZXZlbnRdKQorICAgICAgICByZXR1cm4gW19sYXllciBz
dWJsYXllcnNdWyppbmRleF07CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAodm9pZClfcGVyZm9y
bUFjdGlvbkZvckNvbnRyb2w6KE5TU3RyaW5nICopY29udHJvbAoreworICAgIGlmICghX3Zpc2li
bGUpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBwYWdlID0gX3BhZ2UuZ2V0KCk7CisgICAg
aWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFtjb250cm9sIGlzRXF1YWxUb1N0
cmluZzpQREZIVURab29tSW5Db250cm9sXSkKKyAgICAgICAgcGFnZS0+cGRmWm9vbUluKF9wbHVn
aW5JZGVudGlmaWVyKTsKKyAgICBlbHNlIGlmIChbY29udHJvbCBpc0VxdWFsVG9TdHJpbmc6UERG
SFVEWm9vbU91dENvbnRyb2xdKQorICAgICAgICBwYWdlLT5wZGZab29tT3V0KF9wbHVnaW5JZGVu
dGlmaWVyKTsKKyAgICBlbHNlIGlmIChbY29udHJvbCBpc0VxdWFsVG9TdHJpbmc6UERGSFVEU2F2
ZVBERkNvbnRyb2xdKQorICAgICAgICBwYWdlLT5wZGZTYXZlVG9QREYoX3BsdWdpbklkZW50aWZp
ZXIpOworICAgIGVsc2UgaWYgKFtjb250cm9sIGlzRXF1YWxUb1N0cmluZzpQREZIVURMYXVuY2hQ
cmV2aWV3Q29udHJvbF0pCisgICAgICAgIHBhZ2UtPnBkZk9wZW5XaXRoUHJldmlldyhfcGx1Z2lu
SWRlbnRpZmllcik7Cit9CisKKy0gKHZvaWQpX2xvYWRJY29uSW1hZ2VzCit7CisgICAgZm9yIChO
U1N0cmluZyAqY29udHJvbE5hbWUgaW4gY29udHJvbEFycmF5KCkpCisgICAgICAgIFtzZWxmIF9n
ZXRJbWFnZUZvckNvbnRyb2xOYW1lOmNvbnRyb2xOYW1lXTsKK30KKworLSAodm9pZClfc2V0dXBM
YXllcjooQ0FMYXllciAqKXBhcmVudExheWVyCit7CisgICAgX2xheWVyID0gYWRvcHROUyhbW0NB
TGF5ZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbX2xheWVyIHNldENvcm5lclJhZGl1czprTGF5ZXJD
b3JuZXJSYWRpdXNdOworICAgIAorICAgIGF1dG8gY29sb3IgPSBhZG9wdE5TKFBERkNHQ29sb3JD
cmVhdGVHZW5lcmljUkdCKGtMYXllckdyYXlDb21wb25lbnQsIGtMYXllckdyYXlDb21wb25lbnQs
IGtMYXllckdyYXlDb21wb25lbnQsIDEuMCkpOworICAgIFtfbGF5ZXIgc2V0QmFja2dyb3VuZENv
bG9yOltjb2xvciBDR0NvbG9yXV07CisgICAgW3NlbGYgX3NldExheWVyT3BhY2l0eTprTGF5ZXJB
bHBoYV07CisgICAgCisgICAgW3NlbGYgX2xvYWRJY29uSW1hZ2VzXTsKKyAgICBDR0Zsb2F0IG1p
bkljb25JbWFnZUhlaWdodCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8Q0dGbG9hdD46Om1heCgpOwor
ICAgIGZvciAoTlNJbWFnZSAqaW1hZ2UgaW4gW19jYWNoZWRJY29ucyBhbGxWYWx1ZXNdKQorICAg
ICAgICBtaW5JY29uSW1hZ2VIZWlnaHQgPSBzdGQ6Om1pbihtaW5JY29uSW1hZ2VIZWlnaHQsIChp
bWFnZS5zaXplLmhlaWdodCAvIF9kZXZpY2VTY2FsZUZhY3RvcikpOworICAgIAorICAgIENHRmxv
YXQgZHggPSBrTGF5ZXJDb250cm9sbGVySG9yaXpvbnRhbE1hcmdpbjsKKyAgICBmb3IgKE5TU3Ry
aW5nICpjb250cm9sTmFtZSBpbiBjb250cm9sQXJyYXkoKSkgeworICAgICAgICBhdXRvIGNvbnRy
b2xMYXllciA9IGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0XSk7CisgICAgICAgIENHRmxv
YXQgZHkgPSAwLjA7CisgICAgICAgIENHRmxvYXQgY29udHJvbGxlcldpZHRoID0gMC4wOworICAg
ICAgICBDR0Zsb2F0IGNvbnRyb2xsZXJIZWlnaHQgPSAwLjA7CisKKyAgICAgICAgaWYgKFtjb250
cm9sTmFtZSBpc0VxdWFsVG9TdHJpbmc6IFBERkhVRFNlcGVyYXRvckNvbnRyb2xdKSB7CisgICAg
ICAgICAgICBkeSA9IGtMYXllclNlcGVyYXRvclZlcnRpY2FsTWFyZ2luOworICAgICAgICAgICAg
Y29udHJvbGxlcldpZHRoID0ga0xheWVyU2VwZXJhdG9yQ29udHJvbGxlclNpemU7CisgICAgICAg
ICAgICBjb250cm9sbGVySGVpZ2h0ID0gbWluSWNvbkltYWdlSGVpZ2h0ICsgKDIuMCAqIGtMYXll
ckltYWdlVmVydGljYWxNYXJnaW4pIC0gKDIuMCAqIGtMYXllclNlcGVyYXRvclZlcnRpY2FsTWFy
Z2luKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgW2NvbnRyb2xMYXllciBzZXRCYWNrZ3Jv
dW5kQ29sb3I6IFtbTlNDb2xvciBsaWdodEdyYXlDb2xvcl0gQ0dDb2xvcl1dOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgTlNJbWFnZSAqY29udHJvbEltYWdlID0gW3NlbGYgX2dldElt
YWdlRm9yQ29udHJvbE5hbWU6Y29udHJvbE5hbWVdOworICAgICAgICAgICAgW2NvbnRyb2xMYXll
ciBzZXRDb250ZW50czpjb250cm9sSW1hZ2VdOworICAgICAgICAgICAgW2NvbnRyb2xMYXllciBz
ZXRPcGFjaXR5OmtDb250cm9sTGF5ZXJOb3JtYWxBbHBoYV07CisKKyAgICAgICAgICAgIGR5ID0g
a0xheWVySW1hZ2VWZXJ0aWNhbE1hcmdpbjsKKyAgICAgICAgICAgIGNvbnRyb2xsZXJXaWR0aCA9
IFtjb250cm9sSW1hZ2Ugc2l6ZV0ud2lkdGggLyBfZGV2aWNlU2NhbGVGYWN0b3I7CisgICAgICAg
ICAgICBjb250cm9sbGVySGVpZ2h0ID0gW2NvbnRyb2xJbWFnZSBzaXplXS5oZWlnaHQgLyBfZGV2
aWNlU2NhbGVGYWN0b3I7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGR5IC09IChjb250cm9s
bGVySGVpZ2h0IC0gbWluSWNvbkltYWdlSGVpZ2h0KSAvIDIuMDsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgW2NvbnRyb2xMYXllciBzZXRGaWx0ZXJzOkBbW0NBRmlsdGVyIGZpbHRlcldpdGhU
eXBlOmtDQUZpbHRlckNvbG9ySW52ZXJ0XV1dOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBbY29udHJvbExheWVyIHNldEZyYW1lOkNHUmVjdE1ha2UoZHgsIGR5LCBjb250cm9sbGVyV2lk
dGgsIGNvbnRyb2xsZXJIZWlnaHQpXTsKKyAgICAgICAgW19sYXllciBhZGRTdWJsYXllcjpjb250
cm9sTGF5ZXIuZ2V0KCldOworICAgICAgICAKKyAgICAgICAgZHggKz0gY29udHJvbGxlcldpZHRo
ICsga0xheWVyQ29udHJvbGxlckhvcml6b250YWxNYXJnaW47CisgICAgfQorICAgIAorICAgIFtf
bGF5ZXIgc2V0RnJhbWU6Q0dSZWN0TWFrZSgwLCBrTGF5ZXJWZXJ0aWNhbE9mZnNldCwgZHgsIG1p
bkljb25JbWFnZUhlaWdodCArIDIuMCAqIGtMYXllckltYWdlVmVydGljYWxNYXJnaW4pXTsKKyAg
ICBbcGFyZW50TGF5ZXIgYWRkU3VibGF5ZXI6X2xheWVyLmdldCgpXTsKK30KKworLSAodm9pZClf
cmVkcmF3TGF5ZXIKK3sKKyAgICBbX2NhY2hlZEljb25zIHJlbW92ZUFsbE9iamVjdHNdOworICAg
IENBTGF5ZXIgKnBhcmVudExheWVyID0gW19sYXllciBzdXBlcmxheWVyXTsKKyAgICBbX2xheWVy
IHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICBbc2VsZiBfc2V0dXBMYXllcjpwYXJlbnRMYXll
cl07CisgICAgW3NlbGYgc2V0RnJhbWVTaXplOl9mcmFtZVNpemVdOworfQorCistIChOU0ltYWdl
ICopX2dldEltYWdlRm9yQ29udHJvbE5hbWU6KE5TU3RyaW5nICopY29udHJvbAoreworICAgIE5T
SW1hZ2UgKmljb25JbWFnZSA9IF9jYWNoZWRJY29ucy5nZXQoKVtjb250cm9sXTsKKyAgICBpZiAo
aWNvbkltYWdlKQorICAgICAgICByZXR1cm4gaWNvbkltYWdlOworCisgICAgaWNvbkltYWdlID0g
W05TSW1hZ2UgX2ltYWdlV2l0aFN5c3RlbVN5bWJvbE5hbWU6Y29udHJvbF07CisgICAgaWYgKCFp
Y29uSW1hZ2UpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBpY29uSW1hZ2UgPSBbaWNvbklt
YWdlIF9pbWFnZVdpdGhDb25maWd1cmF0aW9uOkB7CisgICAgICAgIE5TSW1hZ2VBbHRlcm5hdGVD
cml0ZXJpb25Gb250IDogW05TRm9udCBwcmVmZXJyZWRGb250Rm9yVGV4dFN0eWxlOk5TRm9udFRl
eHRTdHlsZVRpdGxlMiBvcHRpb25zOkB7IH1dLAorICAgICAgICBOU0ltYWdlQWx0ZXJuYXRlQ3Jp
dGVyaW9uU3ltYm9sU2NhbGUgOiBAKE5TSW1hZ2VTeW1ib2xTY2FsZUxhcmdlKQorICAgIH1dOwor
ICAgICAgICAKKyAgICBOU1JlY3QgaWNvbkltYWdlUmVjdCA9IE5TTWFrZVJlY3QoMCwgMCwgW2lj
b25JbWFnZSBzaXplXS53aWR0aCAqIGtMYXllckltYWdlU2NhbGUgKiBfZGV2aWNlU2NhbGVGYWN0
b3IsIFtpY29uSW1hZ2Ugc2l6ZV0uaGVpZ2h0ICoga0xheWVySW1hZ2VTY2FsZSAqIF9kZXZpY2VT
Y2FsZUZhY3Rvcik7CisgICAgTlNJbWFnZVJlcCAqaWNvbkltYWdlUmVwID0gW2ljb25JbWFnZSBi
ZXN0UmVwcmVzZW50YXRpb25Gb3JSZWN0Omljb25JbWFnZVJlY3QgY29udGV4dDpuaWwgaGludHM6
bmlsXTsKKyAgICBpY29uSW1hZ2UgPSBbTlNJbWFnZSBpbWFnZVdpdGhJbWFnZVJlcDppY29uSW1h
Z2VSZXBdOworICAgIAorICAgIF9jYWNoZWRJY29ucy5nZXQoKVtjb250cm9sXSA9IGljb25JbWFn
ZTsKKyAgICByZXR1cm4gaWNvbkltYWdlOworfQorCistICh2b2lkKV9zZXRMYXllck9wYWNpdHk6
KENHRmxvYXQpYWxwaGEKK3sKKyAgICBbX2xheWVyIHNldE9wYWNpdHk6YWxwaGFdOworICAgIGZv
ciAoQ0FMYXllciAqc3ViTGF5ZXIgaW4gW19sYXllciBzdWJsYXllcnNdKQorICAgICAgICBbc3Vi
TGF5ZXIgc2V0T3BhY2l0eTphbHBoYV07Cit9CisKK0BlbmQKKworI2VuZGlmIC8vIEVOQUJMRShV
SV9QUk9DRVNTX1BERl9IVUQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2Vi
UGFnZVByb3h5SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9XZWJQYWdlUHJveHlJT1MubW0JKHJldmlzaW9uIDI2NjE1NCkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwODgs
MTYgKzEwODgsNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUGVyZm9ybURpY3Rpb25hcnlMCiAg
ICAgcGFnZUNsaWVudCgpLmRpZFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwKGRpY3Rpb25hcnlQb3B1
cEluZm8pOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVy
QW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbihjb25zdCBTdHJpbmcmLCBGcmFtZUluZm9EYXRh
JiYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJQYWdlUHJveHk6Om9wZW5QREZGcm9tVGVtcG9y
YXJ5Rm9sZGVyV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgU3Ry
aW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB2b2lkIFdlYlBhZ2VQcm94eTo6
c2V0UmVtb3RlTGF5ZXJUcmVlUm9vdE5vZGUoUmVtb3RlTGF5ZXJUcmVlTm9kZSogcm9vdE5vZGUp
CiB7CiAgICAgcGFnZUNsaWVudCgpLnNldFJlbW90ZUxheWVyVHJlZVJvb3ROb2RlKHJvb3ROb2Rl
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1w
bE1hYy5oCShyZXZpc2lvbiAyNjYxNTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMv
UGFnZUNsaWVudEltcGxNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDYgKzE5MCwxMyBAQCBw
cml2YXRlOgogCiAgICAgdm9pZCByZWdpc3Rlckluc2VydGlvblVuZG9Hcm91cGluZygpIG92ZXJy
aWRlOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICB2b2lkIGNyZWF0ZVBE
RkhVRChQREZQbHVnaW5JZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJp
ZGU7CisgICAgdm9pZCB1cGRhdGVQREZIVURMb2NhdGlvbihQREZQbHVnaW5JZGVudGlmaWVyLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCByZW1vdmVQREZIVUQo
UERGUGx1Z2luSWRlbnRpZmllcikgb3ZlcnJpZGU7CisgICAgdm9pZCByZW1vdmVBbGxQREZIVURz
KCkgb3ZlcnJpZGU7CisjZW5kaWYKKwogICAgIC8vIEF1eGlsaWFyeSBDbGllbnQgQ3JlYXRpb24K
ICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94
eUNsaWVudCYgZnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudCgpIG92ZXJyaWRlOwpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQko
cmV2aXNpb24gMjY2MTU0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGll
bnRJbXBsTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNDksNiArMzQ5LDMwIEBAIHZvaWQgUGFn
ZUNsaWVudEltcGw6OnJlZ2lzdGVySW5zZXJ0aW9uVW4KICAgICByZWdpc3Rlckluc2VydGlvblVu
ZG9Hcm91cGluZ1dpdGhVbmRvTWFuYWdlcihbbV92aWV3IHVuZG9NYW5hZ2VyXSk7CiB9CiAKKyNp
ZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpjcmVh
dGVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiByZWN0KQoreworICAgIG1faW1wbC0+Y3JlYXRlUERGSFVEKGlkZW50aWZpZXIsIHJl
Y3QpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjp1cGRhdGVQREZIVURMb2NhdGlvbihQREZQ
bHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3Qp
Cit7CisgICAgbV9pbXBsLT51cGRhdGVQREZIVURMb2NhdGlvbihpZGVudGlmaWVyLCByZWN0KTsK
K30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVtb3ZlUERGSFVEKFBERlBsdWdpbklkZW50aWZp
ZXIgaWRlbnRpZmllcikKK3sKKyAgICBtX2ltcGwtPnJlbW92ZVBERkhVRChpZGVudGlmaWVyKTsK
K30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVtb3ZlQWxsUERGSFVEcygpCit7CisgICAgbV9p
bXBsLT5yZW1vdmVBbGxQREZIVURzKCk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoVUlfUFJPQ0VT
U19QREZfSFVEKQorCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpjbGVhckFsbEVkaXRDb21tYW5kcygp
CiB7CiAgICAgbV9pbXBsLT5jbGVhckFsbEVkaXRDb21tYW5kcygpOwpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCShyZXZpc2lvbiAyNjYx
NTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC00NzUsOCArNDc1LDYgQEAgc3RhdGljIE5TU3RyaW5nICpwYXRoVG9Q
REZPbkRpc2soY29uc3QgUwogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2F2ZVBERlRvVGVtcG9yYXJ5
Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbihjb25zdCBTdHJpbmcmIHN1Z2dlc3Rl
ZEZpbGVuYW1lLCBGcmFtZUluZm9EYXRhJiYgZnJhbWVJbmZvLCBjb25zdCBJUEM6OkRhdGFSZWZl
cmVuY2UmIGRhdGEsIGNvbnN0IFN0cmluZyYgcGRmVVVJRCkKIHsKLSAgICBNRVNTQUdFX0NIRUNL
KFRlbXBvcmFyeVBERkZpbGVNYXA6OmlzVmFsaWRLZXkocGRmVVVJRCkpOwotCiAgICAgaWYgKGRh
dGEuaXNFbXB0eSgpKSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiQ2Fubm90IHNhdmUgZW1wdHkg
UERGIGZpbGUgdG8gdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkuIik7CiAgICAgICAgIHJldHVybjsK
QEAgLTUwNCw3ICs1MDIsOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2F2ZVBERlRvVGVtcG9yYXJ5
Rm9sCiAgICAgYXV0byBvcmlnaW5hdGluZ1VSTFN0cmluZyA9IGZyYW1lSW5mby5yZXF1ZXN0LnVy
bCgpLnN0cmluZygpOwogICAgIEZpbGVTeXN0ZW06OnNldE1ldGFkYXRhVVJMKG5zUGF0aC5nZXQo
KSwgb3JpZ2luYXRpbmdVUkxTdHJpbmcpOwogCi0gICAgbV90ZW1wb3JhcnlQREZGaWxlcy5hZGQo
cGRmVVVJRCwgbnNQYXRoLmdldCgpKTsKKyAgICBpZiAoVGVtcG9yYXJ5UERGRmlsZU1hcDo6aXNW
YWxpZEtleShwZGZVVUlEKSkKKyAgICAgICAgbV90ZW1wb3JhcnlQREZGaWxlcy5hZGQocGRmVVVJ
RCwgbnNQYXRoLmdldCgpKTsKIAogICAgIGF1dG8gcGRmRmlsZVVSTCA9IFVSTDo6ZmlsZVVSTFdp
dGhGaWxlU3lzdGVtUGF0aChTdHJpbmcobnNQYXRoLmdldCgpKSk7CiAgICAgbV91aUNsaWVudC0+
Y29uZmlybVBERk9wZW5pbmcoKnRoaXMsIHBkZkZpbGVVUkwsIFdURk1vdmUoZnJhbWVJbmZvKSwg
W3BkZkZpbGVVUkxdIChib29sIGFsbG93ZWQpIHsKQEAgLTUxNCw2ICs1MTMsNyBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sCiAgICAgfSk7CiB9CiAKKyNpZiBFTkFC
TEUoUERGS0lUX1BMVUdJTikgJiYgIUVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCiB2b2lkIFdl
YlBhZ2VQcm94eTo6b3BlblBERkZyb21UZW1wb3JhcnlGb2xkZXJXaXRoTmF0aXZlQXBwbGljYXRp
b24oRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywgY29uc3QgU3RyaW5nJiBwZGZVVUlEKQogewog
ICAgIE1FU1NBR0VfQ0hFQ0soVGVtcG9yYXJ5UERGRmlsZU1hcDo6aXNWYWxpZEtleShwZGZVVUlE
KSk7CkBAIC01MzAsNiArNTMwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6Om9wZW5QREZGcm9tVGVt
cG9yYXJ5RgogICAgICAgICBbW05TV29ya3NwYWNlIHNoYXJlZFdvcmtzcGFjZV0gb3BlblVSTDpw
ZGZGaWxlVVJMXTsKICAgICB9KTsKIH0KKyNlbmRpZgogCiAjaWYgRU5BQkxFKFBERktJVF9QTFVH
SU4pCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2hvd1BERkNvbnRleHRNZW51KGNvbnN0IFdlYktpdDo6
UERGQ29udGV4dE1lbnUmIGNvbnRleHRNZW51LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlv
bmFsPGludDMyX3Q+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtNjczLDYgKzY3NCw0OSBA
QCBQbGF0Zm9ybVZpZXcqIFdlYlBhZ2VQcm94eTo6cGxhdGZvcm1WaWV3CiAgICAgcmV0dXJuIFtw
YWdlQ2xpZW50KCkucGxhdGZvcm1XaW5kb3coKSBjb250ZW50Vmlld107CiB9CiAKKyNpZiBFTkFC
TEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCit2b2lkIFdlYlBhZ2VQcm94eTo6Y3JlYXRlUERGSFVE
KFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
cmVjdCkKK3sKKyAgICBwYWdlQ2xpZW50KCkuY3JlYXRlUERGSFVEKGlkZW50aWZpZXIsIHJlY3Qp
OworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6cmVtb3ZlUERGSFVEKFBERlBsdWdpbklkZW50aWZp
ZXIgaWRlbnRpZmllcikKK3sKKyAgICBwYWdlQ2xpZW50KCkucmVtb3ZlUERGSFVEKGlkZW50aWZp
ZXIpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6dXBkYXRlUERGSFVETG9jYXRpb24oUERGUGx1
Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQor
eworICAgIHBhZ2VDbGllbnQoKS51cGRhdGVQREZIVURMb2NhdGlvbihpZGVudGlmaWVyLCByZWN0
KTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnBkZlpvb21JbihQREZQbHVnaW5JZGVudGlmaWVy
IGlkZW50aWZpZXIpCit7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Wm9vbVBERkluKGlk
ZW50aWZpZXIpKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnBkZlpvb21PdXQoUERGUGx1Z2lu
SWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Olpv
b21QREZPdXQoaWRlbnRpZmllcikpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6cGRmU2F2ZVRv
UERGKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBzZW5kV2l0aEFzeW5j
UmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OlNhdmVQREYoaWRlbnRpZmllciksIFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIChTdHJpbmcmJiBzdWdnZXN0ZWRGaWxlbmFtZSwg
VVJMJiYgb3JpZ2luYXRpbmdVUkwsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YVJlZmVy
ZW5jZSkgeworICAgICAgICBzYXZlUERGVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIoV1RGTW92ZShz
dWdnZXN0ZWRGaWxlbmFtZSksIFdURk1vdmUob3JpZ2luYXRpbmdVUkwpLCBkYXRhUmVmZXJlbmNl
KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnBkZk9wZW5XaXRoUHJldmlldyhQ
REZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJQYWdlOjpPcGVuUERGV2l0aFByZXZpZXcoaWRlbnRpZmllciksIFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIChTdHJpbmcmJiBzdWdnZXN0ZWRGaWxl
bmFtZSwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNl
JiBkYXRhLCBjb25zdCBTdHJpbmcmIHBkZlVVSUQpIHsKKyAgICAgICAgc2F2ZVBERlRvVGVtcG9y
YXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbihXVEZNb3ZlKHN1Z2dlc3RlZEZp
bGVuYW1lKSwgV1RGTW92ZShmcmFtZUluZm8pLCBkYXRhLCBwZGZVVUlEKTsKKyAgICB9KTsKK30K
KworI2VuZGlmIC8vIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdAogCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpJbmRleDogU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNjYxNTQpCisr
KyBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzkwLDYgKzE3OTAsNyBAQAogCQlEM0I5NDg0OTExRkY0QjY1MDAwMzJCMzkg
LyogV2ViU2VhcmNoUG9wdXBNZW51LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBEM0I5NDg0NTExRkY0QjY1MDAwMzJCMzkgLyogV2ViU2VhcmNoUG9wdXBN
ZW51LmggKi87IH07CiAJCURGNDYyRTBGMjNGMjJGNTUwMEVGRjM1RiAvKiBXS0hUVFBDb29raWVT
dG9yZVByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IERGNDYyRTBFMjNGMjJGNTMwMEVGRjM1RiAvKiBXS0hUVFBDb29raWVTdG9yZVByaXZhdGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlERjQ2
MkUxMjIzRjMzOEJFMDBFRkYzNUYgLyogV0tDb250ZW50V29ybGRQcml2YXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERjQ2MkUxMTIzRjMzOEFEMDBF
RkYzNUYgLyogV0tDb250ZW50V29ybGRQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJREY4NENFRTQyNDlBQTI0RDAwOTA5NkY2IC8qIFdL
UERGSFVEVmlldy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IERGODRDRUUyMjQ5QUEyMUYwMDkwOTZGNiAvKiBXS1BERkhVRFZpZXcubW0gKi87IH07CiAJ
CUUxMDVGRTU0MThEN0I5REUwMDhGNTdBOCAvKiBFZGl0aW5nUmFuZ2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMDVGRTUzMThEN0I5REUwMDhGNTdB
OCAvKiBFZGl0aW5nUmFuZ2UuaCAqLzsgfTsKIAkJRTExRDM1QUUxNkI2M0QxQjAwNkQyM0Q3IC8q
IGNvbS5hcHBsZS5XZWJQcm9jZXNzLnNiIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMTk2N0UzNzE1MEFCNUUyMDBDNzMxNjkgLyogY29tLmFwcGxlLldl
YlByb2Nlc3Muc2IgKi87IH07CiAJCUUxNEE5NTRBMTZFMDE2QTQwMDY4REU4MiAvKiBOZXR3b3Jr
UHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTE0QTk1NDgxNkUwMTZBNDAwNjhERTgyIC8qIE5ldHdvcmtQcm9j
ZXNzUGxhdGZvcm1TdHJhdGVnaWVzLmggKi87IH07CkBAIC01Mjc5LDYgKzUyODAsOSBAQAogCQlE
RjQ2MkUxMTIzRjMzOEFEMDBFRkYzNUYgLyogV0tDb250ZW50V29ybGRQcml2YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQ29udGVudFdvcmxkUHJpdmF0ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERjU4QzYzMTEzNzFBQzU4MDBGOUEzN0MgLyogTmF0
aXZlV2ViV2hlZWxFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXRp
dmVXZWJXaGVlbEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURGNThDNjM1
MTM3MUFDQTAwMEY5QTM3QyAvKiBOYXRpdmVXZWJXaGVlbEV2ZW50TWFjLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTmF0aXZlV2ViV2hlZWxFdmVudE1hYy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREY3NDI3NUMyNEY0OTU1MDAwRjhBQkU5IC8q
IFBERlBsdWdpbklkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UERGUGx1Z2luSWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlERjg0
Q0VFMjI0OUFBMjFGMDA5MDk2RjYgLyogV0tQREZIVURWaWV3Lm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tQREZIVURWaWV3Lm1tOyBwYXRoID0gUERGL1dLUERG
SFVEVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREY4NENFRTMyNDlBQTIx
RjAwOTA5NkY2IC8qIFdLUERGSFVEVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBXS1BERkhVRFZpZXcuaDsgcGF0aCA9IFBERi9XS1BERkhVRFZpZXcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEwNUZFNTMxOEQ3QjlERTAwOEY1N0E4IC8qIEVkaXRpbmdS
YW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFZGl0aW5nUmFuZ2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTExNUM3MTUxOTBGOEEyNTAwRUNDNTE2IC8q
IGNvbS5hcHBsZS5XZWJLaXQuU3RvcmFnZS5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBjb20u
YXBwbGUuV2ViS2l0LlN0b3JhZ2Uuc2I7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL2Nv
bS5hcHBsZS5XZWJLaXQuU3RvcmFnZS5zYjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJ
UjsgfTsKIAkJRTEzM0ZEODkxNDIzREQ3RjAwRkM3QkZCIC8qIFdlYktpdC5pY25zICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gaW1hZ2UuaWNuczsgbmFt
ZSA9IFdlYktpdC5pY25zOyBwYXRoID0gUmVzb3VyY2VzL1dlYktpdC5pY25zOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNTkwMCw2ICs1OTA0LDcgQEAKIAkJCWNoaWxkcmVuID0gKAog
CQkJCTFBNkZCOTA4MTFFNjZGQjEwMERCMTM3MSAvKiBOZXRzY2FwZSAqLywKIAkJCQlFMTk5ODc1
QjE0MkJGOUNGMDBCQjJERTcgLyogUERGICovLAorCQkJCURGNzQyNzVDMjRGNDk1NTAwMEY4QUJF
OSAvKiBQREZQbHVnaW5JZGVudGlmaWVyLmggKi8sCiAJCQkJMUE2RkI3RDAxMUU2NTFFMjAwREIx
MzcxIC8qIFBsdWdpbi5jcHAgKi8sCiAJCQkJMUE2RkI3RDExMUU2NTFFMjAwREIxMzcxIC8qIFBs
dWdpbi5oICovLAogCQkJCTFBQTU2RjI4MTFFOTJCQzgwMDYxQjg4MiAvKiBQbHVnaW5Db250cm9s
bGVyLmggKi8sCkBAIC04OTYzLDYgKzg5NjgsNyBAQAogCQkJCUNENDU3MEQ4MjQ0NENBMTcwMEEz
RENFQiAvKiBNZWRpYSAqLywKIAkJCQk1MTBDQzdFNzE2MTM4RTcyMDBEMDNFRDMgLyogTmV0d29y
ayAqLywKIAkJCQkzMUEyRUM0MDE0ODk5NzM3MDA4MTBENzEgLyogTm90aWZpY2F0aW9ucyAqLywK
KwkJCQlERjg0Q0VFMTI0OUFBMjAwMDA5MDk2RjYgLyogUERGICovLAogCQkJCTFBRUZDQzA1MTFE
MDFGMzQwMDgyMTlEMyAvKiBQbHVnaW5zICovLAogCQkJCTJEMTU1MUE5MUY1QTlCNDIwMDA2RTNG
RSAvKiBSZW1vdGVMYXllclRyZWUgKi8sCiAJCQkJMUFBRjA4OUUxOTI2ODFBQzAwQjYzOTBDIC8q
IFVzZXJDb250ZW50ICovLApAQCAtMTA0NTEsNiArMTA0NTcsMTUgQEAKIAkJCXBhdGggPSBpb3M7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQlERjg0Q0VFMTI0OUFBMjAwMDA5
MDk2RjYgLyogUERGICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgK
KwkJCQlERjg0Q0VFMzI0OUFBMjFGMDA5MDk2RjYgLyogV0tQREZIVURWaWV3LmggKi8sCisJCQkJ
REY4NENFRTIyNDlBQTIxRjAwOTA5NkY2IC8qIFdLUERGSFVEVmlldy5tbSAqLywKKwkJCSk7CisJ
CQluYW1lID0gUERGOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJRTE3MDg3
NkQxNkQ2Q0E3MjAwRjk5MjI2IC8qIEZpbGVBUEkgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKApAQCAtMTMxNDIsNiArMTMxNTcsNyBAQAogCQkJCTYzNzI4MUEzMjFB
REM3NDQwMDlFMERFNiAvKiBXS0Rvd25sb2FkUHJvZ3Jlc3MubW0gaW4gU291cmNlcyAqLywKIAkJ
CQk1Q0U5MTIwRDIyOTNDMjE5MDA1QkVDNzggLyogV0tNYWluLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNDY1N0Q4OEEyMjY2NEEyRjAwNURFODIzIC8qIFdLT3JpZW50YXRpb25BY2Nlc3NBbGVydC5t
bSBpbiBTb3VyY2VzICovLAorCQkJCURGODRDRUU0MjQ5QUEyNEQwMDkwOTZGNiAvKiBXS1BERkhV
RFZpZXcubW0gaW4gU291cmNlcyAqLywKIAkJCQk1Q0EyNkQ4MzIxN0FEMUI4MDBGOTdBMzUgLyog
V0tTYWZlQnJvd3NpbmdXYXJuaW5nLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMURCMDE5NDQyMTFD
RjAwNTAwOUZCM0U4IC8qIFdLU2hhcmVTaGVldC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdBNzhG
RjMzMjI0MTkxOUIwMDk2NDgzRSAvKiBXS1N0b3JhZ2VBY2Nlc3NBbGVydC5tbSBpbiBTb3VyY2Vz
ICovLApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGUGx1Z2luSWRl
bnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BERlBsdWdpbklkZW50aWZpZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvUGx1Z2lucy9QREZQbHVnaW5JZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3Rm
L09iamVjdElkZW50aWZpZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKKyNpZiBFTkFCTEUo
VUlfUFJPQ0VTU19QREZfSFVEKQorZW51bSBQREZQbHVnaW5JZGVudGlmaWVyVHlwZSB7IH07Cit1
c2luZyBQREZQbHVnaW5JZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxQREZQbHVnaW5JZGVu
dGlmaWVyVHlwZT47CisjZW5kaWYKKworfQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1BsdWdpbnMvUERGL1BERkxheWVyQ29udHJvbGxlclNQSS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZMYXllckNvbnRyb2xsZXJTUEkuaAko
cmV2aXNpb24gMjY2MTU0KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERG
L1BERkxheWVyQ29udHJvbGxlclNQSS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4NywxMiBA
QCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBQREZMYXllckNvbnRyCiAKIC0gKHZvaWQpc25h
cHNob3RJbkNvbnRleHQ6KENHQ29udGV4dFJlZiljb250ZXh0OwogCisjaWYgRU5BQkxFKFVJX1BS
T0NFU1NfUERGX0hVRCkKKy0gKHZvaWQpc2V0RGlzcGxheXNQREZIVURDb250cm9sbGVyOihCT09M
KWRpc3BsYXlzQ29udHJvbGxlcjsKKy0gKHZvaWQpem9vbUluOihpZClhdFBvaW50OworLSAodm9p
ZCl6b29tT3V0OihpZClhdFBvaW50OworI2VuZGlmCisKIC0gKHZvaWQpbWFnbmlmeVdpdGhNYWdu
aWZpY2F0aW9uOihDR0Zsb2F0KW1hZ25pZmljYXRpb24gYXRQb2ludDooQ0dQb2ludClwb2ludCBp
bW1lZGlhdGVseTooQk9PTClpbW1lZGlhdGVseTsKIAogLSAoQ0dQb2ludClzY3JvbGxQb3NpdGlv
bjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERG
UGx1Z2luLmgJKHJldmlzaW9uIDI2NjE1NCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BERi9QREZQbHVnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
I2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQogCiAjaW5jbHVkZSAiUERGS2l0SW1wb3J0cy5oIgor
I2luY2x1ZGUgIlBERlBsdWdpbklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJQbHVnaW4uaCIKICNp
bmNsdWRlICJXZWJFdmVudC5oIgogI2luY2x1ZGUgIldlYkhpdFRlc3RSZXN1bHREYXRhLmgiCkBA
IC01MCw2ICs1MSw3IEBAIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTVmFsdWUqIEpTVmEK
IE9CSkNfQ0xBU1MgTlNBcnJheTsKIE9CSkNfQ0xBU1MgTlNBdHRyaWJ1dGVkU3RyaW5nOwogT0JK
Q19DTEFTUyBOU0RhdGE7CitPQkpDX0NMQVNTIE5TRXZlbnQ7CiBPQkpDX0NMQVNTIE5TU3RyaW5n
OwogT0JKQ19DTEFTUyBQREZBbm5vdGF0aW9uOwogT0JKQ19DTEFTUyBQREZMYXllckNvbnRyb2xs
ZXI7CkBAIC03Nyw4ICs3OSw5IEBAIGNsYXNzIFBERlBsdWdpbkFubm90YXRpb247CiBjbGFzcyBQ
REZQbHVnaW5QYXNzd29yZEZpZWxkOwogY2xhc3MgUGx1Z2luVmlldzsKIGNsYXNzIFdlYkZyYW1l
Oworc3RydWN0IEZyYW1lSW5mb0RhdGE7CiAKLWNsYXNzIFBERlBsdWdpbiBmaW5hbCA6IHB1Ymxp
YyBQbHVnaW4sIHByaXZhdGUgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEKK2NsYXNzIFBERlBsdWdp
biBmaW5hbCA6IHB1YmxpYyBQbHVnaW4sIHB1YmxpYyBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYQog
I2lmIEhBVkUoSU5DUkVNRU5UQUxfUERGX0FQSVMpCiAgICAgLCBwcml2YXRlIFdlYkNvcmU6Ok5l
dHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50CiAjZW5kaWYKQEAgLTEwMyw5ICsxMDYsMTkg
QEAgcHVibGljOgogICAgIHZvaWQgbm90aWZ5U2VsZWN0aW9uQ2hhbmdlZChQREZTZWxlY3Rpb24g
Kik7CiAgICAgdm9pZCBub3RpZnlDdXJzb3JDaGFuZ2VkKHVpbnQ2NF90IC8qIFBERkxheWVyQ29u
dHJvbGxlckN1cnNvclR5cGUgKi8pOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkK
KyAgICB2b2lkIHpvb21JbigpOworICAgIHZvaWQgem9vbU91dCgpOworICAgIHZvaWQgc2F2ZShD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFVSTCYsIGNvbnN0IElQ
Qzo6RGF0YVJlZmVyZW5jZSYpPiYmKTsKKyAgICB2b2lkIG9wZW5XaXRoUHJldmlldyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYsIEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgSVBD
OjpEYXRhUmVmZXJlbmNlJiwgY29uc3QgU3RyaW5nJik+JiYpOworICAgIFBERlBsdWdpbklkZW50
aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorI2VuZGlm
CisKICAgICB2b2lkIGNsaWNrZWRMaW5rKE5TVVJMICopOworI2lmICFFTkFCTEUoVUlfUFJPQ0VT
U19QREZfSFVEKQogICAgIHZvaWQgc2F2ZVRvUERGKCk7CiAgICAgdm9pZCBvcGVuV2l0aE5hdGl2
ZUFwcGxpY2F0aW9uKCk7CisjZW5kaWYKICAgICB2b2lkIHdyaXRlSXRlbXNUb1Bhc3RlYm9hcmQo
TlNTdHJpbmcgKnBhc3RlYm9hcmROYW1lLCBOU0FycmF5ICppdGVtcywgTlNBcnJheSAqdHlwZXMp
OwogICAgIHZvaWQgc2hvd0RlZmluaXRpb25Gb3JBdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRl
ZFN0cmluZyAqLCBDR1BvaW50KTsKICAgICB2b2lkIHBlcmZvcm1XZWJTZWFyY2goTlNTdHJpbmcg
Kik7CkBAIC0xMTgsNyArMTMxLDEwIEBAIHB1YmxpYzoKIAogICAgIFdlYkNvcmU6OkZsb2F0UmVj
dCBjb252ZXJ0RnJvbVBERlZpZXdUb1NjcmVlbihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBj
b25zdDsKICAgICBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbVJvb3RWaWV3VG9QREZWaWV3
KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7CisgICAgV2ViQ29yZTo6SW50UG9pbnQg
Y29udmVydEZyb21QREZWaWV3VG9Sb290Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNv
bnN0OworICAgIFdlYkNvcmU6OkludFJlY3QgY29udmVydEZyb21QREZWaWV3VG9Sb290Vmlldyhj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Q7CiAgICAgV2ViQ29yZTo6SW50UmVjdCBib3Vu
ZHNPblNjcmVlbigpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFJlY3QgZnJhbWVGb3JIVUQoKSBj
b25zdDsKIAogICAgIGJvb2wgc2hvd0NvbnRleHRNZW51QXRQb2ludChjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYpOwogCkBAIC0xNTksNyArMTc1LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHdhbnRz
V2hlZWxFdmVudHMoKSBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAgICAgdm9pZCBnZW9tZXRyeURp
ZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBwbHVnaW5TaXplLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBjbGlwUmVjdCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiBwbHVn
aW5Ub1Jvb3RWaWV3VHJhbnNmb3JtKSBmaW5hbDsKICAgICB2b2lkIGNvbnRlbnRzU2NhbGVGYWN0
b3JDaGFuZ2VkKGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHZpc2liaWxpdHlEaWRDaGFuZ2UoYm9v
bCkgZmluYWwgeyB9CisgICAgdm9pZCB2aXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wpIGZpbmFsOwog
ICAgIHZvaWQgZnJhbWVEaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHJlcXVlc3RJRCkgZmluYWw7
CiAgICAgdm9pZCBmcmFtZURpZEZhaWwodWludDY0X3QgcmVxdWVzdElELCBib29sIHdhc0NhbmNl
bGxlZCkgZmluYWw7CiAgICAgdm9pZCBkaWRFdmFsdWF0ZUphdmFTY3JpcHQodWludDY0X3QgcmVx
dWVzdElELCBjb25zdCBTdHJpbmcmIHJlc3VsdCkgZmluYWw7CkBAIC0yNjMsNyArMjc5LDYgQEAg
cHJpdmF0ZToKICAgICBOU0V2ZW50ICpuc0V2ZW50Rm9yV2ViTW91c2VFdmVudChjb25zdCBXZWJN
b3VzZUV2ZW50Jik7CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZyb21QbHVnaW5Ub1BE
RlZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKICAgICBXZWJDb3JlOjpJbnRQ
b2ludCBjb252ZXJ0RnJvbVJvb3RWaWV3VG9QbHVnaW4oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
KSBjb25zdDsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RW
aWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7CiAgICAgCiAgICAgYm9vbCBzdXBw
b3J0c0Zvcm1zKCk7CiAgICAgYm9vbCBpc0Z1bGxGcmFtZVBsdWdpbigpIGNvbnN0OwpAQCAtNDAz
LDYgKzQxOCw5IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2VuZGlmIC8vIEhBVkUoSU5DUkVNRU5U
QUxfUERGX0FQSVMpCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBQREZQbHVn
aW5JZGVudGlmaWVyIG1faWRlbnRpZmllcjsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1
Z2luLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BE
Ri9QREZQbHVnaW4ubW0JKHJldmlzaW9uIDI2NjE1NCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0JKHdvcmtpbmcgY29weSkKQEAgLTQzMywxMiAr
NDMzLDE2IEBAIC0gKHZvaWQpcGVyZm9ybVNwb3RsaWdodFNlYXJjaDooTlNTdHJpbmcKIAogLSAo
dm9pZClvcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uCiB7CisjaWYgIUVOQUJMRShVSV9QUk9DRVNT
X1BERl9IVUQpCiAgICAgX3BkZlBsdWdpbi0+b3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbigpOwor
I2VuZGlmCiB9CiAKIC0gKHZvaWQpc2F2ZVRvUERGCiB7CisjaWYgIUVOQUJMRShVSV9QUk9DRVNT
X1BERl9IVUQpCiAgICAgX3BkZlBsdWdpbi0+c2F2ZVRvUERGKCk7CisjZW5kaWYKIH0KIAogLSAo
dm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29u
dHJvbGxlciBjbGlja2VkTGlua1dpdGhVUkw6KE5TVVJMICopdXJsCkBAIC02MDAsNyArNjA0LDEz
IEBAIGlubGluZSBQREZQbHVnaW46OlBERlBsdWdpbihXZWJGcmFtZSYgZnIKICNpZiBIQVZFKElO
Q1JFTUVOVEFMX1BERl9BUElTKQogICAgICwgbV9pbmNyZW1lbnRhbFBERkxvYWRpbmdFbmFibGVk
KFdlYkNvcmU6OlJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuaW5jcmVt
ZW50YWxQREZMb2FkaW5nRW5hYmxlZCgpKQogI2VuZGlmCisjaWYgRU5BQkxFKFVJX1BST0NFU1Nf
UERGX0hVRCkKKyAgICAsIG1faWRlbnRpZmllcihQREZQbHVnaW5JZGVudGlmaWVyOjpnZW5lcmF0
ZSgpKQorI2VuZGlmCiB7CisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBbbV9w
ZGZMYXllckNvbnRyb2xsZXIgc2V0RGlzcGxheXNQREZIVURDb250cm9sbGVyOk5PXTsKKyNlbmRp
ZgogICAgIG1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpLmRlbGVnYXRlID0gbV9wZGZMYXllckNv
bnRyb2xsZXJEZWxlZ2F0ZS5nZXQoKTsKICAgICBtX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKS5w
YXJlbnRMYXllciA9IG1fY29udGVudExheWVyLmdldCgpOwogCkBAIC02NDAsNiArNjUwLDEwIEBA
IGlubGluZSBQREZQbHVnaW46OlBERlBsdWdpbihXZWJGcmFtZSYgZnIKIAogUERGUGx1Z2luOjp+
UERGUGx1Z2luKCkKIHsKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIGlmIChh
dXRvKiBwYWdlID0gbV9mcmFtZS5wYWdlKCkpCisgICAgICAgIHBhZ2UtPnJlbW92ZVBERkhVRCgq
dGhpcyk7CisjZW5kaWYKIH0KIAogI2lmIEhBVkUoSU5DUkVNRU5UQUxfUERGX0FQSVMpCkBAIC0x
NzgwLDYgKzE3OTQsMTEgQEAgdm9pZCBQREZQbHVnaW46OmNvbnRlbnRzU2NhbGVGYWN0b3JDaGFu
ZwogICAgIHVwZGF0ZVBhZ2VBbmREZXZpY2VTY2FsZUZhY3RvcnMoKTsKIH0KIAorSW50UmVjdCBQ
REZQbHVnaW46OmZyYW1lRm9ySFVEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29udmVydEZyb21Q
REZWaWV3VG9Sb290VmlldyhJbnRSZWN0KEludFBvaW50KCksIHNpemUoKSkpOworfQorCiB2b2lk
IFBERlBsdWdpbjo6Y2FsY3VsYXRlU2l6ZXMoKQogewogICAgIGlmIChbbV9wZGZEb2N1bWVudCBp
c0xvY2tlZF0pIHsKQEAgLTE3OTAsNiArMTgwOSwxMCBAQCB2b2lkIFBERlBsdWdpbjo6Y2FsY3Vs
YXRlU2l6ZXMoKQogCiAgICAgbV9maXJzdFBhZ2VIZWlnaHQgPSBbbV9wZGZEb2N1bWVudCBwYWdl
Q291bnRdID8gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KENHQ2VpbGluZyhbW21fcGRmRG9jdW1lbnQg
cGFnZUF0SW5kZXg6MF0gYm91bmRzRm9yQm94OmtQREZEaXNwbGF5Qm94Q3JvcEJveF0uc2l6ZS5o
ZWlnaHQpKSA6IDA7CiAgICAgc2V0UERGRG9jdW1lbnRTaXplKEludFNpemUoW21fcGRmTGF5ZXJD
b250cm9sbGVyIGNvbnRlbnRTaXplUmVzcGVjdGluZ1pvb21dKSk7CisKKyNpZiBFTkFCTEUoVUlf
UFJPQ0VTU19QREZfSFVEKQorICAgIG1fZnJhbWUucGFnZSgpLT51cGRhdGVQREZIVURMb2NhdGlv
bigqdGhpcywgZnJhbWVGb3JIVUQoKSk7CisjZW5kaWYKIH0KIAogYm9vbCBQREZQbHVnaW46Omlu
aXRpYWxpemUoY29uc3QgUGFyYW1ldGVycyYgcGFyYW1ldGVycykKQEAgLTE5MjQsNyArMTk0Nywx
MyBAQCBJbnRQb2ludCBQREZQbHVnaW46OmNvbnZlcnRGcm9tUERGVmlld1RvCiAgICAgSW50UG9p
bnQgcG9pbnRJblBsdWdpbkNvb3JkaW5hdGVzKHBvaW50LngoKSwgc2l6ZSgpLmhlaWdodCgpIC0g
cG9pbnQueSgpKTsKICAgICByZXR1cm4gbV9yb290Vmlld1RvUGx1Z2luVHJhbnNmb3JtLmludmVy
c2UoKS52YWx1ZU9yKEFmZmluZVRyYW5zZm9ybSgpKS5tYXBQb2ludChwb2ludEluUGx1Z2luQ29v
cmRpbmF0ZXMpOwogfQotICAgIAorCitJbnRSZWN0IFBERlBsdWdpbjo6Y29udmVydEZyb21QREZW
aWV3VG9Sb290Vmlldyhjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAoreworICAgIEludFJlY3Qg
cmVjdEluUGx1Z2luQ29vcmRpbmF0ZXMocmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCks
IHJlY3QuaGVpZ2h0KCkpOworICAgIHJldHVybiBtX3Jvb3RWaWV3VG9QbHVnaW5UcmFuc2Zvcm0u
aW52ZXJzZSgpLnZhbHVlT3IoQWZmaW5lVHJhbnNmb3JtKCkpLm1hcFJlY3QocmVjdEluUGx1Z2lu
Q29vcmRpbmF0ZXMpOworfQorCiBJbnRQb2ludCBQREZQbHVnaW46OmNvbnZlcnRGcm9tUm9vdFZp
ZXdUb1BERlZpZXcoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAogewogICAgIEludFBvaW50
IHBvaW50SW5QbHVnaW5Db29yZGluYXRlcyA9IG1fcm9vdFZpZXdUb1BsdWdpblRyYW5zZm9ybS5t
YXBQb2ludChwb2ludCk7CkBAIC0xOTU1LDYgKzE5ODQsMTggQEAgSW50UmVjdCBQREZQbHVnaW46
OmJvdW5kc09uU2NyZWVuKCkgY29ucwogICAgIHJldHVybiBmcmFtZVZpZXctPmNvbnRlbnRzVG9T
Y3JlZW4oZW5jbG9zaW5nSW50UmVjdChyZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKSk7CiB9CiAK
K3ZvaWQgUERGUGx1Z2luOjp2aXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wgdmlzaWJsZSkKK3sKKyNp
ZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIGlmICh2aXNpYmxlKQorICAgICAgICBt
X2ZyYW1lLnBhZ2UoKS0+Y3JlYXRlUERGSFVEKCp0aGlzLCBmcmFtZUZvckhVRCgpKTsKKyAgICBl
bHNlCisgICAgICAgIG1fZnJhbWUucGFnZSgpLT5yZW1vdmVQREZIVUQoKnRoaXMpOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0odmlzaWJsZSk7CisjZW5kaWYKK30KKwogdm9pZCBQREZQbHVnaW46
Omdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIHBsdWdpblNpemUsIGNvbnN0IEludFJl
Y3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0pCiB7
CiAgICAgaWYgKHNpemUoKSA9PSBwbHVnaW5TaXplICYmIHBsdWdpblZpZXcoKS0+cGFnZVNjYWxl
RmFjdG9yKCkgPT0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGNvbnRlbnRTY2FsZUZhY3Rvcl0pCkBA
IC0yNDAwLDYgKzI0NDEsMzEgQEAgYm9vbCBQREZQbHVnaW46OnBsdWdpbkhhbmRsZXNDb250ZW50
T2ZmcwogICAgIHJldHVybiB0cnVlOwogfQogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hV
RCkKKwordm9pZCBQREZQbHVnaW46Onpvb21JbigpCit7CisgICAgW21fcGRmTGF5ZXJDb250cm9s
bGVyIHpvb21JbjpuaWxdOworfQorCit2b2lkIFBERlBsdWdpbjo6em9vbU91dCgpCit7CisgICAg
W21fcGRmTGF5ZXJDb250cm9sbGVyIHpvb21PdXQ6bmlsXTsKK30KKwordm9pZCBQREZQbHVnaW46
OnNhdmUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmLCBjb25zdCBVUkwmLCBj
b25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBO
U0RhdGEgKmRhdGEgPSBsaXZlRGF0YSgpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fc3VnZ2Vz
dGVkRmlsZW5hbWUsIG1fZnJhbWUudXJsKCksIElQQzo6IERhdGFSZWZlcmVuY2Uoc3RhdGljX2Nh
c3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxlbmd0aCkpOworfQorCit2b2lk
IFBERlBsdWdpbjo6b3BlbldpdGhQcmV2aWV3KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3Qg
U3RyaW5nJiwgRnJhbWVJbmZvRGF0YSYmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25z
dCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBOU0RhdGEgKmRhdGEgPSBs
aXZlRGF0YSgpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fc3VnZ2VzdGVkRmlsZW5hbWUsIG1f
ZnJhbWUuaW5mbygpLCBJUEM6OiBEYXRhUmVmZXJlbmNlIHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxlbmd0aCB9LCBjcmVhdGVDYW5vbmljYWxVVUlEU3Ry
aW5nKCkpOworfQorCisjZWxzZSAvLyBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQogICAgIAog
dm9pZCBQREZQbHVnaW46OnNhdmVUb1BERigpCiB7CkBAIC0yNDMyLDYgKzI0OTgsOCBAQCB2b2lk
IFBERlBsdWdpbjo6b3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvCiAgICAgbV9mcmFtZS5wYWdlKCkt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6T3BlblBERkZyb21UZW1wb3JhcnlGb2xkZXJX
aXRoTmF0aXZlQXBwbGljYXRpb24obV9mcmFtZS5pbmZvKCksIG1fdGVtcG9yYXJ5UERGVVVJRCkp
OwogfQogCisjZW5kaWYgLy8gRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKwogdm9pZCBQREZQ
bHVnaW46OndyaXRlSXRlbXNUb1Bhc3RlYm9hcmQoTlNTdHJpbmcgKnBhc3RlYm9hcmROYW1lLCBO
U0FycmF5ICppdGVtcywgTlNBcnJheSAqdHlwZXMpCiB7CiAgICAgYXV0byBwYXN0ZWJvYXJkVHlw
ZXMgPSBtYWtlVmVjdG9yPFN0cmluZz4odHlwZXMpOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDI2NjE1NCkKKysrIFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MTIzLDEyICs1MTIzLDEyIEBAIHZvaWQgV2ViUGFnZTo6ZGlkRmluaXNoUHJpbnRPcGVyYXRp
b24oY28KIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pICYmICFFTkFCTEUo
VUlfUFJPQ0VTU19QREZfSFVEKQogdm9pZCBXZWJQYWdlOjpzYXZlUERGVG9GaWxlSW5Eb3dubG9h
ZHNGb2xkZXIoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgY29uc3QgVVJMJiBvcmln
aW5hdGluZ1VSTCwgY29uc3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKQogewog
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2F2ZVBERlRvRmlsZUluRG93bmxvYWRz
Rm9sZGVyKHN1Z2dlc3RlZEZpbGVuYW1lLCBvcmlnaW5hdGluZ1VSTCwgSVBDOjpEYXRhUmVmZXJl
bmNlKGRhdGEsIHNpemUpKSk7CiB9CiAKLSNpZiBQTEFURk9STShDT0NPQSkKIHZvaWQgV2ViUGFn
ZTo6c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbihj
b25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBGcmFtZUluZm9EYXRhJiYgZnJhbWVJbmZv
LCBjb25zdCB1aW50OF90KiBkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUsIGNvbnN0IFN0cmluZyYg
cGRmVVVJRCkKIHsKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNhdmVQREZUb1Rl
bXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oc3VnZ2VzdGVkRmlsZW5h
bWUsIGZyYW1lSW5mbywgSVBDOjpEYXRhUmVmZXJlbmNlKGRhdGEsIHNpemUpLCBwZGZVVUlEKSk7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZp
c2lvbiAyNjYxNTQpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJNZXNzYWdlUmVj
ZWl2ZXIuaCIKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCiAjaW5jbHVkZSAiT3B0aW9uYWxD
YWxsYmFja0lELmgiCisjaW5jbHVkZSAiUERGUGx1Z2luSWRlbnRpZmllci5oIgogI2luY2x1ZGUg
IlBsdWdpbi5oIgogI2luY2x1ZGUgIlBvbGljeURlY2lzaW9uLmgiCiAjaW5jbHVkZSAiU2FuZGJv
eEV4dGVuc2lvbi5oIgpAQCAtMzQ1LDYgKzM0NiwxNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNl
bnRlclNlbGVjdGlvbkluVmlzaWJsZUFyZWEoKTsKIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BE
Rl9IVUQpCisgICAgdm9pZCBjcmVhdGVQREZIVUQoUERGUGx1Z2luJiwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpOworICAgIHZvaWQgdXBkYXRlUERGSFVETG9jYXRpb24oUERGUGx1Z2luJiwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgcmVtb3ZlUERGSFVEKFBERlBsdWdpbiYp
OworICAgIHZvaWQgem9vbVBERkluKFBERlBsdWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgem9v
bVBERk91dChQREZQbHVnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHNhdmVQREYoUERGUGx1Z2lu
SWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmLCBjb25zdCBV
UkwmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKT4mJik7CisgICAgdm9pZCBvcGVuUERGV2l0
aFByZXZpZXcoUERGUGx1Z2luSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25z
dCBTdHJpbmcmLCBGcmFtZUluZm9EYXRhJiYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYsIGNv
bnN0IFN0cmluZyYpPiYmKTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9p
ZCB3aWxsQ29tbWl0TGF5ZXJUcmVlKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJik7CiAgICAg
dm9pZCBkaWRGbHVzaExheWVyVHJlZUF0VGltZShNb25vdG9uaWNUaW1lKTsKQEAgLTEwNzQsOSAr
MTA4NSw4IEBAIHB1YmxpYzoKICAgICBOU0RpY3Rpb25hcnkgKmRhdGFEZXRlY3Rpb25Db250ZXh0
KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhRGV0ZWN0aW9uQ29udGV4dC5nZXQoKTsgfQogI2VuZGlm
CiAKKyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikgJiYgIUVOQUJMRShVSV9QUk9DRVNTX1BERl9I
VUQpCiAgICAgdm9pZCBzYXZlUERGVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIoY29uc3QgU3RyaW5n
JiBzdWdnZXN0ZWRGaWxlbmFtZSwgY29uc3QgVVJMJiBvcmlnaW5hdGluZ1VSTCwgY29uc3QgdWlu
dDhfdCogZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQog
ICAgIHZvaWQgc2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNh
dGlvbihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBGcmFtZUluZm9EYXRhJiYsIGNv
bnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgY29uc3QgU3RyaW5nJiBwZGZV
VUlEKTsKICNlbmRpZgogCkBAIC0xNzkxLDYgKzE4MDEsMTAgQEAgcHJpdmF0ZToKIAogICAgIFdl
YkNvcmU6OkNvbG9yIG1fdW5kZXJsYXlDb2xvcjsKIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BE
Rl9IVUQpCisgICAgSGFzaE1hcDxQREZQbHVnaW5JZGVudGlmaWVyLCBXZWFrUHRyPFBERlBsdWdp
bj4+IG1fcGRmUGx1Z0luc1dpdGhIVUQ7CisjZW5kaWYKKwogICAgIGJvb2wgbV9pc0luUmVkbyB7
IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzQ2xvc2VkIHsgZmFsc2UgfTsKICAgICBib29sIG1fdGFi
VG9MaW5rcyB7IGZhbHNlIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHJldmlzaW9uIDI2NjE1NCkKKysrIFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHdvcmtp
bmcgY29weSkKQEAgLTU3Niw2ICs1NzYsMTMgQEAgR2VuZXJhdGVTeW50aGV0aWNFZGl0aW5nQ29t
bWFuZChlbnVtOnVpbgogCiAgICAgU2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVyc0xvYWRpbmcp
CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIFpvb21QREZJbihXZWJLaXQ6
OlBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikKKyAgICBab29tUERGT3V0KFdlYktpdDo6
UERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQorICAgIFNhdmVQREYoV2ViS2l0OjpQREZQ
bHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpIC0+IChTdHJpbmcgZmlsZW5hbWUsIFVSTCB1cmws
IElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhKSBBc3luYworICAgIE9wZW5QREZXaXRoUHJldmlldyhX
ZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikgLT4gKFN0cmluZyBmaWxlbmFt
ZSwgc3RydWN0IFdlYktpdDo6RnJhbWVJbmZvRGF0YSBmcmFtZUluZm8sIElQQzo6RGF0YVJlZmVy
ZW5jZSBkYXRhLCBTdHJpbmcgdXVpZCkgQXN5bmMKKyNlbmRpZgorCiAgICAgVXBkYXRlQ3VycmVu
dE1vZGlmaWVyU3RhdGUoT3B0aW9uU2V0PFdlYkNvcmU6OlBsYXRmb3JtRXZlbnQ6Ok1vZGlmaWVy
PiBtb2RpZmllcnMpCiAgICAgU2ltdWxhdGVEZXZpY2VPcmllbnRhdGlvbkNoYW5nZShkb3VibGUg
YWxwaGEsIGRvdWJsZSBiZXRhLCBkb3VibGUgZ2FtbWEpCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCShyZXZpc2lvbiAy
NjYxNTQpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2ltcG9ydCAiRWRpdGluZ1Jh
bmdlLmgiCiAjaW1wb3J0ICJFZGl0b3JTdGF0ZS5oIgogI2ltcG9ydCAiRm9udEluZm8uaCIKKyNp
bXBvcnQgIkZyYW1lSW5mb0RhdGEuaCIKICNpbXBvcnQgIkluamVjdGVkQnVuZGxlSGl0VGVzdFJl
c3VsdC5oIgogI2ltcG9ydCAiUERGS2l0SW1wb3J0cy5oIgogI2ltcG9ydCAiUERGUGx1Z2luLmgi
CkBAIC0xMDUxLDcgKzEwNTIsNjIgQEAgdm9pZCBXZWJQYWdlOjpzZXRBY2NlbnRDb2xvcihXZWJD
b3JlOjpDbwogICAgIFtOU0FwcCBfc2V0QWNjZW50Q29sb3I6Y29sb3IuaXNWYWxpZCgpID8gV2Vi
Q29yZTo6bnNDb2xvcihjb2xvcikgOiBuaWxdOwogfQogCi0jZW5kaWYKKyNlbmRpZiAvLyBIQVZF
KEFQUF9BQ0NFTlRfQ09MT1JTKQorCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKwor
dm9pZCBXZWJQYWdlOjp6b29tUERGSW4oUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQor
eworICAgIGF1dG8gcGRmUGx1Z2luID0gbV9wZGZQbHVnSW5zV2l0aEhVRC5nZXQoaWRlbnRpZmll
cik7CisgICAgaWYgKCFwZGZQbHVnaW4pCisgICAgICAgIHJldHVybjsKKyAgICBwZGZQbHVnaW4t
Pnpvb21JbigpOworfQorCit2b2lkIFdlYlBhZ2U6Onpvb21QREZPdXQoUERGUGx1Z2luSWRlbnRp
ZmllciBpZGVudGlmaWVyKQoreworICAgIGF1dG8gcGRmUGx1Z2luID0gbV9wZGZQbHVnSW5zV2l0
aEhVRC5nZXQoaWRlbnRpZmllcik7CisgICAgaWYgKCFwZGZQbHVnaW4pCisgICAgICAgIHJldHVy
bjsKKyAgICBwZGZQbHVnaW4tPnpvb21PdXQoKTsKK30KKwordm9pZCBXZWJQYWdlOjpzYXZlUERG
KFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChj
b25zdCBTdHJpbmcmLCBjb25zdCBVUkwmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBhdXRvIHBkZlBsdWdpbiA9IG1fcGRmUGx1Z0luc1dp
dGhIVUQuZ2V0KGlkZW50aWZpZXIpOworICAgIGlmICghcGRmUGx1Z2luKQorICAgICAgICByZXR1
cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9LCB7IH0sIHsgfSk7CisgICAgcGRmUGx1Z2luLT5zYXZl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBXZWJQYWdlOjpvcGVuUERG
V2l0aFByZXZpZXcoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYsIEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgSVBDOjpEYXRh
UmVmZXJlbmNlJiwgY29uc3QgU3RyaW5nJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAg
YXV0byBwZGZQbHVnaW4gPSBtX3BkZlBsdWdJbnNXaXRoSFVELmdldChpZGVudGlmaWVyKTsKKyAg
ICBpZiAoIXBkZlBsdWdpbikKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSwg
eyB9LCB7IH0sIHsgfSk7CisgICAgcGRmUGx1Z2luLT5vcGVuV2l0aFByZXZpZXcoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIFdlYlBhZ2U6OmNyZWF0ZVBERkhVRChQREZQ
bHVnaW4mIHBsdWdpbiwgY29uc3QgSW50UmVjdCYgYm91bmRpbmdCb3gpCit7CisgICAgYXV0byBh
ZGRSZXN1bHQgPSBtX3BkZlBsdWdJbnNXaXRoSFVELmFkZChwbHVnaW4uaWRlbnRpZmllcigpLCBt
YWtlV2Vha1B0cihwbHVnaW4pKTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAg
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Q3JlYXRlUERGSFVEKHBsdWdpbi5pZGVu
dGlmaWVyKCksIGJvdW5kaW5nQm94KSk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6dXBkYXRlUERGSFVE
TG9jYXRpb24oUERGUGx1Z2luJiBwbHVnaW4sIGNvbnN0IEludFJlY3QmIGJvdW5kaW5nQm94KQor
eworICAgIGlmIChtX3BkZlBsdWdJbnNXaXRoSFVELmNvbnRhaW5zKHBsdWdpbi5pZGVudGlmaWVy
KCkpKQorICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlVwZGF0ZVBERkhVRExv
Y2F0aW9uKHBsdWdpbi5pZGVudGlmaWVyKCksIGJvdW5kaW5nQm94KSk7Cit9CisKK3ZvaWQgV2Vi
UGFnZTo6cmVtb3ZlUERGSFVEKFBERlBsdWdpbiYgcGx1Z2luKQoreworICAgIGlmIChtX3BkZlBs
dWdJbnNXaXRoSFVELnJlbW92ZShwbHVnaW4uaWRlbnRpZmllcigpKSkKKyAgICAgICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSZW1vdmVQREZIVUQocGx1Z2luLmlkZW50aWZpZXIoKSkp
OworfQorCisjZW5kaWYgLy8gRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CiAKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NjE1NCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDIwLTA4LTI1ICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBQREYgaGVhZHMtdXAgZGlz
cGxheSB0byBVSSBwcm9jZXNzIG9uIG1hY09TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU3ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU4NzE1
ODQ3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1BERlZpZXcubW06CisgICAgICAgIChw
ZGZEYXRhKToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAoY2hlY2tGcmFtZSk6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0VUlEZWxlZ2F0ZS5oOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvY29jb2EvVGVzdFVJRGVsZWdhdGUubW06CisgICAgICAgICgtW1Rlc3RVSURlbGVn
YXRlIF93ZWJWaWV3OnNhdmVEYXRhVG9GaWxlOnN1Z2dlc3RlZEZpbGVuYW1lOm1pbWVUeXBlOm9y
aWdpbmF0aW5nVVJMOl0pOgorCiAyMDIwLTA4LTI1ICBDYXJsb3MgQWxiZXJ0byBMb3BleiBQZXJl
eiAgPGNsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdW1dQRV0gQWRkIGEgc2NyaXB0
IGZvciBnZW5lcmF0aW5nIE1pbmlCcm93c2VyIGJ1bmRsZXMgKGZvbGxvdy11cCBmaXgpCkluZGV4
OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLUERGVmlldy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLUERGVmll
dy5tbQkocmV2aXNpb24gMjY2MTU0KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9XS1BERlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwyNiBAQAog
I2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKICNpbXBvcnQgIlRlc3QuaCIKICNpbXBvcnQg
IlRlc3ROYXZpZ2F0aW9uRGVsZWdhdGUuaCIKKyNpbXBvcnQgIlRlc3RVSURlbGVnYXRlLmgiCisj
aW1wb3J0ICJUZXN0VVJMU2NoZW1lSGFuZGxlci5oIgorI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5o
IgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlldy5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmll
d0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0
ZUZvclRlc3RpbmcuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAotI2lmIEhBVkUoUERG
S0lUKSAmJiBQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorI2ltcG9ydCA8Q2FyYm9u
L0NhcmJvbi5oPgorI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpIHx8IEVOQUJMRShVSV9QUk9D
RVNTX1BERl9IVUQpCitzdGF0aWMgTlNEYXRhICpwZGZEYXRhKCkKK3sKKyAgICByZXR1cm4gW05T
RGF0YSBkYXRhV2l0aENvbnRlbnRzT2ZVUkw6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JS
ZXNvdXJjZTpAInRlc3QiIHdpdGhFeHRlbnNpb246QCJwZGYiIHN1YmRpcmVjdG9yeTpAIlRlc3RX
ZWJLaXRBUEkucmVzb3VyY2VzIl1dOworfQorI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpCiAK
IEBpbnRlcmZhY2UgUERGSG9zdFZpZXdDb250cm9sbGVyIDogVUlWaWV3Q29udHJvbGxlcgogKyAo
dm9pZCljcmVhdGVIb3N0Vmlldzoodm9pZCheKShpZCBob3N0Vmlld0NvbnRyb2xsZXIpKWNhbGxi
YWNrIGZvckV4dGVuc2lvbklkZW50aWZpZXI6KE5TU3RyaW5nICopZXh0ZW5zaW9uSWRlbnRpZmll
cjsKQEAgLTEwMSw3ICsxMTYsNyBAQCBURVNUKFdlYktpdCwgV0tQREZWaWV3TG9zZXNBcHBsaWNh
dGlvbkZvCiAgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29u
ZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKICAgICAvLyBMb2FkIGEgUERGLCBz
byB3ZSBpbnN0YWxsIGEgV0tQREZWaWV3LgotICAgIFt3ZWJWaWV3IGxvYWREYXRhOltOU0RhdGEg
ZGF0YVdpdGhDb250ZW50c09mVVJMOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3Vy
Y2U6QCJ0ZXN0IiB3aXRoRXh0ZW5zaW9uOkAicGRmIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0
QVBJLnJlc291cmNlcyJdXSBNSU1FVHlwZTpAImFwcGxpY2F0aW9uL3BkZiIgY2hhcmFjdGVyRW5j
b2RpbmdOYW1lOkAiIiBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly93d3cu
YXBwbGUuY29tLzAiXV07CisgICAgW3dlYlZpZXcgbG9hZERhdGE6cGRmRGF0YSgpIE1JTUVUeXBl
OkAiYXBwbGljYXRpb24vcGRmIiBjaGFyYWN0ZXJFbmNvZGluZ05hbWU6QCIiIGJhc2VVUkw6W05T
VVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwczovL3d3dy5hcHBsZS5jb20vMCJdXTsKICAgICBbd2Vi
VmlldyBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07CiAKICAgICAvLyBHbyBpbnRv
IHRoZSBiYWNrZ3JvdW5kIGFuZCBwYXJlbnQgdGhlIFdLV2ViVmlldy4KQEAgLTEzMiwzICsxNDcs
MjA4IEBAIFRFU1QoV2ViS2l0LCBXS1BERlZpZXdMb3Nlc0FwcGxpY2F0aW9uRm8KIH0KIAogI2Vu
ZGlmCisKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCitzdGF0aWMgdm9pZCBjaGVj
a0ZyYW1lKE5TUmVjdCBmcmFtZSwgQ0dGbG9hdCB4LCBDR0Zsb2F0IHksIENHRmxvYXQgd2lkdGgs
IENHRmxvYXQgaGVpZ2h0KQoreworICAgIEVYUEVDVF9FUShmcmFtZS5vcmlnaW4ueCwgeCk7Cisg
ICAgRVhQRUNUX0VRKGZyYW1lLm9yaWdpbi55LCB5KTsKKyAgICBFWFBFQ1RfRVEoZnJhbWUuc2l6
ZS53aWR0aCwgd2lkdGgpOworICAgIEVYUEVDVF9FUShmcmFtZS5zaXplLmhlaWdodCwgaGVpZ2h0
KTsKK30KKworVEVTVChQREZIVUQsIE1haW5SZXNvdXJjZVBERikKK3sKKyAgICBUZXN0V0tXZWJW
aWV3ICp3ZWJWaWV3ID0gW1tbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01h
a2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOltbV0tXZWJWaWV3Q29uZmlndXJh
dGlvbiBuZXddIGF1dG9yZWxlYXNlXV0gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3IGxvYWRE
YXRhOnBkZkRhdGEoKSBNSU1FVHlwZTpAImFwcGxpY2F0aW9uL3BkZiIgY2hhcmFjdGVyRW5jb2Rp
bmdOYW1lOkAiIiBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly93d3cuYXBw
bGUuY29tL3Rlc3RQYXRoIl1dOworICAgIEVYUEVDVF9FUSh3ZWJWaWV3Ll9wZGZIVURzLmNvdW50
LCAwdSk7CisgICAgW3dlYlZpZXcgX3Rlc3Rfd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOwor
ICAgIEVYUEVDVF9FUSh3ZWJWaWV3Ll9wZGZIVURzLmNvdW50LCAxdSk7CisgICAgY2hlY2tGcmFt
ZSh3ZWJWaWV3Ll9wZGZIVURzLmFueU9iamVjdC5mcmFtZSwgMCwgMCwgODAwLCA2MDApOworICAg
IAorICAgIFRlc3RVSURlbGVnYXRlICpkZWxlZ2F0ZSA9IFtbVGVzdFVJRGVsZWdhdGUgbmV3XSBh
dXRvcmVsZWFzZV07CisgICAgd2ViVmlldy5VSURlbGVnYXRlID0gZGVsZWdhdGU7CisgICAgX19i
bG9jayBib29sIHNhdmVSZXF1ZXN0UmVjZWl2ZWQgPSBmYWxzZTsKKyAgICBkZWxlZ2F0ZS5zYXZl
RGF0YVRvRmlsZSA9IF4oV0tXZWJWaWV3ICp3ZWJWaWV3RnJvbURlbGVnYXRlLCBOU0RhdGEgKmRh
dGEsIE5TU3RyaW5nICpzdWdnZXN0ZWRGaWxlbmFtZSwgTlNTdHJpbmcgKm1pbWVUeXBlLCBOU1VS
TCAqb3JpZ2luYXRpbmdVUkwpIHsKKyAgICAgICAgRVhQRUNUX0VRKHdlYlZpZXcsIHdlYlZpZXdG
cm9tRGVsZWdhdGUpOworICAgICAgICBFWFBFQ1RfVFJVRShbZGF0YSBpc0VxdWFsVG9EYXRhOnBk
ZkRhdGEoKV0pOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoc3VnZ2VzdGVkRmlsZW5hbWUsICJ0
ZXN0UGF0aC5wZGYiKTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKG1pbWVUeXBlLCAiYXBwbGlj
YXRpb24vcGRmIik7CisgICAgICAgIHNhdmVSZXF1ZXN0UmVjZWl2ZWQgPSB0cnVlOworICAgIH07
CisgICAgW1t3ZWJWaWV3IF9wZGZIVURzXS5hbnlPYmplY3QgcGVyZm9ybVNlbGVjdG9yOk5TU2Vs
ZWN0b3JGcm9tU3RyaW5nKEAiX3BlcmZvcm1BY3Rpb25Gb3JDb250cm9sOiIpIHdpdGhPYmplY3Q6
QCJhcnJvdy5kb3duLmNpcmNsZSJdOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmc2F2
ZVJlcXVlc3RSZWNlaXZlZCk7CisKKyAgICBFWFBFQ1RfRVEod2ViVmlldy5fcGRmSFVEcy5jb3Vu
dCwgMXUpOworICAgIFt3ZWJWaWV3IF9raWxsV2ViQ29udGVudFByb2Nlc3NdOworICAgIHdoaWxl
ICh3ZWJWaWV3Ll9wZGZIVURzLmNvdW50KQorICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpz
cGluUnVuTG9vcCgpOworfQorCitURVNUKFBERkhVRCwgTW92ZUlGcmFtZSkKK3sKKyAgICBUZXN0
VVJMU2NoZW1lSGFuZGxlciAqaGFuZGxlciA9IFtbVGVzdFVSTFNjaGVtZUhhbmRsZXIgbmV3XSBh
dXRvcmVsZWFzZV07CisgICAgaGFuZGxlci5zdGFydFVSTFNjaGVtZVRhc2tIYW5kbGVyID0gXihX
S1dlYlZpZXcgKiwgaWQ8V0tVUkxTY2hlbWVUYXNrPiB0YXNrKSB7CisgICAgICAgIGlmIChbdGFz
ay5yZXF1ZXN0LlVSTC5wYXRoIGlzRXF1YWxUb1N0cmluZzpAIi9tYWluLmh0bWwiXSkgeworICAg
ICAgICAgICAgTlNVUkxSZXNwb25zZSAqcmVzcG9uc2UgPSBbW1tOU1VSTFJlc3BvbnNlIGFsbG9j
XSBpbml0V2l0aFVSTDp0YXNrLnJlcXVlc3QuVVJMIE1JTUVUeXBlOkAidGV4dC9odG1sIiBleHBl
Y3RlZENvbnRlbnRMZW5ndGg6MCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0gYXV0b3JlbGVhc2VdOwor
ICAgICAgICAgICAgY29uc3QgY2hhciogaHRtbCA9ICI8YnIvPjxpZnJhbWUgc3JjPSd0ZXN0LnBk
ZicgaWQ9J3BkZmZyYW1lJz48L2lmcmFtZT4iOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2
ZVJlc3BvbnNlOnJlc3BvbnNlXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVEYXRhOltO
U0RhdGEgZGF0YVdpdGhCeXRlczpodG1sIGxlbmd0aDpzdHJsZW4oaHRtbCldXTsKKyAgICAgICAg
ICAgIFt0YXNrIGRpZEZpbmlzaF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBFWFBF
Q1RfV0tfU1RSRVEodGFzay5yZXF1ZXN0LlVSTC5wYXRoLCAiL3Rlc3QucGRmIik7CisgICAgICAg
ICAgICBOU0RhdGEgKmRhdGEgPSBwZGZEYXRhKCk7CisgICAgICAgICAgICBOU1VSTFJlc3BvbnNl
ICpyZXNwb25zZSA9IFtbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVx
dWVzdC5VUkwgTUlNRVR5cGU6QCJhcHBsaWNhdGlvbi9wZGYiIGV4cGVjdGVkQ29udGVudExlbmd0
aDpkYXRhLmxlbmd0aCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0gYXV0b3JlbGVhc2VdOworICAgICAg
ICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3BvbnNlOnJlc3BvbnNlXTsKKyAgICAgICAgICAgIFt0
YXNrIGRpZFJlY2VpdmVEYXRhOmRhdGFdOworICAgICAgICAgICAgW3Rhc2sgZGlkRmluaXNoXTsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICBXS1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1
cmF0aW9uID0gW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIG5ld10gYXV0b3JlbGVhc2VdOworICAg
IFtjb25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6aGFuZGxlciBmb3JVUkxTY2hlbWU6
QCJ0ZXN0Il07CisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldyA9IFtbW1Rlc3RXS1dlYlZpZXcg
YWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJh
dGlvbjpjb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZpZXcgbG9hZFJlcXVl
c3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAInRl
c3Q6Ly8vbWFpbi5odG1sIl1dXTsKKyAgICBFWFBFQ1RfRVEod2ViVmlldy5fcGRmSFVEcy5jb3Vu
dCwgMHUpOworICAgIFt3ZWJWaWV3IF90ZXN0X3dhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsK
KyAgICBFWFBFQ1RfRVEod2ViVmlldy5fcGRmSFVEcy5jb3VudCwgMXUpOworICAgIGNoZWNrRnJh
bWUod2ViVmlldy5fcGRmSFVEcy5hbnlPYmplY3QuZnJhbWUsIDEwLCAyOCwgMzAwLCAxNTApOwor
CisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAicGRmZnJhbWUud2lkdGg9NDAwIiBj
b21wbGV0aW9uSGFuZGxlcjpuaWxdOworICAgIHdoaWxlICh3ZWJWaWV3Ll9wZGZIVURzLmFueU9i
amVjdC5mcmFtZS5zaXplLndpZHRoICE9IDQwMCkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6c3BpblJ1bkxvb3AoKTsKKyAgICBjaGVja0ZyYW1lKHdlYlZpZXcuX3BkZkhVRHMuYW55T2Jq
ZWN0LmZyYW1lLCAxMCwgMjgsIDQwMCwgMTUwKTsKKworICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2
YVNjcmlwdDpAInZhciBmcmFtZVJlZmVyZW5jZSA9IHBkZmZyYW1lOyBkb2N1bWVudC5ib2R5LnJl
bW92ZUNoaWxkKHBkZmZyYW1lKSIgY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKKyAgICB3aGlsZSAo
d2ViVmlldy5fcGRmSFVEcy5jb3VudCkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3Bp
blJ1bkxvb3AoKTsKKyAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJkb2N1bWVudC5i
b2R5LmFwcGVuZENoaWxkKGZyYW1lUmVmZXJlbmNlKSIgY29tcGxldGlvbkhhbmRsZXI6bmlsXTsK
KyAgICB3aGlsZSAoIXdlYlZpZXcuX3BkZkhVRHMuY291bnQpCisgICAgICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisgICAgRVhQRUNUX0VRKHdlYlZpZXcuX3BkZkhVRHMu
Y291bnQsIDF1KTsKKyAgICBjaGVja0ZyYW1lKHdlYlZpZXcuX3BkZkhVRHMuYW55T2JqZWN0LmZy
YW1lLCAwLCAwLCAwLCAwKTsKKyAgICB3aGlsZSAod2ViVmlldy5fcGRmSFVEcy5hbnlPYmplY3Qu
ZnJhbWUuc2l6ZS53aWR0aCAhPSA0MDApCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNw
aW5SdW5Mb29wKCk7CisgICAgRVhQRUNUX0VRKHdlYlZpZXcuX3BkZkhVRHMuY291bnQsIDF1KTsK
KyAgICBjaGVja0ZyYW1lKHdlYlZpZXcuX3BkZkhVRHMuYW55T2JqZWN0LmZyYW1lLCAxMCwgMjgs
IDQwMCwgMTUwKTsKKworICAgIHdlYlZpZXcucGFnZVpvb20gPSAxLjQ7CisgICAgd2hpbGUgKHdl
YlZpZXcuX3BkZkhVRHMuYW55T2JqZWN0LmZyYW1lLnNpemUud2lkdGggIT0gNTYwKQorICAgICAg
ICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgpOworICAgIEVYUEVDVF9FUSh3ZWJW
aWV3Ll9wZGZIVURzLmNvdW50LCAxdSk7CisgICAgY2hlY2tGcmFtZSh3ZWJWaWV3Ll9wZGZIVURz
LmFueU9iamVjdC5mcmFtZSwgMTQsIDQwLCA1NjAsIDIxMCk7Cit9CisKK1RFU1QoUERGSFVELCBO
ZXN0ZWRJRnJhbWVzKQoreworICAgIFRlc3RVUkxTY2hlbWVIYW5kbGVyICpoYW5kbGVyID0gW1tU
ZXN0VVJMU2NoZW1lSGFuZGxlciBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBoYW5kbGVyLnN0YXJ0
VVJMU2NoZW1lVGFza0hhbmRsZXIgPSBeKFdLV2ViVmlldyAqLCBpZDxXS1VSTFNjaGVtZVRhc2s+
IHRhc2spIHsKKyAgICAgICAgTlNVUkxSZXNwb25zZSAqaHRtbFJlc3BvbnNlID0gW1tbTlNVUkxS
ZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGFzay5yZXF1ZXN0LlVSTCBNSU1FVHlwZTpAInRl
eHQvaHRtbCIgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOjAgdGV4dEVuY29kaW5nTmFtZTpuaWxdIGF1
dG9yZWxlYXNlXTsKKyAgICAgICAgaWYgKFt0YXNrLnJlcXVlc3QuVVJMLnBhdGggaXNFcXVhbFRv
U3RyaW5nOkAiL21haW4uaHRtbCJdKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBodG1sID0g
IjxpZnJhbWUgc3JjPSdmcmFtZS5odG1sJyBpZD0ncGFyZW50ZnJhbWUnPjwvaWZyYW1lPiI7Cisg
ICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6aHRtbFJlc3BvbnNlXTsKKyAgICAg
ICAgICAgIFt0YXNrIGRpZFJlY2VpdmVEYXRhOltOU0RhdGEgZGF0YVdpdGhCeXRlczpodG1sIGxl
bmd0aDpzdHJsZW4oaHRtbCldXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZEZpbmlzaF07CisgICAg
ICAgIH0gZWxzZSBpZiAoW3Rhc2sucmVxdWVzdC5VUkwucGF0aCBpc0VxdWFsVG9TdHJpbmc6QCIv
ZnJhbWUuaHRtbCJdKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBodG1sID0gIjxpZnJhbWUg
c3JjPSd0ZXN0LnBkZic+PC9pZnJhbWU+IjsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVS
ZXNwb25zZTpodG1sUmVzcG9uc2VdOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZURhdGE6
W05TRGF0YSBkYXRhV2l0aEJ5dGVzOmh0bWwgbGVuZ3RoOnN0cmxlbihodG1sKV1dOworICAgICAg
ICAgICAgW3Rhc2sgZGlkRmluaXNoXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEVY
UEVDVF9XS19TVFJFUSh0YXNrLnJlcXVlc3QuVVJMLnBhdGgsICIvdGVzdC5wZGYiKTsKKyAgICAg
ICAgICAgIE5TRGF0YSAqZGF0YSA9IHBkZkRhdGEoKTsKKyAgICAgICAgICAgIE5TVVJMUmVzcG9u
c2UgKnJlc3BvbnNlID0gW1tbTlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGFzay5y
ZXF1ZXN0LlVSTCBNSU1FVHlwZTpAImFwcGxpY2F0aW9uL3BkZiIgZXhwZWN0ZWRDb250ZW50TGVu
Z3RoOmRhdGEubGVuZ3RoIHRleHRFbmNvZGluZ05hbWU6bmlsXSBhdXRvcmVsZWFzZV07CisgICAg
ICAgICAgICBbdGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6cmVzcG9uc2VdOworICAgICAgICAgICAg
W3Rhc2sgZGlkUmVjZWl2ZURhdGE6ZGF0YV07CisgICAgICAgICAgICBbdGFzayBkaWRGaW5pc2hd
OworICAgICAgICB9CisgICAgfTsKKworICAgIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKmNvbmZp
Z3VyYXRpb24gPSBbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07Cisg
ICAgW2NvbmZpZ3VyYXRpb24gc2V0VVJMU2NoZW1lSGFuZGxlcjpoYW5kbGVyIGZvclVSTFNjaGVt
ZTpAInRlc3QiXTsKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3ID0gW1tbVGVzdFdLV2ViVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1
cmF0aW9uOmNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldyBsb2FkUmVx
dWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAi
dGVzdDovLy9tYWluLmh0bWwiXV1dOworICAgIEVYUEVDVF9FUSh3ZWJWaWV3Ll9wZGZIVURzLmNv
dW50LCAwdSk7CisgICAgW3dlYlZpZXcgX3Rlc3Rfd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25d
OworICAgIEVYUEVDVF9FUSh3ZWJWaWV3Ll9wZGZIVURzLmNvdW50LCAxdSk7CisgICAgY2hlY2tG
cmFtZSh3ZWJWaWV3Ll9wZGZIVURzLmFueU9iamVjdC5mcmFtZSwgMjAsIDIwLCAzMDAsIDE1MCk7
CisgICAgCisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5y
ZW1vdmVDaGlsZChwYXJlbnRmcmFtZSkiIGNvbXBsZXRpb25IYW5kbGVyOm5pbF07CisgICAgd2hp
bGUgKHdlYlZpZXcuX3BkZkhVRHMuY291bnQpCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnNwaW5SdW5Mb29wKCk7Cit9CisKK1RFU1QoUERGSFVELCBJRnJhbWUzRFRyYW5zZm9ybSkKK3sK
KyAgICBUZXN0VVJMU2NoZW1lSGFuZGxlciAqaGFuZGxlciA9IFtbVGVzdFVSTFNjaGVtZUhhbmRs
ZXIgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgaGFuZGxlci5zdGFydFVSTFNjaGVtZVRhc2tIYW5k
bGVyID0gXihXS1dlYlZpZXcgKiwgaWQ8V0tVUkxTY2hlbWVUYXNrPiB0YXNrKSB7CisgICAgICAg
IE5TVVJMUmVzcG9uc2UgKmh0bWxSZXNwb25zZSA9IFtbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGlu
aXRXaXRoVVJMOnRhc2sucmVxdWVzdC5VUkwgTUlNRVR5cGU6QCJ0ZXh0L2h0bWwiIGV4cGVjdGVk
Q29udGVudExlbmd0aDowIHRleHRFbmNvZGluZ05hbWU6bmlsXSBhdXRvcmVsZWFzZV07CisgICAg
ICAgIGlmIChbdGFzay5yZXF1ZXN0LlVSTC5wYXRoIGlzRXF1YWxUb1N0cmluZzpAIi9tYWluLmh0
bWwiXSkgeworICAgICAgICAgICAgY29uc3QgY2hhciogaHRtbCA9ICI8aWZyYW1lIHNyYz0ndGVz
dC5wZGYnIGhlaWdodD01MDAgd2lkdGg9NTAwIHN0eWxlPSd0cmFuc2Zvcm06cm90YXRlWSgyMzVk
ZWcpOyc+PC9pZnJhbWU+IjsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVSZXNwb25zZTpo
dG1sUmVzcG9uc2VdOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZURhdGE6W05TRGF0YSBk
YXRhV2l0aEJ5dGVzOmh0bWwgbGVuZ3RoOnN0cmxlbihodG1sKV1dOworICAgICAgICAgICAgW3Rh
c2sgZGlkRmluaXNoXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEVYUEVDVF9XS19T
VFJFUSh0YXNrLnJlcXVlc3QuVVJMLnBhdGgsICIvdGVzdC5wZGYiKTsKKyAgICAgICAgICAgIE5T
RGF0YSAqZGF0YSA9IHBkZkRhdGEoKTsKKyAgICAgICAgICAgIE5TVVJMUmVzcG9uc2UgKnJlc3Bv
bnNlID0gW1tbTlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGFzay5yZXF1ZXN0LlVS
TCBNSU1FVHlwZTpAImFwcGxpY2F0aW9uL3BkZiIgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOmRhdGEu
bGVuZ3RoIHRleHRFbmNvZGluZ05hbWU6bmlsXSBhdXRvcmVsZWFzZV07CisgICAgICAgICAgICBb
dGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6cmVzcG9uc2VdOworICAgICAgICAgICAgW3Rhc2sgZGlk
UmVjZWl2ZURhdGE6ZGF0YV07CisgICAgICAgICAgICBbdGFzayBkaWRGaW5pc2hdOworICAgICAg
ICB9CisgICAgfTsKKworICAgIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24g
PSBbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07CisgICAgW2NvbmZp
Z3VyYXRpb24gc2V0VVJMU2NoZW1lSGFuZGxlcjpoYW5kbGVyIGZvclVSTFNjaGVtZTpAInRlc3Qi
XTsKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3ID0gW1tbVGVzdFdLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNv
bmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNV
UkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAidGVzdDovLy9t
YWluLmh0bWwiXV1dOworICAgIEVYUEVDVF9FUSh3ZWJWaWV3Ll9wZGZIVURzLmNvdW50LCAwdSk7
CisgICAgW3dlYlZpZXcgX3Rlc3Rfd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOworICAgIEVY
UEVDVF9FUSh3ZWJWaWV3Ll9wZGZIVURzLmNvdW50LCAxdSk7CisgICAgY2hlY2tGcmFtZSh3ZWJW
aWV3Ll9wZGZIVURzLmFueU9iamVjdC5mcmFtZSwgNDAzLCAxMCwgNTAwLCA1MDApOworfQorCitU
RVNUKFBERkhVRCwgTXVsdGlwbGVJRnJhbWVzKQoreworICAgIFRlc3RVUkxTY2hlbWVIYW5kbGVy
ICpoYW5kbGVyID0gW1tUZXN0VVJMU2NoZW1lSGFuZGxlciBuZXddIGF1dG9yZWxlYXNlXTsKKyAg
ICBoYW5kbGVyLnN0YXJ0VVJMU2NoZW1lVGFza0hhbmRsZXIgPSBeKFdLV2ViVmlldyAqLCBpZDxX
S1VSTFNjaGVtZVRhc2s+IHRhc2spIHsKKyAgICAgICAgTlNVUkxSZXNwb25zZSAqaHRtbFJlc3Bv
bnNlID0gW1tbTlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGFzay5yZXF1ZXN0LlVS
TCBNSU1FVHlwZTpAInRleHQvaHRtbCIgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOjAgdGV4dEVuY29k
aW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgaWYgKFt0YXNrLnJlcXVlc3QuVVJM
LnBhdGggaXNFcXVhbFRvU3RyaW5nOkAiL21haW4uaHRtbCJdKSB7CisgICAgICAgICAgICBjb25z
dCBjaGFyKiBodG1sID0gIjxpZnJhbWUgc3JjPSd0ZXN0LnBkZicgaGVpZ2h0PTEwMCB3aWR0aD0x
NTA+PC9pZnJhbWU+PGlmcmFtZSBzcmM9J3Rlc3QucGRmJyBoZWlnaHQ9MTIzIHdpZHRoPTEzND48
L2lmcmFtZT4iOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3BvbnNlOmh0bWxSZXNw
b25zZV07CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpbTlNEYXRhIGRhdGFXaXRo
Qnl0ZXM6aHRtbCBsZW5ndGg6c3RybGVuKGh0bWwpXV07CisgICAgICAgICAgICBbdGFzayBkaWRG
aW5pc2hdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgRVhQRUNUX1dLX1NUUkVRKHRh
c2sucmVxdWVzdC5VUkwucGF0aCwgIi90ZXN0LnBkZiIpOworICAgICAgICAgICAgTlNEYXRhICpk
YXRhID0gcGRmRGF0YSgpOworICAgICAgICAgICAgTlNVUkxSZXNwb25zZSAqcmVzcG9uc2UgPSBb
W1tOU1VSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0YXNrLnJlcXVlc3QuVVJMIE1JTUVU
eXBlOkAiYXBwbGljYXRpb24vcGRmIiBleHBlY3RlZENvbnRlbnRMZW5ndGg6ZGF0YS5sZW5ndGgg
dGV4dEVuY29kaW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgICAgIFt0YXNrIGRp
ZFJlY2VpdmVSZXNwb25zZTpyZXNwb25zZV07CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZl
RGF0YTpkYXRhXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZEZpbmlzaF07CisgICAgICAgIH0KKyAg
ICB9OworCisgICAgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IFtbV0tX
ZWJWaWV3Q29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBbY29uZmlndXJhdGlv
biBzZXRVUkxTY2hlbWVIYW5kbGVyOmhhbmRsZXIgZm9yVVJMU2NoZW1lOkAidGVzdCJdOworICAg
IFRlc3RXS1dlYlZpZXcgKndlYlZpZXcgPSBbW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJh
dGlvbl0gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVl
c3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJ0ZXN0Oi8vL21haW4uaHRt
bCJdXV07CisgICAgRVhQRUNUX0VRKHdlYlZpZXcuX3BkZkhVRHMuY291bnQsIDB1KTsKKyAgICBb
d2ViVmlldyBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07CisgICAgRVhQRUNUX0VR
KHdlYlZpZXcuX3BkZkhVRHMuY291bnQsIDJ1KTsKKyAgICBib29sIGhhZExlZnRGcmFtZSA9IGZh
bHNlOworICAgIGJvb2wgaGFkUmlnaHRGcmFtZSA9IGZhbHNlOworICAgIGZvciAoTlNWaWV3ICpo
dWQgaW4gd2ViVmlldy5fcGRmSFVEcykgeworICAgICAgICBpZiAoaHVkLmZyYW1lLm9yaWdpbi54
ID09IDEwKSB7CisgICAgICAgICAgICBjaGVja0ZyYW1lKGh1ZC5mcmFtZSwgMTAsIDMzLCAxNTAs
IDEwMCk7CisgICAgICAgICAgICBoYWRMZWZ0RnJhbWUgPSB0cnVlOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgY2hlY2tGcmFtZShodWQuZnJhbWUsIDE2NCwgMTAsIDEzNCwgMTIzKTsK
KyAgICAgICAgICAgIGhhZFJpZ2h0RnJhbWUgPSB0cnVlOworICAgICAgICB9CisgICAgfQorICAg
IEVYUEVDVF9UUlVFKGhhZExlZnRGcmFtZSk7CisgICAgRVhQRUNUX1RSVUUoaGFkUmlnaHRGcmFt
ZSk7Cit9CisKKyNlbmRpZgpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0VUlE
ZWxlZ2F0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFVJ
RGVsZWdhdGUuaAkocmV2aXNpb24gMjY2MTU0KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9jb2Nv
YS9UZXN0VUlEZWxlZ2F0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaWYg
UExBVEZPUk0oTUFDKQogQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIHZvaWQgKF5nZXRDb250
ZXh0TWVudUZyb21Qcm9wb3NlZE1lbnUpKE5TTWVudSAqLCBfV0tDb250ZXh0TWVudUVsZW1lbnRJ
bmZvICosIGlkIDxOU1NlY3VyZUNvZGluZz4sIHZvaWQgKF4pKE5TTWVudSAqKSk7CiAjZW5kaWYK
K0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSB2b2lkIChec2F2ZURhdGFUb0ZpbGUpKFdLV2Vi
VmlldyAqLCBOU0RhdGEgKiwgTlNTdHJpbmcgKiwgTlNTdHJpbmcgKiwgTlNVUkwgKik7CiAKIC0g
KE5TU3RyaW5nICopd2FpdEZvckFsZXJ0OwogCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL2Nv
Y29hL1Rlc3RVSURlbGVnYXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
Y29jb2EvVGVzdFVJRGVsZWdhdGUubW0JKHJldmlzaW9uIDI2NjE1NCkKKysrIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvY29jb2EvVGVzdFVJRGVsZWdhdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTUwLDYg
KzUwLDEyIEBAIC0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZ2UKIH0KICNl
bmRpZiAvLyBQTEFURk9STShNQUMpCiAKKy0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdl
YlZpZXcgc2F2ZURhdGFUb0ZpbGU6KE5TRGF0YSAqKWRhdGEgc3VnZ2VzdGVkRmlsZW5hbWU6KE5T
U3RyaW5nICopc3VnZ2VzdGVkRmlsZW5hbWUgbWltZVR5cGU6KE5TU3RyaW5nICopbWltZVR5cGUg
b3JpZ2luYXRpbmdVUkw6KE5TVVJMICopdXJsCit7CisgICAgaWYgKF9zYXZlRGF0YVRvRmlsZSkK
KyAgICAgICAgX3NhdmVEYXRhVG9GaWxlKHdlYlZpZXcsIGRhdGEsIHN1Z2dlc3RlZEZpbGVuYW1l
LCBtaW1lVHlwZSwgdXJsKTsKK30KKwogLSAoTlNTdHJpbmcgKil3YWl0Rm9yQWxlcnQKIHsKICAg
ICBFWFBFQ1RfRkFMU0Uoc2VsZi5ydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407489</attachid>
            <date>2020-08-28 11:32:29 -0700</date>
            <delta_ts>2020-08-28 11:33:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215780-20200828113228.patch</filename>
            <type>text/plain</type>
            <size>82506</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjYyODQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA4LTI4ICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBQREYgaGVhZHMtdXAgZGlz
cGxheSB0byBVSSBwcm9jZXNzIG9uIG1hY09TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU3ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU4NzE1
ODQ3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
d3RmL1BsYXRmb3JtSGF2ZS5oOgorCiAyMDIwLTA4LTI3ICBTdGVwaGFuIFN6YWJvICA8c3RlcGhh
bi5zemFib0Bzb255LmNvbT4KIAogICAgICAgICBbUGxheVN0YXRpb25dIEJ1aWxkIGZpeCBkdWUg
dG8gbWVtbWVtIG5vdCBhbHdheXMgYmVpbmcgYXZhaWxhYmxlLgpJbmRleDogU291cmNlL1dURi93
dGYvUGxhdGZvcm1FbmFibGVDb2NvYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1Bs
YXRmb3JtRW5hYmxlQ29jb2EuaAkocmV2aXNpb24gMjY2Mjg0KQorKysgU291cmNlL1dURi93dGYv
UGxhdGZvcm1FbmFibGVDb2NvYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNiArMjI4LDEwIEBA
CiAjZGVmaW5lIEVOQUJMRV9HUFVfRFJJVkVSX1BSRVdBUk1JTkcgMQogI2VuZGlmCiAKKyNpZiBQ
TEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMDAw
CisjZGVmaW5lIEVOQUJMRV9VSV9QUk9DRVNTX1BERl9IVUQgMQorI2VuZGlmCisKICNpZiAhZGVm
aW5lZChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkKICNkZWZpbmUgRU5BQkxFX0lOREVYRURfREFU
QUJBU0UgMQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvTlNJ
bWFnZVNQSS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9O
U0ltYWdlU1BJLmgJKHJldmlzaW9uIDI2NjI4NCkKKysrIFNvdXJjZS9XZWJDb3JlL1BBTC9wYWwv
c3BpL21hYy9OU0ltYWdlU1BJLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDggQEAKIE5T
X0FTU1VNRV9OT05OVUxMX0JFR0lOCiAKIEBpbnRlcmZhY2UgTlNJbWFnZSAoKQorKyAoaW5zdGFu
Y2V0eXBlKWltYWdlV2l0aEltYWdlUmVwOihOU0ltYWdlUmVwICopaW1hZ2VSZXA7CistIChpbnN0
YW5jZXR5cGUpX2ltYWdlV2l0aENvbmZpZ3VyYXRpb246KE5TRGljdGlvbmFyeSAqKWNvbmZpZ3Vy
YXRpb247CiAtICh2b2lkKWxvY2tGb2N1c1dpdGhSZWN0OihOU1JlY3QpcmVjdCBjb250ZXh0Oihu
dWxsYWJsZSBOU0dyYXBoaWNzQ29udGV4dCAqKWNvbnRleHQgaGludHM6KG51bGxhYmxlIE5TRGlj
dGlvbmFyeSAqKWhpbnRzIGZsaXBwZWQ6KEJPT0wpZmxpcHBlZDsKIEBlbmQKIApAQCAtNDMsNiAr
NDUsMTMgQEAgQGludGVyZmFjZSBOU0ltYWdlIChOU1N5c3RlbVN5bWJvbHMpCiArIChudWxsYWJs
ZSBOU0ltYWdlICopX2ltYWdlV2l0aFN5c3RlbVN5bWJvbE5hbWU6KE5TU3RyaW5nICopIHN5bWJv
bE5hbWU7CiBAZW5kCiAKK1dURl9FWFRFUk5fQ19CRUdJTgorCitleHRlcm4gY29uc3QgTlNTdHJp
bmcgKk5TSW1hZ2VBbHRlcm5hdGVDcml0ZXJpb25Gb250OworZXh0ZXJuIGNvbnN0IE5TU3RyaW5n
ICpOU0ltYWdlQWx0ZXJuYXRlQ3JpdGVyaW9uU3ltYm9sU2NhbGU7CisKK1dURl9FWFRFUk5fQ19F
TkQKKwogTlNfQVNTVU1FX05PTk5VTExfRU5ECiAKICNlbmRpZgpAQCAtNTYsNiArNjUsNiBAQCBl
eHRlcm4gY29uc3QgTlNJbWFnZUhpbnRLZXkgTlNJbWFnZUhpbnRTCiAKIE5TX0FTU1VNRV9OT05O
VUxMX0VORAogCi0jZW5kaWYKKyNlbmRpZiAvLyBIQVZFKEFMVEVSTkFURV9JQ09OUykKIAotI2Vu
ZGlmCisjZW5kaWYgLy8gVVNFKEFQUExFX0lOVEVSTkFMX1NESykKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZp
c2lvbiAyNjYyODQpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDk2IEBACisyMDIwLTA4LTI4ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVu
c2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBQREYgaGVhZHMtdXAgZGlzcGxheSB0byBV
SSBwcm9jZXNzIG9uIG1hY09TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTU3ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU4NzE1ODQ3PgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaGFzIG1h
bnkgYmVuZWZpdHMgaW5jbHVkaW5nIHRoZSBvbmUgaW4gdGhlIHJhZGFyLCB0ZXN0YWJpbGl0eSwg
YW5kIG1vdmluZyBXZWJLaXQtc3BlY2lmaWMgY29kZSBmcm9tIFBERktpdCB0byBXZWJLaXQuCisK
KyAgICAgICAgTm93IHRoYXQgdGhlIEhVRCBpcyBkaXNwbGF5ZWQgaW4gdGhlIFVJIHByb2Nlc3Mg
aW5zdGVhZCBvZiBpbiB0aGUgd2ViIGNvbnRlbnQsIHpvb21pbmcgaW4ga2VlcHMgdGhlIEhVRCB0
aGUgc2FtZSBzaXplLgorICAgICAgICBBIDNkLXRyYW5zZm9ybWVkIGlmcmFtZSB3aXRoIGEgUERG
IGluIGl0IG5vdyBzaG93cyB0aGUgSFVEIGluIHRoZSBwbGFjZSB5b3UgY2FuIGNsaWNrIG9uIGl0
LCBpbnN0ZWFkIG9mIGluIHRoZSB0cmFuc2Zvcm1lZCBQREYuCisgICAgICAgIEFsc28sIG1vdmlu
ZyB0aGUgbW91c2UgdG8gdGhlIEhVRCB3aXRoaW4gdGhlIGZpcnN0IDMgc2Vjb25kcyBwcmV2ZW50
cyBpdCBmcm9tIGhpZGluZywgd2hpY2ggaXQgZG9lcyB3aGVuIHRoZSBtb3VzZSBsZWF2ZXMgdGhl
IEhVRC4KKyAgICAgICAgVGhlIHJlc3Qgb2YgdGhlIGJlaGF2aW9yIEkgdGhpbmsgc2hvdWxkIGJl
IHRoZSBzYW1lLiAgTW9zdCB1c2VycyBzaG91bGQgbm90IG5vdGljZSBhbnkgZGlmZmVyZW5jZS4K
KworICAgICAgICBGdW5jdGlvbmFsaXR5IGNvdmVyZWQgYnkgQVBJIHRlc3RzLCB0aGUgZmlyc3Qg
dGVzdHMgZm9yIFBERiBjb250ZW50IGludGVyYWN0aW9uIQorCisgICAgICAgICogU2NyaXB0cy93
ZWJraXQvbWVzc2FnZXMucHk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZp
ZXdJbnRlcm5hbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToKKyAg
ICAgICAgKC1bV0tWaWV3IF9jcmVhdGVQREZIVUQ6cmVjdDpdKToKKyAgICAgICAgKC1bV0tWaWV3
IF9wZGZIVUQ6Y2hhbmdlZExvY2F0aW9uOl0pOgorICAgICAgICAoLVtXS1ZpZXcgX3JlbW92ZVBE
RkhVRDpdKToKKyAgICAgICAgKC1bV0tWaWV3IF9yZW1vdmVBbGxQREZIVURzXSk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3TWFjLm1tOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgbW91c2VNb3ZlZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IG1vdXNlRG93bjpdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IG1vdXNlVXA6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY3Jl
YXRlUERGSFVEOnJlY3Q6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcGRmSFVEOmNoYW5nZWRM
b2NhdGlvbjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZW1vdmVQREZIVUQ6XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfcmVtb3ZlQWxsUERGSFVEc10pOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvbWFjL1dLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nTWFjLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5tbToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IHBkZkhVRHNdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW06CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjpjcmVhdGVQREZIVUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6dXBkYXRlUERGSFVETG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1w
bDo6cmVtb3ZlUERGSFVEKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnJlbW92ZUFs
bFBERkhVRHMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
Ojpwcm9jZXNzRGlkVGVybWluYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFw
cGxpY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpvcGVu
UERGRnJvbVRlbXBvcmFyeUZvbGRlcldpdGhOYXRpdmVBcHBsaWNhdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgICogVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW06CisgICAgICAgIChXZWJLaXQ6OlBhZ2VD
bGllbnRJbXBsOjpjcmVhdGVQREZIVUQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1w
bDo6dXBkYXRlUERGSFVETG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1w
bDo6cmVtb3ZlUERGSFVEKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnJlbW92
ZUFsbFBERkhVRHMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1t
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNhdmVQREZUb1RlbXBvcmFyeUZvbGRl
ckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OmNyZWF0ZVBERkhVRCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVt
b3ZlUERGSFVEKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojp1cGRhdGVQREZIVURM
b2NhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGRmWm9vbUluKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZGZab29tT3V0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpwZGZTYXZlVG9QREYpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnBkZk9wZW5XaXRoUHJldmlldyk6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZMYXll
ckNvbnRyb2xsZXJTUEkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBs
dWdpbi5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tOgor
ICAgICAgICAoLVtXS1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlIG9wZW5XaXRoTmF0aXZlQXBw
bGljYXRpb25dKToKKyAgICAgICAgKC1bV0tQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZSBzYXZl
VG9QREZdKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpQREZQbHVnaW4pOgorICAgICAg
ICAoV2ViS2l0OjpQREZQbHVnaW46On5QREZQbHVnaW4pOgorICAgICAgICAoV2ViS2l0OjpQREZQ
bHVnaW46OmZyYW1lRm9ySFVEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpj
YWxjdWxhdGVTaXplcyk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6Y29udmVydEZyb21Q
REZWaWV3VG9Sb290VmlldyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6dmlz
aWJpbGl0eURpZENoYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6em9vbUluKToK
KyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjp6b29tT3V0KToKKyAgICAgICAgKFdlYktpdDo6
UERGUGx1Z2luOjpzYXZlKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpvcGVuV2l0aFBy
ZXZpZXcpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvV2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6em9vbVBERklu
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6em9vbVBERk91dCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OnNhdmVQREYpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpvcGVuUERG
V2l0aFByZXZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjcmVhdGVQREZIVUQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cGRhdGVQREZIVURMb2NhdGlvbik6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OnJlbW92ZVBERkhVRCk6CisKIDIwMjAtMDgtMjggIFlvdWVubiBG
YWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIEVuYWJsZSBUcmFuc2Zvcm1TdHJl
YW0gYnkgZGVmYXVsdApJbmRleDogU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdl
cy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2Vz
LnB5CShyZXZpc2lvbiAyNjYyODQpCisrKyBTb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21l
c3NhZ2VzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNDMsNiArMjQzLDcgQEAgZGVmIHR5cGVzX3Ro
YXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZQogICAgICAgICAnV2ViS2l0OjpNRE5TUmVnaXN0
ZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6TWVkaWFQbGF5ZXJQcml2YXRlUmVtb3Rl
SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6Ok1lZGlhUmVjb3JkZXJJZGVudGlmaWVyJywK
KyAgICAgICAgJ1dlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6
OlBsYXliYWNrU2Vzc2lvbkNvbnRleHRJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6UGx1
Z2luUHJvY2Vzc1R5cGUnLAogICAgICAgICAnV2ViS2l0OjpSZW1vdGVBdWRpb0Rlc3RpbmF0aW9u
SWRlbnRpZmllcicsCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCShyZXZp
c2lvbiAyNjYyODQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAi
TGF5ZXJUcmVlQ29udGV4dC5oIgorI2luY2x1ZGUgIlBERlBsdWdpbklkZW50aWZpZXIuaCIKICNp
bmNsdWRlICJTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZS5oIgogI2luY2x1ZGUgIlNoYXJlYWJs
ZUJpdG1hcC5oIgogI2luY2x1ZGUgIldlYkNvbG9yUGlja2VyLmgiCkBAIC0yNDIsNiArMjQzLDEz
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbFByb3Zpc2lvbmFsTG9hZEZvck1h
aW5GcmFtZSgpIHsgfTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0TG9hZEZvck1haW5GcmFt
ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIHVzZUN1c3RvbUNvbnRlbnRQcm92aWRlcikg
PSAwOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICB2aXJ0dWFsIHZvaWQg
Y3JlYXRlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVBERkhVRExvY2F0aW9uKFBERlBsdWdpbklk
ZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHJlbW92ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHJlbW92ZUFsbFBERkhVRHMoKSA9IDA7CisjZW5kaWYKKyAgICAKICAgICB2aXJ0dWFsIHZvaWQg
aGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkmKSA9IDA7CiAKICAgICB2aXJ0dWFs
IGJvb2wgaGFuZGxlUnVuT3BlblBhbmVsKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqLCBj
b25zdCBGcmFtZUluZm9EYXRhJiwgQVBJOjpPcGVuUGFuZWxQYXJhbWV0ZXJzKiwgV2ViT3BlblBh
bmVsUmVzdWx0TGlzdGVuZXJQcm94eSopIHsgcmV0dXJuIGZhbHNlOyB9CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDI2NjI4NCkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ3NzIsMTUgKzQ3NzIsMTQgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JG
cmFtZQogICAgICAgICAgICAgbV9wbHVnaW5TY2FsZUZhY3RvciA9IDE7CiAgICAgICAgICAgICBt
X21haW5GcmFtZVBsdWdpbkhhbmRsZXNQYWdlU2NhbGVHZXN0dXJlID0gZmFsc2U7CiAgICAgICAg
IH0KLSAgICB9Ci0KICNpZiBFTkFCTEUoUE9JTlRFUl9MT0NLKQotICAgIGlmIChmcmFtZS0+aXNN
YWluRnJhbWUoKSkKICAgICAgICAgcmVxdWVzdFBvaW50ZXJVbmxvY2soKTsKICNlbmRpZgotCi0g
ICAgaWYgKGZyYW1lLT5pc01haW5GcmFtZSgpKQogICAgICAgICBwYWdlQ2xpZW50KCkuc2V0TW91
c2VFdmVudFBvbGljeShtb3VzZUV2ZW50UG9saWN5KTsKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19Q
REZfSFVEKQorICAgICAgICBwYWdlQ2xpZW50KCkucmVtb3ZlQWxsUERGSFVEcygpOworI2VuZGlm
CisgICAgfQogCiAgICAgbV9wYWdlTG9hZFN0YXRlLmNvbW1pdENoYW5nZXMoKTsKICAgICBpZiAo
bV9sb2FkZXJDbGllbnQpCkBAIC03NDUzLDYgKzc0NTIsOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
cHJvY2Vzc0RpZFRlcm1pbmF0ZShQCiAKICAgICByZXNldFN0YXRlQWZ0ZXJQcm9jZXNzRXhpdGVk
KHJlYXNvbik7CiAgICAgc3RvcEFsbFVSTFNjaGVtZVRhc2tzKG1fcHJvY2Vzcy5wdHIoKSk7Cisj
aWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBwYWdlQ2xpZW50KCkucmVtb3ZlQWxs
UERGSFVEcygpOworI2VuZGlmCiAKICAgICAvLyBGb3IgYnJpbmd1cCBvZiBwcm9jZXNzIHN3YXBw
aW5nLCBOYXZpZ2F0aW9uU3dhcCB0ZXJtaW5hdGlvbiB3aWxsIG5vdCBnbyBvdXQgdG8gY2xpZW50
cy4KICAgICAvLyBJZiBpdCBkb2VzICpkdXJpbmcqIHByb2Nlc3Mgc3dhcHBpbmcsIGFuZCB0aGUg
Y2xpZW50IHRyaWdnZXJzIGEgcmVsb2FkLCB0aGF0IGNhdXNlcyBiaXphcnJlIFdlYktpdCByZS1l
bnRyeS4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lv
biAyNjYyODQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29y
a2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQu
aCIKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuaCIKKyNpbmNsdWRlICJQREZQbHVnaW5JZGVudGlm
aWVyLmgiCiAjaW5jbHVkZSAiUGFnZUxvYWRTdGF0ZS5oIgogI2luY2x1ZGUgIlBsdWdpblByb2Nl
c3NBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiUG9saWN5RGVjaXNpb24uaCIKQEAgLTEzMTYsMTAg
KzEzMTcsMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCBzYXZlRGF0YVRvRmlsZUluRG93bmxvYWRz
Rm9sZGVyKFN0cmluZyYmIHN1Z2dlc3RlZEZpbGVuYW1lLCBTdHJpbmcmJiBtaW1lVHlwZSwgVVJM
JiYgb3JpZ2luYXRpbmdVUkwsIEFQSTo6RGF0YSYpOwogICAgIHZvaWQgc2F2ZVBERlRvRmlsZUlu
RG93bmxvYWRzRm9sZGVyKFN0cmluZyYmIHN1Z2dlc3RlZEZpbGVuYW1lLCBVUkwmJiBvcmlnaW5h
dGluZ1VSTCwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik7Ci0jaWYgUExBVEZPUk0oQ09DT0Ep
CisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCiAgICAgdm9pZCBzYXZlUERGVG9UZW1wb3JhcnlG
b2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVk
RmlsZW5hbWUsIEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwgY29u
c3QgU3RyaW5nJiBwZGZVVUlEKTsKKyNpZiAhRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKICAg
ICB2b2lkIG9wZW5QREZGcm9tVGVtcG9yYXJ5Rm9sZGVyV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKEZy
YW1lSW5mb0RhdGEmJiwgY29uc3QgU3RyaW5nJiBwZGZVVUlEKTsKICNlbmRpZgorI2VuZGlmCiAK
ICNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKICAgICB2b2lkIHNob3dQREZDb250ZXh0TWVudShj
b25zdCBXZWJLaXQ6OlBERkNvbnRleHRNZW51JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRp
b25hbDxpbnQzMl90PiYmKT4mJik7CkBAIC0xODExLDYgKzE4MTQsMTYgQEAgcHVibGljOgogICAg
IGJvb2wgY2FuVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKSB7IHJldHVybiBtX2NhblVzZUNyZWRlbnRp
YWxTdG9yYWdlOyB9CiAgICAgdm9pZCBzZXRDYW5Vc2VDcmVkZW50aWFsU3RvcmFnZShib29sKTsK
IAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgdm9pZCBjcmVhdGVQREZIVUQo
UERGUGx1Z2luSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQg
dXBkYXRlUERGSFVETG9jYXRpb24oUERGUGx1Z2luSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpOworICAgIHZvaWQgcmVtb3ZlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIpOwor
ICAgIHZvaWQgcGRmWm9vbUluKFBERlBsdWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgcGRmWm9v
bU91dChQREZQbHVnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHBkZlNhdmVUb1BERihQREZQbHVn
aW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHBkZk9wZW5XaXRoUHJldmlldyhQREZQbHVnaW5JZGVu
dGlmaWVyKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIFdlYlBhZ2VQcm94eShQYWdlQ2xpZW50
JiwgV2ViUHJvY2Vzc1Byb3h5JiwgUmVmPEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24+JiYpOwogICAg
IHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyNjYyODQpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcg
Y29weSkKQEAgLTQzMyw5ICs0MzMsOCBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAg
IFNhdmVSZWNlbnRTZWFyY2hlcyhTdHJpbmcgbmFtZSwgVmVjdG9yPFdlYkNvcmU6OlJlY2VudFNl
YXJjaD4gc2VhcmNoSXRlbXMpCiAgICAgTG9hZFJlY2VudFNlYXJjaGVzKFN0cmluZyBuYW1lKSAt
PiAoVmVjdG9yPFdlYkNvcmU6OlJlY2VudFNlYXJjaD4gcmVzdWx0KSBTeW5jaHJvbm91cwogCisj
aWYgRU5BQkxFKFBERktJVF9QTFVHSU4pICYmICFFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQog
ICAgIFNhdmVQREZUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcihTdHJpbmcgc3VnZ2VzdGVkRmlsZW5h
bWUsIFVSTCBvcmlnaW5hdGluZ1VSTCwgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEpCi0KLSNpZiBQ
TEFURk9STShDT0NPQSkKICAgICBTYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5h
dGl2ZUFwcGxpY2F0aW9uKFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSwgc3RydWN0IFdlYktpdDo6
RnJhbWVJbmZvRGF0YSBzb3VyY2VGcmFtZUluZm8sIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhLCBT
dHJpbmcgcGRmVVVJRCkKICAgICBPcGVuUERGRnJvbVRlbXBvcmFyeUZvbGRlcldpdGhOYXRpdmVB
cHBsaWNhdGlvbihzdHJ1Y3QgV2ViS2l0OjpGcmFtZUluZm9EYXRhIHNvdXJjZUZyYW1lSW5mbywg
U3RyaW5nIHBkZlVVSUQpCiAjZW5kaWYKQEAgLTU2Niw2ICs1NjUsMTIgQEAgbWVzc2FnZXMgLT4g
V2ViUGFnZVByb3h5IHsKICAgICBTcGVlY2hTeW50aGVzaXNSZXN1bWUoKSAtPiAoKSBBc3luYwog
I2VuZGlmCiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIENyZWF0ZVBERkhV
RChXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViQ29yZTo6SW50UmVj
dCBib3VuZGluZ0JveCkKKyAgICBVcGRhdGVQREZIVURMb2NhdGlvbihXZWJLaXQ6OlBERlBsdWdp
bklkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViQ29yZTo6SW50UmVjdCBib3VuZGluZ0JveCkKKyAg
ICBSZW1vdmVQREZIVUQoV2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCisj
ZW5kaWYKKwogICAgIENvbmZpZ3VyZUxvZ2dpbmdDaGFubmVsKFN0cmluZyBjaGFubmVsTmFtZSwg
ZW51bTp1aW50OF90IFdURkxvZ0NoYW5uZWxTdGF0ZSBzdGF0ZSwgZW51bTp1aW50OF90IFdURkxv
Z0xldmVsIGxldmVsKQogCiAjaWYgUExBVEZPUk0oR1RLKQpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgJKHJldmlz
aW9uIDI2NjI4NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZp
ZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMSArMjMsMTEgQEAKICAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW1wb3J0ICJXS1dlYlZpZXdQcml2
YXRlLmgiCi0KKyNpbXBvcnQgIlBERlBsdWdpbklkZW50aWZpZXIuaCIKICNpbXBvcnQgIlNhbWVE
b2N1bWVudE5hdmlnYXRpb25UeXBlLmgiCiAjaW1wb3J0ICJXS1NoYXJlU2hlZXQuaCIKICNpbXBv
cnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb24uaCIKKyNpbXBvcnQgIldLV2ViVmlld1ByaXZhdGUu
aCIKICNpbXBvcnQgIl9XS0F0dGFjaG1lbnRJbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLV2ViVmll
d1ByaW50Rm9ybWF0dGVySW50ZXJuYWwuaCIKICNpbXBvcnQgPHd0Zi9Db21wbGV0aW9uSGFuZGxl
ci5oPgpAQCAtMTMzLDcgKzEzMyw3IEBAIGNsYXNzIFZpZXdHZXN0dXJlQ29udHJvbGxlcjsKICAg
ICAvLyBPbmx5IHVzZWQgd2l0aCBVSS1zaWRlIGNvbXBvc2l0aW5nLgogICAgIFJldGFpblB0cjxX
S1Njcm9sbFZpZXc+IF9zY3JvbGxWaWV3OwogICAgIFJldGFpblB0cjxXS0NvbnRlbnRWaWV3PiBf
Y29udGVudFZpZXc7Ci0jZW5kaWYKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQogICAgIFJldGFpblB0cjxXS1Njcm9sbFZpZXc+IF9zY3JvbGxWaWV3
OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdQcml2YXRl
Rm9yVGVzdGluZ01hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9tYWMvV0tXZWJWaWV3UHJpdmF0ZUZvclRlc3RpbmdNYWMuaAkocmV2aXNpb24gMjY2Mjg0KQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdQcml2YXRlRm9yVGVz
dGluZ01hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIEBpbnRlcmZhY2UgV0tX
ZWJWaWV3IChXS1Rlc3RpbmdNYWMpCiAKIC0gKHZvaWQpX3NldEhlYWRlckJhbm5lckhlaWdodDoo
aW50KWhlaWdodDsKIC0gKHZvaWQpX3NldEZvb3RlckJhbm5lckhlaWdodDooaW50KWhlaWdodDsK
Ky0gKE5TU2V0PE5TVmlldyAqPiAqKV9wZGZIVURzOwogCiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1Rlc3RpbmdNYWMu
bW0JKHJldmlzaW9uIDI2NjI4NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMv
V0tXZWJWaWV3VGVzdGluZ01hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTAzLDYgKzEwMywxNSBA
QCAtICh2b2lkKV9zZXRGb290ZXJCYW5uZXJIZWlnaHQ6KGludCloZWlnCiAgICAgX3BhZ2UtPnNl
dEZvb3RlckJhbm5lckhlaWdodEZvclRlc3RpbmcoaGVpZ2h0KTsKIH0KIAorLSAoTlNTZXQ8TlNW
aWV3ICo+ICopX3BkZkhVRHMKK3sKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAg
IHJldHVybiBfaW1wbC0+cGRmSFVEcygpOworI2Vsc2UKKyAgICByZXR1cm4gbmlsOworI2VuZGlm
Cit9CisKIC0gKE5TTWVudSAqKV9hY3RpdmVNZW51CiB7CiAgICAgLy8gRklYTUU6IE9ubHkgdGhl
IERPTSBwYXN0ZSBhY2Nlc3MgbWVudSBpcyBzdXBwb3J0ZWQgZm9yIG5vdy4gSW4gdGhlIGZ1dHVy
ZSwgaXQgY291bGQgYmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZp
ZXdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2Vi
Vmlld0ltcGwuaAkocmV2aXNpb24gMjY2Mjg0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV2ViVmlld0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAj
aWYgUExBVEZPUk0oTUFDKQogCisjaW5jbHVkZSAiUERGUGx1Z2luSWRlbnRpZmllci5oIgogI2lu
Y2x1ZGUgIlBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlNoYXJlYWJs
ZUJpdG1hcC5oIgogI2luY2x1ZGUgIldLTGF5b3V0TW9kZS5oIgpAQCAtNzYsNiArNzcsMTAgQEAg
T0JKQ19DTEFTUyBXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyOwogT0JKQ19DTEFTUyBXZWJQ
bGF5YmFja0NvbnRyb2xzTWFuYWdlcjsKICNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikKIAorI2lm
IEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCitPQkpDX0NMQVNTIFdLUERGSFVEVmlldzsKKyNl
bmRpZgorCiBuYW1lc3BhY2UgQVBJIHsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBPYmpl
Y3Q7CkBAIC0xOTAsNiArMTk1LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHZpZXdXaWxsU3RhcnRM
aXZlUmVzaXplKCk7CiAgICAgdm9pZCB2aWV3RGlkRW5kTGl2ZVJlc2l6ZSgpOwogCisjaWYgRU5B
QkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICB2b2lkIGNyZWF0ZVBERkhVRChQREZQbHVnaW5J
ZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCB1cGRhdGVQREZI
VURMb2NhdGlvbihQREZQbHVnaW5JZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7
CisgICAgdm9pZCByZW1vdmVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllcik7CisgICAgdm9pZCBy
ZW1vdmVBbGxQREZIVURzKCk7CisgICAgTlNTZXQgKnBkZkhVRHMoKTsKKyNlbmRpZgorCiAgICAg
dm9pZCByZW5ld0dTdGF0ZSgpOwogICAgIHZvaWQgc2V0RnJhbWVTaXplKENHU2l6ZSk7CiAgICAg
dm9pZCBkaXNhYmxlRnJhbWVTaXplVXBkYXRlcygpOwpAQCAtNzI5LDcgKzc0MiwxMSBAQCBwcml2
YXRlOgogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICBSZXRhaW5QdHI8V0tGdWxsU2Ny
ZWVuV2luZG93Q29udHJvbGxlcj4gbV9mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcjsKICNlbmRp
ZgotICAgIAorCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBIYXNoTWFwPFdl
YktpdDo6UERGUGx1Z2luSWRlbnRpZmllciwgUmV0YWluUHRyPFdLUERGSFVEVmlldz4+IF9wZGZI
VURWaWV3czsKKyNlbmRpZgorCiAgICAgUmV0YWluUHRyPFdLU2hhcmVTaGVldD4gX3NoYXJlU2hl
ZXQ7CiAKICAgICBSZXRhaW5QdHI8V0tXaW5kb3dWaXNpYmlsaXR5T2JzZXJ2ZXI+IG1fd2luZG93
VmlzaWJpbGl0eU9ic2VydmVyOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
V2ViVmlld0ltcGwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvV2ViVmlld0ltcGwubW0JKHJldmlzaW9uIDI2NjI4NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw3
IEBACiAjaW1wb3J0ICJXS0Vycm9ySW50ZXJuYWwuaCIKICNpbXBvcnQgIldLRnVsbFNjcmVlbldp
bmRvd0NvbnRyb2xsZXIuaCIKICNpbXBvcnQgIldLSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5o
IgorI2ltcG9ydCAiV0tQREZIVURWaWV3LmgiCiAjaW1wb3J0ICJXS1ByaW50aW5nVmlldy5oIgog
I2ltcG9ydCAiV0tTYWZlQnJvd3NpbmdXYXJuaW5nLmgiCiAjaW1wb3J0ICJXS1NoYXJlU2hlZXQu
aCIKQEAgLTE3MTgsNiArMTcxOSw0NSBAQCB2b2lkIFdlYlZpZXdJbXBsOjp2aWV3RGlkRW5kTGl2
ZVJlc2l6ZSgpCiAgICAgW21fbGF5b3V0U3RyYXRlZ3kgZGlkRW5kTGl2ZVJlc2l6ZV07CiB9CiAK
KyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCit2b2lkIFdlYlZpZXdJbXBsOjpjcmVh
dGVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiByZWN0KQoreworICAgIHJlbW92ZVBERkhVRChpZGVudGlmaWVyKTsKKyAgICBhdXRv
IGh1ZCA9IGFkb3B0TlMoW1tXS1BERkhVRFZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6cmVjdCBw
bHVnaW5JZGVudGlmaWVyOmlkZW50aWZpZXIgcGFnZTptX3BhZ2UuZ2V0KCldKTsKKyAgICBbbV92
aWV3IGFkZFN1YnZpZXc6aHVkLmdldCgpXTsKKyAgICBfcGRmSFVEVmlld3MuYWRkKGlkZW50aWZp
ZXIsIFdURk1vdmUoaHVkKSk7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZVBERkhVRExv
Y2F0aW9uKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoYXV0byBodWQgPSBfcGRmSFVEVmlld3MuZ2V0KGlkZW50
aWZpZXIpKQorICAgICAgICBbaHVkIHNldEZyYW1lOnJlY3RdOworfQorCit2b2lkIFdlYlZpZXdJ
bXBsOjpyZW1vdmVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAg
IGlmIChhdXRvIGh1ZCA9IF9wZGZIVURWaWV3cy50YWtlKGlkZW50aWZpZXIpKQorICAgICAgICBb
aHVkIHJlbW92ZUZyb21TdXBlcnZpZXddOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjpyZW1vdmVB
bGxQREZIVURzKCkKK3sKKyAgICBmb3IgKGF1dG8mIGh1ZCA6IF9wZGZIVURWaWV3cy52YWx1ZXMo
KSkKKyAgICAgICAgW2h1ZCByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAgICBfcGRmSFVEVmlld3Mu
Y2xlYXIoKTsKK30KKworTlNTZXQgKldlYlZpZXdJbXBsOjpwZGZIVURzKCkKK3sKKyAgICBOU011
dGFibGVTZXQ8TlNWaWV3ICo+ICpzZXQgPSBbTlNNdXRhYmxlU2V0IHNldFdpdGhDYXBhY2l0eTpf
cGRmSFVEVmlld3Muc2l6ZSgpXTsKKyAgICBmb3IgKGF1dG8mIGh1ZCA6IF9wZGZIVURWaWV3cy52
YWx1ZXMoKSkKKyAgICAgICAgW3NldCBhZGRPYmplY3Q6aHVkLmdldCgpXTsKKyAgICByZXR1cm4g
c2V0OworfQorCisjZW5kaWYgLy8gRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKwogdm9pZCBX
ZWJWaWV3SW1wbDo6cmVuZXdHU3RhdGUoKQogewogICAgIGlmIChtX3RleHRJbmRpY2F0b3JXaW5k
b3cpCkBAIC0yMTQ5LDYgKzIxODksMTAgQEAgdm9pZCBXZWJWaWV3SW1wbDo6d2luZG93RGlkQ2hh
bmdlQmFja2luZwogICAgICAgICByZXR1cm47CiAKICAgICBtX3BhZ2UtPnNldEludHJpbnNpY0Rl
dmljZVNjYWxlRmFjdG9yKG5ld0JhY2tpbmdTY2FsZUZhY3Rvcik7CisjaWYgRU5BQkxFKFVJX1BS
T0NFU1NfUERGX0hVRCkKKyAgICBmb3IgKGF1dG8mIGh1ZCA6IF9wZGZIVURWaWV3cy52YWx1ZXMo
KSkKKyAgICAgICAgW2h1ZCBzZXREZXZpY2VTY2FsZUZhY3RvcjpuZXdCYWNraW5nU2NhbGVGYWN0
b3JdOworI2VuZGlmCiB9CiAKIHZvaWQgV2ViVmlld0ltcGw6OndpbmRvd0RpZENoYW5nZVNjcmVl
bigpCkBAIC01MzkxLDYgKzU0MzUsMTEgQEAgdm9pZCBXZWJWaWV3SW1wbDo6bW91c2VNb3ZlZChO
U0V2ZW50ICpldgogICAgIGlmIChtX2lnbm9yZXNOb25XaGVlbEV2ZW50cykKICAgICAgICAgcmV0
dXJuOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBmb3IgKGF1dG8mIGh1
ZCA6IF9wZGZIVURWaWV3cy52YWx1ZXMoKSkKKyAgICAgICAgW2h1ZCBtb3VzZU1vdmVkOmV2ZW50
XTsKKyNlbmRpZgorCiAgICAgLy8gV2hlbiBhIHZpZXcgaXMgZmlyc3QgcmVzcG9uZGVyLCBpdCBn
ZXRzIG1vdXNlIG1vdmVkIGV2ZW50cyBldmVuIHdoZW4gdGhlIG1vdXNlIGlzIG91dHNpZGUgaXRz
IHZpc2libGUgcmVjdC4KICAgICBpZiAobV92aWV3LmdldEF1dG9yZWxlYXNlZCgpID09IFttX3Zp
ZXcgd2luZG93XS5maXJzdFJlc3BvbmRlciAmJiAhTlNQb2ludEluUmVjdChbbV92aWV3IGNvbnZl
cnRQb2ludDpbZXZlbnQgbG9jYXRpb25JbldpbmRvd10gZnJvbVZpZXc6bmlsXSwgW21fdmlldyB2
aXNpYmxlUmVjdF0pKQogICAgICAgICByZXR1cm47CkBAIC01NDM5LDYgKzU0ODgsMTEgQEAgdm9p
ZCBXZWJWaWV3SW1wbDo6bW91c2VEb3duKE5TRXZlbnQgKmV2ZQogICAgIGlmIChtX2lnbm9yZXNO
b25XaGVlbEV2ZW50cykKICAgICAgICAgcmV0dXJuOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1Nf
UERGX0hVRCkKKyAgICBmb3IgKGF1dG8mIGh1ZCA6IF9wZGZIVURWaWV3cy52YWx1ZXMoKSkKKyAg
ICAgICAgW2h1ZCBtb3VzZURvd246ZXZlbnRdOworI2VuZGlmCisKICAgICBzZXRMYXN0TW91c2VE
b3duRXZlbnQoZXZlbnQpOwogICAgIHNldElnbm9yZXNNb3VzZURyYWdnZWRFdmVudHMoZmFsc2Up
OwogCkBAIC01NDUwLDYgKzU1MDQsMTEgQEAgdm9pZCBXZWJWaWV3SW1wbDo6bW91c2VVcChOU0V2
ZW50ICpldmVudAogICAgIGlmIChtX2lnbm9yZXNOb25XaGVlbEV2ZW50cykKICAgICAgICAgcmV0
dXJuOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBmb3IgKGF1dG8mIGh1
ZCA6IF9wZGZIVURWaWV3cy52YWx1ZXMoKSkKKyAgICAgICAgW2h1ZCBtb3VzZVVwOmV2ZW50XTsK
KyNlbmRpZgorCiAgICAgc2V0TGFzdE1vdXNlRG93bkV2ZW50KG5pbCk7CiAgICAgbW91c2VVcElu
dGVybmFsKGV2ZW50KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BERi9XS1BE
RkhVRFZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QREYvV0tQ
REZIVURWaWV3LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUERG
L1dLUERGSFVEVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKworI2ltcG9ydCAiUERGUGx1Z2lu
SWRlbnRpZmllci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlBhZ2VQcm94eTsK
K30KKworQGludGVyZmFjZSBXS1BERkhVRFZpZXcgOiBOU1ZpZXcKKworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSBwbHVnaW5JZGVudGlmaWVyOihXZWJLaXQ6OlBE
RlBsdWdpbklkZW50aWZpZXIpcGx1Z2luSWRlbnRpZmllciBwYWdlOihXZWJLaXQ6OldlYlBhZ2VQ
cm94eSYpcGFnZTsKKy0gKHZvaWQpc2V0RnJhbWU6KE5TUmVjdClmcmFtZTsKKy0gKHZvaWQpbW91
c2VNb3ZlZDooTlNFdmVudCAqKWV2ZW50OworLSAodm9pZCltb3VzZURvd246KE5TRXZlbnQgKill
dmVudDsKKy0gKHZvaWQpbW91c2VVcDooTlNFdmVudCAqKWV2ZW50OworLSAodm9pZClzZXREZXZp
Y2VTY2FsZUZhY3RvcjooQ0dGbG9hdClkZXZpY2VTY2FsZUZhY3RvcjsKKworQGVuZAorCisjZW5k
aWYgLy8gRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1BERi9XS1BERkhVRFZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvUERGL1dLUERGSFVEVmlldy5tbQkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9QREYvV0tQREZIVURWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXS1BE
RkhVRFZpZXcuaCIKKworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKKyNpbXBvcnQg
IldlYlBhZ2VQcm94eS5oIgorI2ltcG9ydCA8UXVhcnR6Q29yZS9DQVRyYW5zYWN0aW9uLmg+Cisj
aW1wb3J0IDxwYWwvc3BpL2NvY29hL1F1YXJ0ekNvcmVTUEkuaD4KKyNpbXBvcnQgPHBhbC9zcGkv
bWFjL05TSW1hZ2VTUEkuaD4KKyNpbXBvcnQgPHd0Zi9XZWFrT2JqQ1B0ci5oPgorCisvLyAgVGhl
IEhVRCBpdGVtcyBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIHNwYWNpbmc6CisvLyAgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gfCAgICAgIDEy
ICAgICAgICAxMiAgICAgIDEwICAgICAxMiAgICAgICAgMTIgICAgICB8CisvLyB8ICAgICAtLS0t
ICAgICAgLS0tLSAgICAgfCAgICAgLS0tLSAgICAgIC0tLS0gICAgIHwKKy8vIHwgMTAgfGljb258
IDEwIHxpY29ufCAxMCB8IDEwIHxpY29ufCAxMCB8aWNvbnwgMTAgfAorLy8gfCAgICAgLS0tLSAg
ICAgIC0tLS0gICAgIHwgICAgIC0tLS0gICAgICAtLS0tICAgICB8CisvLyB8ICAgICAgMTIgICAg
ICAgIDEyICAgICAgMTAgICAgIDEyICAgICAgICAxMiAgICAgIHwKKy8vICAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgd2hlcmUgdGhlIDEyIHBv
aW50IHZlcnRpY2FsIHNwYWNpbmcgaXMgYW5jaG9yZWQgdG8gdGhlIHNtYWxsZXN0IGljb24gaW1h
Z2UsCisvLyAgYW5kIGFsbCBzdWJzZXF1ZW50IGljb25zIHdpdGggYmUgY2VudGVyZWQgdmVydGlj
YWxseSB3aXRoIHRoZSBzbWFsbGVzdCBpY29uLgorCitzdGF0aWMgY29uc3QgQ0dGbG9hdCBsYXll
clZlcnRpY2FsT2Zmc2V0ID0gNDA7CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBsYXllckNvcm5lclJh
ZGl1cyA9IDEyOworc3RhdGljIGNvbnN0IENHRmxvYXQgbGF5ZXJHcmF5Q29tcG9uZW50ID0gMDsK
K3N0YXRpYyBjb25zdCBDR0Zsb2F0IGxheWVyQWxwaGEgPSAwLjc1Oworc3RhdGljIGNvbnN0IENH
RmxvYXQgbGF5ZXJJbWFnZVNjYWxlID0gMS41Oworc3RhdGljIGNvbnN0IENHRmxvYXQgbGF5ZXJT
ZXBlcmF0b3JDb250cm9sbGVyU2l6ZSA9IDEuNTsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGxheWVy
Q29udHJvbGxlckhvcml6b250YWxNYXJnaW4gPSAxMC4wOworc3RhdGljIGNvbnN0IENHRmxvYXQg
bGF5ZXJJbWFnZVZlcnRpY2FsTWFyZ2luID0gMTIuMDsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGxh
eWVyU2VwZXJhdG9yVmVydGljYWxNYXJnaW4gPSAxMC4wOworc3RhdGljIGNvbnN0IENHRmxvYXQg
Y29udHJvbExheWVyTm9ybWFsQWxwaGEgPSAwLjc1Oworc3RhdGljIGNvbnN0IENHRmxvYXQgY29u
dHJvbExheWVyRG93bkFscGhhID0gMC40NTsKKworc3RhdGljIE5TU3RyaW5nICogY29uc3QgUERG
SFVEWm9vbUluQ29udHJvbCA9IEAicGx1cy5tYWduaWZ5aW5nZ2xhc3MiOworc3RhdGljIE5TU3Ry
aW5nICogY29uc3QgUERGSFVEWm9vbU91dENvbnRyb2wgPSBAIm1pbnVzLm1hZ25pZnlpbmdnbGFz
cyI7CitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBQREZIVURMYXVuY2hQcmV2aWV3Q29udHJvbCA9
IEAicHJldmlldyI7CitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBQREZIVURTYXZlUERGQ29udHJv
bCA9IEAiYXJyb3cuZG93bi5jaXJjbGUiOworc3RhdGljIE5TU3RyaW5nICogY29uc3QgUERGSFVE
U2VwZXJhdG9yQ29udHJvbCA9IEAiUERGSFVEU2VwZXJhdG9yQ29udHJvbCI7CisKK3N0YXRpYyBj
b25zdCBDR0Zsb2F0IGxheWVyRmFkZUluVGltZUludGVydmFsID0gMC4yNTsKK3N0YXRpYyBjb25z
dCBDR0Zsb2F0IGxheWVyRmFkZU91dFRpbWVJbnRlcnZhbCA9IDAuNTsKK3N0YXRpYyBjb25zdCBD
R0Zsb2F0IGluaXRpYWxIaWRlVGltZUludGVydmFsID0gMy4wOworCitzdGF0aWMgTlNBcnJheTxO
U1N0cmluZyAqPiAqY29udHJvbEFycmF5KCkKK3sKKyAgICByZXR1cm4gQFsKKyAgICAgICAgUERG
SFVEWm9vbU91dENvbnRyb2wsCisgICAgICAgIFBERkhVRFpvb21JbkNvbnRyb2wsCisgICAgICAg
IFBERkhVRFNlcGVyYXRvckNvbnRyb2wsCisgICAgICAgIFBERkhVRExhdW5jaFByZXZpZXdDb250
cm9sLAorICAgICAgICBQREZIVURTYXZlUERGQ29udHJvbAorICAgIF07Cit9CisKK0BpbXBsZW1l
bnRhdGlvbiBXS1BERkhVRFZpZXcgeworQHByaXZhdGUKKyAgICBXZWFrUHRyPFdlYktpdDo6V2Vi
UGFnZVByb3h5PiBfcGFnZTsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IF9hY3RpdmVDb250cm9s
OworICAgIFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllciBfcGx1Z2luSWRlbnRpZmllcjsKKyAg
ICBDR0Zsb2F0IF9kZXZpY2VTY2FsZUZhY3RvcjsKKyAgICBSZXRhaW5QdHI8Q0FMYXllcj4gX2xh
eWVyOworICAgIFJldGFpblB0cjxDQUxheWVyPiBfYWN0aXZlTGF5ZXI7CisgICAgQ0dTaXplIF9m
cmFtZVNpemU7CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk8TlNTdHJpbmcgKiwg
TlNJbWFnZSAqPj4gX2NhY2hlZEljb25zOworICAgIEJPT0wgX3Zpc2libGU7CisgICAgQk9PTCBf
bW91c2VNb3ZlZFRvSFVEOworICAgIEJPT0wgX2luaXRpYWxIaWRlVGltZXJGaXJlZDsKK30KKwor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSBwbHVnaW5JZGVudGlm
aWVyOihXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIpcGx1Z2luSWRlbnRpZmllciBwYWdlOihX
ZWJLaXQ6OldlYlBhZ2VQcm94eSYpcGFnZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5p
dFdpdGhGcmFtZTpmcmFtZV0pKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIHNlbGYu
d2FudHNMYXllciA9IFlFUzsKKyAgICBfY2FjaGVkSWNvbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxl
RGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOworICAgIF9wbHVnaW5JZGVudGlmaWVyID0gcGx1Z2lu
SWRlbnRpZmllcjsKKyAgICBfcGFnZSA9IG1ha2VXZWFrUHRyKHBhZ2UpOworICAgIF9kZXZpY2VT
Y2FsZUZhY3RvciA9IHBhZ2UuZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBfdmlzaWJsZSA9IFlF
UzsKKyAgICBbc2VsZiBfc2V0dXBMYXllcjpzZWxmLmxheWVyXTsKKyAgICBbc2VsZiBzZXRGcmFt
ZTpmcmFtZV07CisKKyAgICBXZWFrT2JqQ1B0cjxXS1BERkhVRFZpZXc+IHdlYWtTZWxmID0gc2Vs
ZjsKKyAgICBkaXNwYXRjaF9hZnRlcihkaXNwYXRjaF90aW1lKERJU1BBVENIX1RJTUVfTk9XLCAo
aW50NjRfdCkoaW5pdGlhbEhpZGVUaW1lSW50ZXJ2YWwgKiBOU0VDX1BFUl9TRUMpKSwgZGlzcGF0
Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgW3dlYWtTZWxmIF9oaWRlVGltZXJGaXJl
ZF07CisgICAgfSk7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworewor
ICAgIFtfbGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAgIFtzdXBlciBkZWFsbG9jXTsK
K30KKworLSAodm9pZClzZXRGcmFtZTooTlNSZWN0KXJlY3QKK3sKKyAgICBbc3VwZXIgc2V0RnJh
bWU6cmVjdF07CisgICAgX2ZyYW1lU2l6ZSA9IHJlY3Quc2l6ZTsKKworICAgIFtDQVRyYW5zYWN0
aW9uIGJlZ2luXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOwor
ICAgIENHUmVjdCBsYXllckJvdW5kcyA9IFtfbGF5ZXIgYm91bmRzXTsKKyAgICBbX2xheWVyIHNl
dEZyYW1lOkNHUmVjdE1ha2UocmVjdC5zaXplLndpZHRoIC8gMi4wIC0gbGF5ZXJCb3VuZHMuc2l6
ZS53aWR0aCAvIDIuMCwgbGF5ZXJWZXJ0aWNhbE9mZnNldCwgbGF5ZXJCb3VuZHMuc2l6ZS53aWR0
aCwgbGF5ZXJCb3VuZHMuc2l6ZS5oZWlnaHQpXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRd
OworfQorCistICh2b2lkKXNldERldmljZVNjYWxlRmFjdG9yOihDR0Zsb2F0KWRldmljZVNjYWxl
RmFjdG9yCit7CisgICAgaWYgKF9kZXZpY2VTY2FsZUZhY3RvciA9PSBkZXZpY2VTY2FsZUZhY3Rv
cikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIF9kZXZpY2VTY2FsZUZhY3RvciA9IGRldmlj
ZVNjYWxlRmFjdG9yOworICAgIAorICAgIFtzZWxmIF9yZWRyYXdMYXllcl07Cit9CisKKy0gKHZv
aWQpX2hpZGVUaW1lckZpcmVkCit7CisgICAgX2luaXRpYWxIaWRlVGltZXJGaXJlZCA9IFlFUzsK
KyAgICBpZiAoIV9tb3VzZU1vdmVkVG9IVUQpCisgICAgICAgIFtzZWxmIF9zZXRWaXNpYmxlOmZh
bHNlXTsKK30KKworLSAodm9pZClfc2V0VmlzaWJsZTooYm9vbClpc1Zpc2libGUKK3sKKyAgICBp
ZiAoX3Zpc2libGUgPT0gaXNWaXNpYmxlKQorICAgICAgICByZXR1cm47CisgICAgX3Zpc2libGUg
PSBpc1Zpc2libGU7CisgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAgIFtDQVRyYW5zYWN0
aW9uIHNldEFuaW1hdGlvbkR1cmF0aW9uOmlzVmlzaWJsZSA/IGxheWVyRmFkZUluVGltZUludGVy
dmFsIDogbGF5ZXJGYWRlT3V0VGltZUludGVydmFsXTsKKyAgICBbc2VsZiBfc2V0TGF5ZXJPcGFj
aXR5OmlzVmlzaWJsZSA/IGxheWVyQWxwaGEgOiAwLjBdOworICAgIFtDQVRyYW5zYWN0aW9uIGNv
bW1pdF07Cit9CisKKy0gKHZvaWQpbW91c2VNb3ZlZDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAg
aWYgKENHUmVjdENvbnRhaW5zUG9pbnQoW3NlbGYgY29udmVydFJlY3Q6Q0dSZWN0SW5zZXQoW19s
YXllciBmcmFtZV0sIC0xNi4wLCAtMTYuMCkgdG9WaWV3Om5pbF0sIE5TUG9pbnRUb0NHUG9pbnQo
ZXZlbnQubG9jYXRpb25JbldpbmRvdykpKSB7CisgICAgICAgIFtzZWxmIF9zZXRWaXNpYmxlOnRy
dWVdOworICAgICAgICBfbW91c2VNb3ZlZFRvSFVEID0gWUVTOworICAgIH0gZWxzZSBpZiAoX2lu
aXRpYWxIaWRlVGltZXJGaXJlZCkKKyAgICAgICAgW3NlbGYgX3NldFZpc2libGU6ZmFsc2VdOwor
fQorCistICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgX2FjdGl2ZUNv
bnRyb2wgPSBbc2VsZiBfY29udHJvbEZvckV2ZW50OmV2ZW50XTsKKyAgICBpZiAoW19hY3RpdmVD
b250cm9sIGlzRXF1YWxUb1N0cmluZzpQREZIVURTZXBlcmF0b3JDb250cm9sXSkKKyAgICAgICAg
X2FjdGl2ZUNvbnRyb2wgPSBuaWw7CisgICAgaWYgKF9hY3RpdmVDb250cm9sKSB7CisgICAgICAg
IC8vIFVwZGF0ZSByZW5kZXJpbmcgdG8gaGlnaGxpZ2h0IGl0Li4KKyAgICAgICAgX2FjdGl2ZUxh
eWVyID0gW3NlbGYgX2xheWVyRm9yRXZlbnQ6ZXZlbnRdOworICAgICAgICAKKyAgICAgICAgLy8g
VXBkYXRlIGxheWVyIGltYWdlOyBkbyBub3QgYW5pbWF0ZQorICAgICAgICBbQ0FUcmFuc2FjdGlv
biBiZWdpbl07CisgICAgICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107
CisgICAgICAgIAorICAgICAgICBbX2FjdGl2ZUxheWVyIHNldE9wYWNpdHk6Y29udHJvbExheWVy
RG93bkFscGhhXTsKKyAgICAgICAgCisgICAgICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Cisg
ICAgfQorfQorCistICh2b2lkKW1vdXNlVXA6KE5TRXZlbnQgKilldmVudAoreworICAgIGlmICgh
X2FjdGl2ZUNvbnRyb2wpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBOU1N0cmluZyogbW91
c2VVcENvbnRyb2wgPSBbc2VsZiBfY29udHJvbEZvckV2ZW50OmV2ZW50XTsKKyAgICBpZiAoW19h
Y3RpdmVDb250cm9sIGlzRXF1YWxUb1N0cmluZzptb3VzZVVwQ29udHJvbF0pCisgICAgICAgIFtz
ZWxmIF9wZXJmb3JtQWN0aW9uRm9yQ29udHJvbDpfYWN0aXZlQ29udHJvbC5nZXQoKV07CisgICAg
CisgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2Fi
bGVBY3Rpb25zOllFU107CisgICAgW19hY3RpdmVMYXllciBzZXRPcGFjaXR5OmNvbnRyb2xMYXll
ck5vcm1hbEFscGhhXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworCisgICAgX2FjdGl2
ZUxheWVyID0gbmlsOworICAgIF9hY3RpdmVDb250cm9sID0gbmlsOworfQorCistIChPcHRpb25h
bDxOU1VJbnRlZ2VyPilfY29udHJvbEluZGV4Rm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudAorewor
ICAgIENHUG9pbnQgaW5pdGlhbFBvaW50ID0gTlNQb2ludFRvQ0dQb2ludChldmVudC5sb2NhdGlv
bkluV2luZG93KTsKKyAgICBpbml0aWFsUG9pbnQueCAtPSBbX2xheWVyIGZyYW1lXS5vcmlnaW4u
eDsKKyAgICBpbml0aWFsUG9pbnQueSAtPSBbX2xheWVyIGZyYW1lXS5vcmlnaW4ueTsKKyAgICBm
b3IgKE5TVUludGVnZXIgaW5kZXggPSAwOyBpbmRleCA8IFtfbGF5ZXIgc3VibGF5ZXJzXS5jb3Vu
dDsgaW5kZXgrKykgeworICAgICAgICBDQUxheWVyICpzdWJMYXllciA9IFtfbGF5ZXIgc3VibGF5
ZXJzXVtpbmRleF07CisgICAgICAgIE5TUmVjdCB3aW5kb3dTcGFjZVJlY3QgPSBbc2VsZiBjb252
ZXJ0UmVjdDpzdWJMYXllci5mcmFtZSB0b1ZpZXc6bmlsXTsKKyAgICAgICAgaWYgKENHUmVjdENv
bnRhaW5zUG9pbnQod2luZG93U3BhY2VSZWN0LCBpbml0aWFsUG9pbnQpKQorICAgICAgICAgICAg
cmV0dXJuIGluZGV4OworICAgIH0KKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCistIChO
U1N0cmluZyAqKV9jb250cm9sRm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIGlmIChh
dXRvIGluZGV4ID0gW3NlbGYgX2NvbnRyb2xJbmRleEZvckV2ZW50OmV2ZW50XSkKKyAgICAgICAg
cmV0dXJuIGNvbnRyb2xBcnJheSgpWyppbmRleF07CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAo
Q0FMYXllciAqKV9sYXllckZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBpZiAoYXV0
byBpbmRleCA9IFtzZWxmIF9jb250cm9sSW5kZXhGb3JFdmVudDpldmVudF0pCisgICAgICAgIHJl
dHVybiBbX2xheWVyIHN1YmxheWVyc11bKmluZGV4XTsKKyAgICByZXR1cm4gbmlsOworfQorCist
ICh2b2lkKV9wZXJmb3JtQWN0aW9uRm9yQ29udHJvbDooTlNTdHJpbmcgKiljb250cm9sCit7Cisg
ICAgaWYgKCFfdmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8qIHBhZ2UgPSBfcGFn
ZS5nZXQoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoW2NvbnRy
b2wgaXNFcXVhbFRvU3RyaW5nOlBERkhVRFpvb21JbkNvbnRyb2xdKQorICAgICAgICBwYWdlLT5w
ZGZab29tSW4oX3BsdWdpbklkZW50aWZpZXIpOworICAgIGVsc2UgaWYgKFtjb250cm9sIGlzRXF1
YWxUb1N0cmluZzpQREZIVURab29tT3V0Q29udHJvbF0pCisgICAgICAgIHBhZ2UtPnBkZlpvb21P
dXQoX3BsdWdpbklkZW50aWZpZXIpOworICAgIGVsc2UgaWYgKFtjb250cm9sIGlzRXF1YWxUb1N0
cmluZzpQREZIVURTYXZlUERGQ29udHJvbF0pCisgICAgICAgIHBhZ2UtPnBkZlNhdmVUb1BERihf
cGx1Z2luSWRlbnRpZmllcik7CisgICAgZWxzZSBpZiAoW2NvbnRyb2wgaXNFcXVhbFRvU3RyaW5n
OlBERkhVRExhdW5jaFByZXZpZXdDb250cm9sXSkKKyAgICAgICAgcGFnZS0+cGRmT3BlbldpdGhQ
cmV2aWV3KF9wbHVnaW5JZGVudGlmaWVyKTsKK30KKworLSAodm9pZClfbG9hZEljb25JbWFnZXMK
K3sKKyAgICBmb3IgKE5TU3RyaW5nICpjb250cm9sTmFtZSBpbiBjb250cm9sQXJyYXkoKSkKKyAg
ICAgICAgW3NlbGYgX2dldEltYWdlRm9yQ29udHJvbE5hbWU6Y29udHJvbE5hbWVdOworfQorCist
ICh2b2lkKV9zZXR1cExheWVyOihDQUxheWVyICopcGFyZW50TGF5ZXIKK3sKKyAgICBfbGF5ZXIg
PSBhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0pOworICAgIFtfbGF5ZXIgc2V0Q29ybmVy
UmFkaXVzOmxheWVyQ29ybmVyUmFkaXVzXTsKKyAgICAKKyAgICBbX2xheWVyIHNldEJhY2tncm91
bmRDb2xvcjpXZWJDb3JlOjpjYWNoZWRDR0NvbG9yKHsgV2ViQ29yZTo6U1JHQkE8ZmxvYXQ+KGxh
eWVyR3JheUNvbXBvbmVudCwgbGF5ZXJHcmF5Q29tcG9uZW50LCBsYXllckdyYXlDb21wb25lbnQp
IH0pXTsKKyAgICBbc2VsZiBfc2V0TGF5ZXJPcGFjaXR5OmxheWVyQWxwaGFdOworICAgIAorICAg
IFtzZWxmIF9sb2FkSWNvbkltYWdlc107CisgICAgQ0dGbG9hdCBtaW5JY29uSW1hZ2VIZWlnaHQg
PSBzdGQ6Om51bWVyaWNfbGltaXRzPENHRmxvYXQ+OjptYXgoKTsKKyAgICBmb3IgKE5TSW1hZ2Ug
KmltYWdlIGluIFtfY2FjaGVkSWNvbnMgYWxsVmFsdWVzXSkKKyAgICAgICAgbWluSWNvbkltYWdl
SGVpZ2h0ID0gc3RkOjptaW4obWluSWNvbkltYWdlSGVpZ2h0LCAoaW1hZ2Uuc2l6ZS5oZWlnaHQg
LyBfZGV2aWNlU2NhbGVGYWN0b3IpKTsKKyAgICAKKyAgICBDR0Zsb2F0IGR4ID0gbGF5ZXJDb250
cm9sbGVySG9yaXpvbnRhbE1hcmdpbjsKKyAgICBmb3IgKE5TU3RyaW5nICpjb250cm9sTmFtZSBp
biBjb250cm9sQXJyYXkoKSkgeworICAgICAgICBhdXRvIGNvbnRyb2xMYXllciA9IGFkb3B0TlMo
W1tDQUxheWVyIGFsbG9jXSBpbml0XSk7CisgICAgICAgIENHRmxvYXQgZHkgPSAwLjA7CisgICAg
ICAgIENHRmxvYXQgY29udHJvbGxlcldpZHRoID0gMC4wOworICAgICAgICBDR0Zsb2F0IGNvbnRy
b2xsZXJIZWlnaHQgPSAwLjA7CisKKyAgICAgICAgaWYgKFtjb250cm9sTmFtZSBpc0VxdWFsVG9T
dHJpbmc6UERGSFVEU2VwZXJhdG9yQ29udHJvbF0pIHsKKyAgICAgICAgICAgIGR5ID0gbGF5ZXJT
ZXBlcmF0b3JWZXJ0aWNhbE1hcmdpbjsKKyAgICAgICAgICAgIGNvbnRyb2xsZXJXaWR0aCA9IGxh
eWVyU2VwZXJhdG9yQ29udHJvbGxlclNpemU7CisgICAgICAgICAgICBjb250cm9sbGVySGVpZ2h0
ID0gbWluSWNvbkltYWdlSGVpZ2h0ICsgKDIuMCAqIGxheWVySW1hZ2VWZXJ0aWNhbE1hcmdpbikg
LSAoMi4wICogbGF5ZXJTZXBlcmF0b3JWZXJ0aWNhbE1hcmdpbik7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIFtjb250cm9sTGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOltbTlNDb2xvciBsaWdo
dEdyYXlDb2xvcl0gQ0dDb2xvcl1dOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgTlNJ
bWFnZSAqY29udHJvbEltYWdlID0gW3NlbGYgX2dldEltYWdlRm9yQ29udHJvbE5hbWU6Y29udHJv
bE5hbWVdOworICAgICAgICAgICAgW2NvbnRyb2xMYXllciBzZXRDb250ZW50czpjb250cm9sSW1h
Z2VdOworICAgICAgICAgICAgW2NvbnRyb2xMYXllciBzZXRPcGFjaXR5OmNvbnRyb2xMYXllck5v
cm1hbEFscGhhXTsKKworICAgICAgICAgICAgZHkgPSBsYXllckltYWdlVmVydGljYWxNYXJnaW47
CisgICAgICAgICAgICBjb250cm9sbGVyV2lkdGggPSBbY29udHJvbEltYWdlIHNpemVdLndpZHRo
IC8gX2RldmljZVNjYWxlRmFjdG9yOworICAgICAgICAgICAgY29udHJvbGxlckhlaWdodCA9IFtj
b250cm9sSW1hZ2Ugc2l6ZV0uaGVpZ2h0IC8gX2RldmljZVNjYWxlRmFjdG9yOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBkeSAtPSAoY29udHJvbGxlckhlaWdodCAtIG1pbkljb25JbWFnZUhl
aWdodCkgLyAyLjA7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFtjb250cm9sTGF5ZXIgc2V0
RmlsdGVyczpAW1tDQUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJDb2xvckludmVydF1d
XTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgW2NvbnRyb2xMYXllciBzZXRGcmFtZTpD
R1JlY3RNYWtlKGR4LCBkeSwgY29udHJvbGxlcldpZHRoLCBjb250cm9sbGVySGVpZ2h0KV07Cisg
ICAgICAgIFtfbGF5ZXIgYWRkU3VibGF5ZXI6Y29udHJvbExheWVyLmdldCgpXTsKKyAgICAgICAg
CisgICAgICAgIGR4ICs9IGNvbnRyb2xsZXJXaWR0aCArIGxheWVyQ29udHJvbGxlckhvcml6b250
YWxNYXJnaW47CisgICAgfQorICAgIAorICAgIFtfbGF5ZXIgc2V0RnJhbWU6Q0dSZWN0TWFrZSgw
LCBsYXllclZlcnRpY2FsT2Zmc2V0LCBkeCwgbWluSWNvbkltYWdlSGVpZ2h0ICsgMi4wICogbGF5
ZXJJbWFnZVZlcnRpY2FsTWFyZ2luKV07CisgICAgW3BhcmVudExheWVyIGFkZFN1YmxheWVyOl9s
YXllci5nZXQoKV07Cit9CisKKy0gKHZvaWQpX3JlZHJhd0xheWVyCit7CisgICAgW19jYWNoZWRJ
Y29ucyByZW1vdmVBbGxPYmplY3RzXTsKKyAgICBDQUxheWVyICpwYXJlbnRMYXllciA9IFtfbGF5
ZXIgc3VwZXJsYXllcl07CisgICAgW19sYXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07CisgICAg
W3NlbGYgX3NldHVwTGF5ZXI6cGFyZW50TGF5ZXJdOworICAgIFtzZWxmIHNldEZyYW1lU2l6ZTpf
ZnJhbWVTaXplXTsKK30KKworLSAoTlNJbWFnZSAqKV9nZXRJbWFnZUZvckNvbnRyb2xOYW1lOihO
U1N0cmluZyAqKWNvbnRyb2wKK3sKKyAgICBOU0ltYWdlICppY29uSW1hZ2UgPSBfY2FjaGVkSWNv
bnMuZ2V0KClbY29udHJvbF07CisgICAgaWYgKGljb25JbWFnZSkKKyAgICAgICAgcmV0dXJuIGlj
b25JbWFnZTsKKworICAgIGljb25JbWFnZSA9IFtOU0ltYWdlIF9pbWFnZVdpdGhTeXN0ZW1TeW1i
b2xOYW1lOmNvbnRyb2xdOworICAgIGlmICghaWNvbkltYWdlKQorICAgICAgICByZXR1cm4gbmls
OworCisgICAgLy8gVGhpcyB3YXMgaW50cm9kdWNlZCBpbiByZGFyOi8vcHJvYmxlbS81OTExODQx
MgorICAgIGljb25JbWFnZSA9IFtpY29uSW1hZ2UgX2ltYWdlV2l0aENvbmZpZ3VyYXRpb246QHsK
KyAgICAgICAgTlNJbWFnZUFsdGVybmF0ZUNyaXRlcmlvbkZvbnQ6W05TRm9udCBwcmVmZXJyZWRG
b250Rm9yVGV4dFN0eWxlOk5TRm9udFRleHRTdHlsZVRpdGxlMiBvcHRpb25zOkB7IH1dLAorICAg
ICAgICBOU0ltYWdlQWx0ZXJuYXRlQ3JpdGVyaW9uU3ltYm9sU2NhbGU6QChOU0ltYWdlU3ltYm9s
U2NhbGVMYXJnZSkKKyAgICB9XTsKKyAgICAgICAgCisgICAgTlNSZWN0IGljb25JbWFnZVJlY3Qg
PSBOU01ha2VSZWN0KDAsIDAsIFtpY29uSW1hZ2Ugc2l6ZV0ud2lkdGggKiBsYXllckltYWdlU2Nh
bGUgKiBfZGV2aWNlU2NhbGVGYWN0b3IsIFtpY29uSW1hZ2Ugc2l6ZV0uaGVpZ2h0ICogbGF5ZXJJ
bWFnZVNjYWxlICogX2RldmljZVNjYWxlRmFjdG9yKTsKKyAgICBOU0ltYWdlUmVwICppY29uSW1h
Z2VSZXAgPSBbaWNvbkltYWdlIGJlc3RSZXByZXNlbnRhdGlvbkZvclJlY3Q6aWNvbkltYWdlUmVj
dCBjb250ZXh0Om5pbCBoaW50czpuaWxdOworICAgIGljb25JbWFnZSA9IFtOU0ltYWdlIGltYWdl
V2l0aEltYWdlUmVwOmljb25JbWFnZVJlcF07CisgICAgCisgICAgX2NhY2hlZEljb25zLmdldCgp
W2NvbnRyb2xdID0gaWNvbkltYWdlOworICAgIHJldHVybiBpY29uSW1hZ2U7Cit9CisKKy0gKHZv
aWQpX3NldExheWVyT3BhY2l0eTooQ0dGbG9hdClhbHBoYQoreworICAgIFtfbGF5ZXIgc2V0T3Bh
Y2l0eTphbHBoYV07CisgICAgZm9yIChDQUxheWVyICpzdWJMYXllciBpbiBbX2xheWVyIHN1Ymxh
eWVyc10pCisgICAgICAgIFtzdWJMYXllciBzZXRPcGFjaXR5OmFscGhhXTsKK30KKworQGVuZAor
CisjZW5kaWYgLy8gRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQkocmV2aXNpb24gMjY2Mjg0
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTA4OCwxNiArMTA4OCw2IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRQ
ZXJmb3JtRGljdGlvbmFyeUwKICAgICBwYWdlQ2xpZW50KCkuZGlkUGVyZm9ybURpY3Rpb25hcnlM
b29rdXAoZGljdGlvbmFyeVBvcHVwSW5mbyk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpzYXZl
UERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKGNvbnN0IFN0
cmluZyYsIEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwgY29uc3Qg
U3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYlBhZ2VQcm94
eTo6b3BlblBERkZyb21UZW1wb3JhcnlGb2xkZXJXaXRoTmF0aXZlQXBwbGljYXRpb24oRnJhbWVJ
bmZvRGF0YSYmLCBjb25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
IHZvaWQgV2ViUGFnZVByb3h5OjpzZXRSZW1vdGVMYXllclRyZWVSb290Tm9kZShSZW1vdGVMYXll
clRyZWVOb2RlKiByb290Tm9kZSkKIHsKICAgICBwYWdlQ2xpZW50KCkuc2V0UmVtb3RlTGF5ZXJU
cmVlUm9vdE5vZGUocm9vdE5vZGUpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFj
L1BhZ2VDbGllbnRJbXBsTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgJKHJldmlzaW9uIDI2NjI4NCkKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTAsNiArMTkwLDEzIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHJlZ2lzdGVySW5zZXJ0aW9u
VW5kb0dyb3VwaW5nKCkgb3ZlcnJpZGU7CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVE
KQorICAgIHZvaWQgY3JlYXRlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIHVwZGF0ZVBERkhVRExvY2F0aW9uKFBE
RlBsdWdpbklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHJlbW92ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyKSBvdmVycmlkZTsKKyAgICB2
b2lkIHJlbW92ZUFsbFBERkhVRHMoKSBvdmVycmlkZTsKKyNlbmRpZgorCiAgICAgLy8gQXV4aWxp
YXJ5IENsaWVudCBDcmVhdGlvbgogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICBXZWJG
dWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50JiBmdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50
KCkgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVu
dEltcGxNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1Bh
Z2VDbGllbnRJbXBsTWFjLm1tCShyZXZpc2lvbiAyNjYyODQpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM0OSw2
ICszNDksMzAgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVnaXN0ZXJJbnNlcnRpb25VbgogICAg
IHJlZ2lzdGVySW5zZXJ0aW9uVW5kb0dyb3VwaW5nV2l0aFVuZG9NYW5hZ2VyKFttX3ZpZXcgdW5k
b01hbmFnZXJdKTsKIH0KIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKK3ZvaWQg
UGFnZUNsaWVudEltcGw6OmNyZWF0ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZp
ZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCit7CisgICAgbV9pbXBsLT5jcmVhdGVQ
REZIVUQoaWRlbnRpZmllciwgcmVjdCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnVwZGF0
ZVBERkhVRExvY2F0aW9uKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBtX2ltcGwtPnVwZGF0ZVBERkhVRExvY2F0aW9u
KGlkZW50aWZpZXIsIHJlY3QpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpyZW1vdmVQREZI
VUQoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIG1faW1wbC0+cmVtb3Zl
UERGSFVEKGlkZW50aWZpZXIpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpyZW1vdmVBbGxQ
REZIVURzKCkKK3sKKyAgICBtX2ltcGwtPnJlbW92ZUFsbFBERkhVRHMoKTsKK30KKworI2VuZGlm
IC8vIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKIHZvaWQgUGFnZUNsaWVudEltcGw6OmNs
ZWFyQWxsRWRpdENvbW1hbmRzKCkKIHsKICAgICBtX2ltcGwtPmNsZWFyQWxsRWRpdENvbW1hbmRz
KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlN
YWMubW0JKHJldmlzaW9uIDI2NjI4NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9X
ZWJQYWdlUHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ3NSw4ICs0NzUsNiBAQCBzdGF0
aWMgTlNTdHJpbmcgKnBhdGhUb1BERk9uRGlzayhjb25zdCBTCiAKIHZvaWQgV2ViUGFnZVByb3h5
OjpzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKGNv
bnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIEZyYW1lSW5mb0RhdGEmJiBmcmFtZUluZm8s
IGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YSwgY29uc3QgU3RyaW5nJiBwZGZVVUlEKQog
ewotICAgIE1FU1NBR0VfQ0hFQ0soVGVtcG9yYXJ5UERGRmlsZU1hcDo6aXNWYWxpZEtleShwZGZV
VUlEKSk7Ci0KICAgICBpZiAoZGF0YS5pc0VtcHR5KCkpIHsKICAgICAgICAgV1RGTG9nQWx3YXlz
KCJDYW5ub3Qgc2F2ZSBlbXB0eSBQREYgZmlsZSB0byB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeS4i
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtNTA0LDcgKzUwMiw4IEBAIHZvaWQgV2ViUGFnZVByb3h5
OjpzYXZlUERGVG9UZW1wb3JhcnlGb2wKICAgICBhdXRvIG9yaWdpbmF0aW5nVVJMU3RyaW5nID0g
ZnJhbWVJbmZvLnJlcXVlc3QudXJsKCkuc3RyaW5nKCk7CiAgICAgRmlsZVN5c3RlbTo6c2V0TWV0
YWRhdGFVUkwobnNQYXRoLmdldCgpLCBvcmlnaW5hdGluZ1VSTFN0cmluZyk7CiAKLSAgICBtX3Rl
bXBvcmFyeVBERkZpbGVzLmFkZChwZGZVVUlELCBuc1BhdGguZ2V0KCkpOworICAgIGlmIChUZW1w
b3JhcnlQREZGaWxlTWFwOjppc1ZhbGlkS2V5KHBkZlVVSUQpKQorICAgICAgICBtX3RlbXBvcmFy
eVBERkZpbGVzLmFkZChwZGZVVUlELCBuc1BhdGguZ2V0KCkpOwogCiAgICAgYXV0byBwZGZGaWxl
VVJMID0gVVJMOjpmaWxlVVJMV2l0aEZpbGVTeXN0ZW1QYXRoKFN0cmluZyhuc1BhdGguZ2V0KCkp
KTsKICAgICBtX3VpQ2xpZW50LT5jb25maXJtUERGT3BlbmluZygqdGhpcywgcGRmRmlsZVVSTCwg
V1RGTW92ZShmcmFtZUluZm8pLCBbcGRmRmlsZVVSTF0gKGJvb2wgYWxsb3dlZCkgewpAQCAtNTE0
LDYgKzUxMyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzYXZlUERGVG9UZW1wb3JhcnlGb2wKICAg
ICB9KTsKIH0KIAorI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKSAmJiAhRU5BQkxFKFVJX1BST0NF
U1NfUERGX0hVRCkKIHZvaWQgV2ViUGFnZVByb3h5OjpvcGVuUERGRnJvbVRlbXBvcmFyeUZvbGRl
cldpdGhOYXRpdmVBcHBsaWNhdGlvbihGcmFtZUluZm9EYXRhJiYgZnJhbWVJbmZvLCBjb25zdCBT
dHJpbmcmIHBkZlVVSUQpCiB7CiAgICAgTUVTU0FHRV9DSEVDSyhUZW1wb3JhcnlQREZGaWxlTWFw
Ojppc1ZhbGlkS2V5KHBkZlVVSUQpKTsKQEAgLTUzMCw2ICs1MzAsNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6b3BlblBERkZyb21UZW1wb3JhcnlGCiAgICAgICAgIFtbTlNXb3Jrc3BhY2Ugc2hhcmVk
V29ya3NwYWNlXSBvcGVuVVJMOnBkZkZpbGVVUkxdOwogICAgIH0pOwogfQorI2VuZGlmCiAKICNp
ZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKIHZvaWQgV2ViUGFnZVByb3h5OjpzaG93UERGQ29udGV4
dE1lbnUoY29uc3QgV2ViS2l0OjpQREZDb250ZXh0TWVudSYgY29udGV4dE1lbnUsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8aW50MzJfdD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC02NzMsNiArNjc0LDQ5IEBAIFBsYXRmb3JtVmlldyogV2ViUGFnZVByb3h5OjpwbGF0Zm9y
bVZpZXcKICAgICByZXR1cm4gW3BhZ2VDbGllbnQoKS5wbGF0Zm9ybVdpbmRvdygpIGNvbnRlbnRW
aWV3XTsKIH0KIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKK3ZvaWQgV2ViUGFn
ZVByb3h5OjpjcmVhdGVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIHBhZ2VDbGllbnQoKS5jcmVhdGVQREZI
VUQoaWRlbnRpZmllciwgcmVjdCk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpyZW1vdmVQREZI
VUQoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIHBhZ2VDbGllbnQoKS5y
ZW1vdmVQREZIVUQoaWRlbnRpZmllcik7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5Ojp1cGRhdGVQ
REZIVURMb2NhdGlvbihQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHJlY3QpCit7CisgICAgcGFnZUNsaWVudCgpLnVwZGF0ZVBERkhVRExvY2F0
aW9uKGlkZW50aWZpZXIsIHJlY3QpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6cGRmWm9vbUlu
KFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpab29tUERGSW4oaWRlbnRpZmllcikpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6
cGRmWm9vbU91dChQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6Wm9vbVBERk91dChpZGVudGlmaWVyKSk7Cit9CisKK3ZvaWQgV2Vi
UGFnZVByb3h5OjpwZGZTYXZlVG9QREYoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQor
eworICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViUGFnZTo6U2F2ZVBERihpZGVu
dGlmaWVyKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gKFN0cmluZyYm
IHN1Z2dlc3RlZEZpbGVuYW1lLCBVUkwmJiBvcmlnaW5hdGluZ1VSTCwgY29uc3QgSVBDOjpEYXRh
UmVmZXJlbmNlJiBkYXRhUmVmZXJlbmNlKSB7CisgICAgICAgIHNhdmVQREZUb0ZpbGVJbkRvd25s
b2Fkc0ZvbGRlcihXVEZNb3ZlKHN1Z2dlc3RlZEZpbGVuYW1lKSwgV1RGTW92ZShvcmlnaW5hdGlu
Z1VSTCksIGRhdGFSZWZlcmVuY2UpOworICAgIH0pOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6
cGRmT3BlbldpdGhQcmV2aWV3KFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAg
ICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6Ok9wZW5QREZXaXRoUHJldmll
dyhpZGVudGlmaWVyKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gKFN0
cmluZyYmIHN1Z2dlc3RlZEZpbGVuYW1lLCBGcmFtZUluZm9EYXRhJiYgZnJhbWVJbmZvLCBjb25z
dCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGEsIGNvbnN0IFN0cmluZyYgcGRmVVVJRCkgeworICAg
ICAgICBzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9u
KFdURk1vdmUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBXVEZNb3ZlKGZyYW1lSW5mbyksIGRhdGEsIHBk
ZlVVSUQpOworICAgIH0pOworfQorCisjZW5kaWYgLy8gRU5BQkxFKFVJX1BST0NFU1NfUERGX0hV
RCkKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDI2NjI4NCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3OTAsNiArMTc5MCw3IEBACiAJCUQzQjk0
ODQ5MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJTZWFyY2hQb3B1cE1lbnUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzQjk0ODQ1MTFGRjRCNjUwMDAzMkIz
OSAvKiBXZWJTZWFyY2hQb3B1cE1lbnUuaCAqLzsgfTsKIAkJREY0NjJFMEYyM0YyMkY1NTAwRUZG
MzVGIC8qIFdLSFRUUENvb2tpZVN0b3JlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREY0NjJFMEUyM0YyMkY1MzAwRUZGMzVGIC8qIFdLSFRU
UENvb2tpZVN0b3JlUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCURGNDYyRTEyMjNGMzM4QkUwMEVGRjM1RiAvKiBXS0NvbnRlbnRXb3Js
ZFByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IERGNDYyRTExMjNGMzM4QUQwMEVGRjM1RiAvKiBXS0NvbnRlbnRXb3JsZFByaXZhdGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlERjg0Q0VFNDI0
OUFBMjREMDA5MDk2RjYgLyogV0tQREZIVURWaWV3Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREY4NENFRTIyNDlBQTIxRjAwOTA5NkY2IC8qIFdLUERG
SFVEVmlldy5tbSAqLzsgfTsKIAkJRTEwNUZFNTQxOEQ3QjlERTAwOEY1N0E4IC8qIEVkaXRpbmdS
YW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEw
NUZFNTMxOEQ3QjlERTAwOEY1N0E4IC8qIEVkaXRpbmdSYW5nZS5oICovOyB9OwogCQlFMTFEMzVB
RTE2QjYzRDFCMDA2RDIzRDcgLyogY29tLmFwcGxlLldlYlByb2Nlc3Muc2IgaW4gUmVzb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOTY3RTM3MTUwQUI1RTIwMEM3
MzE2OSAvKiBjb20uYXBwbGUuV2ViUHJvY2Vzcy5zYiAqLzsgfTsKIAkJRTE0QTk1NEExNkUwMTZB
NDAwNjhERTgyIC8qIE5ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTRBOTU0ODE2RTAxNkE0MDA2
OERFODIgLyogTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXMuaCAqLzsgfTsKQEAgLTUy
NzksNiArNTI4MCw5IEBACiAJCURGNDYyRTExMjNGMzM4QUQwMEVGRjM1RiAvKiBXS0NvbnRlbnRX
b3JsZFByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tDb250ZW50
V29ybGRQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURGNThDNjMxMTM3
MUFDNTgwMEY5QTM3QyAvKiBOYXRpdmVXZWJXaGVlbEV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5hdGl2ZVdlYldoZWVsRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJREY1OEM2MzUxMzcxQUNBMDAwRjlBMzdDIC8qIE5hdGl2ZVdlYldoZWVsRXZl
bnRNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBOYXRpdmVX
ZWJXaGVlbEV2ZW50TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlERjc0Mjc1
QzI0RjQ5NTUwMDBGOEFCRTkgLyogUERGUGx1Z2luSWRlbnRpZmllci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQREZQbHVnaW5JZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCURGODRDRUUyMjQ5QUEyMUYwMDkwOTZGNiAvKiBXS1BERkhVRFZpZXcu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS1BERkhVRFZpZXcu
bW07IHBhdGggPSBQREYvV0tQREZIVURWaWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlERjg0Q0VFMzI0OUFBMjFGMDA5MDk2RjYgLyogV0tQREZIVURWaWV3LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLUERGSFVEVmlldy5oOyBwYXRoID0gUERGL1dLUERG
SFVEVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTA1RkU1MzE4RDdCOURF
MDA4RjU3QTggLyogRWRpdGluZ1JhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEVkaXRpbmdSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTE1Qzcx
NTE5MEY4QTI1MDBFQ0M1MTYgLyogY29tLmFwcGxlLldlYktpdC5TdG9yYWdlLnNiICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgbmFtZSA9IGNvbS5hcHBsZS5XZWJLaXQuU3RvcmFnZS5zYjsgcGF0aCA9IERlcml2
ZWRTb3VyY2VzL1dlYktpdDIvY29tLmFwcGxlLldlYktpdC5TdG9yYWdlLnNiOyBzb3VyY2VUcmVl
ID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlFMTMzRkQ4OTE0MjNERDdGMDBGQzdCRkIgLyog
V2ViS2l0LmljbnMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBpbWFnZS5pY25zOyBuYW1lID0gV2ViS2l0LmljbnM7IHBhdGggPSBSZXNvdXJjZXMvV2Vi
S2l0LmljbnM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01OTAwLDYgKzU5MDQsNyBA
QAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMUE2RkI5MDgxMUU2NkZCMTAwREIxMzcxIC8qIE5ldHNj
YXBlICovLAogCQkJCUUxOTk4NzVCMTQyQkY5Q0YwMEJCMkRFNyAvKiBQREYgKi8sCisJCQkJREY3
NDI3NUMyNEY0OTU1MDAwRjhBQkU5IC8qIFBERlBsdWdpbklkZW50aWZpZXIuaCAqLywKIAkJCQkx
QTZGQjdEMDExRTY1MUUyMDBEQjEzNzEgLyogUGx1Z2luLmNwcCAqLywKIAkJCQkxQTZGQjdEMTEx
RTY1MUUyMDBEQjEzNzEgLyogUGx1Z2luLmggKi8sCiAJCQkJMUFBNTZGMjgxMUU5MkJDODAwNjFC
ODgyIC8qIFBsdWdpbkNvbnRyb2xsZXIuaCAqLywKQEAgLTg5NjMsNiArODk2OCw3IEBACiAJCQkJ
Q0Q0NTcwRDgyNDQ0Q0ExNzAwQTNEQ0VCIC8qIE1lZGlhICovLAogCQkJCTUxMENDN0U3MTYxMzhF
NzIwMEQwM0VEMyAvKiBOZXR3b3JrICovLAogCQkJCTMxQTJFQzQwMTQ4OTk3MzcwMDgxMEQ3MSAv
KiBOb3RpZmljYXRpb25zICovLAorCQkJCURGODRDRUUxMjQ5QUEyMDAwMDkwOTZGNiAvKiBQREYg
Ki8sCiAJCQkJMUFFRkNDMDUxMUQwMUYzNDAwODIxOUQzIC8qIFBsdWdpbnMgKi8sCiAJCQkJMkQx
NTUxQTkxRjVBOUI0MjAwMDZFM0ZFIC8qIFJlbW90ZUxheWVyVHJlZSAqLywKIAkJCQkxQUFGMDg5
RTE5MjY4MUFDMDBCNjM5MEMgLyogVXNlckNvbnRlbnQgKi8sCkBAIC0xMDQ1MSw2ICsxMDQ1Nywx
NSBAQAogCQkJcGF0aCA9IGlvczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJ
CURGODRDRUUxMjQ5QUEyMDAwMDkwOTZGNiAvKiBQREYgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91
cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCURGODRDRUUzMjQ5QUEyMUYwMDkwOTZGNiAvKiBXS1BE
RkhVRFZpZXcuaCAqLywKKwkJCQlERjg0Q0VFMjI0OUFBMjFGMDA5MDk2RjYgLyogV0tQREZIVURW
aWV3Lm1tICovLAorCQkJKTsKKwkJCW5hbWUgPSBQREY7CisJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOworCQl9OwogCQlFMTcwODc2RDE2RDZDQTcyMDBGOTkyMjYgLyogRmlsZUFQSSAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0xMzE0Miw2ICsxMzE1Nyw3
IEBACiAJCQkJNjM3MjgxQTMyMUFEQzc0NDAwOUUwREU2IC8qIFdLRG93bmxvYWRQcm9ncmVzcy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTVDRTkxMjBEMjI5M0MyMTkwMDVCRUM3OCAvKiBXS01haW4u
bW0gaW4gU291cmNlcyAqLywKIAkJCQk0NjU3RDg4QTIyNjY0QTJGMDA1REU4MjMgLyogV0tPcmll
bnRhdGlvbkFjY2Vzc0FsZXJ0Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJREY4NENFRTQyNDlBQTI0
RDAwOTA5NkY2IC8qIFdLUERGSFVEVmlldy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTVDQTI2RDgz
MjE3QUQxQjgwMEY5N0EzNSAvKiBXS1NhZmVCcm93c2luZ1dhcm5pbmcubW0gaW4gU291cmNlcyAq
LywKIAkJCQkxREIwMTk0NDIxMUNGMDA1MDA5RkIzRTggLyogV0tTaGFyZVNoZWV0Lm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0E3OEZGMzMyMjQxOTE5QjAwOTY0ODNFIC8qIFdLU3RvcmFnZUFjY2Vz
c0FsZXJ0Lm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
UGx1Z2lucy9QREZQbHVnaW5JZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGUGx1Z2luSWRlbnRpZmllci5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERlBsdWdpbklkZW50aWZpZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCitlbnVtIFBERlBsdWdpbklk
ZW50aWZpZXJUeXBlIHsgfTsKK3VzaW5nIFBERlBsdWdpbklkZW50aWZpZXIgPSBPYmplY3RJZGVu
dGlmaWVyPFBERlBsdWdpbklkZW50aWZpZXJUeXBlPjsKKyNlbmRpZgorCit9CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGTGF5ZXJDb250cm9sbGVyU1BJLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERkxh
eWVyQ29udHJvbGxlclNQSS5oCShyZXZpc2lvbiAyNjYyODQpCisrKyBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvUGx1Z2lucy9QREYvUERGTGF5ZXJDb250cm9sbGVyU1BJLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTg3LDYgKzg3LDEyIEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFBERkxheWVy
Q29udHIKIAogLSAodm9pZClzbmFwc2hvdEluQ29udGV4dDooQ0dDb250ZXh0UmVmKWNvbnRleHQ7
CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorLSAodm9pZClzZXREaXNwbGF5c1BE
RkhVRENvbnRyb2xsZXI6KEJPT0wpZGlzcGxheXNDb250cm9sbGVyOworLSAodm9pZCl6b29tSW46
KGlkKWF0UG9pbnQ7CistICh2b2lkKXpvb21PdXQ6KGlkKWF0UG9pbnQ7CisjZW5kaWYKKwogLSAo
dm9pZCltYWduaWZ5V2l0aE1hZ25pZmljYXRpb246KENHRmxvYXQpbWFnbmlmaWNhdGlvbiBhdFBv
aW50OihDR1BvaW50KXBvaW50IGltbWVkaWF0ZWx5OihCT09MKWltbWVkaWF0ZWx5OwogCiAtIChD
R1BvaW50KXNjcm9sbFBvc2l0aW9uOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1Bs
dWdpbnMvUERGL1BERlBsdWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaAkocmV2aXNpb24gMjY2Mjg0KQorKysgU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCiAKICNpbmNsdWRl
ICJQREZLaXRJbXBvcnRzLmgiCisjaW5jbHVkZSAiUERGUGx1Z2luSWRlbnRpZmllci5oIgogI2lu
Y2x1ZGUgIlBsdWdpbi5oIgogI2luY2x1ZGUgIldlYkV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViSGl0
VGVzdFJlc3VsdERhdGEuaCIKQEAgLTUwLDYgKzUxLDcgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3Qg
T3BhcXVlSlNWYWx1ZSogSlNWYQogT0JKQ19DTEFTUyBOU0FycmF5OwogT0JKQ19DTEFTUyBOU0F0
dHJpYnV0ZWRTdHJpbmc7CiBPQkpDX0NMQVNTIE5TRGF0YTsKK09CSkNfQ0xBU1MgTlNFdmVudDsK
IE9CSkNfQ0xBU1MgTlNTdHJpbmc7CiBPQkpDX0NMQVNTIFBERkFubm90YXRpb247CiBPQkpDX0NM
QVNTIFBERkxheWVyQ29udHJvbGxlcjsKQEAgLTc3LDggKzc5LDkgQEAgY2xhc3MgUERGUGx1Z2lu
QW5ub3RhdGlvbjsKIGNsYXNzIFBERlBsdWdpblBhc3N3b3JkRmllbGQ7CiBjbGFzcyBQbHVnaW5W
aWV3OwogY2xhc3MgV2ViRnJhbWU7CitzdHJ1Y3QgRnJhbWVJbmZvRGF0YTsKIAotY2xhc3MgUERG
UGx1Z2luIGZpbmFsIDogcHVibGljIFBsdWdpbiwgcHJpdmF0ZSBXZWJDb3JlOjpTY3JvbGxhYmxl
QXJlYQorY2xhc3MgUERGUGx1Z2luIGZpbmFsIDogcHVibGljIFBsdWdpbiwgcHVibGljIFdlYkNv
cmU6OlNjcm9sbGFibGVBcmVhCiAjaWYgSEFWRShJTkNSRU1FTlRBTF9QREZfQVBJUykKICAgICAs
IHByaXZhdGUgV2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQKICNlbmRp
ZgpAQCAtMTAzLDkgKzEwNiwxOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBub3RpZnlTZWxlY3Rpb25D
aGFuZ2VkKFBERlNlbGVjdGlvbiAqKTsKICAgICB2b2lkIG5vdGlmeUN1cnNvckNoYW5nZWQodWlu
dDY0X3QgLyogUERGTGF5ZXJDb250cm9sbGVyQ3Vyc29yVHlwZSAqLyk7CiAKKyNpZiBFTkFCTEUo
VUlfUFJPQ0VTU19QREZfSFVEKQorICAgIHZvaWQgem9vbUluKCk7CisgICAgdm9pZCB6b29tT3V0
KCk7CisgICAgdm9pZCBzYXZlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJiwg
Y29uc3QgVVJMJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik+JiYpOworICAgIHZvaWQgb3Bl
bldpdGhQcmV2aWV3KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJiwgRnJhbWVJ
bmZvRGF0YSYmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmKT4mJik7
CisgICAgUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9p
ZGVudGlmaWVyOyB9CisjZW5kaWYKKwogICAgIHZvaWQgY2xpY2tlZExpbmsoTlNVUkwgKik7Cisj
aWYgIUVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCiAgICAgdm9pZCBzYXZlVG9QREYoKTsKICAg
ICB2b2lkIG9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oKTsKKyNlbmRpZgogICAgIHZvaWQgd3Jp
dGVJdGVtc1RvUGFzdGVib2FyZChOU1N0cmluZyAqcGFzdGVib2FyZE5hbWUsIE5TQXJyYXkgKml0
ZW1zLCBOU0FycmF5ICp0eXBlcyk7CiAgICAgdm9pZCBzaG93RGVmaW5pdGlvbkZvckF0dHJpYnV0
ZWRTdHJpbmcoTlNBdHRyaWJ1dGVkU3RyaW5nICosIENHUG9pbnQpOwogICAgIHZvaWQgcGVyZm9y
bVdlYlNlYXJjaChOU1N0cmluZyAqKTsKQEAgLTExOCw3ICsxMzEsMTAgQEAgcHVibGljOgogCiAg
ICAgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRGcm9tUERGVmlld1RvU2NyZWVuKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYpIGNvbnN0OwogICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRG
cm9tUm9vdFZpZXdUb1BERlZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKKyAg
ICBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3KGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JikgY29uc3Q7CisgICAgV2ViQ29yZTo6SW50UmVjdCBjb252ZXJ0RnJv
bVBERlZpZXdUb1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdDsKICAgICBX
ZWJDb3JlOjpJbnRSZWN0IGJvdW5kc09uU2NyZWVuKCkgY29uc3Q7CisgICAgV2ViQ29yZTo6SW50
UmVjdCBmcmFtZUZvckhVRCgpIGNvbnN0OwogCiAgICAgYm9vbCBzaG93Q29udGV4dE1lbnVBdFBv
aW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CiAKQEAgLTE1OSw3ICsxNzUsNyBAQCBwcml2
YXRlOgogICAgIGJvb2wgd2FudHNXaGVlbEV2ZW50cygpIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0K
ICAgICB2b2lkIGdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHBsdWdp
blNpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0LCBjb25zdCBXZWJDb3JlOjpB
ZmZpbmVUcmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0pIGZpbmFsOwogICAgIHZv
aWQgY29udGVudHNTY2FsZUZhY3RvckNoYW5nZWQoZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgdmlz
aWJpbGl0eURpZENoYW5nZShib29sKSBmaW5hbCB7IH0KKyAgICB2b2lkIHZpc2liaWxpdHlEaWRD
aGFuZ2UoYm9vbCkgZmluYWw7CiAgICAgdm9pZCBmcmFtZURpZEZpbmlzaExvYWRpbmcodWludDY0
X3QgcmVxdWVzdElEKSBmaW5hbDsKICAgICB2b2lkIGZyYW1lRGlkRmFpbCh1aW50NjRfdCByZXF1
ZXN0SUQsIGJvb2wgd2FzQ2FuY2VsbGVkKSBmaW5hbDsKICAgICB2b2lkIGRpZEV2YWx1YXRlSmF2
YVNjcmlwdCh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFN0cmluZyYgcmVzdWx0KSBmaW5hbDsK
QEAgLTI2Myw3ICsyNzksNiBAQCBwcml2YXRlOgogICAgIE5TRXZlbnQgKm5zRXZlbnRGb3JXZWJN
b3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKICAgICBXZWJDb3JlOjpJbnRQb2ludCBj
b252ZXJ0RnJvbVBsdWdpblRvUERGVmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0
OwogICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tUm9vdFZpZXdUb1BsdWdpbihjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OwotICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZl
cnRGcm9tUERGVmlld1RvUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsK
ICAgICAKICAgICBib29sIHN1cHBvcnRzRm9ybXMoKTsKICAgICBib29sIGlzRnVsbEZyYW1lUGx1
Z2luKCkgY29uc3Q7CkBAIC00MDMsNiArNDE4LDkgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAjZW5k
aWYgLy8gSEFWRShJTkNSRU1FTlRBTF9QREZfQVBJUykKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19Q
REZfSFVEKQorICAgIFBERlBsdWdpbklkZW50aWZpZXIgbV9pZGVudGlmaWVyOworI2VuZGlmCiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQkocmV2aXNpb24gMjY2Mjg0KQorKysg
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNDMzLDEyICs0MzMsMTYgQEAgLSAodm9pZClwZXJmb3JtU3BvdGxpZ2h0U2Vh
cmNoOihOU1N0cmluZwogCiAtICh2b2lkKW9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24KIHsKKyNp
ZiAhRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKICAgICBfcGRmUGx1Z2luLT5vcGVuV2l0aE5h
dGl2ZUFwcGxpY2F0aW9uKCk7CisjZW5kaWYKIH0KIAogLSAodm9pZClzYXZlVG9QREYKIHsKKyNp
ZiAhRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKICAgICBfcGRmUGx1Z2luLT5zYXZlVG9QREYo
KTsKKyNlbmRpZgogfQogCiAtICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250
cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIGNsaWNrZWRMaW5rV2l0aFVSTDooTlNVUkwgKil1
cmwKQEAgLTYwMCw3ICs2MDQsMTMgQEAgaW5saW5lIFBERlBsdWdpbjo6UERGUGx1Z2luKFdlYkZy
YW1lJiBmcgogI2lmIEhBVkUoSU5DUkVNRU5UQUxfUERGX0FQSVMpCiAgICAgLCBtX2luY3JlbWVu
dGFsUERGTG9hZGluZ0VuYWJsZWQoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS5pbmNyZW1lbnRhbFBERkxvYWRpbmdFbmFibGVkKCkpCiAjZW5kaWYKKyNp
ZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgICwgbV9pZGVudGlmaWVyKFBERlBsdWdp
bklkZW50aWZpZXI6OmdlbmVyYXRlKCkpCisjZW5kaWYKIHsKKyNpZiBFTkFCTEUoVUlfUFJPQ0VT
U19QREZfSFVEKQorICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBzZXREaXNwbGF5c1BERkhVRENv
bnRyb2xsZXI6Tk9dOworI2VuZGlmCiAgICAgbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkuZGVs
ZWdhdGUgPSBtX3BkZkxheWVyQ29udHJvbGxlckRlbGVnYXRlLmdldCgpOwogICAgIG1fcGRmTGF5
ZXJDb250cm9sbGVyLmdldCgpLnBhcmVudExheWVyID0gbV9jb250ZW50TGF5ZXIuZ2V0KCk7CiAK
QEAgLTY0MCw2ICs2NTAsMTAgQEAgaW5saW5lIFBERlBsdWdpbjo6UERGUGx1Z2luKFdlYkZyYW1l
JiBmcgogCiBQREZQbHVnaW46On5QREZQbHVnaW4oKQogeworI2lmIEVOQUJMRShVSV9QUk9DRVNT
X1BERl9IVUQpCisgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkKKyAgICAgICAg
cGFnZS0+cmVtb3ZlUERGSFVEKCp0aGlzKTsKKyNlbmRpZgogfQogCiAjaWYgSEFWRShJTkNSRU1F
TlRBTF9QREZfQVBJUykKQEAgLTE3ODAsNiArMTc5NCwxMSBAQCB2b2lkIFBERlBsdWdpbjo6Y29u
dGVudHNTY2FsZUZhY3RvckNoYW5nCiAgICAgdXBkYXRlUGFnZUFuZERldmljZVNjYWxlRmFjdG9y
cygpOwogfQogCitJbnRSZWN0IFBERlBsdWdpbjo6ZnJhbWVGb3JIVUQoKSBjb25zdAoreworICAg
IHJldHVybiBjb252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3KEludFJlY3QoSW50UG9pbnQoKSwg
c2l6ZSgpKSk7Cit9CisKIHZvaWQgUERGUGx1Z2luOjpjYWxjdWxhdGVTaXplcygpCiB7CiAgICAg
aWYgKFttX3BkZkRvY3VtZW50IGlzTG9ja2VkXSkgewpAQCAtMTc5MCw2ICsxODA5LDEwIEBAIHZv
aWQgUERGUGx1Z2luOjpjYWxjdWxhdGVTaXplcygpCiAKICAgICBtX2ZpcnN0UGFnZUhlaWdodCA9
IFttX3BkZkRvY3VtZW50IHBhZ2VDb3VudF0gPyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQ0dDZWls
aW5nKFtbbV9wZGZEb2N1bWVudCBwYWdlQXRJbmRleDowXSBib3VuZHNGb3JCb3g6a1BERkRpc3Bs
YXlCb3hDcm9wQm94XS5zaXplLmhlaWdodCkpIDogMDsKICAgICBzZXRQREZEb2N1bWVudFNpemUo
SW50U2l6ZShbbV9wZGZMYXllckNvbnRyb2xsZXIgY29udGVudFNpemVSZXNwZWN0aW5nWm9vbV0p
KTsKKworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgbV9mcmFtZS5wYWdlKCkt
PnVwZGF0ZVBERkhVRExvY2F0aW9uKCp0aGlzLCBmcmFtZUZvckhVRCgpKTsKKyNlbmRpZgogfQog
CiBib29sIFBERlBsdWdpbjo6aW5pdGlhbGl6ZShjb25zdCBQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJz
KQpAQCAtMTkyNCw3ICsxOTQ3LDEzIEBAIEludFBvaW50IFBERlBsdWdpbjo6Y29udmVydEZyb21Q
REZWaWV3VG8KICAgICBJbnRQb2ludCBwb2ludEluUGx1Z2luQ29vcmRpbmF0ZXMocG9pbnQueCgp
LCBzaXplKCkuaGVpZ2h0KCkgLSBwb2ludC55KCkpOwogICAgIHJldHVybiBtX3Jvb3RWaWV3VG9Q
bHVnaW5UcmFuc2Zvcm0uaW52ZXJzZSgpLnZhbHVlT3IoQWZmaW5lVHJhbnNmb3JtKCkpLm1hcFBv
aW50KHBvaW50SW5QbHVnaW5Db29yZGluYXRlcyk7CiB9Ci0gICAgCisKK0ludFJlY3QgUERGUGx1
Z2luOjpjb252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3KGNvbnN0IEludFJlY3QmIHJlY3QpIGNv
bnN0Cit7CisgICAgSW50UmVjdCByZWN0SW5QbHVnaW5Db29yZGluYXRlcyhyZWN0LngoKSwgcmVj
dC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgcmV0dXJuIG1fcm9vdFZp
ZXdUb1BsdWdpblRyYW5zZm9ybS5pbnZlcnNlKCkudmFsdWVPcihBZmZpbmVUcmFuc2Zvcm0oKSku
bWFwUmVjdChyZWN0SW5QbHVnaW5Db29yZGluYXRlcyk7Cit9CisKIEludFBvaW50IFBERlBsdWdp
bjo6Y29udmVydEZyb21Sb290Vmlld1RvUERGVmlldyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNv
bnN0CiB7CiAgICAgSW50UG9pbnQgcG9pbnRJblBsdWdpbkNvb3JkaW5hdGVzID0gbV9yb290Vmll
d1RvUGx1Z2luVHJhbnNmb3JtLm1hcFBvaW50KHBvaW50KTsKQEAgLTE5NTUsNiArMTk4NCwxOCBA
QCBJbnRSZWN0IFBERlBsdWdpbjo6Ym91bmRzT25TY3JlZW4oKSBjb25zCiAgICAgcmV0dXJuIGZy
YW1lVmlldy0+Y29udGVudHNUb1NjcmVlbihlbmNsb3NpbmdJbnRSZWN0KHJlY3RJblJvb3RWaWV3
Q29vcmRpbmF0ZXMpKTsKIH0KIAordm9pZCBQREZQbHVnaW46OnZpc2liaWxpdHlEaWRDaGFuZ2Uo
Ym9vbCB2aXNpYmxlKQoreworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgaWYg
KHZpc2libGUpCisgICAgICAgIG1fZnJhbWUucGFnZSgpLT5jcmVhdGVQREZIVUQoKnRoaXMsIGZy
YW1lRm9ySFVEKCkpOworICAgIGVsc2UKKyAgICAgICAgbV9mcmFtZS5wYWdlKCktPnJlbW92ZVBE
RkhVRCgqdGhpcyk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh2aXNpYmxlKTsKKyNlbmRpZgor
fQorCiB2b2lkIFBERlBsdWdpbjo6Z2VvbWV0cnlEaWRDaGFuZ2UoY29uc3QgSW50U2l6ZSYgcGx1
Z2luU2l6ZSwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGx1Z2luVG9S
b290Vmlld1RyYW5zZm9ybSkKIHsKICAgICBpZiAoc2l6ZSgpID09IHBsdWdpblNpemUgJiYgcGx1
Z2luVmlldygpLT5wYWdlU2NhbGVGYWN0b3IoKSA9PSBbbV9wZGZMYXllckNvbnRyb2xsZXIgY29u
dGVudFNjYWxlRmFjdG9yXSkKQEAgLTI0MDAsNiArMjQ0MSwzMSBAQCBib29sIFBERlBsdWdpbjo6
cGx1Z2luSGFuZGxlc0NvbnRlbnRPZmZzCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKyNpZiBFTkFC
TEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCit2b2lkIFBERlBsdWdpbjo6em9vbUluKCkKK3sKKyAg
ICBbbV9wZGZMYXllckNvbnRyb2xsZXIgem9vbUluOm5pbF07Cit9CisKK3ZvaWQgUERGUGx1Z2lu
Ojp6b29tT3V0KCkKK3sKKyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgem9vbU91dDpuaWxdOwor
fQorCit2b2lkIFBERlBsdWdpbjo6c2F2ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0
cmluZyYsIGNvbnN0IFVSTCYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQoreworICAgIE5TRGF0YSAqZGF0YSA9IGxpdmVEYXRhKCk7CisgICAgY29tcGxl
dGlvbkhhbmRsZXIobV9zdWdnZXN0ZWRGaWxlbmFtZSwgbV9mcmFtZS51cmwoKSwgSVBDOjogRGF0
YVJlZmVyZW5jZShzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5ieXRlcyksIGRhdGEu
bGVuZ3RoKSk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpvcGVuV2l0aFByZXZpZXcoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmLCBGcmFtZUluZm9EYXRhJiYsIGNvbnN0IElQQzo6
RGF0YVJlZmVyZW5jZSYsIGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorewor
ICAgIE5TRGF0YSAqZGF0YSA9IGxpdmVEYXRhKCk7CisgICAgY29tcGxldGlvbkhhbmRsZXIobV9z
dWdnZXN0ZWRGaWxlbmFtZSwgbV9mcmFtZS5pbmZvKCksIElQQzo6IERhdGFSZWZlcmVuY2UgeyBz
dGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5ieXRlcyksIGRhdGEubGVuZ3RoIH0sIGNy
ZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSk7Cit9CisKKyNlbHNlIC8vIEVOQUJMRShVSV9QUk9D
RVNTX1BERl9IVUQpCiAgICAgCiB2b2lkIFBERlBsdWdpbjo6c2F2ZVRvUERGKCkKIHsKQEAgLTI0
MzIsNiArMjQ5OCw4IEBAIHZvaWQgUERGUGx1Z2luOjpvcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW8K
ICAgICBtX2ZyYW1lLnBhZ2UoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpPcGVuUERG
RnJvbVRlbXBvcmFyeUZvbGRlcldpdGhOYXRpdmVBcHBsaWNhdGlvbihtX2ZyYW1lLmluZm8oKSwg
bV90ZW1wb3JhcnlQREZVVUlEKSk7CiB9CiAKKyNlbmRpZiAvLyBFTkFCTEUoVUlfUFJPQ0VTU19Q
REZfSFVEKQorCiB2b2lkIFBERlBsdWdpbjo6d3JpdGVJdGVtc1RvUGFzdGVib2FyZChOU1N0cmlu
ZyAqcGFzdGVib2FyZE5hbWUsIE5TQXJyYXkgKml0ZW1zLCBOU0FycmF5ICp0eXBlcykKIHsKICAg
ICBhdXRvIHBhc3RlYm9hcmRUeXBlcyA9IG1ha2VWZWN0b3I8U3RyaW5nPih0eXBlcyk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNp
b24gMjY2Mjg0KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUxMjMsMTIgKzUxMjMsMTIgQEAgdm9pZCBXZWJQYWdlOjpk
aWRGaW5pc2hQcmludE9wZXJhdGlvbihjbwogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoUERGS0lU
X1BMVUdJTikgJiYgIUVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCiB2b2lkIFdlYlBhZ2U6OnNh
dmVQREZUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVu
YW1lLCBjb25zdCBVUkwmIG9yaWdpbmF0aW5nVVJMLCBjb25zdCB1aW50OF90KiBkYXRhLCB1bnNp
Z25lZCBsb25nIHNpemUpCiB7CiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTYXZl
UERGVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIoc3VnZ2VzdGVkRmlsZW5hbWUsIG9yaWdpbmF0aW5n
VVJMLCBJUEM6OkRhdGFSZWZlcmVuY2UoZGF0YSwgc2l6ZSkpKTsKIH0KIAotI2lmIFBMQVRGT1JN
KENPQ09BKQogdm9pZCBXZWJQYWdlOjpzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0
aE5hdGl2ZUFwcGxpY2F0aW9uKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIEZyYW1l
SW5mb0RhdGEmJiBmcmFtZUluZm8sIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxvbmcg
c2l6ZSwgY29uc3QgU3RyaW5nJiBwZGZVVUlEKQogewogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6U2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNh
dGlvbihzdWdnZXN0ZWRGaWxlbmFtZSwgZnJhbWVJbmZvLCBJUEM6OkRhdGFSZWZlcmVuY2UoZGF0
YSwgc2l6ZSksIHBkZlVVSUQpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDI2NjI4NCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQAog
I2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgogI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIK
ICNpbmNsdWRlICJPcHRpb25hbENhbGxiYWNrSUQuaCIKKyNpbmNsdWRlICJQREZQbHVnaW5JZGVu
dGlmaWVyLmgiCiAjaW5jbHVkZSAiUGx1Z2luLmgiCiAjaW5jbHVkZSAiUG9saWN5RGVjaXNpb24u
aCIKICNpbmNsdWRlICJTYW5kYm94RXh0ZW5zaW9uLmgiCkBAIC0zNDUsNiArMzQ2LDE2IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgY2VudGVyU2VsZWN0aW9uSW5WaXNpYmxlQXJlYSgpOwogCisjaWYg
RU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICB2b2lkIGNyZWF0ZVBERkhVRChQREZQbHVn
aW4mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCB1cGRhdGVQREZIVURMb2Nh
dGlvbihQREZQbHVnaW4mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCByZW1v
dmVQREZIVUQoUERGUGx1Z2luJik7CisgICAgdm9pZCB6b29tUERGSW4oUERGUGx1Z2luSWRlbnRp
Zmllcik7CisgICAgdm9pZCB6b29tUERGT3V0KFBERlBsdWdpbklkZW50aWZpZXIpOworICAgIHZv
aWQgc2F2ZVBERihQREZQbHVnaW5JZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNv
bnN0IFN0cmluZyYsIGNvbnN0IFVSTCYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpPiYmKTsK
KyAgICB2b2lkIG9wZW5QREZXaXRoUHJldmlldyhQREZQbHVnaW5JZGVudGlmaWVyLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYsIEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgSVBD
OjpEYXRhUmVmZXJlbmNlJiwgY29uc3QgU3RyaW5nJik+JiYpOworI2VuZGlmCisKICNpZiBQTEFU
Rk9STShDT0NPQSkKICAgICB2b2lkIHdpbGxDb21taXRMYXllclRyZWUoUmVtb3RlTGF5ZXJUcmVl
VHJhbnNhY3Rpb24mKTsKICAgICB2b2lkIGRpZEZsdXNoTGF5ZXJUcmVlQXRUaW1lKE1vbm90b25p
Y1RpbWUpOwpAQCAtMTA3NCw5ICsxMDg1LDggQEAgcHVibGljOgogICAgIE5TRGljdGlvbmFyeSAq
ZGF0YURldGVjdGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2RhdGFEZXRlY3Rpb25Db250
ZXh0LmdldCgpOyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKSAmJiAhRU5B
QkxFKFVJX1BST0NFU1NfUERGX0hVRCkKICAgICB2b2lkIHNhdmVQREZUb0ZpbGVJbkRvd25sb2Fk
c0ZvbGRlcihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25zdCBVUkwmIG9yaWdp
bmF0aW5nVVJMLCBjb25zdCB1aW50OF90KiBkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUpOwotCi0j
aWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRP
cGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUs
IEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgbG9uZyBzaXpl
LCBjb25zdCBTdHJpbmcmIHBkZlVVSUQpOwogI2VuZGlmCiAKQEAgLTE3OTEsNiArMTgwMSwxMCBA
QCBwcml2YXRlOgogCiAgICAgV2ViQ29yZTo6Q29sb3IgbV91bmRlcmxheUNvbG9yOwogCisjaWYg
RU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBIYXNoTWFwPFBERlBsdWdpbklkZW50aWZp
ZXIsIFdlYWtQdHI8UERGUGx1Z2luPj4gbV9wZGZQbHVnSW5zV2l0aEhVRDsKKyNlbmRpZgorCiAg
ICAgYm9vbCBtX2lzSW5SZWRvIHsgZmFsc2UgfTsKICAgICBib29sIG1faXNDbG9zZWQgeyBmYWxz
ZSB9OwogICAgIGJvb2wgbV90YWJUb0xpbmtzIHsgZmFsc2UgfTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2
aXNpb24gMjY2Mjg0KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNTc2LDYgKzU3NiwxMyBAQCBHZW5lcmF0
ZVN5bnRoZXRpY0VkaXRpbmdDb21tYW5kKGVudW06dWluCiAKICAgICBTZXREZWZlcnNMb2FkaW5n
KGJvb2wgZGVmZXJzTG9hZGluZykKIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisg
ICAgWm9vbVBERkluKFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQorICAg
IFpvb21QREZPdXQoV2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCisgICAg
U2F2ZVBERihXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikgLT4gKFN0cmlu
ZyBmaWxlbmFtZSwgVVJMIHVybCwgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEpIEFzeW5jCisgICAg
T3BlblBERldpdGhQcmV2aWV3KFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVy
KSAtPiAoU3RyaW5nIGZpbGVuYW1lLCBzdHJ1Y3QgV2ViS2l0OjpGcmFtZUluZm9EYXRhIGZyYW1l
SW5mbywgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEsIFN0cmluZyB1dWlkKSBBc3luYworI2VuZGlm
CisKICAgICBVcGRhdGVDdXJyZW50TW9kaWZpZXJTdGF0ZShPcHRpb25TZXQ8V2ViQ29yZTo6UGxh
dGZvcm1FdmVudDo6TW9kaWZpZXI+IG1vZGlmaWVycykKICAgICBTaW11bGF0ZURldmljZU9yaWVu
dGF0aW9uQ2hhbmdlKGRvdWJsZSBhbHBoYSwgZG91YmxlIGJldGEsIGRvdWJsZSBnYW1tYSkKIApJ
bmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBh
Z2VNYWMubW0JKHJldmlzaW9uIDI2NjI4NCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBA
CiAjaW1wb3J0ICJFZGl0aW5nUmFuZ2UuaCIKICNpbXBvcnQgIkVkaXRvclN0YXRlLmgiCiAjaW1w
b3J0ICJGb250SW5mby5oIgorI2ltcG9ydCAiRnJhbWVJbmZvRGF0YS5oIgogI2ltcG9ydCAiSW5q
ZWN0ZWRCdW5kbGVIaXRUZXN0UmVzdWx0LmgiCiAjaW1wb3J0ICJQREZLaXRJbXBvcnRzLmgiCiAj
aW1wb3J0ICJQREZQbHVnaW4uaCIKQEAgLTEwNTEsNyArMTA1Miw2MiBAQCB2b2lkIFdlYlBhZ2U6
OnNldEFjY2VudENvbG9yKFdlYkNvcmU6OkNvCiAgICAgW05TQXBwIF9zZXRBY2NlbnRDb2xvcjpj
b2xvci5pc1ZhbGlkKCkgPyBXZWJDb3JlOjpuc0NvbG9yKGNvbG9yKSA6IG5pbF07CiB9CiAKLSNl
bmRpZgorI2VuZGlmIC8vIEhBVkUoQVBQX0FDQ0VOVF9DT0xPUlMpCisKKyNpZiBFTkFCTEUoVUlf
UFJPQ0VTU19QREZfSFVEKQorCit2b2lkIFdlYlBhZ2U6Onpvb21QREZJbihQREZQbHVnaW5JZGVu
dGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgYXV0byBwZGZQbHVnaW4gPSBtX3BkZlBsdWdJbnNX
aXRoSFVELmdldChpZGVudGlmaWVyKTsKKyAgICBpZiAoIXBkZlBsdWdpbikKKyAgICAgICAgcmV0
dXJuOworICAgIHBkZlBsdWdpbi0+em9vbUluKCk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6em9vbVBE
Rk91dChQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgYXV0byBwZGZQbHVn
aW4gPSBtX3BkZlBsdWdJbnNXaXRoSFVELmdldChpZGVudGlmaWVyKTsKKyAgICBpZiAoIXBkZlBs
dWdpbikKKyAgICAgICAgcmV0dXJuOworICAgIHBkZlBsdWdpbi0+em9vbU91dCgpOworfQorCit2
b2lkIFdlYlBhZ2U6OnNhdmVQREYoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFVSTCYsIGNvbnN0IElQQzo6
RGF0YVJlZmVyZW5jZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGF1dG8gcGRmUGx1
Z2luID0gbV9wZGZQbHVnSW5zV2l0aEhVRC5nZXQoaWRlbnRpZmllcik7CisgICAgaWYgKCFwZGZQ
bHVnaW4pCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0sIHsgfSwgeyB9KTsK
KyAgICBwZGZQbHVnaW4tPnNhdmUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCit2
b2lkIFdlYlBhZ2U6Om9wZW5QREZXaXRoUHJldmlldyhQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50
aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJiwgRnJhbWVJbmZvRGF0
YSYmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKK3sKKyAgICBhdXRvIHBkZlBsdWdpbiA9IG1fcGRmUGx1Z0luc1dpdGhIVUQu
Z2V0KGlkZW50aWZpZXIpOworICAgIGlmICghcGRmUGx1Z2luKQorICAgICAgICByZXR1cm4gY29t
cGxldGlvbkhhbmRsZXIoeyB9LCB7IH0sIHsgfSwgeyB9KTsKKyAgICBwZGZQbHVnaW4tPm9wZW5X
aXRoUHJldmlldyhXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgV2ViUGFn
ZTo6Y3JlYXRlUERGSFVEKFBERlBsdWdpbiYgcGx1Z2luLCBjb25zdCBJbnRSZWN0JiBib3VuZGlu
Z0JveCkKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fcGRmUGx1Z0luc1dpdGhIVUQuYWRkKHBs
dWdpbi5pZGVudGlmaWVyKCksIG1ha2VXZWFrUHRyKHBsdWdpbikpOworICAgIGlmIChhZGRSZXN1
bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDcmVh
dGVQREZIVUQocGx1Z2luLmlkZW50aWZpZXIoKSwgYm91bmRpbmdCb3gpKTsKK30KKwordm9pZCBX
ZWJQYWdlOjp1cGRhdGVQREZIVURMb2NhdGlvbihQREZQbHVnaW4mIHBsdWdpbiwgY29uc3QgSW50
UmVjdCYgYm91bmRpbmdCb3gpCit7CisgICAgaWYgKG1fcGRmUGx1Z0luc1dpdGhIVUQuY29udGFp
bnMocGx1Z2luLmlkZW50aWZpZXIoKSkpCisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6VXBkYXRlUERGSFVETG9jYXRpb24ocGx1Z2luLmlkZW50aWZpZXIoKSwgYm91bmRpbmdC
b3gpKTsKK30KKwordm9pZCBXZWJQYWdlOjpyZW1vdmVQREZIVUQoUERGUGx1Z2luJiBwbHVnaW4p
Cit7CisgICAgaWYgKG1fcGRmUGx1Z0luc1dpdGhIVUQucmVtb3ZlKHBsdWdpbi5pZGVudGlmaWVy
KCkpKQorICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlbW92ZVBERkhVRChw
bHVnaW4uaWRlbnRpZmllcigpKSk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoVUlfUFJPQ0VTU19Q
REZfSFVEKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIApJbmRleDogVG9vbHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjY2Mjg0KQorKysgVG9v
bHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjAtMDgtMjgg
IEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBN
b3ZlIFBERiBoZWFkcy11cCBkaXNwbGF5IHRvIFVJIHByb2Nlc3Mgb24gbWFjT1MKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTc4MAorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vNTg3MTU4NDc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLUERG
Vmlldy5tbToKKyAgICAgICAgKHBkZkRhdGEpOgorICAgICAgICAoVEVTVCk6CisgICAgICAgIChj
aGVja0ZyYW1lKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RVSURlbGVnYXRl
Lmg6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0VUlEZWxlZ2F0ZS5tbToKKyAg
ICAgICAgKC1bVGVzdFVJRGVsZWdhdGUgX3dlYlZpZXc6c2F2ZURhdGFUb0ZpbGU6c3VnZ2VzdGVk
RmlsZW5hbWU6bWltZVR5cGU6b3JpZ2luYXRpbmdVUkw6XSk6CisKIDIwMjAtMDgtMjggIEpvbmF0
aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIFt3ZWJraXRjb3JlcHld
IE1vdmUgVGltZW91dCB0byB3ZWJraXRjb3JlcHkgKFBhcnQgMykKSW5kZXg6IFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tQREZWaWV3Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tQREZWaWV3Lm1tCShyZXZpc2lv
biAyNjYyODQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLUERG
Vmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDI2IEBACiAjaW1wb3J0ICJQbGF0
Zm9ybVV0aWxpdGllcy5oIgogI2ltcG9ydCAiVGVzdC5oIgogI2ltcG9ydCAiVGVzdE5hdmlnYXRp
b25EZWxlZ2F0ZS5oIgorI2ltcG9ydCAiVGVzdFVJRGVsZWdhdGUuaCIKKyNpbXBvcnQgIlRlc3RV
UkxTY2hlbWVIYW5kbGVyLmgiCisjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0IDxX
ZWJLaXQvV0tXZWJWaWV3Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlv
blByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlRm9yVGVzdGluZy5o
PgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCi0jaWYgSEFWRShQREZLSVQpICYmIFBMQVRG
T1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCisjaW1wb3J0IDxDYXJib24vQ2FyYm9uLmg+Cisj
ZW5kaWYKKworI2lmIFBMQVRGT1JNKElPUykgfHwgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkK
K3N0YXRpYyBOU0RhdGEgKnBkZkRhdGEoKQoreworICAgIHJldHVybiBbTlNEYXRhIGRhdGFXaXRo
Q29udGVudHNPZlVSTDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAidGVz
dCIgd2l0aEV4dGVuc2lvbjpAInBkZiIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNv
dXJjZXMiXV07Cit9CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPUykKIAogQGludGVyZmFjZSBQ
REZIb3N0Vmlld0NvbnRyb2xsZXIgOiBVSVZpZXdDb250cm9sbGVyCiArICh2b2lkKWNyZWF0ZUhv
c3RWaWV3Oih2b2lkKF4pKGlkIGhvc3RWaWV3Q29udHJvbGxlcikpY2FsbGJhY2sgZm9yRXh0ZW5z
aW9uSWRlbnRpZmllcjooTlNTdHJpbmcgKilleHRlbnNpb25JZGVudGlmaWVyOwpAQCAtMTAxLDcg
KzExNiw3IEBAIFRFU1QoV2ViS2l0LCBXS1BERlZpZXdMb3Nlc0FwcGxpY2F0aW9uRm8KICAgICBS
ZXRhaW5QdHI8V0tXZWJWaWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNv
bmZpZ3VyYXRpb24uZ2V0KCldKTsKIAogICAgIC8vIExvYWQgYSBQREYsIHNvIHdlIGluc3RhbGwg
YSBXS1BERlZpZXcuCi0gICAgW3dlYlZpZXcgbG9hZERhdGE6W05TRGF0YSBkYXRhV2l0aENvbnRl
bnRzT2ZVUkw6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInRlc3QiIHdp
dGhFeHRlbnNpb246QCJwZGYiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2Vz
Il1dIE1JTUVUeXBlOkAiYXBwbGljYXRpb24vcGRmIiBjaGFyYWN0ZXJFbmNvZGluZ05hbWU6QCIi
IGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwczovL3d3dy5hcHBsZS5jb20vMCJd
XTsKKyAgICBbd2ViVmlldyBsb2FkRGF0YTpwZGZEYXRhKCkgTUlNRVR5cGU6QCJhcHBsaWNhdGlv
bi9wZGYiIGNoYXJhY3RlckVuY29kaW5nTmFtZTpAIiIgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0
cmluZzpAImh0dHBzOi8vd3d3LmFwcGxlLmNvbS8wIl1dOwogICAgIFt3ZWJWaWV3IF90ZXN0X3dh
aXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKIAogICAgIC8vIEdvIGludG8gdGhlIGJhY2tncm91
bmQgYW5kIHBhcmVudCB0aGUgV0tXZWJWaWV3LgpAQCAtMTMyLDMgKzE0NywyMDggQEAgVEVTVChX
ZWJLaXQsIFdLUERGVmlld0xvc2VzQXBwbGljYXRpb25GbwogfQogCiAjZW5kaWYKKworI2lmIEVO
QUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKK3N0YXRpYyB2b2lkIGNoZWNrRnJhbWUoTlNSZWN0
IGZyYW1lLCBDR0Zsb2F0IHgsIENHRmxvYXQgeSwgQ0dGbG9hdCB3aWR0aCwgQ0dGbG9hdCBoZWln
aHQpCit7CisgICAgRVhQRUNUX0VRKGZyYW1lLm9yaWdpbi54LCB4KTsKKyAgICBFWFBFQ1RfRVEo
ZnJhbWUub3JpZ2luLnksIHkpOworICAgIEVYUEVDVF9FUShmcmFtZS5zaXplLndpZHRoLCB3aWR0
aCk7CisgICAgRVhQRUNUX0VRKGZyYW1lLnNpemUuaGVpZ2h0LCBoZWlnaHQpOworfQorCitURVNU
KFBERkhVRCwgTWFpblJlc291cmNlUERGKQoreworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcg
PSBbW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwg
ODAwLCA2MDApIGNvbmZpZ3VyYXRpb246W1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIG5ld10gYXV0
b3JlbGVhc2VdXSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZpZXcgbG9hZERhdGE6cGRmRGF0YSgp
IE1JTUVUeXBlOkAiYXBwbGljYXRpb24vcGRmIiBjaGFyYWN0ZXJFbmNvZGluZ05hbWU6QCIiIGJh
c2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwczovL3d3dy5hcHBsZS5jb20vdGVzdFBh
dGgiXV07CisgICAgRVhQRUNUX0VRKHdlYlZpZXcuX3BkZkhVRHMuY291bnQsIDB1KTsKKyAgICBb
d2ViVmlldyBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07CisgICAgRVhQRUNUX0VR
KHdlYlZpZXcuX3BkZkhVRHMuY291bnQsIDF1KTsKKyAgICBjaGVja0ZyYW1lKHdlYlZpZXcuX3Bk
ZkhVRHMuYW55T2JqZWN0LmZyYW1lLCAwLCAwLCA4MDAsIDYwMCk7CisgICAgCisgICAgVGVzdFVJ
RGVsZWdhdGUgKmRlbGVnYXRlID0gW1tUZXN0VUlEZWxlZ2F0ZSBuZXddIGF1dG9yZWxlYXNlXTsK
KyAgICB3ZWJWaWV3LlVJRGVsZWdhdGUgPSBkZWxlZ2F0ZTsKKyAgICBfX2Jsb2NrIGJvb2wgc2F2
ZVJlcXVlc3RSZWNlaXZlZCA9IGZhbHNlOworICAgIGRlbGVnYXRlLnNhdmVEYXRhVG9GaWxlID0g
XihXS1dlYlZpZXcgKndlYlZpZXdGcm9tRGVsZWdhdGUsIE5TRGF0YSAqZGF0YSwgTlNTdHJpbmcg
KnN1Z2dlc3RlZEZpbGVuYW1lLCBOU1N0cmluZyAqbWltZVR5cGUsIE5TVVJMICpvcmlnaW5hdGlu
Z1VSTCkgeworICAgICAgICBFWFBFQ1RfRVEod2ViVmlldywgd2ViVmlld0Zyb21EZWxlZ2F0ZSk7
CisgICAgICAgIEVYUEVDVF9UUlVFKFtkYXRhIGlzRXF1YWxUb0RhdGE6cGRmRGF0YSgpXSk7Cisg
ICAgICAgIEVYUEVDVF9XS19TVFJFUShzdWdnZXN0ZWRGaWxlbmFtZSwgInRlc3RQYXRoLnBkZiIp
OworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEobWltZVR5cGUsICJhcHBsaWNhdGlvbi9wZGYiKTsK
KyAgICAgICAgc2F2ZVJlcXVlc3RSZWNlaXZlZCA9IHRydWU7CisgICAgfTsKKyAgICBbW3dlYlZp
ZXcgX3BkZkhVRHNdLmFueU9iamVjdCBwZXJmb3JtU2VsZWN0b3I6TlNTZWxlY3RvckZyb21TdHJp
bmcoQCJfcGVyZm9ybUFjdGlvbkZvckNvbnRyb2w6Iikgd2l0aE9iamVjdDpAImFycm93LmRvd24u
Y2lyY2xlIl07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZzYXZlUmVxdWVzdFJlY2Vp
dmVkKTsKKworICAgIEVYUEVDVF9FUSh3ZWJWaWV3Ll9wZGZIVURzLmNvdW50LCAxdSk7CisgICAg
W3dlYlZpZXcgX2tpbGxXZWJDb250ZW50UHJvY2Vzc107CisgICAgd2hpbGUgKHdlYlZpZXcuX3Bk
ZkhVRHMuY291bnQpCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7
Cit9CisKK1RFU1QoUERGSFVELCBNb3ZlSUZyYW1lKQoreworICAgIFRlc3RVUkxTY2hlbWVIYW5k
bGVyICpoYW5kbGVyID0gW1tUZXN0VVJMU2NoZW1lSGFuZGxlciBuZXddIGF1dG9yZWxlYXNlXTsK
KyAgICBoYW5kbGVyLnN0YXJ0VVJMU2NoZW1lVGFza0hhbmRsZXIgPSBeKFdLV2ViVmlldyAqLCBp
ZDxXS1VSTFNjaGVtZVRhc2s+IHRhc2spIHsKKyAgICAgICAgaWYgKFt0YXNrLnJlcXVlc3QuVVJM
LnBhdGggaXNFcXVhbFRvU3RyaW5nOkAiL21haW4uaHRtbCJdKSB7CisgICAgICAgICAgICBOU1VS
TFJlc3BvbnNlICpyZXNwb25zZSA9IFtbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJM
OnRhc2sucmVxdWVzdC5VUkwgTUlNRVR5cGU6QCJ0ZXh0L2h0bWwiIGV4cGVjdGVkQ29udGVudExl
bmd0aDowIHRleHRFbmNvZGluZ05hbWU6bmlsXSBhdXRvcmVsZWFzZV07CisgICAgICAgICAgICBj
b25zdCBjaGFyKiBodG1sID0gIjxici8+PGlmcmFtZSBzcmM9J3Rlc3QucGRmJyBpZD0ncGRmZnJh
bWUnPjwvaWZyYW1lPiI7CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6cmVz
cG9uc2VdOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZURhdGE6W05TRGF0YSBkYXRhV2l0
aEJ5dGVzOmh0bWwgbGVuZ3RoOnN0cmxlbihodG1sKV1dOworICAgICAgICAgICAgW3Rhc2sgZGlk
RmluaXNoXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEVYUEVDVF9XS19TVFJFUSh0
YXNrLnJlcXVlc3QuVVJMLnBhdGgsICIvdGVzdC5wZGYiKTsKKyAgICAgICAgICAgIE5TRGF0YSAq
ZGF0YSA9IHBkZkRhdGEoKTsKKyAgICAgICAgICAgIE5TVVJMUmVzcG9uc2UgKnJlc3BvbnNlID0g
W1tbTlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGFzay5yZXF1ZXN0LlVSTCBNSU1F
VHlwZTpAImFwcGxpY2F0aW9uL3BkZiIgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOmRhdGEubGVuZ3Ro
IHRleHRFbmNvZGluZ05hbWU6bmlsXSBhdXRvcmVsZWFzZV07CisgICAgICAgICAgICBbdGFzayBk
aWRSZWNlaXZlUmVzcG9uc2U6cmVzcG9uc2VdOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2
ZURhdGE6ZGF0YV07CisgICAgICAgICAgICBbdGFzayBkaWRGaW5pc2hdOworICAgICAgICB9Cisg
ICAgfTsKKworICAgIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbW1dL
V2ViVmlld0NvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07CisgICAgW2NvbmZpZ3VyYXRp
b24gc2V0VVJMU2NoZW1lSGFuZGxlcjpoYW5kbGVyIGZvclVSTFNjaGVtZTpAInRlc3QiXTsKKyAg
ICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3ID0gW1tbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3Vy
YXRpb25dIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1
ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAidGVzdDovLy9tYWluLmh0
bWwiXV1dOworICAgIEVYUEVDVF9FUSh3ZWJWaWV3Ll9wZGZIVURzLmNvdW50LCAwdSk7CisgICAg
W3dlYlZpZXcgX3Rlc3Rfd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOworICAgIEVYUEVDVF9F
USh3ZWJWaWV3Ll9wZGZIVURzLmNvdW50LCAxdSk7CisgICAgY2hlY2tGcmFtZSh3ZWJWaWV3Ll9w
ZGZIVURzLmFueU9iamVjdC5mcmFtZSwgMTAsIDI4LCAzMDAsIDE1MCk7CisKKyAgICBbd2ViVmll
dyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJwZGZmcmFtZS53aWR0aD00MDAiIGNvbXBsZXRpb25IYW5k
bGVyOm5pbF07CisgICAgd2hpbGUgKHdlYlZpZXcuX3BkZkhVRHMuYW55T2JqZWN0LmZyYW1lLnNp
emUud2lkdGggIT0gNDAwKQorICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9v
cCgpOworICAgIGNoZWNrRnJhbWUod2ViVmlldy5fcGRmSFVEcy5hbnlPYmplY3QuZnJhbWUsIDEw
LCAyOCwgNDAwLCAxNTApOworCisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAidmFy
IGZyYW1lUmVmZXJlbmNlID0gcGRmZnJhbWU7IGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQocGRm
ZnJhbWUpIiBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOworICAgIHdoaWxlICh3ZWJWaWV3Ll9wZGZI
VURzLmNvdW50KQorICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgpOwor
ICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkuYXBwZW5kQ2hp
bGQoZnJhbWVSZWZlcmVuY2UpIiBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOworICAgIHdoaWxlICgh
d2ViVmlldy5fcGRmSFVEcy5jb3VudCkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3Bp
blJ1bkxvb3AoKTsKKyAgICBFWFBFQ1RfRVEod2ViVmlldy5fcGRmSFVEcy5jb3VudCwgMXUpOwor
ICAgIGNoZWNrRnJhbWUod2ViVmlldy5fcGRmSFVEcy5hbnlPYmplY3QuZnJhbWUsIDAsIDAsIDAs
IDApOworICAgIHdoaWxlICh3ZWJWaWV3Ll9wZGZIVURzLmFueU9iamVjdC5mcmFtZS5zaXplLndp
ZHRoICE9IDQwMCkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoKTsK
KyAgICBFWFBFQ1RfRVEod2ViVmlldy5fcGRmSFVEcy5jb3VudCwgMXUpOworICAgIGNoZWNrRnJh
bWUod2ViVmlldy5fcGRmSFVEcy5hbnlPYmplY3QuZnJhbWUsIDEwLCAyOCwgNDAwLCAxNTApOwor
CisgICAgd2ViVmlldy5wYWdlWm9vbSA9IDEuNDsKKyAgICB3aGlsZSAod2ViVmlldy5fcGRmSFVE
cy5hbnlPYmplY3QuZnJhbWUuc2l6ZS53aWR0aCAhPSA1NjApCisgICAgICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisgICAgRVhQRUNUX0VRKHdlYlZpZXcuX3BkZkhVRHMu
Y291bnQsIDF1KTsKKyAgICBjaGVja0ZyYW1lKHdlYlZpZXcuX3BkZkhVRHMuYW55T2JqZWN0LmZy
YW1lLCAxNCwgNDAsIDU2MCwgMjEwKTsKK30KKworVEVTVChQREZIVUQsIE5lc3RlZElGcmFtZXMp
Cit7CisgICAgVGVzdFVSTFNjaGVtZUhhbmRsZXIgKmhhbmRsZXIgPSBbW1Rlc3RVUkxTY2hlbWVI
YW5kbGVyIG5ld10gYXV0b3JlbGVhc2VdOworICAgIGhhbmRsZXIuc3RhcnRVUkxTY2hlbWVUYXNr
SGFuZGxlciA9IF4oV0tXZWJWaWV3ICosIGlkPFdLVVJMU2NoZW1lVGFzaz4gdGFzaykgeworICAg
ICAgICBOU1VSTFJlc3BvbnNlICpodG1sUmVzcG9uc2UgPSBbW1tOU1VSTFJlc3BvbnNlIGFsbG9j
XSBpbml0V2l0aFVSTDp0YXNrLnJlcXVlc3QuVVJMIE1JTUVUeXBlOkAidGV4dC9odG1sIiBleHBl
Y3RlZENvbnRlbnRMZW5ndGg6MCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0gYXV0b3JlbGVhc2VdOwor
ICAgICAgICBpZiAoW3Rhc2sucmVxdWVzdC5VUkwucGF0aCBpc0VxdWFsVG9TdHJpbmc6QCIvbWFp
bi5odG1sIl0pIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGh0bWwgPSAiPGlmcmFtZSBzcmM9
J2ZyYW1lLmh0bWwnIGlkPSdwYXJlbnRmcmFtZSc+PC9pZnJhbWU+IjsKKyAgICAgICAgICAgIFt0
YXNrIGRpZFJlY2VpdmVSZXNwb25zZTpodG1sUmVzcG9uc2VdOworICAgICAgICAgICAgW3Rhc2sg
ZGlkUmVjZWl2ZURhdGE6W05TRGF0YSBkYXRhV2l0aEJ5dGVzOmh0bWwgbGVuZ3RoOnN0cmxlbiho
dG1sKV1dOworICAgICAgICAgICAgW3Rhc2sgZGlkRmluaXNoXTsKKyAgICAgICAgfSBlbHNlIGlm
IChbdGFzay5yZXF1ZXN0LlVSTC5wYXRoIGlzRXF1YWxUb1N0cmluZzpAIi9mcmFtZS5odG1sIl0p
IHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGh0bWwgPSAiPGlmcmFtZSBzcmM9J3Rlc3QucGRm
Jz48L2lmcmFtZT4iOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3BvbnNlOmh0bWxS
ZXNwb25zZV07CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpbTlNEYXRhIGRhdGFX
aXRoQnl0ZXM6aHRtbCBsZW5ndGg6c3RybGVuKGh0bWwpXV07CisgICAgICAgICAgICBbdGFzayBk
aWRGaW5pc2hdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgRVhQRUNUX1dLX1NUUkVR
KHRhc2sucmVxdWVzdC5VUkwucGF0aCwgIi90ZXN0LnBkZiIpOworICAgICAgICAgICAgTlNEYXRh
ICpkYXRhID0gcGRmRGF0YSgpOworICAgICAgICAgICAgTlNVUkxSZXNwb25zZSAqcmVzcG9uc2Ug
PSBbW1tOU1VSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0YXNrLnJlcXVlc3QuVVJMIE1J
TUVUeXBlOkAiYXBwbGljYXRpb24vcGRmIiBleHBlY3RlZENvbnRlbnRMZW5ndGg6ZGF0YS5sZW5n
dGggdGV4dEVuY29kaW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgICAgIFt0YXNr
IGRpZFJlY2VpdmVSZXNwb25zZTpyZXNwb25zZV07CisgICAgICAgICAgICBbdGFzayBkaWRSZWNl
aXZlRGF0YTpkYXRhXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZEZpbmlzaF07CisgICAgICAgIH0K
KyAgICB9OworCisgICAgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IFtb
V0tXZWJWaWV3Q29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBbY29uZmlndXJh
dGlvbiBzZXRVUkxTY2hlbWVIYW5kbGVyOmhhbmRsZXIgZm9yVVJMU2NoZW1lOkAidGVzdCJdOwor
ICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcgPSBbW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmln
dXJhdGlvbl0gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJl
cXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJ0ZXN0Oi8vL21haW4u
aHRtbCJdXV07CisgICAgRVhQRUNUX0VRKHdlYlZpZXcuX3BkZkhVRHMuY291bnQsIDB1KTsKKyAg
ICBbd2ViVmlldyBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07CisgICAgRVhQRUNU
X0VRKHdlYlZpZXcuX3BkZkhVRHMuY291bnQsIDF1KTsKKyAgICBjaGVja0ZyYW1lKHdlYlZpZXcu
X3BkZkhVRHMuYW55T2JqZWN0LmZyYW1lLCAyMCwgMjAsIDMwMCwgMTUwKTsKKyAgICAKKyAgICBb
d2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHBh
cmVudGZyYW1lKSIgY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKKyAgICB3aGlsZSAod2ViVmlldy5f
cGRmSFVEcy5jb3VudCkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3Ao
KTsKK30KKworVEVTVChQREZIVUQsIElGcmFtZTNEVHJhbnNmb3JtKQoreworICAgIFRlc3RVUkxT
Y2hlbWVIYW5kbGVyICpoYW5kbGVyID0gW1tUZXN0VVJMU2NoZW1lSGFuZGxlciBuZXddIGF1dG9y
ZWxlYXNlXTsKKyAgICBoYW5kbGVyLnN0YXJ0VVJMU2NoZW1lVGFza0hhbmRsZXIgPSBeKFdLV2Vi
VmlldyAqLCBpZDxXS1VSTFNjaGVtZVRhc2s+IHRhc2spIHsKKyAgICAgICAgTlNVUkxSZXNwb25z
ZSAqaHRtbFJlc3BvbnNlID0gW1tbTlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGFz
ay5yZXF1ZXN0LlVSTCBNSU1FVHlwZTpAInRleHQvaHRtbCIgZXhwZWN0ZWRDb250ZW50TGVuZ3Ro
OjAgdGV4dEVuY29kaW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgaWYgKFt0YXNr
LnJlcXVlc3QuVVJMLnBhdGggaXNFcXVhbFRvU3RyaW5nOkAiL21haW4uaHRtbCJdKSB7CisgICAg
ICAgICAgICBjb25zdCBjaGFyKiBodG1sID0gIjxpZnJhbWUgc3JjPSd0ZXN0LnBkZicgaGVpZ2h0
PTUwMCB3aWR0aD01MDAgc3R5bGU9J3RyYW5zZm9ybTpyb3RhdGVZKDIzNWRlZyk7Jz48L2lmcmFt
ZT4iOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3BvbnNlOmh0bWxSZXNwb25zZV07
CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6
aHRtbCBsZW5ndGg6c3RybGVuKGh0bWwpXV07CisgICAgICAgICAgICBbdGFzayBkaWRGaW5pc2hd
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgRVhQRUNUX1dLX1NUUkVRKHRhc2sucmVx
dWVzdC5VUkwucGF0aCwgIi90ZXN0LnBkZiIpOworICAgICAgICAgICAgTlNEYXRhICpkYXRhID0g
cGRmRGF0YSgpOworICAgICAgICAgICAgTlNVUkxSZXNwb25zZSAqcmVzcG9uc2UgPSBbW1tOU1VS
TFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0YXNrLnJlcXVlc3QuVVJMIE1JTUVUeXBlOkAi
YXBwbGljYXRpb24vcGRmIiBleHBlY3RlZENvbnRlbnRMZW5ndGg6ZGF0YS5sZW5ndGggdGV4dEVu
Y29kaW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2Vp
dmVSZXNwb25zZTpyZXNwb25zZV07CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpk
YXRhXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZEZpbmlzaF07CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IFtbV0tXZWJWaWV3
Q29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRV
UkxTY2hlbWVIYW5kbGVyOmhhbmRsZXIgZm9yVVJMU2NoZW1lOkAidGVzdCJdOworICAgIFRlc3RX
S1dlYlZpZXcgKndlYlZpZXcgPSBbW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
Ok5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbl0g
YXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVx
dWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJ0ZXN0Oi8vL21haW4uaHRtbCJdXV07
CisgICAgRVhQRUNUX0VRKHdlYlZpZXcuX3BkZkhVRHMuY291bnQsIDB1KTsKKyAgICBbd2ViVmll
dyBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07CisgICAgRVhQRUNUX0VRKHdlYlZp
ZXcuX3BkZkhVRHMuY291bnQsIDF1KTsKKyAgICBjaGVja0ZyYW1lKHdlYlZpZXcuX3BkZkhVRHMu
YW55T2JqZWN0LmZyYW1lLCA0MDMsIDEwLCA1MDAsIDUwMCk7Cit9CisKK1RFU1QoUERGSFVELCBN
dWx0aXBsZUlGcmFtZXMpCit7CisgICAgVGVzdFVSTFNjaGVtZUhhbmRsZXIgKmhhbmRsZXIgPSBb
W1Rlc3RVUkxTY2hlbWVIYW5kbGVyIG5ld10gYXV0b3JlbGVhc2VdOworICAgIGhhbmRsZXIuc3Rh
cnRVUkxTY2hlbWVUYXNrSGFuZGxlciA9IF4oV0tXZWJWaWV3ICosIGlkPFdLVVJMU2NoZW1lVGFz
az4gdGFzaykgeworICAgICAgICBOU1VSTFJlc3BvbnNlICpodG1sUmVzcG9uc2UgPSBbW1tOU1VS
TFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0YXNrLnJlcXVlc3QuVVJMIE1JTUVUeXBlOkAi
dGV4dC9odG1sIiBleHBlY3RlZENvbnRlbnRMZW5ndGg6MCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0g
YXV0b3JlbGVhc2VdOworICAgICAgICBpZiAoW3Rhc2sucmVxdWVzdC5VUkwucGF0aCBpc0VxdWFs
VG9TdHJpbmc6QCIvbWFpbi5odG1sIl0pIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGh0bWwg
PSAiPGlmcmFtZSBzcmM9J3Rlc3QucGRmJyBoZWlnaHQ9MTAwIHdpZHRoPTE1MD48L2lmcmFtZT48
aWZyYW1lIHNyYz0ndGVzdC5wZGYnIGhlaWdodD0xMjMgd2lkdGg9MTM0PjwvaWZyYW1lPiI7Cisg
ICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6aHRtbFJlc3BvbnNlXTsKKyAgICAg
ICAgICAgIFt0YXNrIGRpZFJlY2VpdmVEYXRhOltOU0RhdGEgZGF0YVdpdGhCeXRlczpodG1sIGxl
bmd0aDpzdHJsZW4oaHRtbCldXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZEZpbmlzaF07CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBFWFBFQ1RfV0tfU1RSRVEodGFzay5yZXF1ZXN0LlVS
TC5wYXRoLCAiL3Rlc3QucGRmIik7CisgICAgICAgICAgICBOU0RhdGEgKmRhdGEgPSBwZGZEYXRh
KCk7CisgICAgICAgICAgICBOU1VSTFJlc3BvbnNlICpyZXNwb25zZSA9IFtbW05TVVJMUmVzcG9u
c2UgYWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVxdWVzdC5VUkwgTUlNRVR5cGU6QCJhcHBsaWNh
dGlvbi9wZGYiIGV4cGVjdGVkQ29udGVudExlbmd0aDpkYXRhLmxlbmd0aCB0ZXh0RW5jb2RpbmdO
YW1lOm5pbF0gYXV0b3JlbGVhc2VdOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3Bv
bnNlOnJlc3BvbnNlXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVEYXRhOmRhdGFdOwor
ICAgICAgICAgICAgW3Rhc2sgZGlkRmluaXNoXTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBX
S1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0gW1tXS1dlYlZpZXdDb25maWd1
cmF0aW9uIG5ld10gYXV0b3JlbGVhc2VdOworICAgIFtjb25maWd1cmF0aW9uIHNldFVSTFNjaGVt
ZUhhbmRsZXI6aGFuZGxlciBmb3JVUkxTY2hlbWU6QCJ0ZXN0Il07CisgICAgVGVzdFdLV2ViVmll
dyAqd2ViVmlldyA9IFtbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtl
UmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uXSBhdXRvcmVs
ZWFzZV07CisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0
aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAInRlc3Q6Ly8vbWFpbi5odG1sIl1dXTsKKyAgICBF
WFBFQ1RfRVEod2ViVmlldy5fcGRmSFVEcy5jb3VudCwgMHUpOworICAgIFt3ZWJWaWV3IF90ZXN0
X3dhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKKyAgICBFWFBFQ1RfRVEod2ViVmlldy5fcGRm
SFVEcy5jb3VudCwgMnUpOworICAgIGJvb2wgaGFkTGVmdEZyYW1lID0gZmFsc2U7CisgICAgYm9v
bCBoYWRSaWdodEZyYW1lID0gZmFsc2U7CisgICAgZm9yIChOU1ZpZXcgKmh1ZCBpbiB3ZWJWaWV3
Ll9wZGZIVURzKSB7CisgICAgICAgIGlmIChodWQuZnJhbWUub3JpZ2luLnggPT0gMTApIHsKKyAg
ICAgICAgICAgIGNoZWNrRnJhbWUoaHVkLmZyYW1lLCAxMCwgMzMsIDE1MCwgMTAwKTsKKyAgICAg
ICAgICAgIGhhZExlZnRGcmFtZSA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBjaGVja0ZyYW1lKGh1ZC5mcmFtZSwgMTY0LCAxMCwgMTM0LCAxMjMpOworICAgICAgICAgICAg
aGFkUmlnaHRGcmFtZSA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgRVhQRUNUX1RSVUUo
aGFkTGVmdEZyYW1lKTsKKyAgICBFWFBFQ1RfVFJVRShoYWRSaWdodEZyYW1lKTsKK30KKworI2Vu
ZGlmCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RVSURlbGVnYXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0VUlEZWxlZ2F0ZS5oCShy
ZXZpc2lvbiAyNjYyODQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RVSURlbGVn
YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpZiBQTEFURk9STShNQUMp
CiBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgdm9pZCAoXmdldENvbnRleHRNZW51RnJvbVBy
b3Bvc2VkTWVudSkoTlNNZW51ICosIF9XS0NvbnRleHRNZW51RWxlbWVudEluZm8gKiwgaWQgPE5T
U2VjdXJlQ29kaW5nPiwgdm9pZCAoXikoTlNNZW51ICopKTsKICNlbmRpZgorQHByb3BlcnR5IChu
b25hdG9taWMsIGNvcHkpIHZvaWQgKF5zYXZlRGF0YVRvRmlsZSkoV0tXZWJWaWV3ICosIE5TRGF0
YSAqLCBOU1N0cmluZyAqLCBOU1N0cmluZyAqLCBOU1VSTCAqKTsKIAogLSAoTlNTdHJpbmcgKil3
YWl0Rm9yQWxlcnQ7CiAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFVJRGVs
ZWdhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0VUlE
ZWxlZ2F0ZS5tbQkocmV2aXNpb24gMjY2Mjg0KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9jb2Nv
YS9UZXN0VUlEZWxlZ2F0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsMTIgQEAgLSAo
dm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBnZQogfQogI2VuZGlmIC8vIFBMQVRG
T1JNKE1BQykKIAorLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBzYXZlRGF0
YVRvRmlsZTooTlNEYXRhICopZGF0YSBzdWdnZXN0ZWRGaWxlbmFtZTooTlNTdHJpbmcgKilzdWdn
ZXN0ZWRGaWxlbmFtZSBtaW1lVHlwZTooTlNTdHJpbmcgKiltaW1lVHlwZSBvcmlnaW5hdGluZ1VS
TDooTlNVUkwgKil1cmwKK3sKKyAgICBpZiAoX3NhdmVEYXRhVG9GaWxlKQorICAgICAgICBfc2F2
ZURhdGFUb0ZpbGUod2ViVmlldywgZGF0YSwgc3VnZ2VzdGVkRmlsZW5hbWUsIG1pbWVUeXBlLCB1
cmwpOworfQorCiAtIChOU1N0cmluZyAqKXdhaXRGb3JBbGVydAogewogICAgIEVYUEVDVF9GQUxT
RShzZWxmLnJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2UpOwpJbmRleDogTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9lbmNvZGluZy9sZWdhY3ktbWIt
amFwYW5lc2UvZXVjLWpwL2V1Y2pwLWVuY29kZS1ocmVmLWVycm9ycy1oYW4uaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2VuY29k
aW5nL2xlZ2FjeS1tYi1qYXBhbmVzZS9ldWMtanAvZXVjanAtZW5jb2RlLWhyZWYtZXJyb3JzLWhh
bi5odG1sCShyZXZpc2lvbiAyNjYyODQpCisrKyBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL2VuY29kaW5nL2xlZ2FjeS1tYi1qYXBhbmVzZS9ldWMtanAvZXVjanAt
ZW5jb2RlLWhyZWYtZXJyb3JzLWhhbi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC01LDI3ICs1LDYg
QEAKIDx0aXRsZT5FVUMtSlAgZW5jb2RpbmcgZXJyb3JzIChocmVmLCBoYW4pPC90aXRsZT4KIDxt
ZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgogPG1ldGEgbmFtZT0idmFyaWFudCIg
Y29udGVudD0iPzEtMTAwMCI+Ci08bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/MTAwMS0y
MDAwIj4KLTxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij8yMDAxLTMwMDAiPgotPG1ldGEg
bmFtZT0idmFyaWFudCIgY29udGVudD0iPzMwMDEtNDAwMCI+Ci08bWV0YSBuYW1lPSJ2YXJpYW50
IiBjb250ZW50PSI/NDAwMS01MDAwIj4KLTxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij81
MDAxLTYwMDAiPgotPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iPzYwMDEtNzAwMCI+Ci08
bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/NzAwMS04MDAwIj4KLTxtZXRhIG5hbWU9InZh
cmlhbnQiIGNvbnRlbnQ9Ij84MDAxLTkwMDAiPgotPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVu
dD0iPzkwMDEtMTAwMDAiPgotPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iPzEwMDAxLTEx
MDAwIj4KLTxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij8xMTAwMS0xMjAwMCI+Ci08bWV0
YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/MTIwMDEtMTMwMDAiPgotPG1ldGEgbmFtZT0idmFy
aWFudCIgY29udGVudD0iPzEzMDAxLTE0MDAwIj4KLTxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRl
bnQ9Ij8xNDAwMS0xNTAwMCI+Ci08bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/MTUwMDEt
MTYwMDAiPgotPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iPzE2MDAxLTE3MDAwIj4KLTxt
ZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij8xNzAwMS0xODAwMCI+Ci08bWV0YSBuYW1lPSJ2
YXJpYW50IiBjb250ZW50PSI/MTgwMDEtMTkwMDAiPgotPG1ldGEgbmFtZT0idmFyaWFudCIgY29u
dGVudD0iPzE5MDAxLTIwMDAwIj4KLTxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij8yMDAw
MS0yMTAwMCI+Ci08bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/MjEwMDEtbGFzdCI+CiA8
c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0
IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0
IHNyYz0iL2NvbW1vbi9zdWJzZXQtdGVzdHMuanMiPjwvc2NyaXB0PgpJbmRleDogTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9lbmNvZGluZy9yZXNvdXJjZXMvZW5j
b2RlLWhyZWYtY29tbW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvZW5jb2RpbmcvcmVzb3VyY2VzL2VuY29kZS1ocmVmLWNvbW1v
bi5qcwkocmV2aXNpb24gMjY2Mjg0KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9lbmNvZGluZy9yZXNvdXJjZXMvZW5jb2RlLWhyZWYtY29tbW9uLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIGZvciAodmFyIHJhbmdlIG9mIHJhbmdlcykg
ewogfQogCiAvLyBydW4gdGhlIHRlc3RzCi1mb3IgKHZhciB4ID0gMDsgeCA8IGNvZGVwb2ludHMu
bGVuZ3RoOyB4KyspIHsKK2ZvciAodmFyIHggPSAwOyB4IDwgMTsgeCsrKSB7CiAgICAgZW5jb2Rl
KAogICAgICAgICBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlcG9pbnRzW3hdLmNwKSwKICAgICAg
ICAgY29kZXBvaW50c1t4XS5leHBlY3RlZCwK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407490</attachid>
            <date>2020-08-28 11:33:54 -0700</date>
            <delta_ts>2020-09-04 21:07:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215780-20200828113353.patch</filename>
            <type>text/plain</type>
            <size>80186</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjYyODQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA4LTI4ICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBQREYgaGVhZHMtdXAgZGlz
cGxheSB0byBVSSBwcm9jZXNzIG9uIG1hY09TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU3ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU4NzE1
ODQ3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
d3RmL1BsYXRmb3JtSGF2ZS5oOgorCiAyMDIwLTA4LTI3ICBTdGVwaGFuIFN6YWJvICA8c3RlcGhh
bi5zemFib0Bzb255LmNvbT4KIAogICAgICAgICBbUGxheVN0YXRpb25dIEJ1aWxkIGZpeCBkdWUg
dG8gbWVtbWVtIG5vdCBhbHdheXMgYmVpbmcgYXZhaWxhYmxlLgpJbmRleDogU291cmNlL1dURi93
dGYvUGxhdGZvcm1FbmFibGVDb2NvYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1Bs
YXRmb3JtRW5hYmxlQ29jb2EuaAkocmV2aXNpb24gMjY2Mjg0KQorKysgU291cmNlL1dURi93dGYv
UGxhdGZvcm1FbmFibGVDb2NvYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNiArMjI4LDEwIEBA
CiAjZGVmaW5lIEVOQUJMRV9HUFVfRFJJVkVSX1BSRVdBUk1JTkcgMQogI2VuZGlmCiAKKyNpZiBQ
TEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMDAw
CisjZGVmaW5lIEVOQUJMRV9VSV9QUk9DRVNTX1BERl9IVUQgMQorI2VuZGlmCisKICNpZiAhZGVm
aW5lZChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkKICNkZWZpbmUgRU5BQkxFX0lOREVYRURfREFU
QUJBU0UgMQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvTlNJ
bWFnZVNQSS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9O
U0ltYWdlU1BJLmgJKHJldmlzaW9uIDI2NjI4NCkKKysrIFNvdXJjZS9XZWJDb3JlL1BBTC9wYWwv
c3BpL21hYy9OU0ltYWdlU1BJLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDggQEAKIE5T
X0FTU1VNRV9OT05OVUxMX0JFR0lOCiAKIEBpbnRlcmZhY2UgTlNJbWFnZSAoKQorKyAoaW5zdGFu
Y2V0eXBlKWltYWdlV2l0aEltYWdlUmVwOihOU0ltYWdlUmVwICopaW1hZ2VSZXA7CistIChpbnN0
YW5jZXR5cGUpX2ltYWdlV2l0aENvbmZpZ3VyYXRpb246KE5TRGljdGlvbmFyeSAqKWNvbmZpZ3Vy
YXRpb247CiAtICh2b2lkKWxvY2tGb2N1c1dpdGhSZWN0OihOU1JlY3QpcmVjdCBjb250ZXh0Oihu
dWxsYWJsZSBOU0dyYXBoaWNzQ29udGV4dCAqKWNvbnRleHQgaGludHM6KG51bGxhYmxlIE5TRGlj
dGlvbmFyeSAqKWhpbnRzIGZsaXBwZWQ6KEJPT0wpZmxpcHBlZDsKIEBlbmQKIApAQCAtNDMsNiAr
NDUsMTMgQEAgQGludGVyZmFjZSBOU0ltYWdlIChOU1N5c3RlbVN5bWJvbHMpCiArIChudWxsYWJs
ZSBOU0ltYWdlICopX2ltYWdlV2l0aFN5c3RlbVN5bWJvbE5hbWU6KE5TU3RyaW5nICopIHN5bWJv
bE5hbWU7CiBAZW5kCiAKK1dURl9FWFRFUk5fQ19CRUdJTgorCitleHRlcm4gY29uc3QgTlNTdHJp
bmcgKk5TSW1hZ2VBbHRlcm5hdGVDcml0ZXJpb25Gb250OworZXh0ZXJuIGNvbnN0IE5TU3RyaW5n
ICpOU0ltYWdlQWx0ZXJuYXRlQ3JpdGVyaW9uU3ltYm9sU2NhbGU7CisKK1dURl9FWFRFUk5fQ19F
TkQKKwogTlNfQVNTVU1FX05PTk5VTExfRU5ECiAKICNlbmRpZgpAQCAtNTYsNiArNjUsNiBAQCBl
eHRlcm4gY29uc3QgTlNJbWFnZUhpbnRLZXkgTlNJbWFnZUhpbnRTCiAKIE5TX0FTU1VNRV9OT05O
VUxMX0VORAogCi0jZW5kaWYKKyNlbmRpZiAvLyBIQVZFKEFMVEVSTkFURV9JQ09OUykKIAotI2Vu
ZGlmCisjZW5kaWYgLy8gVVNFKEFQUExFX0lOVEVSTkFMX1NESykKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZp
c2lvbiAyNjYyODQpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDk2IEBACisyMDIwLTA4LTI4ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVu
c2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBQREYgaGVhZHMtdXAgZGlzcGxheSB0byBV
SSBwcm9jZXNzIG9uIG1hY09TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTU3ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU4NzE1ODQ3PgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaGFzIG1h
bnkgYmVuZWZpdHMgaW5jbHVkaW5nIHRoZSBvbmUgaW4gdGhlIHJhZGFyLCB0ZXN0YWJpbGl0eSwg
YW5kIG1vdmluZyBXZWJLaXQtc3BlY2lmaWMgY29kZSBmcm9tIFBERktpdCB0byBXZWJLaXQuCisK
KyAgICAgICAgTm93IHRoYXQgdGhlIEhVRCBpcyBkaXNwbGF5ZWQgaW4gdGhlIFVJIHByb2Nlc3Mg
aW5zdGVhZCBvZiBpbiB0aGUgd2ViIGNvbnRlbnQsIHpvb21pbmcgaW4ga2VlcHMgdGhlIEhVRCB0
aGUgc2FtZSBzaXplLgorICAgICAgICBBIDNkLXRyYW5zZm9ybWVkIGlmcmFtZSB3aXRoIGEgUERG
IGluIGl0IG5vdyBzaG93cyB0aGUgSFVEIGluIHRoZSBwbGFjZSB5b3UgY2FuIGNsaWNrIG9uIGl0
LCBpbnN0ZWFkIG9mIGluIHRoZSB0cmFuc2Zvcm1lZCBQREYuCisgICAgICAgIEFsc28sIG1vdmlu
ZyB0aGUgbW91c2UgdG8gdGhlIEhVRCB3aXRoaW4gdGhlIGZpcnN0IDMgc2Vjb25kcyBwcmV2ZW50
cyBpdCBmcm9tIGhpZGluZywgd2hpY2ggaXQgZG9lcyB3aGVuIHRoZSBtb3VzZSBsZWF2ZXMgdGhl
IEhVRC4KKyAgICAgICAgVGhlIHJlc3Qgb2YgdGhlIGJlaGF2aW9yIEkgdGhpbmsgc2hvdWxkIGJl
IHRoZSBzYW1lLiAgTW9zdCB1c2VycyBzaG91bGQgbm90IG5vdGljZSBhbnkgZGlmZmVyZW5jZS4K
KworICAgICAgICBGdW5jdGlvbmFsaXR5IGNvdmVyZWQgYnkgQVBJIHRlc3RzLCB0aGUgZmlyc3Qg
dGVzdHMgZm9yIFBERiBjb250ZW50IGludGVyYWN0aW9uIQorCisgICAgICAgICogU2NyaXB0cy93
ZWJraXQvbWVzc2FnZXMucHk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZp
ZXdJbnRlcm5hbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToKKyAg
ICAgICAgKC1bV0tWaWV3IF9jcmVhdGVQREZIVUQ6cmVjdDpdKToKKyAgICAgICAgKC1bV0tWaWV3
IF9wZGZIVUQ6Y2hhbmdlZExvY2F0aW9uOl0pOgorICAgICAgICAoLVtXS1ZpZXcgX3JlbW92ZVBE
RkhVRDpdKToKKyAgICAgICAgKC1bV0tWaWV3IF9yZW1vdmVBbGxQREZIVURzXSk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3TWFjLm1tOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgbW91c2VNb3ZlZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IG1vdXNlRG93bjpdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IG1vdXNlVXA6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY3Jl
YXRlUERGSFVEOnJlY3Q6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcGRmSFVEOmNoYW5nZWRM
b2NhdGlvbjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZW1vdmVQREZIVUQ6XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfcmVtb3ZlQWxsUERGSFVEc10pOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvbWFjL1dLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nTWFjLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5tbToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IHBkZkhVRHNdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW06CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjpjcmVhdGVQREZIVUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6dXBkYXRlUERGSFVETG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1w
bDo6cmVtb3ZlUERGSFVEKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnJlbW92ZUFs
bFBERkhVRHMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
Ojpwcm9jZXNzRGlkVGVybWluYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFw
cGxpY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpvcGVu
UERGRnJvbVRlbXBvcmFyeUZvbGRlcldpdGhOYXRpdmVBcHBsaWNhdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgICogVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW06CisgICAgICAgIChXZWJLaXQ6OlBhZ2VD
bGllbnRJbXBsOjpjcmVhdGVQREZIVUQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1w
bDo6dXBkYXRlUERGSFVETG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1w
bDo6cmVtb3ZlUERGSFVEKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnJlbW92
ZUFsbFBERkhVRHMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1t
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNhdmVQREZUb1RlbXBvcmFyeUZvbGRl
ckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OmNyZWF0ZVBERkhVRCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVt
b3ZlUERGSFVEKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojp1cGRhdGVQREZIVURM
b2NhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGRmWm9vbUluKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZGZab29tT3V0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpwZGZTYXZlVG9QREYpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnBkZk9wZW5XaXRoUHJldmlldyk6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZMYXll
ckNvbnRyb2xsZXJTUEkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBs
dWdpbi5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tOgor
ICAgICAgICAoLVtXS1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlIG9wZW5XaXRoTmF0aXZlQXBw
bGljYXRpb25dKToKKyAgICAgICAgKC1bV0tQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZSBzYXZl
VG9QREZdKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpQREZQbHVnaW4pOgorICAgICAg
ICAoV2ViS2l0OjpQREZQbHVnaW46On5QREZQbHVnaW4pOgorICAgICAgICAoV2ViS2l0OjpQREZQ
bHVnaW46OmZyYW1lRm9ySFVEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpj
YWxjdWxhdGVTaXplcyk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6Y29udmVydEZyb21Q
REZWaWV3VG9Sb290VmlldyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6dmlz
aWJpbGl0eURpZENoYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6em9vbUluKToK
KyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjp6b29tT3V0KToKKyAgICAgICAgKFdlYktpdDo6
UERGUGx1Z2luOjpzYXZlKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpvcGVuV2l0aFBy
ZXZpZXcpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvV2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6em9vbVBERklu
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6em9vbVBERk91dCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OnNhdmVQREYpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpvcGVuUERG
V2l0aFByZXZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjcmVhdGVQREZIVUQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cGRhdGVQREZIVURMb2NhdGlvbik6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OnJlbW92ZVBERkhVRCk6CisKIDIwMjAtMDgtMjggIFlvdWVubiBG
YWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIEVuYWJsZSBUcmFuc2Zvcm1TdHJl
YW0gYnkgZGVmYXVsdApJbmRleDogU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdl
cy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2Vz
LnB5CShyZXZpc2lvbiAyNjYyODQpCisrKyBTb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21l
c3NhZ2VzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNDMsNiArMjQzLDcgQEAgZGVmIHR5cGVzX3Ro
YXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZQogICAgICAgICAnV2ViS2l0OjpNRE5TUmVnaXN0
ZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6TWVkaWFQbGF5ZXJQcml2YXRlUmVtb3Rl
SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6Ok1lZGlhUmVjb3JkZXJJZGVudGlmaWVyJywK
KyAgICAgICAgJ1dlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6
OlBsYXliYWNrU2Vzc2lvbkNvbnRleHRJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6UGx1
Z2luUHJvY2Vzc1R5cGUnLAogICAgICAgICAnV2ViS2l0OjpSZW1vdGVBdWRpb0Rlc3RpbmF0aW9u
SWRlbnRpZmllcicsCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCShyZXZp
c2lvbiAyNjYyODQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAi
TGF5ZXJUcmVlQ29udGV4dC5oIgorI2luY2x1ZGUgIlBERlBsdWdpbklkZW50aWZpZXIuaCIKICNp
bmNsdWRlICJTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZS5oIgogI2luY2x1ZGUgIlNoYXJlYWJs
ZUJpdG1hcC5oIgogI2luY2x1ZGUgIldlYkNvbG9yUGlja2VyLmgiCkBAIC0yNDIsNiArMjQzLDEz
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbFByb3Zpc2lvbmFsTG9hZEZvck1h
aW5GcmFtZSgpIHsgfTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0TG9hZEZvck1haW5GcmFt
ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIHVzZUN1c3RvbUNvbnRlbnRQcm92aWRlcikg
PSAwOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICB2aXJ0dWFsIHZvaWQg
Y3JlYXRlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVBERkhVRExvY2F0aW9uKFBERlBsdWdpbklk
ZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHJlbW92ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHJlbW92ZUFsbFBERkhVRHMoKSA9IDA7CisjZW5kaWYKKyAgICAKICAgICB2aXJ0dWFsIHZvaWQg
aGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkmKSA9IDA7CiAKICAgICB2aXJ0dWFs
IGJvb2wgaGFuZGxlUnVuT3BlblBhbmVsKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqLCBj
b25zdCBGcmFtZUluZm9EYXRhJiwgQVBJOjpPcGVuUGFuZWxQYXJhbWV0ZXJzKiwgV2ViT3BlblBh
bmVsUmVzdWx0TGlzdGVuZXJQcm94eSopIHsgcmV0dXJuIGZhbHNlOyB9CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDI2NjI4NCkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ3NzIsMTUgKzQ3NzIsMTQgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JG
cmFtZQogICAgICAgICAgICAgbV9wbHVnaW5TY2FsZUZhY3RvciA9IDE7CiAgICAgICAgICAgICBt
X21haW5GcmFtZVBsdWdpbkhhbmRsZXNQYWdlU2NhbGVHZXN0dXJlID0gZmFsc2U7CiAgICAgICAg
IH0KLSAgICB9Ci0KICNpZiBFTkFCTEUoUE9JTlRFUl9MT0NLKQotICAgIGlmIChmcmFtZS0+aXNN
YWluRnJhbWUoKSkKICAgICAgICAgcmVxdWVzdFBvaW50ZXJVbmxvY2soKTsKICNlbmRpZgotCi0g
ICAgaWYgKGZyYW1lLT5pc01haW5GcmFtZSgpKQogICAgICAgICBwYWdlQ2xpZW50KCkuc2V0TW91
c2VFdmVudFBvbGljeShtb3VzZUV2ZW50UG9saWN5KTsKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19Q
REZfSFVEKQorICAgICAgICBwYWdlQ2xpZW50KCkucmVtb3ZlQWxsUERGSFVEcygpOworI2VuZGlm
CisgICAgfQogCiAgICAgbV9wYWdlTG9hZFN0YXRlLmNvbW1pdENoYW5nZXMoKTsKICAgICBpZiAo
bV9sb2FkZXJDbGllbnQpCkBAIC03NDUzLDYgKzc0NTIsOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
cHJvY2Vzc0RpZFRlcm1pbmF0ZShQCiAKICAgICByZXNldFN0YXRlQWZ0ZXJQcm9jZXNzRXhpdGVk
KHJlYXNvbik7CiAgICAgc3RvcEFsbFVSTFNjaGVtZVRhc2tzKG1fcHJvY2Vzcy5wdHIoKSk7Cisj
aWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBwYWdlQ2xpZW50KCkucmVtb3ZlQWxs
UERGSFVEcygpOworI2VuZGlmCiAKICAgICAvLyBGb3IgYnJpbmd1cCBvZiBwcm9jZXNzIHN3YXBw
aW5nLCBOYXZpZ2F0aW9uU3dhcCB0ZXJtaW5hdGlvbiB3aWxsIG5vdCBnbyBvdXQgdG8gY2xpZW50
cy4KICAgICAvLyBJZiBpdCBkb2VzICpkdXJpbmcqIHByb2Nlc3Mgc3dhcHBpbmcsIGFuZCB0aGUg
Y2xpZW50IHRyaWdnZXJzIGEgcmVsb2FkLCB0aGF0IGNhdXNlcyBiaXphcnJlIFdlYktpdCByZS1l
bnRyeS4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lv
biAyNjYyODQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29y
a2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQu
aCIKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuaCIKKyNpbmNsdWRlICJQREZQbHVnaW5JZGVudGlm
aWVyLmgiCiAjaW5jbHVkZSAiUGFnZUxvYWRTdGF0ZS5oIgogI2luY2x1ZGUgIlBsdWdpblByb2Nl
c3NBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiUG9saWN5RGVjaXNpb24uaCIKQEAgLTEzMTYsMTAg
KzEzMTcsMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCBzYXZlRGF0YVRvRmlsZUluRG93bmxvYWRz
Rm9sZGVyKFN0cmluZyYmIHN1Z2dlc3RlZEZpbGVuYW1lLCBTdHJpbmcmJiBtaW1lVHlwZSwgVVJM
JiYgb3JpZ2luYXRpbmdVUkwsIEFQSTo6RGF0YSYpOwogICAgIHZvaWQgc2F2ZVBERlRvRmlsZUlu
RG93bmxvYWRzRm9sZGVyKFN0cmluZyYmIHN1Z2dlc3RlZEZpbGVuYW1lLCBVUkwmJiBvcmlnaW5h
dGluZ1VSTCwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik7Ci0jaWYgUExBVEZPUk0oQ09DT0Ep
CisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCiAgICAgdm9pZCBzYXZlUERGVG9UZW1wb3JhcnlG
b2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVk
RmlsZW5hbWUsIEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwgY29u
c3QgU3RyaW5nJiBwZGZVVUlEKTsKKyNpZiAhRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKICAg
ICB2b2lkIG9wZW5QREZGcm9tVGVtcG9yYXJ5Rm9sZGVyV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKEZy
YW1lSW5mb0RhdGEmJiwgY29uc3QgU3RyaW5nJiBwZGZVVUlEKTsKICNlbmRpZgorI2VuZGlmCiAK
ICNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKICAgICB2b2lkIHNob3dQREZDb250ZXh0TWVudShj
b25zdCBXZWJLaXQ6OlBERkNvbnRleHRNZW51JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRp
b25hbDxpbnQzMl90PiYmKT4mJik7CkBAIC0xODExLDYgKzE4MTQsMTYgQEAgcHVibGljOgogICAg
IGJvb2wgY2FuVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKSB7IHJldHVybiBtX2NhblVzZUNyZWRlbnRp
YWxTdG9yYWdlOyB9CiAgICAgdm9pZCBzZXRDYW5Vc2VDcmVkZW50aWFsU3RvcmFnZShib29sKTsK
IAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgdm9pZCBjcmVhdGVQREZIVUQo
UERGUGx1Z2luSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQg
dXBkYXRlUERGSFVETG9jYXRpb24oUERGUGx1Z2luSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpOworICAgIHZvaWQgcmVtb3ZlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIpOwor
ICAgIHZvaWQgcGRmWm9vbUluKFBERlBsdWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgcGRmWm9v
bU91dChQREZQbHVnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHBkZlNhdmVUb1BERihQREZQbHVn
aW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHBkZk9wZW5XaXRoUHJldmlldyhQREZQbHVnaW5JZGVu
dGlmaWVyKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIFdlYlBhZ2VQcm94eShQYWdlQ2xpZW50
JiwgV2ViUHJvY2Vzc1Byb3h5JiwgUmVmPEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24+JiYpOwogICAg
IHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyNjYyODQpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcg
Y29weSkKQEAgLTQzMyw5ICs0MzMsOCBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAg
IFNhdmVSZWNlbnRTZWFyY2hlcyhTdHJpbmcgbmFtZSwgVmVjdG9yPFdlYkNvcmU6OlJlY2VudFNl
YXJjaD4gc2VhcmNoSXRlbXMpCiAgICAgTG9hZFJlY2VudFNlYXJjaGVzKFN0cmluZyBuYW1lKSAt
PiAoVmVjdG9yPFdlYkNvcmU6OlJlY2VudFNlYXJjaD4gcmVzdWx0KSBTeW5jaHJvbm91cwogCisj
aWYgRU5BQkxFKFBERktJVF9QTFVHSU4pICYmICFFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQog
ICAgIFNhdmVQREZUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcihTdHJpbmcgc3VnZ2VzdGVkRmlsZW5h
bWUsIFVSTCBvcmlnaW5hdGluZ1VSTCwgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEpCi0KLSNpZiBQ
TEFURk9STShDT0NPQSkKICAgICBTYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5h
dGl2ZUFwcGxpY2F0aW9uKFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSwgc3RydWN0IFdlYktpdDo6
RnJhbWVJbmZvRGF0YSBzb3VyY2VGcmFtZUluZm8sIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhLCBT
dHJpbmcgcGRmVVVJRCkKICAgICBPcGVuUERGRnJvbVRlbXBvcmFyeUZvbGRlcldpdGhOYXRpdmVB
cHBsaWNhdGlvbihzdHJ1Y3QgV2ViS2l0OjpGcmFtZUluZm9EYXRhIHNvdXJjZUZyYW1lSW5mbywg
U3RyaW5nIHBkZlVVSUQpCiAjZW5kaWYKQEAgLTU2Niw2ICs1NjUsMTIgQEAgbWVzc2FnZXMgLT4g
V2ViUGFnZVByb3h5IHsKICAgICBTcGVlY2hTeW50aGVzaXNSZXN1bWUoKSAtPiAoKSBBc3luYwog
I2VuZGlmCiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgIENyZWF0ZVBERkhV
RChXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViQ29yZTo6SW50UmVj
dCBib3VuZGluZ0JveCkKKyAgICBVcGRhdGVQREZIVURMb2NhdGlvbihXZWJLaXQ6OlBERlBsdWdp
bklkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViQ29yZTo6SW50UmVjdCBib3VuZGluZ0JveCkKKyAg
ICBSZW1vdmVQREZIVUQoV2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCisj
ZW5kaWYKKwogICAgIENvbmZpZ3VyZUxvZ2dpbmdDaGFubmVsKFN0cmluZyBjaGFubmVsTmFtZSwg
ZW51bTp1aW50OF90IFdURkxvZ0NoYW5uZWxTdGF0ZSBzdGF0ZSwgZW51bTp1aW50OF90IFdURkxv
Z0xldmVsIGxldmVsKQogCiAjaWYgUExBVEZPUk0oR1RLKQpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgJKHJldmlz
aW9uIDI2NjI4NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZp
ZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMSArMjMsMTEgQEAKICAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW1wb3J0ICJXS1dlYlZpZXdQcml2
YXRlLmgiCi0KKyNpbXBvcnQgIlBERlBsdWdpbklkZW50aWZpZXIuaCIKICNpbXBvcnQgIlNhbWVE
b2N1bWVudE5hdmlnYXRpb25UeXBlLmgiCiAjaW1wb3J0ICJXS1NoYXJlU2hlZXQuaCIKICNpbXBv
cnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb24uaCIKKyNpbXBvcnQgIldLV2ViVmlld1ByaXZhdGUu
aCIKICNpbXBvcnQgIl9XS0F0dGFjaG1lbnRJbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLV2ViVmll
d1ByaW50Rm9ybWF0dGVySW50ZXJuYWwuaCIKICNpbXBvcnQgPHd0Zi9Db21wbGV0aW9uSGFuZGxl
ci5oPgpAQCAtMTMzLDcgKzEzMyw3IEBAIGNsYXNzIFZpZXdHZXN0dXJlQ29udHJvbGxlcjsKICAg
ICAvLyBPbmx5IHVzZWQgd2l0aCBVSS1zaWRlIGNvbXBvc2l0aW5nLgogICAgIFJldGFpblB0cjxX
S1Njcm9sbFZpZXc+IF9zY3JvbGxWaWV3OwogICAgIFJldGFpblB0cjxXS0NvbnRlbnRWaWV3PiBf
Y29udGVudFZpZXc7Ci0jZW5kaWYKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQogICAgIFJldGFpblB0cjxXS1Njcm9sbFZpZXc+IF9zY3JvbGxWaWV3
OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdQcml2YXRl
Rm9yVGVzdGluZ01hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9tYWMvV0tXZWJWaWV3UHJpdmF0ZUZvclRlc3RpbmdNYWMuaAkocmV2aXNpb24gMjY2Mjg0KQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdQcml2YXRlRm9yVGVz
dGluZ01hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIEBpbnRlcmZhY2UgV0tX
ZWJWaWV3IChXS1Rlc3RpbmdNYWMpCiAKIC0gKHZvaWQpX3NldEhlYWRlckJhbm5lckhlaWdodDoo
aW50KWhlaWdodDsKIC0gKHZvaWQpX3NldEZvb3RlckJhbm5lckhlaWdodDooaW50KWhlaWdodDsK
Ky0gKE5TU2V0PE5TVmlldyAqPiAqKV9wZGZIVURzOwogCiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1Rlc3RpbmdNYWMu
bW0JKHJldmlzaW9uIDI2NjI4NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMv
V0tXZWJWaWV3VGVzdGluZ01hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTAzLDYgKzEwMywxNSBA
QCAtICh2b2lkKV9zZXRGb290ZXJCYW5uZXJIZWlnaHQ6KGludCloZWlnCiAgICAgX3BhZ2UtPnNl
dEZvb3RlckJhbm5lckhlaWdodEZvclRlc3RpbmcoaGVpZ2h0KTsKIH0KIAorLSAoTlNTZXQ8TlNW
aWV3ICo+ICopX3BkZkhVRHMKK3sKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAg
IHJldHVybiBfaW1wbC0+cGRmSFVEcygpOworI2Vsc2UKKyAgICByZXR1cm4gbmlsOworI2VuZGlm
Cit9CisKIC0gKE5TTWVudSAqKV9hY3RpdmVNZW51CiB7CiAgICAgLy8gRklYTUU6IE9ubHkgdGhl
IERPTSBwYXN0ZSBhY2Nlc3MgbWVudSBpcyBzdXBwb3J0ZWQgZm9yIG5vdy4gSW4gdGhlIGZ1dHVy
ZSwgaXQgY291bGQgYmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZp
ZXdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2Vi
Vmlld0ltcGwuaAkocmV2aXNpb24gMjY2Mjg0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV2ViVmlld0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAj
aWYgUExBVEZPUk0oTUFDKQogCisjaW5jbHVkZSAiUERGUGx1Z2luSWRlbnRpZmllci5oIgogI2lu
Y2x1ZGUgIlBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlNoYXJlYWJs
ZUJpdG1hcC5oIgogI2luY2x1ZGUgIldLTGF5b3V0TW9kZS5oIgpAQCAtNzYsNiArNzcsMTAgQEAg
T0JKQ19DTEFTUyBXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyOwogT0JKQ19DTEFTUyBXZWJQ
bGF5YmFja0NvbnRyb2xzTWFuYWdlcjsKICNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikKIAorI2lm
IEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCitPQkpDX0NMQVNTIFdLUERGSFVEVmlldzsKKyNl
bmRpZgorCiBuYW1lc3BhY2UgQVBJIHsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBPYmpl
Y3Q7CkBAIC0xOTAsNiArMTk1LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHZpZXdXaWxsU3RhcnRM
aXZlUmVzaXplKCk7CiAgICAgdm9pZCB2aWV3RGlkRW5kTGl2ZVJlc2l6ZSgpOwogCisjaWYgRU5B
QkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICB2b2lkIGNyZWF0ZVBERkhVRChQREZQbHVnaW5J
ZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCB1cGRhdGVQREZI
VURMb2NhdGlvbihQREZQbHVnaW5JZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7
CisgICAgdm9pZCByZW1vdmVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllcik7CisgICAgdm9pZCBy
ZW1vdmVBbGxQREZIVURzKCk7CisgICAgTlNTZXQgKnBkZkhVRHMoKTsKKyNlbmRpZgorCiAgICAg
dm9pZCByZW5ld0dTdGF0ZSgpOwogICAgIHZvaWQgc2V0RnJhbWVTaXplKENHU2l6ZSk7CiAgICAg
dm9pZCBkaXNhYmxlRnJhbWVTaXplVXBkYXRlcygpOwpAQCAtNzI5LDcgKzc0MiwxMSBAQCBwcml2
YXRlOgogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICBSZXRhaW5QdHI8V0tGdWxsU2Ny
ZWVuV2luZG93Q29udHJvbGxlcj4gbV9mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcjsKICNlbmRp
ZgotICAgIAorCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBIYXNoTWFwPFdl
YktpdDo6UERGUGx1Z2luSWRlbnRpZmllciwgUmV0YWluUHRyPFdLUERGSFVEVmlldz4+IF9wZGZI
VURWaWV3czsKKyNlbmRpZgorCiAgICAgUmV0YWluUHRyPFdLU2hhcmVTaGVldD4gX3NoYXJlU2hl
ZXQ7CiAKICAgICBSZXRhaW5QdHI8V0tXaW5kb3dWaXNpYmlsaXR5T2JzZXJ2ZXI+IG1fd2luZG93
VmlzaWJpbGl0eU9ic2VydmVyOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
V2ViVmlld0ltcGwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvV2ViVmlld0ltcGwubW0JKHJldmlzaW9uIDI2NjI4NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw3
IEBACiAjaW1wb3J0ICJXS0Vycm9ySW50ZXJuYWwuaCIKICNpbXBvcnQgIldLRnVsbFNjcmVlbldp
bmRvd0NvbnRyb2xsZXIuaCIKICNpbXBvcnQgIldLSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5o
IgorI2ltcG9ydCAiV0tQREZIVURWaWV3LmgiCiAjaW1wb3J0ICJXS1ByaW50aW5nVmlldy5oIgog
I2ltcG9ydCAiV0tTYWZlQnJvd3NpbmdXYXJuaW5nLmgiCiAjaW1wb3J0ICJXS1NoYXJlU2hlZXQu
aCIKQEAgLTE3MTgsNiArMTcxOSw0NSBAQCB2b2lkIFdlYlZpZXdJbXBsOjp2aWV3RGlkRW5kTGl2
ZVJlc2l6ZSgpCiAgICAgW21fbGF5b3V0U3RyYXRlZ3kgZGlkRW5kTGl2ZVJlc2l6ZV07CiB9CiAK
KyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCit2b2lkIFdlYlZpZXdJbXBsOjpjcmVh
dGVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiByZWN0KQoreworICAgIHJlbW92ZVBERkhVRChpZGVudGlmaWVyKTsKKyAgICBhdXRv
IGh1ZCA9IGFkb3B0TlMoW1tXS1BERkhVRFZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6cmVjdCBw
bHVnaW5JZGVudGlmaWVyOmlkZW50aWZpZXIgcGFnZTptX3BhZ2UuZ2V0KCldKTsKKyAgICBbbV92
aWV3IGFkZFN1YnZpZXc6aHVkLmdldCgpXTsKKyAgICBfcGRmSFVEVmlld3MuYWRkKGlkZW50aWZp
ZXIsIFdURk1vdmUoaHVkKSk7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZVBERkhVRExv
Y2F0aW9uKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoYXV0byBodWQgPSBfcGRmSFVEVmlld3MuZ2V0KGlkZW50
aWZpZXIpKQorICAgICAgICBbaHVkIHNldEZyYW1lOnJlY3RdOworfQorCit2b2lkIFdlYlZpZXdJ
bXBsOjpyZW1vdmVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAg
IGlmIChhdXRvIGh1ZCA9IF9wZGZIVURWaWV3cy50YWtlKGlkZW50aWZpZXIpKQorICAgICAgICBb
aHVkIHJlbW92ZUZyb21TdXBlcnZpZXddOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjpyZW1vdmVB
bGxQREZIVURzKCkKK3sKKyAgICBmb3IgKGF1dG8mIGh1ZCA6IF9wZGZIVURWaWV3cy52YWx1ZXMo
KSkKKyAgICAgICAgW2h1ZCByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAgICBfcGRmSFVEVmlld3Mu
Y2xlYXIoKTsKK30KKworTlNTZXQgKldlYlZpZXdJbXBsOjpwZGZIVURzKCkKK3sKKyAgICBOU011
dGFibGVTZXQ8TlNWaWV3ICo+ICpzZXQgPSBbTlNNdXRhYmxlU2V0IHNldFdpdGhDYXBhY2l0eTpf
cGRmSFVEVmlld3Muc2l6ZSgpXTsKKyAgICBmb3IgKGF1dG8mIGh1ZCA6IF9wZGZIVURWaWV3cy52
YWx1ZXMoKSkKKyAgICAgICAgW3NldCBhZGRPYmplY3Q6aHVkLmdldCgpXTsKKyAgICByZXR1cm4g
c2V0OworfQorCisjZW5kaWYgLy8gRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKwogdm9pZCBX
ZWJWaWV3SW1wbDo6cmVuZXdHU3RhdGUoKQogewogICAgIGlmIChtX3RleHRJbmRpY2F0b3JXaW5k
b3cpCkBAIC0yMTQ5LDYgKzIxODksMTAgQEAgdm9pZCBXZWJWaWV3SW1wbDo6d2luZG93RGlkQ2hh
bmdlQmFja2luZwogICAgICAgICByZXR1cm47CiAKICAgICBtX3BhZ2UtPnNldEludHJpbnNpY0Rl
dmljZVNjYWxlRmFjdG9yKG5ld0JhY2tpbmdTY2FsZUZhY3Rvcik7CisjaWYgRU5BQkxFKFVJX1BS
T0NFU1NfUERGX0hVRCkKKyAgICBmb3IgKGF1dG8mIGh1ZCA6IF9wZGZIVURWaWV3cy52YWx1ZXMo
KSkKKyAgICAgICAgW2h1ZCBzZXREZXZpY2VTY2FsZUZhY3RvcjpuZXdCYWNraW5nU2NhbGVGYWN0
b3JdOworI2VuZGlmCiB9CiAKIHZvaWQgV2ViVmlld0ltcGw6OndpbmRvd0RpZENoYW5nZVNjcmVl
bigpCkBAIC01MzkxLDYgKzU0MzUsMTEgQEAgdm9pZCBXZWJWaWV3SW1wbDo6bW91c2VNb3ZlZChO
U0V2ZW50ICpldgogICAgIGlmIChtX2lnbm9yZXNOb25XaGVlbEV2ZW50cykKICAgICAgICAgcmV0
dXJuOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBmb3IgKGF1dG8mIGh1
ZCA6IF9wZGZIVURWaWV3cy52YWx1ZXMoKSkKKyAgICAgICAgW2h1ZCBtb3VzZU1vdmVkOmV2ZW50
XTsKKyNlbmRpZgorCiAgICAgLy8gV2hlbiBhIHZpZXcgaXMgZmlyc3QgcmVzcG9uZGVyLCBpdCBn
ZXRzIG1vdXNlIG1vdmVkIGV2ZW50cyBldmVuIHdoZW4gdGhlIG1vdXNlIGlzIG91dHNpZGUgaXRz
IHZpc2libGUgcmVjdC4KICAgICBpZiAobV92aWV3LmdldEF1dG9yZWxlYXNlZCgpID09IFttX3Zp
ZXcgd2luZG93XS5maXJzdFJlc3BvbmRlciAmJiAhTlNQb2ludEluUmVjdChbbV92aWV3IGNvbnZl
cnRQb2ludDpbZXZlbnQgbG9jYXRpb25JbldpbmRvd10gZnJvbVZpZXc6bmlsXSwgW21fdmlldyB2
aXNpYmxlUmVjdF0pKQogICAgICAgICByZXR1cm47CkBAIC01NDM5LDYgKzU0ODgsMTEgQEAgdm9p
ZCBXZWJWaWV3SW1wbDo6bW91c2VEb3duKE5TRXZlbnQgKmV2ZQogICAgIGlmIChtX2lnbm9yZXNO
b25XaGVlbEV2ZW50cykKICAgICAgICAgcmV0dXJuOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1Nf
UERGX0hVRCkKKyAgICBmb3IgKGF1dG8mIGh1ZCA6IF9wZGZIVURWaWV3cy52YWx1ZXMoKSkKKyAg
ICAgICAgW2h1ZCBtb3VzZURvd246ZXZlbnRdOworI2VuZGlmCisKICAgICBzZXRMYXN0TW91c2VE
b3duRXZlbnQoZXZlbnQpOwogICAgIHNldElnbm9yZXNNb3VzZURyYWdnZWRFdmVudHMoZmFsc2Up
OwogCkBAIC01NDUwLDYgKzU1MDQsMTEgQEAgdm9pZCBXZWJWaWV3SW1wbDo6bW91c2VVcChOU0V2
ZW50ICpldmVudAogICAgIGlmIChtX2lnbm9yZXNOb25XaGVlbEV2ZW50cykKICAgICAgICAgcmV0
dXJuOwogCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBmb3IgKGF1dG8mIGh1
ZCA6IF9wZGZIVURWaWV3cy52YWx1ZXMoKSkKKyAgICAgICAgW2h1ZCBtb3VzZVVwOmV2ZW50XTsK
KyNlbmRpZgorCiAgICAgc2V0TGFzdE1vdXNlRG93bkV2ZW50KG5pbCk7CiAgICAgbW91c2VVcElu
dGVybmFsKGV2ZW50KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BERi9XS1BE
RkhVRFZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QREYvV0tQ
REZIVURWaWV3LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUERG
L1dLUERGSFVEVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWYgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKworI2ltcG9ydCAiUERGUGx1Z2lu
SWRlbnRpZmllci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlBhZ2VQcm94eTsK
K30KKworQGludGVyZmFjZSBXS1BERkhVRFZpZXcgOiBOU1ZpZXcKKworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSBwbHVnaW5JZGVudGlmaWVyOihXZWJLaXQ6OlBE
RlBsdWdpbklkZW50aWZpZXIpcGx1Z2luSWRlbnRpZmllciBwYWdlOihXZWJLaXQ6OldlYlBhZ2VQ
cm94eSYpcGFnZTsKKy0gKHZvaWQpc2V0RnJhbWU6KE5TUmVjdClmcmFtZTsKKy0gKHZvaWQpbW91
c2VNb3ZlZDooTlNFdmVudCAqKWV2ZW50OworLSAodm9pZCltb3VzZURvd246KE5TRXZlbnQgKill
dmVudDsKKy0gKHZvaWQpbW91c2VVcDooTlNFdmVudCAqKWV2ZW50OworLSAodm9pZClzZXREZXZp
Y2VTY2FsZUZhY3RvcjooQ0dGbG9hdClkZXZpY2VTY2FsZUZhY3RvcjsKKworQGVuZAorCisjZW5k
aWYgLy8gRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1BERi9XS1BERkhVRFZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvUERGL1dLUERGSFVEVmlldy5tbQkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9QREYvV0tQREZIVURWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXS1BE
RkhVRFZpZXcuaCIKKworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKKyNpbXBvcnQg
IldlYlBhZ2VQcm94eS5oIgorI2ltcG9ydCA8UXVhcnR6Q29yZS9DQVRyYW5zYWN0aW9uLmg+Cisj
aW1wb3J0IDxwYWwvc3BpL2NvY29hL1F1YXJ0ekNvcmVTUEkuaD4KKyNpbXBvcnQgPHBhbC9zcGkv
bWFjL05TSW1hZ2VTUEkuaD4KKyNpbXBvcnQgPHd0Zi9XZWFrT2JqQ1B0ci5oPgorCisvLyAgVGhl
IEhVRCBpdGVtcyBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIHNwYWNpbmc6CisvLyAgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gfCAgICAgIDEy
ICAgICAgICAxMiAgICAgIDEwICAgICAxMiAgICAgICAgMTIgICAgICB8CisvLyB8ICAgICAtLS0t
ICAgICAgLS0tLSAgICAgfCAgICAgLS0tLSAgICAgIC0tLS0gICAgIHwKKy8vIHwgMTAgfGljb258
IDEwIHxpY29ufCAxMCB8IDEwIHxpY29ufCAxMCB8aWNvbnwgMTAgfAorLy8gfCAgICAgLS0tLSAg
ICAgIC0tLS0gICAgIHwgICAgIC0tLS0gICAgICAtLS0tICAgICB8CisvLyB8ICAgICAgMTIgICAg
ICAgIDEyICAgICAgMTAgICAgIDEyICAgICAgICAxMiAgICAgIHwKKy8vICAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgd2hlcmUgdGhlIDEyIHBv
aW50IHZlcnRpY2FsIHNwYWNpbmcgaXMgYW5jaG9yZWQgdG8gdGhlIHNtYWxsZXN0IGljb24gaW1h
Z2UsCisvLyAgYW5kIGFsbCBzdWJzZXF1ZW50IGljb25zIHdpdGggYmUgY2VudGVyZWQgdmVydGlj
YWxseSB3aXRoIHRoZSBzbWFsbGVzdCBpY29uLgorCitzdGF0aWMgY29uc3QgQ0dGbG9hdCBsYXll
clZlcnRpY2FsT2Zmc2V0ID0gNDA7CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBsYXllckNvcm5lclJh
ZGl1cyA9IDEyOworc3RhdGljIGNvbnN0IENHRmxvYXQgbGF5ZXJHcmF5Q29tcG9uZW50ID0gMDsK
K3N0YXRpYyBjb25zdCBDR0Zsb2F0IGxheWVyQWxwaGEgPSAwLjc1Oworc3RhdGljIGNvbnN0IENH
RmxvYXQgbGF5ZXJJbWFnZVNjYWxlID0gMS41Oworc3RhdGljIGNvbnN0IENHRmxvYXQgbGF5ZXJT
ZXBlcmF0b3JDb250cm9sbGVyU2l6ZSA9IDEuNTsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGxheWVy
Q29udHJvbGxlckhvcml6b250YWxNYXJnaW4gPSAxMC4wOworc3RhdGljIGNvbnN0IENHRmxvYXQg
bGF5ZXJJbWFnZVZlcnRpY2FsTWFyZ2luID0gMTIuMDsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGxh
eWVyU2VwZXJhdG9yVmVydGljYWxNYXJnaW4gPSAxMC4wOworc3RhdGljIGNvbnN0IENHRmxvYXQg
Y29udHJvbExheWVyTm9ybWFsQWxwaGEgPSAwLjc1Oworc3RhdGljIGNvbnN0IENHRmxvYXQgY29u
dHJvbExheWVyRG93bkFscGhhID0gMC40NTsKKworc3RhdGljIE5TU3RyaW5nICogY29uc3QgUERG
SFVEWm9vbUluQ29udHJvbCA9IEAicGx1cy5tYWduaWZ5aW5nZ2xhc3MiOworc3RhdGljIE5TU3Ry
aW5nICogY29uc3QgUERGSFVEWm9vbU91dENvbnRyb2wgPSBAIm1pbnVzLm1hZ25pZnlpbmdnbGFz
cyI7CitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBQREZIVURMYXVuY2hQcmV2aWV3Q29udHJvbCA9
IEAicHJldmlldyI7CitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBQREZIVURTYXZlUERGQ29udHJv
bCA9IEAiYXJyb3cuZG93bi5jaXJjbGUiOworc3RhdGljIE5TU3RyaW5nICogY29uc3QgUERGSFVE
U2VwZXJhdG9yQ29udHJvbCA9IEAiUERGSFVEU2VwZXJhdG9yQ29udHJvbCI7CisKK3N0YXRpYyBj
b25zdCBDR0Zsb2F0IGxheWVyRmFkZUluVGltZUludGVydmFsID0gMC4yNTsKK3N0YXRpYyBjb25z
dCBDR0Zsb2F0IGxheWVyRmFkZU91dFRpbWVJbnRlcnZhbCA9IDAuNTsKK3N0YXRpYyBjb25zdCBD
R0Zsb2F0IGluaXRpYWxIaWRlVGltZUludGVydmFsID0gMy4wOworCitzdGF0aWMgTlNBcnJheTxO
U1N0cmluZyAqPiAqY29udHJvbEFycmF5KCkKK3sKKyAgICByZXR1cm4gQFsKKyAgICAgICAgUERG
SFVEWm9vbU91dENvbnRyb2wsCisgICAgICAgIFBERkhVRFpvb21JbkNvbnRyb2wsCisgICAgICAg
IFBERkhVRFNlcGVyYXRvckNvbnRyb2wsCisgICAgICAgIFBERkhVRExhdW5jaFByZXZpZXdDb250
cm9sLAorICAgICAgICBQREZIVURTYXZlUERGQ29udHJvbAorICAgIF07Cit9CisKK0BpbXBsZW1l
bnRhdGlvbiBXS1BERkhVRFZpZXcgeworQHByaXZhdGUKKyAgICBXZWFrUHRyPFdlYktpdDo6V2Vi
UGFnZVByb3h5PiBfcGFnZTsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IF9hY3RpdmVDb250cm9s
OworICAgIFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllciBfcGx1Z2luSWRlbnRpZmllcjsKKyAg
ICBDR0Zsb2F0IF9kZXZpY2VTY2FsZUZhY3RvcjsKKyAgICBSZXRhaW5QdHI8Q0FMYXllcj4gX2xh
eWVyOworICAgIFJldGFpblB0cjxDQUxheWVyPiBfYWN0aXZlTGF5ZXI7CisgICAgQ0dTaXplIF9m
cmFtZVNpemU7CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk8TlNTdHJpbmcgKiwg
TlNJbWFnZSAqPj4gX2NhY2hlZEljb25zOworICAgIEJPT0wgX3Zpc2libGU7CisgICAgQk9PTCBf
bW91c2VNb3ZlZFRvSFVEOworICAgIEJPT0wgX2luaXRpYWxIaWRlVGltZXJGaXJlZDsKK30KKwor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSBwbHVnaW5JZGVudGlm
aWVyOihXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIpcGx1Z2luSWRlbnRpZmllciBwYWdlOihX
ZWJLaXQ6OldlYlBhZ2VQcm94eSYpcGFnZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5p
dFdpdGhGcmFtZTpmcmFtZV0pKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIHNlbGYu
d2FudHNMYXllciA9IFlFUzsKKyAgICBfY2FjaGVkSWNvbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxl
RGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOworICAgIF9wbHVnaW5JZGVudGlmaWVyID0gcGx1Z2lu
SWRlbnRpZmllcjsKKyAgICBfcGFnZSA9IG1ha2VXZWFrUHRyKHBhZ2UpOworICAgIF9kZXZpY2VT
Y2FsZUZhY3RvciA9IHBhZ2UuZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBfdmlzaWJsZSA9IFlF
UzsKKyAgICBbc2VsZiBfc2V0dXBMYXllcjpzZWxmLmxheWVyXTsKKyAgICBbc2VsZiBzZXRGcmFt
ZTpmcmFtZV07CisKKyAgICBXZWFrT2JqQ1B0cjxXS1BERkhVRFZpZXc+IHdlYWtTZWxmID0gc2Vs
ZjsKKyAgICBkaXNwYXRjaF9hZnRlcihkaXNwYXRjaF90aW1lKERJU1BBVENIX1RJTUVfTk9XLCAo
aW50NjRfdCkoaW5pdGlhbEhpZGVUaW1lSW50ZXJ2YWwgKiBOU0VDX1BFUl9TRUMpKSwgZGlzcGF0
Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgW3dlYWtTZWxmIF9oaWRlVGltZXJGaXJl
ZF07CisgICAgfSk7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworewor
ICAgIFtfbGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAgIFtzdXBlciBkZWFsbG9jXTsK
K30KKworLSAodm9pZClzZXRGcmFtZTooTlNSZWN0KXJlY3QKK3sKKyAgICBbc3VwZXIgc2V0RnJh
bWU6cmVjdF07CisgICAgX2ZyYW1lU2l6ZSA9IHJlY3Quc2l6ZTsKKworICAgIFtDQVRyYW5zYWN0
aW9uIGJlZ2luXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOwor
ICAgIENHUmVjdCBsYXllckJvdW5kcyA9IFtfbGF5ZXIgYm91bmRzXTsKKyAgICBbX2xheWVyIHNl
dEZyYW1lOkNHUmVjdE1ha2UocmVjdC5zaXplLndpZHRoIC8gMi4wIC0gbGF5ZXJCb3VuZHMuc2l6
ZS53aWR0aCAvIDIuMCwgbGF5ZXJWZXJ0aWNhbE9mZnNldCwgbGF5ZXJCb3VuZHMuc2l6ZS53aWR0
aCwgbGF5ZXJCb3VuZHMuc2l6ZS5oZWlnaHQpXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRd
OworfQorCistICh2b2lkKXNldERldmljZVNjYWxlRmFjdG9yOihDR0Zsb2F0KWRldmljZVNjYWxl
RmFjdG9yCit7CisgICAgaWYgKF9kZXZpY2VTY2FsZUZhY3RvciA9PSBkZXZpY2VTY2FsZUZhY3Rv
cikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIF9kZXZpY2VTY2FsZUZhY3RvciA9IGRldmlj
ZVNjYWxlRmFjdG9yOworICAgIAorICAgIFtzZWxmIF9yZWRyYXdMYXllcl07Cit9CisKKy0gKHZv
aWQpX2hpZGVUaW1lckZpcmVkCit7CisgICAgX2luaXRpYWxIaWRlVGltZXJGaXJlZCA9IFlFUzsK
KyAgICBpZiAoIV9tb3VzZU1vdmVkVG9IVUQpCisgICAgICAgIFtzZWxmIF9zZXRWaXNpYmxlOmZh
bHNlXTsKK30KKworLSAodm9pZClfc2V0VmlzaWJsZTooYm9vbClpc1Zpc2libGUKK3sKKyAgICBp
ZiAoX3Zpc2libGUgPT0gaXNWaXNpYmxlKQorICAgICAgICByZXR1cm47CisgICAgX3Zpc2libGUg
PSBpc1Zpc2libGU7CisgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAgIFtDQVRyYW5zYWN0
aW9uIHNldEFuaW1hdGlvbkR1cmF0aW9uOmlzVmlzaWJsZSA/IGxheWVyRmFkZUluVGltZUludGVy
dmFsIDogbGF5ZXJGYWRlT3V0VGltZUludGVydmFsXTsKKyAgICBbc2VsZiBfc2V0TGF5ZXJPcGFj
aXR5OmlzVmlzaWJsZSA/IGxheWVyQWxwaGEgOiAwLjBdOworICAgIFtDQVRyYW5zYWN0aW9uIGNv
bW1pdF07Cit9CisKKy0gKHZvaWQpbW91c2VNb3ZlZDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAg
aWYgKENHUmVjdENvbnRhaW5zUG9pbnQoW3NlbGYgY29udmVydFJlY3Q6Q0dSZWN0SW5zZXQoW19s
YXllciBmcmFtZV0sIC0xNi4wLCAtMTYuMCkgdG9WaWV3Om5pbF0sIE5TUG9pbnRUb0NHUG9pbnQo
ZXZlbnQubG9jYXRpb25JbldpbmRvdykpKSB7CisgICAgICAgIFtzZWxmIF9zZXRWaXNpYmxlOnRy
dWVdOworICAgICAgICBfbW91c2VNb3ZlZFRvSFVEID0gWUVTOworICAgIH0gZWxzZSBpZiAoX2lu
aXRpYWxIaWRlVGltZXJGaXJlZCkKKyAgICAgICAgW3NlbGYgX3NldFZpc2libGU6ZmFsc2VdOwor
fQorCistICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgX2FjdGl2ZUNv
bnRyb2wgPSBbc2VsZiBfY29udHJvbEZvckV2ZW50OmV2ZW50XTsKKyAgICBpZiAoW19hY3RpdmVD
b250cm9sIGlzRXF1YWxUb1N0cmluZzpQREZIVURTZXBlcmF0b3JDb250cm9sXSkKKyAgICAgICAg
X2FjdGl2ZUNvbnRyb2wgPSBuaWw7CisgICAgaWYgKF9hY3RpdmVDb250cm9sKSB7CisgICAgICAg
IC8vIFVwZGF0ZSByZW5kZXJpbmcgdG8gaGlnaGxpZ2h0IGl0Li4KKyAgICAgICAgX2FjdGl2ZUxh
eWVyID0gW3NlbGYgX2xheWVyRm9yRXZlbnQ6ZXZlbnRdOworICAgICAgICAKKyAgICAgICAgLy8g
VXBkYXRlIGxheWVyIGltYWdlOyBkbyBub3QgYW5pbWF0ZQorICAgICAgICBbQ0FUcmFuc2FjdGlv
biBiZWdpbl07CisgICAgICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107
CisgICAgICAgIAorICAgICAgICBbX2FjdGl2ZUxheWVyIHNldE9wYWNpdHk6Y29udHJvbExheWVy
RG93bkFscGhhXTsKKyAgICAgICAgCisgICAgICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Cisg
ICAgfQorfQorCistICh2b2lkKW1vdXNlVXA6KE5TRXZlbnQgKilldmVudAoreworICAgIGlmICgh
X2FjdGl2ZUNvbnRyb2wpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBOU1N0cmluZyogbW91
c2VVcENvbnRyb2wgPSBbc2VsZiBfY29udHJvbEZvckV2ZW50OmV2ZW50XTsKKyAgICBpZiAoW19h
Y3RpdmVDb250cm9sIGlzRXF1YWxUb1N0cmluZzptb3VzZVVwQ29udHJvbF0pCisgICAgICAgIFtz
ZWxmIF9wZXJmb3JtQWN0aW9uRm9yQ29udHJvbDpfYWN0aXZlQ29udHJvbC5nZXQoKV07CisgICAg
CisgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2Fi
bGVBY3Rpb25zOllFU107CisgICAgW19hY3RpdmVMYXllciBzZXRPcGFjaXR5OmNvbnRyb2xMYXll
ck5vcm1hbEFscGhhXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworCisgICAgX2FjdGl2
ZUxheWVyID0gbmlsOworICAgIF9hY3RpdmVDb250cm9sID0gbmlsOworfQorCistIChPcHRpb25h
bDxOU1VJbnRlZ2VyPilfY29udHJvbEluZGV4Rm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudAorewor
ICAgIENHUG9pbnQgaW5pdGlhbFBvaW50ID0gTlNQb2ludFRvQ0dQb2ludChldmVudC5sb2NhdGlv
bkluV2luZG93KTsKKyAgICBpbml0aWFsUG9pbnQueCAtPSBbX2xheWVyIGZyYW1lXS5vcmlnaW4u
eDsKKyAgICBpbml0aWFsUG9pbnQueSAtPSBbX2xheWVyIGZyYW1lXS5vcmlnaW4ueTsKKyAgICBm
b3IgKE5TVUludGVnZXIgaW5kZXggPSAwOyBpbmRleCA8IFtfbGF5ZXIgc3VibGF5ZXJzXS5jb3Vu
dDsgaW5kZXgrKykgeworICAgICAgICBDQUxheWVyICpzdWJMYXllciA9IFtfbGF5ZXIgc3VibGF5
ZXJzXVtpbmRleF07CisgICAgICAgIE5TUmVjdCB3aW5kb3dTcGFjZVJlY3QgPSBbc2VsZiBjb252
ZXJ0UmVjdDpzdWJMYXllci5mcmFtZSB0b1ZpZXc6bmlsXTsKKyAgICAgICAgaWYgKENHUmVjdENv
bnRhaW5zUG9pbnQod2luZG93U3BhY2VSZWN0LCBpbml0aWFsUG9pbnQpKQorICAgICAgICAgICAg
cmV0dXJuIGluZGV4OworICAgIH0KKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCistIChO
U1N0cmluZyAqKV9jb250cm9sRm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIGlmIChh
dXRvIGluZGV4ID0gW3NlbGYgX2NvbnRyb2xJbmRleEZvckV2ZW50OmV2ZW50XSkKKyAgICAgICAg
cmV0dXJuIGNvbnRyb2xBcnJheSgpWyppbmRleF07CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAo
Q0FMYXllciAqKV9sYXllckZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBpZiAoYXV0
byBpbmRleCA9IFtzZWxmIF9jb250cm9sSW5kZXhGb3JFdmVudDpldmVudF0pCisgICAgICAgIHJl
dHVybiBbX2xheWVyIHN1YmxheWVyc11bKmluZGV4XTsKKyAgICByZXR1cm4gbmlsOworfQorCist
ICh2b2lkKV9wZXJmb3JtQWN0aW9uRm9yQ29udHJvbDooTlNTdHJpbmcgKiljb250cm9sCit7Cisg
ICAgaWYgKCFfdmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8qIHBhZ2UgPSBfcGFn
ZS5nZXQoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoW2NvbnRy
b2wgaXNFcXVhbFRvU3RyaW5nOlBERkhVRFpvb21JbkNvbnRyb2xdKQorICAgICAgICBwYWdlLT5w
ZGZab29tSW4oX3BsdWdpbklkZW50aWZpZXIpOworICAgIGVsc2UgaWYgKFtjb250cm9sIGlzRXF1
YWxUb1N0cmluZzpQREZIVURab29tT3V0Q29udHJvbF0pCisgICAgICAgIHBhZ2UtPnBkZlpvb21P
dXQoX3BsdWdpbklkZW50aWZpZXIpOworICAgIGVsc2UgaWYgKFtjb250cm9sIGlzRXF1YWxUb1N0
cmluZzpQREZIVURTYXZlUERGQ29udHJvbF0pCisgICAgICAgIHBhZ2UtPnBkZlNhdmVUb1BERihf
cGx1Z2luSWRlbnRpZmllcik7CisgICAgZWxzZSBpZiAoW2NvbnRyb2wgaXNFcXVhbFRvU3RyaW5n
OlBERkhVRExhdW5jaFByZXZpZXdDb250cm9sXSkKKyAgICAgICAgcGFnZS0+cGRmT3BlbldpdGhQ
cmV2aWV3KF9wbHVnaW5JZGVudGlmaWVyKTsKK30KKworLSAodm9pZClfbG9hZEljb25JbWFnZXMK
K3sKKyAgICBmb3IgKE5TU3RyaW5nICpjb250cm9sTmFtZSBpbiBjb250cm9sQXJyYXkoKSkKKyAg
ICAgICAgW3NlbGYgX2dldEltYWdlRm9yQ29udHJvbE5hbWU6Y29udHJvbE5hbWVdOworfQorCist
ICh2b2lkKV9zZXR1cExheWVyOihDQUxheWVyICopcGFyZW50TGF5ZXIKK3sKKyAgICBfbGF5ZXIg
PSBhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0pOworICAgIFtfbGF5ZXIgc2V0Q29ybmVy
UmFkaXVzOmxheWVyQ29ybmVyUmFkaXVzXTsKKyAgICAKKyAgICBbX2xheWVyIHNldEJhY2tncm91
bmRDb2xvcjpXZWJDb3JlOjpjYWNoZWRDR0NvbG9yKHsgV2ViQ29yZTo6U1JHQkE8ZmxvYXQ+KGxh
eWVyR3JheUNvbXBvbmVudCwgbGF5ZXJHcmF5Q29tcG9uZW50LCBsYXllckdyYXlDb21wb25lbnQp
IH0pXTsKKyAgICBbc2VsZiBfc2V0TGF5ZXJPcGFjaXR5OmxheWVyQWxwaGFdOworICAgIAorICAg
IFtzZWxmIF9sb2FkSWNvbkltYWdlc107CisgICAgQ0dGbG9hdCBtaW5JY29uSW1hZ2VIZWlnaHQg
PSBzdGQ6Om51bWVyaWNfbGltaXRzPENHRmxvYXQ+OjptYXgoKTsKKyAgICBmb3IgKE5TSW1hZ2Ug
KmltYWdlIGluIFtfY2FjaGVkSWNvbnMgYWxsVmFsdWVzXSkKKyAgICAgICAgbWluSWNvbkltYWdl
SGVpZ2h0ID0gc3RkOjptaW4obWluSWNvbkltYWdlSGVpZ2h0LCAoaW1hZ2Uuc2l6ZS5oZWlnaHQg
LyBfZGV2aWNlU2NhbGVGYWN0b3IpKTsKKyAgICAKKyAgICBDR0Zsb2F0IGR4ID0gbGF5ZXJDb250
cm9sbGVySG9yaXpvbnRhbE1hcmdpbjsKKyAgICBmb3IgKE5TU3RyaW5nICpjb250cm9sTmFtZSBp
biBjb250cm9sQXJyYXkoKSkgeworICAgICAgICBhdXRvIGNvbnRyb2xMYXllciA9IGFkb3B0TlMo
W1tDQUxheWVyIGFsbG9jXSBpbml0XSk7CisgICAgICAgIENHRmxvYXQgZHkgPSAwLjA7CisgICAg
ICAgIENHRmxvYXQgY29udHJvbGxlcldpZHRoID0gMC4wOworICAgICAgICBDR0Zsb2F0IGNvbnRy
b2xsZXJIZWlnaHQgPSAwLjA7CisKKyAgICAgICAgaWYgKFtjb250cm9sTmFtZSBpc0VxdWFsVG9T
dHJpbmc6UERGSFVEU2VwZXJhdG9yQ29udHJvbF0pIHsKKyAgICAgICAgICAgIGR5ID0gbGF5ZXJT
ZXBlcmF0b3JWZXJ0aWNhbE1hcmdpbjsKKyAgICAgICAgICAgIGNvbnRyb2xsZXJXaWR0aCA9IGxh
eWVyU2VwZXJhdG9yQ29udHJvbGxlclNpemU7CisgICAgICAgICAgICBjb250cm9sbGVySGVpZ2h0
ID0gbWluSWNvbkltYWdlSGVpZ2h0ICsgKDIuMCAqIGxheWVySW1hZ2VWZXJ0aWNhbE1hcmdpbikg
LSAoMi4wICogbGF5ZXJTZXBlcmF0b3JWZXJ0aWNhbE1hcmdpbik7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIFtjb250cm9sTGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOltbTlNDb2xvciBsaWdo
dEdyYXlDb2xvcl0gQ0dDb2xvcl1dOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgTlNJ
bWFnZSAqY29udHJvbEltYWdlID0gW3NlbGYgX2dldEltYWdlRm9yQ29udHJvbE5hbWU6Y29udHJv
bE5hbWVdOworICAgICAgICAgICAgW2NvbnRyb2xMYXllciBzZXRDb250ZW50czpjb250cm9sSW1h
Z2VdOworICAgICAgICAgICAgW2NvbnRyb2xMYXllciBzZXRPcGFjaXR5OmNvbnRyb2xMYXllck5v
cm1hbEFscGhhXTsKKworICAgICAgICAgICAgZHkgPSBsYXllckltYWdlVmVydGljYWxNYXJnaW47
CisgICAgICAgICAgICBjb250cm9sbGVyV2lkdGggPSBbY29udHJvbEltYWdlIHNpemVdLndpZHRo
IC8gX2RldmljZVNjYWxlRmFjdG9yOworICAgICAgICAgICAgY29udHJvbGxlckhlaWdodCA9IFtj
b250cm9sSW1hZ2Ugc2l6ZV0uaGVpZ2h0IC8gX2RldmljZVNjYWxlRmFjdG9yOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBkeSAtPSAoY29udHJvbGxlckhlaWdodCAtIG1pbkljb25JbWFnZUhl
aWdodCkgLyAyLjA7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFtjb250cm9sTGF5ZXIgc2V0
RmlsdGVyczpAW1tDQUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJDb2xvckludmVydF1d
XTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgW2NvbnRyb2xMYXllciBzZXRGcmFtZTpD
R1JlY3RNYWtlKGR4LCBkeSwgY29udHJvbGxlcldpZHRoLCBjb250cm9sbGVySGVpZ2h0KV07Cisg
ICAgICAgIFtfbGF5ZXIgYWRkU3VibGF5ZXI6Y29udHJvbExheWVyLmdldCgpXTsKKyAgICAgICAg
CisgICAgICAgIGR4ICs9IGNvbnRyb2xsZXJXaWR0aCArIGxheWVyQ29udHJvbGxlckhvcml6b250
YWxNYXJnaW47CisgICAgfQorICAgIAorICAgIFtfbGF5ZXIgc2V0RnJhbWU6Q0dSZWN0TWFrZSgw
LCBsYXllclZlcnRpY2FsT2Zmc2V0LCBkeCwgbWluSWNvbkltYWdlSGVpZ2h0ICsgMi4wICogbGF5
ZXJJbWFnZVZlcnRpY2FsTWFyZ2luKV07CisgICAgW3BhcmVudExheWVyIGFkZFN1YmxheWVyOl9s
YXllci5nZXQoKV07Cit9CisKKy0gKHZvaWQpX3JlZHJhd0xheWVyCit7CisgICAgW19jYWNoZWRJ
Y29ucyByZW1vdmVBbGxPYmplY3RzXTsKKyAgICBDQUxheWVyICpwYXJlbnRMYXllciA9IFtfbGF5
ZXIgc3VwZXJsYXllcl07CisgICAgW19sYXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07CisgICAg
W3NlbGYgX3NldHVwTGF5ZXI6cGFyZW50TGF5ZXJdOworICAgIFtzZWxmIHNldEZyYW1lU2l6ZTpf
ZnJhbWVTaXplXTsKK30KKworLSAoTlNJbWFnZSAqKV9nZXRJbWFnZUZvckNvbnRyb2xOYW1lOihO
U1N0cmluZyAqKWNvbnRyb2wKK3sKKyAgICBOU0ltYWdlICppY29uSW1hZ2UgPSBfY2FjaGVkSWNv
bnMuZ2V0KClbY29udHJvbF07CisgICAgaWYgKGljb25JbWFnZSkKKyAgICAgICAgcmV0dXJuIGlj
b25JbWFnZTsKKworICAgIGljb25JbWFnZSA9IFtOU0ltYWdlIF9pbWFnZVdpdGhTeXN0ZW1TeW1i
b2xOYW1lOmNvbnRyb2xdOworICAgIGlmICghaWNvbkltYWdlKQorICAgICAgICByZXR1cm4gbmls
OworCisgICAgLy8gVGhpcyB3YXMgaW50cm9kdWNlZCBpbiByZGFyOi8vcHJvYmxlbS81OTExODQx
MgorICAgIGljb25JbWFnZSA9IFtpY29uSW1hZ2UgX2ltYWdlV2l0aENvbmZpZ3VyYXRpb246QHsK
KyAgICAgICAgTlNJbWFnZUFsdGVybmF0ZUNyaXRlcmlvbkZvbnQ6W05TRm9udCBwcmVmZXJyZWRG
b250Rm9yVGV4dFN0eWxlOk5TRm9udFRleHRTdHlsZVRpdGxlMiBvcHRpb25zOkB7IH1dLAorICAg
ICAgICBOU0ltYWdlQWx0ZXJuYXRlQ3JpdGVyaW9uU3ltYm9sU2NhbGU6QChOU0ltYWdlU3ltYm9s
U2NhbGVMYXJnZSkKKyAgICB9XTsKKyAgICAgICAgCisgICAgTlNSZWN0IGljb25JbWFnZVJlY3Qg
PSBOU01ha2VSZWN0KDAsIDAsIFtpY29uSW1hZ2Ugc2l6ZV0ud2lkdGggKiBsYXllckltYWdlU2Nh
bGUgKiBfZGV2aWNlU2NhbGVGYWN0b3IsIFtpY29uSW1hZ2Ugc2l6ZV0uaGVpZ2h0ICogbGF5ZXJJ
bWFnZVNjYWxlICogX2RldmljZVNjYWxlRmFjdG9yKTsKKyAgICBOU0ltYWdlUmVwICppY29uSW1h
Z2VSZXAgPSBbaWNvbkltYWdlIGJlc3RSZXByZXNlbnRhdGlvbkZvclJlY3Q6aWNvbkltYWdlUmVj
dCBjb250ZXh0Om5pbCBoaW50czpuaWxdOworICAgIGljb25JbWFnZSA9IFtOU0ltYWdlIGltYWdl
V2l0aEltYWdlUmVwOmljb25JbWFnZVJlcF07CisgICAgCisgICAgX2NhY2hlZEljb25zLmdldCgp
W2NvbnRyb2xdID0gaWNvbkltYWdlOworICAgIHJldHVybiBpY29uSW1hZ2U7Cit9CisKKy0gKHZv
aWQpX3NldExheWVyT3BhY2l0eTooQ0dGbG9hdClhbHBoYQoreworICAgIFtfbGF5ZXIgc2V0T3Bh
Y2l0eTphbHBoYV07CisgICAgZm9yIChDQUxheWVyICpzdWJMYXllciBpbiBbX2xheWVyIHN1Ymxh
eWVyc10pCisgICAgICAgIFtzdWJMYXllciBzZXRPcGFjaXR5OmFscGhhXTsKK30KKworQGVuZAor
CisjZW5kaWYgLy8gRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQkocmV2aXNpb24gMjY2Mjg0
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTA4OCwxNiArMTA4OCw2IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRQ
ZXJmb3JtRGljdGlvbmFyeUwKICAgICBwYWdlQ2xpZW50KCkuZGlkUGVyZm9ybURpY3Rpb25hcnlM
b29rdXAoZGljdGlvbmFyeVBvcHVwSW5mbyk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpzYXZl
UERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKGNvbnN0IFN0
cmluZyYsIEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwgY29uc3Qg
U3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYlBhZ2VQcm94
eTo6b3BlblBERkZyb21UZW1wb3JhcnlGb2xkZXJXaXRoTmF0aXZlQXBwbGljYXRpb24oRnJhbWVJ
bmZvRGF0YSYmLCBjb25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
IHZvaWQgV2ViUGFnZVByb3h5OjpzZXRSZW1vdGVMYXllclRyZWVSb290Tm9kZShSZW1vdGVMYXll
clRyZWVOb2RlKiByb290Tm9kZSkKIHsKICAgICBwYWdlQ2xpZW50KCkuc2V0UmVtb3RlTGF5ZXJU
cmVlUm9vdE5vZGUocm9vdE5vZGUpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFj
L1BhZ2VDbGllbnRJbXBsTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgJKHJldmlzaW9uIDI2NjI4NCkKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTAsNiArMTkwLDEzIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHJlZ2lzdGVySW5zZXJ0aW9u
VW5kb0dyb3VwaW5nKCkgb3ZlcnJpZGU7CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVE
KQorICAgIHZvaWQgY3JlYXRlUERGSFVEKFBERlBsdWdpbklkZW50aWZpZXIsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIHVwZGF0ZVBERkhVRExvY2F0aW9uKFBE
RlBsdWdpbklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHJlbW92ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyKSBvdmVycmlkZTsKKyAgICB2
b2lkIHJlbW92ZUFsbFBERkhVRHMoKSBvdmVycmlkZTsKKyNlbmRpZgorCiAgICAgLy8gQXV4aWxp
YXJ5IENsaWVudCBDcmVhdGlvbgogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICBXZWJG
dWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50JiBmdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50
KCkgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVu
dEltcGxNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1Bh
Z2VDbGllbnRJbXBsTWFjLm1tCShyZXZpc2lvbiAyNjYyODQpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM0OSw2
ICszNDksMzAgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVnaXN0ZXJJbnNlcnRpb25VbgogICAg
IHJlZ2lzdGVySW5zZXJ0aW9uVW5kb0dyb3VwaW5nV2l0aFVuZG9NYW5hZ2VyKFttX3ZpZXcgdW5k
b01hbmFnZXJdKTsKIH0KIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKK3ZvaWQg
UGFnZUNsaWVudEltcGw6OmNyZWF0ZVBERkhVRChQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZp
ZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCit7CisgICAgbV9pbXBsLT5jcmVhdGVQ
REZIVUQoaWRlbnRpZmllciwgcmVjdCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnVwZGF0
ZVBERkhVRExvY2F0aW9uKFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBtX2ltcGwtPnVwZGF0ZVBERkhVRExvY2F0aW9u
KGlkZW50aWZpZXIsIHJlY3QpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpyZW1vdmVQREZI
VUQoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIG1faW1wbC0+cmVtb3Zl
UERGSFVEKGlkZW50aWZpZXIpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpyZW1vdmVBbGxQ
REZIVURzKCkKK3sKKyAgICBtX2ltcGwtPnJlbW92ZUFsbFBERkhVRHMoKTsKK30KKworI2VuZGlm
IC8vIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKIHZvaWQgUGFnZUNsaWVudEltcGw6OmNs
ZWFyQWxsRWRpdENvbW1hbmRzKCkKIHsKICAgICBtX2ltcGwtPmNsZWFyQWxsRWRpdENvbW1hbmRz
KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlN
YWMubW0JKHJldmlzaW9uIDI2NjI4NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9X
ZWJQYWdlUHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ3NSw4ICs0NzUsNiBAQCBzdGF0
aWMgTlNTdHJpbmcgKnBhdGhUb1BERk9uRGlzayhjb25zdCBTCiAKIHZvaWQgV2ViUGFnZVByb3h5
OjpzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKGNv
bnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIEZyYW1lSW5mb0RhdGEmJiBmcmFtZUluZm8s
IGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YSwgY29uc3QgU3RyaW5nJiBwZGZVVUlEKQog
ewotICAgIE1FU1NBR0VfQ0hFQ0soVGVtcG9yYXJ5UERGRmlsZU1hcDo6aXNWYWxpZEtleShwZGZV
VUlEKSk7Ci0KICAgICBpZiAoZGF0YS5pc0VtcHR5KCkpIHsKICAgICAgICAgV1RGTG9nQWx3YXlz
KCJDYW5ub3Qgc2F2ZSBlbXB0eSBQREYgZmlsZSB0byB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeS4i
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtNTA0LDcgKzUwMiw4IEBAIHZvaWQgV2ViUGFnZVByb3h5
OjpzYXZlUERGVG9UZW1wb3JhcnlGb2wKICAgICBhdXRvIG9yaWdpbmF0aW5nVVJMU3RyaW5nID0g
ZnJhbWVJbmZvLnJlcXVlc3QudXJsKCkuc3RyaW5nKCk7CiAgICAgRmlsZVN5c3RlbTo6c2V0TWV0
YWRhdGFVUkwobnNQYXRoLmdldCgpLCBvcmlnaW5hdGluZ1VSTFN0cmluZyk7CiAKLSAgICBtX3Rl
bXBvcmFyeVBERkZpbGVzLmFkZChwZGZVVUlELCBuc1BhdGguZ2V0KCkpOworICAgIGlmIChUZW1w
b3JhcnlQREZGaWxlTWFwOjppc1ZhbGlkS2V5KHBkZlVVSUQpKQorICAgICAgICBtX3RlbXBvcmFy
eVBERkZpbGVzLmFkZChwZGZVVUlELCBuc1BhdGguZ2V0KCkpOwogCiAgICAgYXV0byBwZGZGaWxl
VVJMID0gVVJMOjpmaWxlVVJMV2l0aEZpbGVTeXN0ZW1QYXRoKFN0cmluZyhuc1BhdGguZ2V0KCkp
KTsKICAgICBtX3VpQ2xpZW50LT5jb25maXJtUERGT3BlbmluZygqdGhpcywgcGRmRmlsZVVSTCwg
V1RGTW92ZShmcmFtZUluZm8pLCBbcGRmRmlsZVVSTF0gKGJvb2wgYWxsb3dlZCkgewpAQCAtNTE0
LDYgKzUxMyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzYXZlUERGVG9UZW1wb3JhcnlGb2wKICAg
ICB9KTsKIH0KIAorI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKSAmJiAhRU5BQkxFKFVJX1BST0NF
U1NfUERGX0hVRCkKIHZvaWQgV2ViUGFnZVByb3h5OjpvcGVuUERGRnJvbVRlbXBvcmFyeUZvbGRl
cldpdGhOYXRpdmVBcHBsaWNhdGlvbihGcmFtZUluZm9EYXRhJiYgZnJhbWVJbmZvLCBjb25zdCBT
dHJpbmcmIHBkZlVVSUQpCiB7CiAgICAgTUVTU0FHRV9DSEVDSyhUZW1wb3JhcnlQREZGaWxlTWFw
Ojppc1ZhbGlkS2V5KHBkZlVVSUQpKTsKQEAgLTUzMCw2ICs1MzAsNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6b3BlblBERkZyb21UZW1wb3JhcnlGCiAgICAgICAgIFtbTlNXb3Jrc3BhY2Ugc2hhcmVk
V29ya3NwYWNlXSBvcGVuVVJMOnBkZkZpbGVVUkxdOwogICAgIH0pOwogfQorI2VuZGlmCiAKICNp
ZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKIHZvaWQgV2ViUGFnZVByb3h5OjpzaG93UERGQ29udGV4
dE1lbnUoY29uc3QgV2ViS2l0OjpQREZDb250ZXh0TWVudSYgY29udGV4dE1lbnUsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8aW50MzJfdD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC02NzMsNiArNjc0LDQ5IEBAIFBsYXRmb3JtVmlldyogV2ViUGFnZVByb3h5OjpwbGF0Zm9y
bVZpZXcKICAgICByZXR1cm4gW3BhZ2VDbGllbnQoKS5wbGF0Zm9ybVdpbmRvdygpIGNvbnRlbnRW
aWV3XTsKIH0KIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKK3ZvaWQgV2ViUGFn
ZVByb3h5OjpjcmVhdGVQREZIVUQoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIHBhZ2VDbGllbnQoKS5jcmVhdGVQREZI
VUQoaWRlbnRpZmllciwgcmVjdCk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpyZW1vdmVQREZI
VUQoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIHBhZ2VDbGllbnQoKS5y
ZW1vdmVQREZIVUQoaWRlbnRpZmllcik7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5Ojp1cGRhdGVQ
REZIVURMb2NhdGlvbihQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHJlY3QpCit7CisgICAgcGFnZUNsaWVudCgpLnVwZGF0ZVBERkhVRExvY2F0
aW9uKGlkZW50aWZpZXIsIHJlY3QpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6cGRmWm9vbUlu
KFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpab29tUERGSW4oaWRlbnRpZmllcikpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6
cGRmWm9vbU91dChQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6Wm9vbVBERk91dChpZGVudGlmaWVyKSk7Cit9CisKK3ZvaWQgV2Vi
UGFnZVByb3h5OjpwZGZTYXZlVG9QREYoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQor
eworICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViUGFnZTo6U2F2ZVBERihpZGVu
dGlmaWVyKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gKFN0cmluZyYm
IHN1Z2dlc3RlZEZpbGVuYW1lLCBVUkwmJiBvcmlnaW5hdGluZ1VSTCwgY29uc3QgSVBDOjpEYXRh
UmVmZXJlbmNlJiBkYXRhUmVmZXJlbmNlKSB7CisgICAgICAgIHNhdmVQREZUb0ZpbGVJbkRvd25s
b2Fkc0ZvbGRlcihXVEZNb3ZlKHN1Z2dlc3RlZEZpbGVuYW1lKSwgV1RGTW92ZShvcmlnaW5hdGlu
Z1VSTCksIGRhdGFSZWZlcmVuY2UpOworICAgIH0pOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6
cGRmT3BlbldpdGhQcmV2aWV3KFBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAg
ICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6Ok9wZW5QREZXaXRoUHJldmll
dyhpZGVudGlmaWVyKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gKFN0
cmluZyYmIHN1Z2dlc3RlZEZpbGVuYW1lLCBGcmFtZUluZm9EYXRhJiYgZnJhbWVJbmZvLCBjb25z
dCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGEsIGNvbnN0IFN0cmluZyYgcGRmVVVJRCkgeworICAg
ICAgICBzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9u
KFdURk1vdmUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBXVEZNb3ZlKGZyYW1lSW5mbyksIGRhdGEsIHBk
ZlVVSUQpOworICAgIH0pOworfQorCisjZW5kaWYgLy8gRU5BQkxFKFVJX1BST0NFU1NfUERGX0hV
RCkKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDI2NjI4NCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3OTAsNiArMTc5MCw3IEBACiAJCUQzQjk0
ODQ5MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJTZWFyY2hQb3B1cE1lbnUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzQjk0ODQ1MTFGRjRCNjUwMDAzMkIz
OSAvKiBXZWJTZWFyY2hQb3B1cE1lbnUuaCAqLzsgfTsKIAkJREY0NjJFMEYyM0YyMkY1NTAwRUZG
MzVGIC8qIFdLSFRUUENvb2tpZVN0b3JlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREY0NjJFMEUyM0YyMkY1MzAwRUZGMzVGIC8qIFdLSFRU
UENvb2tpZVN0b3JlUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCURGNDYyRTEyMjNGMzM4QkUwMEVGRjM1RiAvKiBXS0NvbnRlbnRXb3Js
ZFByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IERGNDYyRTExMjNGMzM4QUQwMEVGRjM1RiAvKiBXS0NvbnRlbnRXb3JsZFByaXZhdGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlERjg0Q0VFNDI0
OUFBMjREMDA5MDk2RjYgLyogV0tQREZIVURWaWV3Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREY4NENFRTIyNDlBQTIxRjAwOTA5NkY2IC8qIFdLUERG
SFVEVmlldy5tbSAqLzsgfTsKIAkJRTEwNUZFNTQxOEQ3QjlERTAwOEY1N0E4IC8qIEVkaXRpbmdS
YW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEw
NUZFNTMxOEQ3QjlERTAwOEY1N0E4IC8qIEVkaXRpbmdSYW5nZS5oICovOyB9OwogCQlFMTFEMzVB
RTE2QjYzRDFCMDA2RDIzRDcgLyogY29tLmFwcGxlLldlYlByb2Nlc3Muc2IgaW4gUmVzb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOTY3RTM3MTUwQUI1RTIwMEM3
MzE2OSAvKiBjb20uYXBwbGUuV2ViUHJvY2Vzcy5zYiAqLzsgfTsKIAkJRTE0QTk1NEExNkUwMTZB
NDAwNjhERTgyIC8qIE5ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTRBOTU0ODE2RTAxNkE0MDA2
OERFODIgLyogTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXMuaCAqLzsgfTsKQEAgLTUy
NzksNiArNTI4MCw5IEBACiAJCURGNDYyRTExMjNGMzM4QUQwMEVGRjM1RiAvKiBXS0NvbnRlbnRX
b3JsZFByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tDb250ZW50
V29ybGRQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURGNThDNjMxMTM3
MUFDNTgwMEY5QTM3QyAvKiBOYXRpdmVXZWJXaGVlbEV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5hdGl2ZVdlYldoZWVsRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJREY1OEM2MzUxMzcxQUNBMDAwRjlBMzdDIC8qIE5hdGl2ZVdlYldoZWVsRXZl
bnRNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBOYXRpdmVX
ZWJXaGVlbEV2ZW50TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlERjc0Mjc1
QzI0RjQ5NTUwMDBGOEFCRTkgLyogUERGUGx1Z2luSWRlbnRpZmllci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQREZQbHVnaW5JZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCURGODRDRUUyMjQ5QUEyMUYwMDkwOTZGNiAvKiBXS1BERkhVRFZpZXcu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS1BERkhVRFZpZXcu
bW07IHBhdGggPSBQREYvV0tQREZIVURWaWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlERjg0Q0VFMzI0OUFBMjFGMDA5MDk2RjYgLyogV0tQREZIVURWaWV3LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLUERGSFVEVmlldy5oOyBwYXRoID0gUERGL1dLUERG
SFVEVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTA1RkU1MzE4RDdCOURF
MDA4RjU3QTggLyogRWRpdGluZ1JhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEVkaXRpbmdSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTE1Qzcx
NTE5MEY4QTI1MDBFQ0M1MTYgLyogY29tLmFwcGxlLldlYktpdC5TdG9yYWdlLnNiICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgbmFtZSA9IGNvbS5hcHBsZS5XZWJLaXQuU3RvcmFnZS5zYjsgcGF0aCA9IERlcml2
ZWRTb3VyY2VzL1dlYktpdDIvY29tLmFwcGxlLldlYktpdC5TdG9yYWdlLnNiOyBzb3VyY2VUcmVl
ID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlFMTMzRkQ4OTE0MjNERDdGMDBGQzdCRkIgLyog
V2ViS2l0LmljbnMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBpbWFnZS5pY25zOyBuYW1lID0gV2ViS2l0LmljbnM7IHBhdGggPSBSZXNvdXJjZXMvV2Vi
S2l0LmljbnM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01OTAwLDYgKzU5MDQsNyBA
QAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMUE2RkI5MDgxMUU2NkZCMTAwREIxMzcxIC8qIE5ldHNj
YXBlICovLAogCQkJCUUxOTk4NzVCMTQyQkY5Q0YwMEJCMkRFNyAvKiBQREYgKi8sCisJCQkJREY3
NDI3NUMyNEY0OTU1MDAwRjhBQkU5IC8qIFBERlBsdWdpbklkZW50aWZpZXIuaCAqLywKIAkJCQkx
QTZGQjdEMDExRTY1MUUyMDBEQjEzNzEgLyogUGx1Z2luLmNwcCAqLywKIAkJCQkxQTZGQjdEMTEx
RTY1MUUyMDBEQjEzNzEgLyogUGx1Z2luLmggKi8sCiAJCQkJMUFBNTZGMjgxMUU5MkJDODAwNjFC
ODgyIC8qIFBsdWdpbkNvbnRyb2xsZXIuaCAqLywKQEAgLTg5NjMsNiArODk2OCw3IEBACiAJCQkJ
Q0Q0NTcwRDgyNDQ0Q0ExNzAwQTNEQ0VCIC8qIE1lZGlhICovLAogCQkJCTUxMENDN0U3MTYxMzhF
NzIwMEQwM0VEMyAvKiBOZXR3b3JrICovLAogCQkJCTMxQTJFQzQwMTQ4OTk3MzcwMDgxMEQ3MSAv
KiBOb3RpZmljYXRpb25zICovLAorCQkJCURGODRDRUUxMjQ5QUEyMDAwMDkwOTZGNiAvKiBQREYg
Ki8sCiAJCQkJMUFFRkNDMDUxMUQwMUYzNDAwODIxOUQzIC8qIFBsdWdpbnMgKi8sCiAJCQkJMkQx
NTUxQTkxRjVBOUI0MjAwMDZFM0ZFIC8qIFJlbW90ZUxheWVyVHJlZSAqLywKIAkJCQkxQUFGMDg5
RTE5MjY4MUFDMDBCNjM5MEMgLyogVXNlckNvbnRlbnQgKi8sCkBAIC0xMDQ1MSw2ICsxMDQ1Nywx
NSBAQAogCQkJcGF0aCA9IGlvczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJ
CURGODRDRUUxMjQ5QUEyMDAwMDkwOTZGNiAvKiBQREYgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91
cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCURGODRDRUUzMjQ5QUEyMUYwMDkwOTZGNiAvKiBXS1BE
RkhVRFZpZXcuaCAqLywKKwkJCQlERjg0Q0VFMjI0OUFBMjFGMDA5MDk2RjYgLyogV0tQREZIVURW
aWV3Lm1tICovLAorCQkJKTsKKwkJCW5hbWUgPSBQREY7CisJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOworCQl9OwogCQlFMTcwODc2RDE2RDZDQTcyMDBGOTkyMjYgLyogRmlsZUFQSSAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0xMzE0Miw2ICsxMzE1Nyw3
IEBACiAJCQkJNjM3MjgxQTMyMUFEQzc0NDAwOUUwREU2IC8qIFdLRG93bmxvYWRQcm9ncmVzcy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTVDRTkxMjBEMjI5M0MyMTkwMDVCRUM3OCAvKiBXS01haW4u
bW0gaW4gU291cmNlcyAqLywKIAkJCQk0NjU3RDg4QTIyNjY0QTJGMDA1REU4MjMgLyogV0tPcmll
bnRhdGlvbkFjY2Vzc0FsZXJ0Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJREY4NENFRTQyNDlBQTI0
RDAwOTA5NkY2IC8qIFdLUERGSFVEVmlldy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTVDQTI2RDgz
MjE3QUQxQjgwMEY5N0EzNSAvKiBXS1NhZmVCcm93c2luZ1dhcm5pbmcubW0gaW4gU291cmNlcyAq
LywKIAkJCQkxREIwMTk0NDIxMUNGMDA1MDA5RkIzRTggLyogV0tTaGFyZVNoZWV0Lm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0E3OEZGMzMyMjQxOTE5QjAwOTY0ODNFIC8qIFdLU3RvcmFnZUFjY2Vz
c0FsZXJ0Lm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
UGx1Z2lucy9QREZQbHVnaW5JZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGUGx1Z2luSWRlbnRpZmllci5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERlBsdWdpbklkZW50aWZpZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCitlbnVtIFBERlBsdWdpbklk
ZW50aWZpZXJUeXBlIHsgfTsKK3VzaW5nIFBERlBsdWdpbklkZW50aWZpZXIgPSBPYmplY3RJZGVu
dGlmaWVyPFBERlBsdWdpbklkZW50aWZpZXJUeXBlPjsKKyNlbmRpZgorCit9CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGTGF5ZXJDb250cm9sbGVyU1BJLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERkxh
eWVyQ29udHJvbGxlclNQSS5oCShyZXZpc2lvbiAyNjYyODQpCisrKyBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvUGx1Z2lucy9QREYvUERGTGF5ZXJDb250cm9sbGVyU1BJLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTg3LDYgKzg3LDEyIEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFBERkxheWVy
Q29udHIKIAogLSAodm9pZClzbmFwc2hvdEluQ29udGV4dDooQ0dDb250ZXh0UmVmKWNvbnRleHQ7
CiAKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorLSAodm9pZClzZXREaXNwbGF5c1BE
RkhVRENvbnRyb2xsZXI6KEJPT0wpZGlzcGxheXNDb250cm9sbGVyOworLSAodm9pZCl6b29tSW46
KGlkKWF0UG9pbnQ7CistICh2b2lkKXpvb21PdXQ6KGlkKWF0UG9pbnQ7CisjZW5kaWYKKwogLSAo
dm9pZCltYWduaWZ5V2l0aE1hZ25pZmljYXRpb246KENHRmxvYXQpbWFnbmlmaWNhdGlvbiBhdFBv
aW50OihDR1BvaW50KXBvaW50IGltbWVkaWF0ZWx5OihCT09MKWltbWVkaWF0ZWx5OwogCiAtIChD
R1BvaW50KXNjcm9sbFBvc2l0aW9uOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1Bs
dWdpbnMvUERGL1BERlBsdWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaAkocmV2aXNpb24gMjY2Mjg0KQorKysgU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCiAKICNpbmNsdWRl
ICJQREZLaXRJbXBvcnRzLmgiCisjaW5jbHVkZSAiUERGUGx1Z2luSWRlbnRpZmllci5oIgogI2lu
Y2x1ZGUgIlBsdWdpbi5oIgogI2luY2x1ZGUgIldlYkV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViSGl0
VGVzdFJlc3VsdERhdGEuaCIKQEAgLTUwLDYgKzUxLDcgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3Qg
T3BhcXVlSlNWYWx1ZSogSlNWYQogT0JKQ19DTEFTUyBOU0FycmF5OwogT0JKQ19DTEFTUyBOU0F0
dHJpYnV0ZWRTdHJpbmc7CiBPQkpDX0NMQVNTIE5TRGF0YTsKK09CSkNfQ0xBU1MgTlNFdmVudDsK
IE9CSkNfQ0xBU1MgTlNTdHJpbmc7CiBPQkpDX0NMQVNTIFBERkFubm90YXRpb247CiBPQkpDX0NM
QVNTIFBERkxheWVyQ29udHJvbGxlcjsKQEAgLTc3LDggKzc5LDkgQEAgY2xhc3MgUERGUGx1Z2lu
QW5ub3RhdGlvbjsKIGNsYXNzIFBERlBsdWdpblBhc3N3b3JkRmllbGQ7CiBjbGFzcyBQbHVnaW5W
aWV3OwogY2xhc3MgV2ViRnJhbWU7CitzdHJ1Y3QgRnJhbWVJbmZvRGF0YTsKIAotY2xhc3MgUERG
UGx1Z2luIGZpbmFsIDogcHVibGljIFBsdWdpbiwgcHJpdmF0ZSBXZWJDb3JlOjpTY3JvbGxhYmxl
QXJlYQorY2xhc3MgUERGUGx1Z2luIGZpbmFsIDogcHVibGljIFBsdWdpbiwgcHVibGljIFdlYkNv
cmU6OlNjcm9sbGFibGVBcmVhCiAjaWYgSEFWRShJTkNSRU1FTlRBTF9QREZfQVBJUykKICAgICAs
IHByaXZhdGUgV2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQKICNlbmRp
ZgpAQCAtMTAzLDkgKzEwNiwxOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBub3RpZnlTZWxlY3Rpb25D
aGFuZ2VkKFBERlNlbGVjdGlvbiAqKTsKICAgICB2b2lkIG5vdGlmeUN1cnNvckNoYW5nZWQodWlu
dDY0X3QgLyogUERGTGF5ZXJDb250cm9sbGVyQ3Vyc29yVHlwZSAqLyk7CiAKKyNpZiBFTkFCTEUo
VUlfUFJPQ0VTU19QREZfSFVEKQorICAgIHZvaWQgem9vbUluKCk7CisgICAgdm9pZCB6b29tT3V0
KCk7CisgICAgdm9pZCBzYXZlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJiwg
Y29uc3QgVVJMJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik+JiYpOworICAgIHZvaWQgb3Bl
bldpdGhQcmV2aWV3KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJiwgRnJhbWVJ
bmZvRGF0YSYmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmKT4mJik7
CisgICAgUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9p
ZGVudGlmaWVyOyB9CisjZW5kaWYKKwogICAgIHZvaWQgY2xpY2tlZExpbmsoTlNVUkwgKik7Cisj
aWYgIUVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCiAgICAgdm9pZCBzYXZlVG9QREYoKTsKICAg
ICB2b2lkIG9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oKTsKKyNlbmRpZgogICAgIHZvaWQgd3Jp
dGVJdGVtc1RvUGFzdGVib2FyZChOU1N0cmluZyAqcGFzdGVib2FyZE5hbWUsIE5TQXJyYXkgKml0
ZW1zLCBOU0FycmF5ICp0eXBlcyk7CiAgICAgdm9pZCBzaG93RGVmaW5pdGlvbkZvckF0dHJpYnV0
ZWRTdHJpbmcoTlNBdHRyaWJ1dGVkU3RyaW5nICosIENHUG9pbnQpOwogICAgIHZvaWQgcGVyZm9y
bVdlYlNlYXJjaChOU1N0cmluZyAqKTsKQEAgLTExOCw3ICsxMzEsMTAgQEAgcHVibGljOgogCiAg
ICAgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRGcm9tUERGVmlld1RvU2NyZWVuKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYpIGNvbnN0OwogICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRG
cm9tUm9vdFZpZXdUb1BERlZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKKyAg
ICBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3KGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JikgY29uc3Q7CisgICAgV2ViQ29yZTo6SW50UmVjdCBjb252ZXJ0RnJv
bVBERlZpZXdUb1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdDsKICAgICBX
ZWJDb3JlOjpJbnRSZWN0IGJvdW5kc09uU2NyZWVuKCkgY29uc3Q7CisgICAgV2ViQ29yZTo6SW50
UmVjdCBmcmFtZUZvckhVRCgpIGNvbnN0OwogCiAgICAgYm9vbCBzaG93Q29udGV4dE1lbnVBdFBv
aW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CiAKQEAgLTE1OSw3ICsxNzUsNyBAQCBwcml2
YXRlOgogICAgIGJvb2wgd2FudHNXaGVlbEV2ZW50cygpIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0K
ICAgICB2b2lkIGdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHBsdWdp
blNpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0LCBjb25zdCBXZWJDb3JlOjpB
ZmZpbmVUcmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0pIGZpbmFsOwogICAgIHZv
aWQgY29udGVudHNTY2FsZUZhY3RvckNoYW5nZWQoZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgdmlz
aWJpbGl0eURpZENoYW5nZShib29sKSBmaW5hbCB7IH0KKyAgICB2b2lkIHZpc2liaWxpdHlEaWRD
aGFuZ2UoYm9vbCkgZmluYWw7CiAgICAgdm9pZCBmcmFtZURpZEZpbmlzaExvYWRpbmcodWludDY0
X3QgcmVxdWVzdElEKSBmaW5hbDsKICAgICB2b2lkIGZyYW1lRGlkRmFpbCh1aW50NjRfdCByZXF1
ZXN0SUQsIGJvb2wgd2FzQ2FuY2VsbGVkKSBmaW5hbDsKICAgICB2b2lkIGRpZEV2YWx1YXRlSmF2
YVNjcmlwdCh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFN0cmluZyYgcmVzdWx0KSBmaW5hbDsK
QEAgLTI2Myw3ICsyNzksNiBAQCBwcml2YXRlOgogICAgIE5TRXZlbnQgKm5zRXZlbnRGb3JXZWJN
b3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKICAgICBXZWJDb3JlOjpJbnRQb2ludCBj
b252ZXJ0RnJvbVBsdWdpblRvUERGVmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0
OwogICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tUm9vdFZpZXdUb1BsdWdpbihjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OwotICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZl
cnRGcm9tUERGVmlld1RvUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsK
ICAgICAKICAgICBib29sIHN1cHBvcnRzRm9ybXMoKTsKICAgICBib29sIGlzRnVsbEZyYW1lUGx1
Z2luKCkgY29uc3Q7CkBAIC00MDMsNiArNDE4LDkgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAjZW5k
aWYgLy8gSEFWRShJTkNSRU1FTlRBTF9QREZfQVBJUykKKyNpZiBFTkFCTEUoVUlfUFJPQ0VTU19Q
REZfSFVEKQorICAgIFBERlBsdWdpbklkZW50aWZpZXIgbV9pZGVudGlmaWVyOworI2VuZGlmCiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQkocmV2aXNpb24gMjY2Mjg0KQorKysg
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNDMzLDEyICs0MzMsMTYgQEAgLSAodm9pZClwZXJmb3JtU3BvdGxpZ2h0U2Vh
cmNoOihOU1N0cmluZwogCiAtICh2b2lkKW9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24KIHsKKyNp
ZiAhRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKICAgICBfcGRmUGx1Z2luLT5vcGVuV2l0aE5h
dGl2ZUFwcGxpY2F0aW9uKCk7CisjZW5kaWYKIH0KIAogLSAodm9pZClzYXZlVG9QREYKIHsKKyNp
ZiAhRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKICAgICBfcGRmUGx1Z2luLT5zYXZlVG9QREYo
KTsKKyNlbmRpZgogfQogCiAtICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250
cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIGNsaWNrZWRMaW5rV2l0aFVSTDooTlNVUkwgKil1
cmwKQEAgLTYwMCw3ICs2MDQsMTMgQEAgaW5saW5lIFBERlBsdWdpbjo6UERGUGx1Z2luKFdlYkZy
YW1lJiBmcgogI2lmIEhBVkUoSU5DUkVNRU5UQUxfUERGX0FQSVMpCiAgICAgLCBtX2luY3JlbWVu
dGFsUERGTG9hZGluZ0VuYWJsZWQoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS5pbmNyZW1lbnRhbFBERkxvYWRpbmdFbmFibGVkKCkpCiAjZW5kaWYKKyNp
ZiBFTkFCTEUoVUlfUFJPQ0VTU19QREZfSFVEKQorICAgICwgbV9pZGVudGlmaWVyKFBERlBsdWdp
bklkZW50aWZpZXI6OmdlbmVyYXRlKCkpCisjZW5kaWYKIHsKKyNpZiBFTkFCTEUoVUlfUFJPQ0VT
U19QREZfSFVEKQorICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBzZXREaXNwbGF5c1BERkhVRENv
bnRyb2xsZXI6Tk9dOworI2VuZGlmCiAgICAgbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkuZGVs
ZWdhdGUgPSBtX3BkZkxheWVyQ29udHJvbGxlckRlbGVnYXRlLmdldCgpOwogICAgIG1fcGRmTGF5
ZXJDb250cm9sbGVyLmdldCgpLnBhcmVudExheWVyID0gbV9jb250ZW50TGF5ZXIuZ2V0KCk7CiAK
QEAgLTY0MCw2ICs2NTAsMTAgQEAgaW5saW5lIFBERlBsdWdpbjo6UERGUGx1Z2luKFdlYkZyYW1l
JiBmcgogCiBQREZQbHVnaW46On5QREZQbHVnaW4oKQogeworI2lmIEVOQUJMRShVSV9QUk9DRVNT
X1BERl9IVUQpCisgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkKKyAgICAgICAg
cGFnZS0+cmVtb3ZlUERGSFVEKCp0aGlzKTsKKyNlbmRpZgogfQogCiAjaWYgSEFWRShJTkNSRU1F
TlRBTF9QREZfQVBJUykKQEAgLTE3ODAsNiArMTc5NCwxMSBAQCB2b2lkIFBERlBsdWdpbjo6Y29u
dGVudHNTY2FsZUZhY3RvckNoYW5nCiAgICAgdXBkYXRlUGFnZUFuZERldmljZVNjYWxlRmFjdG9y
cygpOwogfQogCitJbnRSZWN0IFBERlBsdWdpbjo6ZnJhbWVGb3JIVUQoKSBjb25zdAoreworICAg
IHJldHVybiBjb252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3KEludFJlY3QoSW50UG9pbnQoKSwg
c2l6ZSgpKSk7Cit9CisKIHZvaWQgUERGUGx1Z2luOjpjYWxjdWxhdGVTaXplcygpCiB7CiAgICAg
aWYgKFttX3BkZkRvY3VtZW50IGlzTG9ja2VkXSkgewpAQCAtMTc5MCw2ICsxODA5LDEwIEBAIHZv
aWQgUERGUGx1Z2luOjpjYWxjdWxhdGVTaXplcygpCiAKICAgICBtX2ZpcnN0UGFnZUhlaWdodCA9
IFttX3BkZkRvY3VtZW50IHBhZ2VDb3VudF0gPyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQ0dDZWls
aW5nKFtbbV9wZGZEb2N1bWVudCBwYWdlQXRJbmRleDowXSBib3VuZHNGb3JCb3g6a1BERkRpc3Bs
YXlCb3hDcm9wQm94XS5zaXplLmhlaWdodCkpIDogMDsKICAgICBzZXRQREZEb2N1bWVudFNpemUo
SW50U2l6ZShbbV9wZGZMYXllckNvbnRyb2xsZXIgY29udGVudFNpemVSZXNwZWN0aW5nWm9vbV0p
KTsKKworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgbV9mcmFtZS5wYWdlKCkt
PnVwZGF0ZVBERkhVRExvY2F0aW9uKCp0aGlzLCBmcmFtZUZvckhVRCgpKTsKKyNlbmRpZgogfQog
CiBib29sIFBERlBsdWdpbjo6aW5pdGlhbGl6ZShjb25zdCBQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJz
KQpAQCAtMTkyNCw3ICsxOTQ3LDEzIEBAIEludFBvaW50IFBERlBsdWdpbjo6Y29udmVydEZyb21Q
REZWaWV3VG8KICAgICBJbnRQb2ludCBwb2ludEluUGx1Z2luQ29vcmRpbmF0ZXMocG9pbnQueCgp
LCBzaXplKCkuaGVpZ2h0KCkgLSBwb2ludC55KCkpOwogICAgIHJldHVybiBtX3Jvb3RWaWV3VG9Q
bHVnaW5UcmFuc2Zvcm0uaW52ZXJzZSgpLnZhbHVlT3IoQWZmaW5lVHJhbnNmb3JtKCkpLm1hcFBv
aW50KHBvaW50SW5QbHVnaW5Db29yZGluYXRlcyk7CiB9Ci0gICAgCisKK0ludFJlY3QgUERGUGx1
Z2luOjpjb252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3KGNvbnN0IEludFJlY3QmIHJlY3QpIGNv
bnN0Cit7CisgICAgSW50UmVjdCByZWN0SW5QbHVnaW5Db29yZGluYXRlcyhyZWN0LngoKSwgcmVj
dC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgcmV0dXJuIG1fcm9vdFZp
ZXdUb1BsdWdpblRyYW5zZm9ybS5pbnZlcnNlKCkudmFsdWVPcihBZmZpbmVUcmFuc2Zvcm0oKSku
bWFwUmVjdChyZWN0SW5QbHVnaW5Db29yZGluYXRlcyk7Cit9CisKIEludFBvaW50IFBERlBsdWdp
bjo6Y29udmVydEZyb21Sb290Vmlld1RvUERGVmlldyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNv
bnN0CiB7CiAgICAgSW50UG9pbnQgcG9pbnRJblBsdWdpbkNvb3JkaW5hdGVzID0gbV9yb290Vmll
d1RvUGx1Z2luVHJhbnNmb3JtLm1hcFBvaW50KHBvaW50KTsKQEAgLTE5NTUsNiArMTk4NCwxOCBA
QCBJbnRSZWN0IFBERlBsdWdpbjo6Ym91bmRzT25TY3JlZW4oKSBjb25zCiAgICAgcmV0dXJuIGZy
YW1lVmlldy0+Y29udGVudHNUb1NjcmVlbihlbmNsb3NpbmdJbnRSZWN0KHJlY3RJblJvb3RWaWV3
Q29vcmRpbmF0ZXMpKTsKIH0KIAordm9pZCBQREZQbHVnaW46OnZpc2liaWxpdHlEaWRDaGFuZ2Uo
Ym9vbCB2aXNpYmxlKQoreworI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisgICAgaWYg
KHZpc2libGUpCisgICAgICAgIG1fZnJhbWUucGFnZSgpLT5jcmVhdGVQREZIVUQoKnRoaXMsIGZy
YW1lRm9ySFVEKCkpOworICAgIGVsc2UKKyAgICAgICAgbV9mcmFtZS5wYWdlKCktPnJlbW92ZVBE
RkhVRCgqdGhpcyk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh2aXNpYmxlKTsKKyNlbmRpZgor
fQorCiB2b2lkIFBERlBsdWdpbjo6Z2VvbWV0cnlEaWRDaGFuZ2UoY29uc3QgSW50U2l6ZSYgcGx1
Z2luU2l6ZSwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGx1Z2luVG9S
b290Vmlld1RyYW5zZm9ybSkKIHsKICAgICBpZiAoc2l6ZSgpID09IHBsdWdpblNpemUgJiYgcGx1
Z2luVmlldygpLT5wYWdlU2NhbGVGYWN0b3IoKSA9PSBbbV9wZGZMYXllckNvbnRyb2xsZXIgY29u
dGVudFNjYWxlRmFjdG9yXSkKQEAgLTI0MDAsNiArMjQ0MSwzMSBAQCBib29sIFBERlBsdWdpbjo6
cGx1Z2luSGFuZGxlc0NvbnRlbnRPZmZzCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKyNpZiBFTkFC
TEUoVUlfUFJPQ0VTU19QREZfSFVEKQorCit2b2lkIFBERlBsdWdpbjo6em9vbUluKCkKK3sKKyAg
ICBbbV9wZGZMYXllckNvbnRyb2xsZXIgem9vbUluOm5pbF07Cit9CisKK3ZvaWQgUERGUGx1Z2lu
Ojp6b29tT3V0KCkKK3sKKyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgem9vbU91dDpuaWxdOwor
fQorCit2b2lkIFBERlBsdWdpbjo6c2F2ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0
cmluZyYsIGNvbnN0IFVSTCYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQoreworICAgIE5TRGF0YSAqZGF0YSA9IGxpdmVEYXRhKCk7CisgICAgY29tcGxl
dGlvbkhhbmRsZXIobV9zdWdnZXN0ZWRGaWxlbmFtZSwgbV9mcmFtZS51cmwoKSwgSVBDOjogRGF0
YVJlZmVyZW5jZShzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5ieXRlcyksIGRhdGEu
bGVuZ3RoKSk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpvcGVuV2l0aFByZXZpZXcoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmLCBGcmFtZUluZm9EYXRhJiYsIGNvbnN0IElQQzo6
RGF0YVJlZmVyZW5jZSYsIGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorewor
ICAgIE5TRGF0YSAqZGF0YSA9IGxpdmVEYXRhKCk7CisgICAgY29tcGxldGlvbkhhbmRsZXIobV9z
dWdnZXN0ZWRGaWxlbmFtZSwgbV9mcmFtZS5pbmZvKCksIElQQzo6IERhdGFSZWZlcmVuY2UgeyBz
dGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5ieXRlcyksIGRhdGEubGVuZ3RoIH0sIGNy
ZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSk7Cit9CisKKyNlbHNlIC8vIEVOQUJMRShVSV9QUk9D
RVNTX1BERl9IVUQpCiAgICAgCiB2b2lkIFBERlBsdWdpbjo6c2F2ZVRvUERGKCkKIHsKQEAgLTI0
MzIsNiArMjQ5OCw4IEBAIHZvaWQgUERGUGx1Z2luOjpvcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW8K
ICAgICBtX2ZyYW1lLnBhZ2UoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpPcGVuUERG
RnJvbVRlbXBvcmFyeUZvbGRlcldpdGhOYXRpdmVBcHBsaWNhdGlvbihtX2ZyYW1lLmluZm8oKSwg
bV90ZW1wb3JhcnlQREZVVUlEKSk7CiB9CiAKKyNlbmRpZiAvLyBFTkFCTEUoVUlfUFJPQ0VTU19Q
REZfSFVEKQorCiB2b2lkIFBERlBsdWdpbjo6d3JpdGVJdGVtc1RvUGFzdGVib2FyZChOU1N0cmlu
ZyAqcGFzdGVib2FyZE5hbWUsIE5TQXJyYXkgKml0ZW1zLCBOU0FycmF5ICp0eXBlcykKIHsKICAg
ICBhdXRvIHBhc3RlYm9hcmRUeXBlcyA9IG1ha2VWZWN0b3I8U3RyaW5nPih0eXBlcyk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNp
b24gMjY2Mjg0KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUxMjMsMTIgKzUxMjMsMTIgQEAgdm9pZCBXZWJQYWdlOjpk
aWRGaW5pc2hQcmludE9wZXJhdGlvbihjbwogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoUERGS0lU
X1BMVUdJTikgJiYgIUVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCiB2b2lkIFdlYlBhZ2U6OnNh
dmVQREZUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVu
YW1lLCBjb25zdCBVUkwmIG9yaWdpbmF0aW5nVVJMLCBjb25zdCB1aW50OF90KiBkYXRhLCB1bnNp
Z25lZCBsb25nIHNpemUpCiB7CiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTYXZl
UERGVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIoc3VnZ2VzdGVkRmlsZW5hbWUsIG9yaWdpbmF0aW5n
VVJMLCBJUEM6OkRhdGFSZWZlcmVuY2UoZGF0YSwgc2l6ZSkpKTsKIH0KIAotI2lmIFBMQVRGT1JN
KENPQ09BKQogdm9pZCBXZWJQYWdlOjpzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0
aE5hdGl2ZUFwcGxpY2F0aW9uKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIEZyYW1l
SW5mb0RhdGEmJiBmcmFtZUluZm8sIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxvbmcg
c2l6ZSwgY29uc3QgU3RyaW5nJiBwZGZVVUlEKQogewogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6U2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNh
dGlvbihzdWdnZXN0ZWRGaWxlbmFtZSwgZnJhbWVJbmZvLCBJUEM6OkRhdGFSZWZlcmVuY2UoZGF0
YSwgc2l6ZSksIHBkZlVVSUQpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDI2NjI4NCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQAog
I2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgogI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIK
ICNpbmNsdWRlICJPcHRpb25hbENhbGxiYWNrSUQuaCIKKyNpbmNsdWRlICJQREZQbHVnaW5JZGVu
dGlmaWVyLmgiCiAjaW5jbHVkZSAiUGx1Z2luLmgiCiAjaW5jbHVkZSAiUG9saWN5RGVjaXNpb24u
aCIKICNpbmNsdWRlICJTYW5kYm94RXh0ZW5zaW9uLmgiCkBAIC0zNDUsNiArMzQ2LDE2IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgY2VudGVyU2VsZWN0aW9uSW5WaXNpYmxlQXJlYSgpOwogCisjaWYg
RU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICB2b2lkIGNyZWF0ZVBERkhVRChQREZQbHVn
aW4mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCB1cGRhdGVQREZIVURMb2Nh
dGlvbihQREZQbHVnaW4mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCByZW1v
dmVQREZIVUQoUERGUGx1Z2luJik7CisgICAgdm9pZCB6b29tUERGSW4oUERGUGx1Z2luSWRlbnRp
Zmllcik7CisgICAgdm9pZCB6b29tUERGT3V0KFBERlBsdWdpbklkZW50aWZpZXIpOworICAgIHZv
aWQgc2F2ZVBERihQREZQbHVnaW5JZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNv
bnN0IFN0cmluZyYsIGNvbnN0IFVSTCYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpPiYmKTsK
KyAgICB2b2lkIG9wZW5QREZXaXRoUHJldmlldyhQREZQbHVnaW5JZGVudGlmaWVyLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYsIEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgSVBD
OjpEYXRhUmVmZXJlbmNlJiwgY29uc3QgU3RyaW5nJik+JiYpOworI2VuZGlmCisKICNpZiBQTEFU
Rk9STShDT0NPQSkKICAgICB2b2lkIHdpbGxDb21taXRMYXllclRyZWUoUmVtb3RlTGF5ZXJUcmVl
VHJhbnNhY3Rpb24mKTsKICAgICB2b2lkIGRpZEZsdXNoTGF5ZXJUcmVlQXRUaW1lKE1vbm90b25p
Y1RpbWUpOwpAQCAtMTA3NCw5ICsxMDg1LDggQEAgcHVibGljOgogICAgIE5TRGljdGlvbmFyeSAq
ZGF0YURldGVjdGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2RhdGFEZXRlY3Rpb25Db250
ZXh0LmdldCgpOyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKSAmJiAhRU5B
QkxFKFVJX1BST0NFU1NfUERGX0hVRCkKICAgICB2b2lkIHNhdmVQREZUb0ZpbGVJbkRvd25sb2Fk
c0ZvbGRlcihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25zdCBVUkwmIG9yaWdp
bmF0aW5nVVJMLCBjb25zdCB1aW50OF90KiBkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUpOwotCi0j
aWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRP
cGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUs
IEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgbG9uZyBzaXpl
LCBjb25zdCBTdHJpbmcmIHBkZlVVSUQpOwogI2VuZGlmCiAKQEAgLTE3OTEsNiArMTgwMSwxMCBA
QCBwcml2YXRlOgogCiAgICAgV2ViQ29yZTo6Q29sb3IgbV91bmRlcmxheUNvbG9yOwogCisjaWYg
RU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkKKyAgICBIYXNoTWFwPFBERlBsdWdpbklkZW50aWZp
ZXIsIFdlYWtQdHI8UERGUGx1Z2luPj4gbV9wZGZQbHVnSW5zV2l0aEhVRDsKKyNlbmRpZgorCiAg
ICAgYm9vbCBtX2lzSW5SZWRvIHsgZmFsc2UgfTsKICAgICBib29sIG1faXNDbG9zZWQgeyBmYWxz
ZSB9OwogICAgIGJvb2wgbV90YWJUb0xpbmtzIHsgZmFsc2UgfTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2
aXNpb24gMjY2Mjg0KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNTc2LDYgKzU3NiwxMyBAQCBHZW5lcmF0
ZVN5bnRoZXRpY0VkaXRpbmdDb21tYW5kKGVudW06dWluCiAKICAgICBTZXREZWZlcnNMb2FkaW5n
KGJvb2wgZGVmZXJzTG9hZGluZykKIAorI2lmIEVOQUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisg
ICAgWm9vbVBERkluKFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKQorICAg
IFpvb21QREZPdXQoV2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCisgICAg
U2F2ZVBERihXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikgLT4gKFN0cmlu
ZyBmaWxlbmFtZSwgVVJMIHVybCwgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEpIEFzeW5jCisgICAg
T3BlblBERldpdGhQcmV2aWV3KFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVy
KSAtPiAoU3RyaW5nIGZpbGVuYW1lLCBzdHJ1Y3QgV2ViS2l0OjpGcmFtZUluZm9EYXRhIGZyYW1l
SW5mbywgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEsIFN0cmluZyB1dWlkKSBBc3luYworI2VuZGlm
CisKICAgICBVcGRhdGVDdXJyZW50TW9kaWZpZXJTdGF0ZShPcHRpb25TZXQ8V2ViQ29yZTo6UGxh
dGZvcm1FdmVudDo6TW9kaWZpZXI+IG1vZGlmaWVycykKICAgICBTaW11bGF0ZURldmljZU9yaWVu
dGF0aW9uQ2hhbmdlKGRvdWJsZSBhbHBoYSwgZG91YmxlIGJldGEsIGRvdWJsZSBnYW1tYSkKIApJ
bmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBh
Z2VNYWMubW0JKHJldmlzaW9uIDI2NjI4NCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBA
CiAjaW1wb3J0ICJFZGl0aW5nUmFuZ2UuaCIKICNpbXBvcnQgIkVkaXRvclN0YXRlLmgiCiAjaW1w
b3J0ICJGb250SW5mby5oIgorI2ltcG9ydCAiRnJhbWVJbmZvRGF0YS5oIgogI2ltcG9ydCAiSW5q
ZWN0ZWRCdW5kbGVIaXRUZXN0UmVzdWx0LmgiCiAjaW1wb3J0ICJQREZLaXRJbXBvcnRzLmgiCiAj
aW1wb3J0ICJQREZQbHVnaW4uaCIKQEAgLTEwNTEsNyArMTA1Miw2MiBAQCB2b2lkIFdlYlBhZ2U6
OnNldEFjY2VudENvbG9yKFdlYkNvcmU6OkNvCiAgICAgW05TQXBwIF9zZXRBY2NlbnRDb2xvcjpj
b2xvci5pc1ZhbGlkKCkgPyBXZWJDb3JlOjpuc0NvbG9yKGNvbG9yKSA6IG5pbF07CiB9CiAKLSNl
bmRpZgorI2VuZGlmIC8vIEhBVkUoQVBQX0FDQ0VOVF9DT0xPUlMpCisKKyNpZiBFTkFCTEUoVUlf
UFJPQ0VTU19QREZfSFVEKQorCit2b2lkIFdlYlBhZ2U6Onpvb21QREZJbihQREZQbHVnaW5JZGVu
dGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgYXV0byBwZGZQbHVnaW4gPSBtX3BkZlBsdWdJbnNX
aXRoSFVELmdldChpZGVudGlmaWVyKTsKKyAgICBpZiAoIXBkZlBsdWdpbikKKyAgICAgICAgcmV0
dXJuOworICAgIHBkZlBsdWdpbi0+em9vbUluKCk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6em9vbVBE
Rk91dChQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgYXV0byBwZGZQbHVn
aW4gPSBtX3BkZlBsdWdJbnNXaXRoSFVELmdldChpZGVudGlmaWVyKTsKKyAgICBpZiAoIXBkZlBs
dWdpbikKKyAgICAgICAgcmV0dXJuOworICAgIHBkZlBsdWdpbi0+em9vbU91dCgpOworfQorCit2
b2lkIFdlYlBhZ2U6OnNhdmVQREYoUERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFVSTCYsIGNvbnN0IElQQzo6
RGF0YVJlZmVyZW5jZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGF1dG8gcGRmUGx1
Z2luID0gbV9wZGZQbHVnSW5zV2l0aEhVRC5nZXQoaWRlbnRpZmllcik7CisgICAgaWYgKCFwZGZQ
bHVnaW4pCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0sIHsgfSwgeyB9KTsK
KyAgICBwZGZQbHVnaW4tPnNhdmUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCit2
b2lkIFdlYlBhZ2U6Om9wZW5QREZXaXRoUHJldmlldyhQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50
aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJiwgRnJhbWVJbmZvRGF0
YSYmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKK3sKKyAgICBhdXRvIHBkZlBsdWdpbiA9IG1fcGRmUGx1Z0luc1dpdGhIVUQu
Z2V0KGlkZW50aWZpZXIpOworICAgIGlmICghcGRmUGx1Z2luKQorICAgICAgICByZXR1cm4gY29t
cGxldGlvbkhhbmRsZXIoeyB9LCB7IH0sIHsgfSwgeyB9KTsKKyAgICBwZGZQbHVnaW4tPm9wZW5X
aXRoUHJldmlldyhXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgV2ViUGFn
ZTo6Y3JlYXRlUERGSFVEKFBERlBsdWdpbiYgcGx1Z2luLCBjb25zdCBJbnRSZWN0JiBib3VuZGlu
Z0JveCkKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fcGRmUGx1Z0luc1dpdGhIVUQuYWRkKHBs
dWdpbi5pZGVudGlmaWVyKCksIG1ha2VXZWFrUHRyKHBsdWdpbikpOworICAgIGlmIChhZGRSZXN1
bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDcmVh
dGVQREZIVUQocGx1Z2luLmlkZW50aWZpZXIoKSwgYm91bmRpbmdCb3gpKTsKK30KKwordm9pZCBX
ZWJQYWdlOjp1cGRhdGVQREZIVURMb2NhdGlvbihQREZQbHVnaW4mIHBsdWdpbiwgY29uc3QgSW50
UmVjdCYgYm91bmRpbmdCb3gpCit7CisgICAgaWYgKG1fcGRmUGx1Z0luc1dpdGhIVUQuY29udGFp
bnMocGx1Z2luLmlkZW50aWZpZXIoKSkpCisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6VXBkYXRlUERGSFVETG9jYXRpb24ocGx1Z2luLmlkZW50aWZpZXIoKSwgYm91bmRpbmdC
b3gpKTsKK30KKwordm9pZCBXZWJQYWdlOjpyZW1vdmVQREZIVUQoUERGUGx1Z2luJiBwbHVnaW4p
Cit7CisgICAgaWYgKG1fcGRmUGx1Z0luc1dpdGhIVUQucmVtb3ZlKHBsdWdpbi5pZGVudGlmaWVy
KCkpKQorICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlbW92ZVBERkhVRChw
bHVnaW4uaWRlbnRpZmllcigpKSk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoVUlfUFJPQ0VTU19Q
REZfSFVEKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIApJbmRleDogVG9vbHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjY2Mjg0KQorKysgVG9v
bHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjAtMDgtMjgg
IEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBN
b3ZlIFBERiBoZWFkcy11cCBkaXNwbGF5IHRvIFVJIHByb2Nlc3Mgb24gbWFjT1MKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTc4MAorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vNTg3MTU4NDc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLUERG
Vmlldy5tbToKKyAgICAgICAgKHBkZkRhdGEpOgorICAgICAgICAoVEVTVCk6CisgICAgICAgIChj
aGVja0ZyYW1lKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RVSURlbGVnYXRl
Lmg6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0VUlEZWxlZ2F0ZS5tbToKKyAg
ICAgICAgKC1bVGVzdFVJRGVsZWdhdGUgX3dlYlZpZXc6c2F2ZURhdGFUb0ZpbGU6c3VnZ2VzdGVk
RmlsZW5hbWU6bWltZVR5cGU6b3JpZ2luYXRpbmdVUkw6XSk6CisKIDIwMjAtMDgtMjggIEpvbmF0
aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIFt3ZWJraXRjb3JlcHld
IE1vdmUgVGltZW91dCB0byB3ZWJraXRjb3JlcHkgKFBhcnQgMykKSW5kZXg6IFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tQREZWaWV3Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tQREZWaWV3Lm1tCShyZXZpc2lv
biAyNjYyODQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLUERG
Vmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDI2IEBACiAjaW1wb3J0ICJQbGF0
Zm9ybVV0aWxpdGllcy5oIgogI2ltcG9ydCAiVGVzdC5oIgogI2ltcG9ydCAiVGVzdE5hdmlnYXRp
b25EZWxlZ2F0ZS5oIgorI2ltcG9ydCAiVGVzdFVJRGVsZWdhdGUuaCIKKyNpbXBvcnQgIlRlc3RV
UkxTY2hlbWVIYW5kbGVyLmgiCisjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0IDxX
ZWJLaXQvV0tXZWJWaWV3Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlv
blByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlRm9yVGVzdGluZy5o
PgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCi0jaWYgSEFWRShQREZLSVQpICYmIFBMQVRG
T1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCisjaW1wb3J0IDxDYXJib24vQ2FyYm9uLmg+Cisj
ZW5kaWYKKworI2lmIFBMQVRGT1JNKElPUykgfHwgRU5BQkxFKFVJX1BST0NFU1NfUERGX0hVRCkK
K3N0YXRpYyBOU0RhdGEgKnBkZkRhdGEoKQoreworICAgIHJldHVybiBbTlNEYXRhIGRhdGFXaXRo
Q29udGVudHNPZlVSTDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAidGVz
dCIgd2l0aEV4dGVuc2lvbjpAInBkZiIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNv
dXJjZXMiXV07Cit9CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPUykKIAogQGludGVyZmFjZSBQ
REZIb3N0Vmlld0NvbnRyb2xsZXIgOiBVSVZpZXdDb250cm9sbGVyCiArICh2b2lkKWNyZWF0ZUhv
c3RWaWV3Oih2b2lkKF4pKGlkIGhvc3RWaWV3Q29udHJvbGxlcikpY2FsbGJhY2sgZm9yRXh0ZW5z
aW9uSWRlbnRpZmllcjooTlNTdHJpbmcgKilleHRlbnNpb25JZGVudGlmaWVyOwpAQCAtMTAxLDcg
KzExNiw3IEBAIFRFU1QoV2ViS2l0LCBXS1BERlZpZXdMb3Nlc0FwcGxpY2F0aW9uRm8KICAgICBS
ZXRhaW5QdHI8V0tXZWJWaWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNv
bmZpZ3VyYXRpb24uZ2V0KCldKTsKIAogICAgIC8vIExvYWQgYSBQREYsIHNvIHdlIGluc3RhbGwg
YSBXS1BERlZpZXcuCi0gICAgW3dlYlZpZXcgbG9hZERhdGE6W05TRGF0YSBkYXRhV2l0aENvbnRl
bnRzT2ZVUkw6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInRlc3QiIHdp
dGhFeHRlbnNpb246QCJwZGYiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2Vz
Il1dIE1JTUVUeXBlOkAiYXBwbGljYXRpb24vcGRmIiBjaGFyYWN0ZXJFbmNvZGluZ05hbWU6QCIi
IGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwczovL3d3dy5hcHBsZS5jb20vMCJd
XTsKKyAgICBbd2ViVmlldyBsb2FkRGF0YTpwZGZEYXRhKCkgTUlNRVR5cGU6QCJhcHBsaWNhdGlv
bi9wZGYiIGNoYXJhY3RlckVuY29kaW5nTmFtZTpAIiIgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0
cmluZzpAImh0dHBzOi8vd3d3LmFwcGxlLmNvbS8wIl1dOwogICAgIFt3ZWJWaWV3IF90ZXN0X3dh
aXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKIAogICAgIC8vIEdvIGludG8gdGhlIGJhY2tncm91
bmQgYW5kIHBhcmVudCB0aGUgV0tXZWJWaWV3LgpAQCAtMTMyLDMgKzE0NywyMDggQEAgVEVTVChX
ZWJLaXQsIFdLUERGVmlld0xvc2VzQXBwbGljYXRpb25GbwogfQogCiAjZW5kaWYKKworI2lmIEVO
QUJMRShVSV9QUk9DRVNTX1BERl9IVUQpCisKK3N0YXRpYyB2b2lkIGNoZWNrRnJhbWUoTlNSZWN0
IGZyYW1lLCBDR0Zsb2F0IHgsIENHRmxvYXQgeSwgQ0dGbG9hdCB3aWR0aCwgQ0dGbG9hdCBoZWln
aHQpCit7CisgICAgRVhQRUNUX0VRKGZyYW1lLm9yaWdpbi54LCB4KTsKKyAgICBFWFBFQ1RfRVEo
ZnJhbWUub3JpZ2luLnksIHkpOworICAgIEVYUEVDVF9FUShmcmFtZS5zaXplLndpZHRoLCB3aWR0
aCk7CisgICAgRVhQRUNUX0VRKGZyYW1lLnNpemUuaGVpZ2h0LCBoZWlnaHQpOworfQorCitURVNU
KFBERkhVRCwgTWFpblJlc291cmNlUERGKQoreworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcg
PSBbW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwg
ODAwLCA2MDApIGNvbmZpZ3VyYXRpb246W1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIG5ld10gYXV0
b3JlbGVhc2VdXSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZpZXcgbG9hZERhdGE6cGRmRGF0YSgp
IE1JTUVUeXBlOkAiYXBwbGljYXRpb24vcGRmIiBjaGFyYWN0ZXJFbmNvZGluZ05hbWU6QCIiIGJh
c2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwczovL3d3dy5hcHBsZS5jb20vdGVzdFBh
dGgiXV07CisgICAgRVhQRUNUX0VRKHdlYlZpZXcuX3BkZkhVRHMuY291bnQsIDB1KTsKKyAgICBb
d2ViVmlldyBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07CisgICAgRVhQRUNUX0VR
KHdlYlZpZXcuX3BkZkhVRHMuY291bnQsIDF1KTsKKyAgICBjaGVja0ZyYW1lKHdlYlZpZXcuX3Bk
ZkhVRHMuYW55T2JqZWN0LmZyYW1lLCAwLCAwLCA4MDAsIDYwMCk7CisgICAgCisgICAgVGVzdFVJ
RGVsZWdhdGUgKmRlbGVnYXRlID0gW1tUZXN0VUlEZWxlZ2F0ZSBuZXddIGF1dG9yZWxlYXNlXTsK
KyAgICB3ZWJWaWV3LlVJRGVsZWdhdGUgPSBkZWxlZ2F0ZTsKKyAgICBfX2Jsb2NrIGJvb2wgc2F2
ZVJlcXVlc3RSZWNlaXZlZCA9IGZhbHNlOworICAgIGRlbGVnYXRlLnNhdmVEYXRhVG9GaWxlID0g
XihXS1dlYlZpZXcgKndlYlZpZXdGcm9tRGVsZWdhdGUsIE5TRGF0YSAqZGF0YSwgTlNTdHJpbmcg
KnN1Z2dlc3RlZEZpbGVuYW1lLCBOU1N0cmluZyAqbWltZVR5cGUsIE5TVVJMICpvcmlnaW5hdGlu
Z1VSTCkgeworICAgICAgICBFWFBFQ1RfRVEod2ViVmlldywgd2ViVmlld0Zyb21EZWxlZ2F0ZSk7
CisgICAgICAgIEVYUEVDVF9UUlVFKFtkYXRhIGlzRXF1YWxUb0RhdGE6cGRmRGF0YSgpXSk7Cisg
ICAgICAgIEVYUEVDVF9XS19TVFJFUShzdWdnZXN0ZWRGaWxlbmFtZSwgInRlc3RQYXRoLnBkZiIp
OworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEobWltZVR5cGUsICJhcHBsaWNhdGlvbi9wZGYiKTsK
KyAgICAgICAgc2F2ZVJlcXVlc3RSZWNlaXZlZCA9IHRydWU7CisgICAgfTsKKyAgICBbW3dlYlZp
ZXcgX3BkZkhVRHNdLmFueU9iamVjdCBwZXJmb3JtU2VsZWN0b3I6TlNTZWxlY3RvckZyb21TdHJp
bmcoQCJfcGVyZm9ybUFjdGlvbkZvckNvbnRyb2w6Iikgd2l0aE9iamVjdDpAImFycm93LmRvd24u
Y2lyY2xlIl07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZzYXZlUmVxdWVzdFJlY2Vp
dmVkKTsKKworICAgIEVYUEVDVF9FUSh3ZWJWaWV3Ll9wZGZIVURzLmNvdW50LCAxdSk7CisgICAg
W3dlYlZpZXcgX2tpbGxXZWJDb250ZW50UHJvY2Vzc107CisgICAgd2hpbGUgKHdlYlZpZXcuX3Bk
ZkhVRHMuY291bnQpCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7
Cit9CisKK1RFU1QoUERGSFVELCBNb3ZlSUZyYW1lKQoreworICAgIFRlc3RVUkxTY2hlbWVIYW5k
bGVyICpoYW5kbGVyID0gW1tUZXN0VVJMU2NoZW1lSGFuZGxlciBuZXddIGF1dG9yZWxlYXNlXTsK
KyAgICBoYW5kbGVyLnN0YXJ0VVJMU2NoZW1lVGFza0hhbmRsZXIgPSBeKFdLV2ViVmlldyAqLCBp
ZDxXS1VSTFNjaGVtZVRhc2s+IHRhc2spIHsKKyAgICAgICAgaWYgKFt0YXNrLnJlcXVlc3QuVVJM
LnBhdGggaXNFcXVhbFRvU3RyaW5nOkAiL21haW4uaHRtbCJdKSB7CisgICAgICAgICAgICBOU1VS
TFJlc3BvbnNlICpyZXNwb25zZSA9IFtbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJM
OnRhc2sucmVxdWVzdC5VUkwgTUlNRVR5cGU6QCJ0ZXh0L2h0bWwiIGV4cGVjdGVkQ29udGVudExl
bmd0aDowIHRleHRFbmNvZGluZ05hbWU6bmlsXSBhdXRvcmVsZWFzZV07CisgICAgICAgICAgICBj
b25zdCBjaGFyKiBodG1sID0gIjxici8+PGlmcmFtZSBzcmM9J3Rlc3QucGRmJyBpZD0ncGRmZnJh
bWUnPjwvaWZyYW1lPiI7CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6cmVz
cG9uc2VdOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZURhdGE6W05TRGF0YSBkYXRhV2l0
aEJ5dGVzOmh0bWwgbGVuZ3RoOnN0cmxlbihodG1sKV1dOworICAgICAgICAgICAgW3Rhc2sgZGlk
RmluaXNoXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEVYUEVDVF9XS19TVFJFUSh0
YXNrLnJlcXVlc3QuVVJMLnBhdGgsICIvdGVzdC5wZGYiKTsKKyAgICAgICAgICAgIE5TRGF0YSAq
ZGF0YSA9IHBkZkRhdGEoKTsKKyAgICAgICAgICAgIE5TVVJMUmVzcG9uc2UgKnJlc3BvbnNlID0g
W1tbTlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGFzay5yZXF1ZXN0LlVSTCBNSU1F
VHlwZTpAImFwcGxpY2F0aW9uL3BkZiIgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOmRhdGEubGVuZ3Ro
IHRleHRFbmNvZGluZ05hbWU6bmlsXSBhdXRvcmVsZWFzZV07CisgICAgICAgICAgICBbdGFzayBk
aWRSZWNlaXZlUmVzcG9uc2U6cmVzcG9uc2VdOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2
ZURhdGE6ZGF0YV07CisgICAgICAgICAgICBbdGFzayBkaWRGaW5pc2hdOworICAgICAgICB9Cisg
ICAgfTsKKworICAgIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbW1dL
V2ViVmlld0NvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07CisgICAgW2NvbmZpZ3VyYXRp
b24gc2V0VVJMU2NoZW1lSGFuZGxlcjpoYW5kbGVyIGZvclVSTFNjaGVtZTpAInRlc3QiXTsKKyAg
ICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3ID0gW1tbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3Vy
YXRpb25dIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1
ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAidGVzdDovLy9tYWluLmh0
bWwiXV1dOworICAgIEVYUEVDVF9FUSh3ZWJWaWV3Ll9wZGZIVURzLmNvdW50LCAwdSk7CisgICAg
W3dlYlZpZXcgX3Rlc3Rfd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOworICAgIEVYUEVDVF9F
USh3ZWJWaWV3Ll9wZGZIVURzLmNvdW50LCAxdSk7CisgICAgY2hlY2tGcmFtZSh3ZWJWaWV3Ll9w
ZGZIVURzLmFueU9iamVjdC5mcmFtZSwgMTAsIDI4LCAzMDAsIDE1MCk7CisKKyAgICBbd2ViVmll
dyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJwZGZmcmFtZS53aWR0aD00MDAiIGNvbXBsZXRpb25IYW5k
bGVyOm5pbF07CisgICAgd2hpbGUgKHdlYlZpZXcuX3BkZkhVRHMuYW55T2JqZWN0LmZyYW1lLnNp
emUud2lkdGggIT0gNDAwKQorICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9v
cCgpOworICAgIGNoZWNrRnJhbWUod2ViVmlldy5fcGRmSFVEcy5hbnlPYmplY3QuZnJhbWUsIDEw
LCAyOCwgNDAwLCAxNTApOworCisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAidmFy
IGZyYW1lUmVmZXJlbmNlID0gcGRmZnJhbWU7IGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQocGRm
ZnJhbWUpIiBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOworICAgIHdoaWxlICh3ZWJWaWV3Ll9wZGZI
VURzLmNvdW50KQorICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgpOwor
ICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkuYXBwZW5kQ2hp
bGQoZnJhbWVSZWZlcmVuY2UpIiBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOworICAgIHdoaWxlICgh
d2ViVmlldy5fcGRmSFVEcy5jb3VudCkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3Bp
blJ1bkxvb3AoKTsKKyAgICBFWFBFQ1RfRVEod2ViVmlldy5fcGRmSFVEcy5jb3VudCwgMXUpOwor
ICAgIGNoZWNrRnJhbWUod2ViVmlldy5fcGRmSFVEcy5hbnlPYmplY3QuZnJhbWUsIDAsIDAsIDAs
IDApOworICAgIHdoaWxlICh3ZWJWaWV3Ll9wZGZIVURzLmFueU9iamVjdC5mcmFtZS5zaXplLndp
ZHRoICE9IDQwMCkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoKTsK
KyAgICBFWFBFQ1RfRVEod2ViVmlldy5fcGRmSFVEcy5jb3VudCwgMXUpOworICAgIGNoZWNrRnJh
bWUod2ViVmlldy5fcGRmSFVEcy5hbnlPYmplY3QuZnJhbWUsIDEwLCAyOCwgNDAwLCAxNTApOwor
CisgICAgd2ViVmlldy5wYWdlWm9vbSA9IDEuNDsKKyAgICB3aGlsZSAod2ViVmlldy5fcGRmSFVE
cy5hbnlPYmplY3QuZnJhbWUuc2l6ZS53aWR0aCAhPSA1NjApCisgICAgICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisgICAgRVhQRUNUX0VRKHdlYlZpZXcuX3BkZkhVRHMu
Y291bnQsIDF1KTsKKyAgICBjaGVja0ZyYW1lKHdlYlZpZXcuX3BkZkhVRHMuYW55T2JqZWN0LmZy
YW1lLCAxNCwgNDAsIDU2MCwgMjEwKTsKK30KKworVEVTVChQREZIVUQsIE5lc3RlZElGcmFtZXMp
Cit7CisgICAgVGVzdFVSTFNjaGVtZUhhbmRsZXIgKmhhbmRsZXIgPSBbW1Rlc3RVUkxTY2hlbWVI
YW5kbGVyIG5ld10gYXV0b3JlbGVhc2VdOworICAgIGhhbmRsZXIuc3RhcnRVUkxTY2hlbWVUYXNr
SGFuZGxlciA9IF4oV0tXZWJWaWV3ICosIGlkPFdLVVJMU2NoZW1lVGFzaz4gdGFzaykgeworICAg
ICAgICBOU1VSTFJlc3BvbnNlICpodG1sUmVzcG9uc2UgPSBbW1tOU1VSTFJlc3BvbnNlIGFsbG9j
XSBpbml0V2l0aFVSTDp0YXNrLnJlcXVlc3QuVVJMIE1JTUVUeXBlOkAidGV4dC9odG1sIiBleHBl
Y3RlZENvbnRlbnRMZW5ndGg6MCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0gYXV0b3JlbGVhc2VdOwor
ICAgICAgICBpZiAoW3Rhc2sucmVxdWVzdC5VUkwucGF0aCBpc0VxdWFsVG9TdHJpbmc6QCIvbWFp
bi5odG1sIl0pIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGh0bWwgPSAiPGlmcmFtZSBzcmM9
J2ZyYW1lLmh0bWwnIGlkPSdwYXJlbnRmcmFtZSc+PC9pZnJhbWU+IjsKKyAgICAgICAgICAgIFt0
YXNrIGRpZFJlY2VpdmVSZXNwb25zZTpodG1sUmVzcG9uc2VdOworICAgICAgICAgICAgW3Rhc2sg
ZGlkUmVjZWl2ZURhdGE6W05TRGF0YSBkYXRhV2l0aEJ5dGVzOmh0bWwgbGVuZ3RoOnN0cmxlbiho
dG1sKV1dOworICAgICAgICAgICAgW3Rhc2sgZGlkRmluaXNoXTsKKyAgICAgICAgfSBlbHNlIGlm
IChbdGFzay5yZXF1ZXN0LlVSTC5wYXRoIGlzRXF1YWxUb1N0cmluZzpAIi9mcmFtZS5odG1sIl0p
IHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGh0bWwgPSAiPGlmcmFtZSBzcmM9J3Rlc3QucGRm
Jz48L2lmcmFtZT4iOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3BvbnNlOmh0bWxS
ZXNwb25zZV07CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpbTlNEYXRhIGRhdGFX
aXRoQnl0ZXM6aHRtbCBsZW5ndGg6c3RybGVuKGh0bWwpXV07CisgICAgICAgICAgICBbdGFzayBk
aWRGaW5pc2hdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgRVhQRUNUX1dLX1NUUkVR
KHRhc2sucmVxdWVzdC5VUkwucGF0aCwgIi90ZXN0LnBkZiIpOworICAgICAgICAgICAgTlNEYXRh
ICpkYXRhID0gcGRmRGF0YSgpOworICAgICAgICAgICAgTlNVUkxSZXNwb25zZSAqcmVzcG9uc2Ug
PSBbW1tOU1VSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0YXNrLnJlcXVlc3QuVVJMIE1J
TUVUeXBlOkAiYXBwbGljYXRpb24vcGRmIiBleHBlY3RlZENvbnRlbnRMZW5ndGg6ZGF0YS5sZW5n
dGggdGV4dEVuY29kaW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgICAgIFt0YXNr
IGRpZFJlY2VpdmVSZXNwb25zZTpyZXNwb25zZV07CisgICAgICAgICAgICBbdGFzayBkaWRSZWNl
aXZlRGF0YTpkYXRhXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZEZpbmlzaF07CisgICAgICAgIH0K
KyAgICB9OworCisgICAgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IFtb
V0tXZWJWaWV3Q29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBbY29uZmlndXJh
dGlvbiBzZXRVUkxTY2hlbWVIYW5kbGVyOmhhbmRsZXIgZm9yVVJMU2NoZW1lOkAidGVzdCJdOwor
ICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcgPSBbW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmln
dXJhdGlvbl0gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJl
cXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJ0ZXN0Oi8vL21haW4u
aHRtbCJdXV07CisgICAgRVhQRUNUX0VRKHdlYlZpZXcuX3BkZkhVRHMuY291bnQsIDB1KTsKKyAg
ICBbd2ViVmlldyBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07CisgICAgRVhQRUNU
X0VRKHdlYlZpZXcuX3BkZkhVRHMuY291bnQsIDF1KTsKKyAgICBjaGVja0ZyYW1lKHdlYlZpZXcu
X3BkZkhVRHMuYW55T2JqZWN0LmZyYW1lLCAyMCwgMjAsIDMwMCwgMTUwKTsKKyAgICAKKyAgICBb
d2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHBh
cmVudGZyYW1lKSIgY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKKyAgICB3aGlsZSAod2ViVmlldy5f
cGRmSFVEcy5jb3VudCkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3Ao
KTsKK30KKworVEVTVChQREZIVUQsIElGcmFtZTNEVHJhbnNmb3JtKQoreworICAgIFRlc3RVUkxT
Y2hlbWVIYW5kbGVyICpoYW5kbGVyID0gW1tUZXN0VVJMU2NoZW1lSGFuZGxlciBuZXddIGF1dG9y
ZWxlYXNlXTsKKyAgICBoYW5kbGVyLnN0YXJ0VVJMU2NoZW1lVGFza0hhbmRsZXIgPSBeKFdLV2Vi
VmlldyAqLCBpZDxXS1VSTFNjaGVtZVRhc2s+IHRhc2spIHsKKyAgICAgICAgTlNVUkxSZXNwb25z
ZSAqaHRtbFJlc3BvbnNlID0gW1tbTlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGFz
ay5yZXF1ZXN0LlVSTCBNSU1FVHlwZTpAInRleHQvaHRtbCIgZXhwZWN0ZWRDb250ZW50TGVuZ3Ro
OjAgdGV4dEVuY29kaW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgaWYgKFt0YXNr
LnJlcXVlc3QuVVJMLnBhdGggaXNFcXVhbFRvU3RyaW5nOkAiL21haW4uaHRtbCJdKSB7CisgICAg
ICAgICAgICBjb25zdCBjaGFyKiBodG1sID0gIjxpZnJhbWUgc3JjPSd0ZXN0LnBkZicgaGVpZ2h0
PTUwMCB3aWR0aD01MDAgc3R5bGU9J3RyYW5zZm9ybTpyb3RhdGVZKDIzNWRlZyk7Jz48L2lmcmFt
ZT4iOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3BvbnNlOmh0bWxSZXNwb25zZV07
CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6
aHRtbCBsZW5ndGg6c3RybGVuKGh0bWwpXV07CisgICAgICAgICAgICBbdGFzayBkaWRGaW5pc2hd
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgRVhQRUNUX1dLX1NUUkVRKHRhc2sucmVx
dWVzdC5VUkwucGF0aCwgIi90ZXN0LnBkZiIpOworICAgICAgICAgICAgTlNEYXRhICpkYXRhID0g
cGRmRGF0YSgpOworICAgICAgICAgICAgTlNVUkxSZXNwb25zZSAqcmVzcG9uc2UgPSBbW1tOU1VS
TFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0YXNrLnJlcXVlc3QuVVJMIE1JTUVUeXBlOkAi
YXBwbGljYXRpb24vcGRmIiBleHBlY3RlZENvbnRlbnRMZW5ndGg6ZGF0YS5sZW5ndGggdGV4dEVu
Y29kaW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2Vp
dmVSZXNwb25zZTpyZXNwb25zZV07CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpk
YXRhXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZEZpbmlzaF07CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IFtbV0tXZWJWaWV3
Q29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRV
UkxTY2hlbWVIYW5kbGVyOmhhbmRsZXIgZm9yVVJMU2NoZW1lOkAidGVzdCJdOworICAgIFRlc3RX
S1dlYlZpZXcgKndlYlZpZXcgPSBbW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
Ok5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbl0g
YXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVx
dWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJ0ZXN0Oi8vL21haW4uaHRtbCJdXV07
CisgICAgRVhQRUNUX0VRKHdlYlZpZXcuX3BkZkhVRHMuY291bnQsIDB1KTsKKyAgICBbd2ViVmll
dyBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07CisgICAgRVhQRUNUX0VRKHdlYlZp
ZXcuX3BkZkhVRHMuY291bnQsIDF1KTsKKyAgICBjaGVja0ZyYW1lKHdlYlZpZXcuX3BkZkhVRHMu
YW55T2JqZWN0LmZyYW1lLCA0MDMsIDEwLCA1MDAsIDUwMCk7Cit9CisKK1RFU1QoUERGSFVELCBN
dWx0aXBsZUlGcmFtZXMpCit7CisgICAgVGVzdFVSTFNjaGVtZUhhbmRsZXIgKmhhbmRsZXIgPSBb
W1Rlc3RVUkxTY2hlbWVIYW5kbGVyIG5ld10gYXV0b3JlbGVhc2VdOworICAgIGhhbmRsZXIuc3Rh
cnRVUkxTY2hlbWVUYXNrSGFuZGxlciA9IF4oV0tXZWJWaWV3ICosIGlkPFdLVVJMU2NoZW1lVGFz
az4gdGFzaykgeworICAgICAgICBOU1VSTFJlc3BvbnNlICpodG1sUmVzcG9uc2UgPSBbW1tOU1VS
TFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0YXNrLnJlcXVlc3QuVVJMIE1JTUVUeXBlOkAi
dGV4dC9odG1sIiBleHBlY3RlZENvbnRlbnRMZW5ndGg6MCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0g
YXV0b3JlbGVhc2VdOworICAgICAgICBpZiAoW3Rhc2sucmVxdWVzdC5VUkwucGF0aCBpc0VxdWFs
VG9TdHJpbmc6QCIvbWFpbi5odG1sIl0pIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGh0bWwg
PSAiPGlmcmFtZSBzcmM9J3Rlc3QucGRmJyBoZWlnaHQ9MTAwIHdpZHRoPTE1MD48L2lmcmFtZT48
aWZyYW1lIHNyYz0ndGVzdC5wZGYnIGhlaWdodD0xMjMgd2lkdGg9MTM0PjwvaWZyYW1lPiI7Cisg
ICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6aHRtbFJlc3BvbnNlXTsKKyAgICAg
ICAgICAgIFt0YXNrIGRpZFJlY2VpdmVEYXRhOltOU0RhdGEgZGF0YVdpdGhCeXRlczpodG1sIGxl
bmd0aDpzdHJsZW4oaHRtbCldXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZEZpbmlzaF07CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBFWFBFQ1RfV0tfU1RSRVEodGFzay5yZXF1ZXN0LlVS
TC5wYXRoLCAiL3Rlc3QucGRmIik7CisgICAgICAgICAgICBOU0RhdGEgKmRhdGEgPSBwZGZEYXRh
KCk7CisgICAgICAgICAgICBOU1VSTFJlc3BvbnNlICpyZXNwb25zZSA9IFtbW05TVVJMUmVzcG9u
c2UgYWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVxdWVzdC5VUkwgTUlNRVR5cGU6QCJhcHBsaWNh
dGlvbi9wZGYiIGV4cGVjdGVkQ29udGVudExlbmd0aDpkYXRhLmxlbmd0aCB0ZXh0RW5jb2RpbmdO
YW1lOm5pbF0gYXV0b3JlbGVhc2VdOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3Bv
bnNlOnJlc3BvbnNlXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVEYXRhOmRhdGFdOwor
ICAgICAgICAgICAgW3Rhc2sgZGlkRmluaXNoXTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBX
S1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0gW1tXS1dlYlZpZXdDb25maWd1
cmF0aW9uIG5ld10gYXV0b3JlbGVhc2VdOworICAgIFtjb25maWd1cmF0aW9uIHNldFVSTFNjaGVt
ZUhhbmRsZXI6aGFuZGxlciBmb3JVUkxTY2hlbWU6QCJ0ZXN0Il07CisgICAgVGVzdFdLV2ViVmll
dyAqd2ViVmlldyA9IFtbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtl
UmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uXSBhdXRvcmVs
ZWFzZV07CisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0
aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAInRlc3Q6Ly8vbWFpbi5odG1sIl1dXTsKKyAgICBF
WFBFQ1RfRVEod2ViVmlldy5fcGRmSFVEcy5jb3VudCwgMHUpOworICAgIFt3ZWJWaWV3IF90ZXN0
X3dhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKKyAgICBFWFBFQ1RfRVEod2ViVmlldy5fcGRm
SFVEcy5jb3VudCwgMnUpOworICAgIGJvb2wgaGFkTGVmdEZyYW1lID0gZmFsc2U7CisgICAgYm9v
bCBoYWRSaWdodEZyYW1lID0gZmFsc2U7CisgICAgZm9yIChOU1ZpZXcgKmh1ZCBpbiB3ZWJWaWV3
Ll9wZGZIVURzKSB7CisgICAgICAgIGlmIChodWQuZnJhbWUub3JpZ2luLnggPT0gMTApIHsKKyAg
ICAgICAgICAgIGNoZWNrRnJhbWUoaHVkLmZyYW1lLCAxMCwgMzMsIDE1MCwgMTAwKTsKKyAgICAg
ICAgICAgIGhhZExlZnRGcmFtZSA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBjaGVja0ZyYW1lKGh1ZC5mcmFtZSwgMTY0LCAxMCwgMTM0LCAxMjMpOworICAgICAgICAgICAg
aGFkUmlnaHRGcmFtZSA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgRVhQRUNUX1RSVUUo
aGFkTGVmdEZyYW1lKTsKKyAgICBFWFBFQ1RfVFJVRShoYWRSaWdodEZyYW1lKTsKK30KKworI2Vu
ZGlmCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RVSURlbGVnYXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0VUlEZWxlZ2F0ZS5oCShy
ZXZpc2lvbiAyNjYyODQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RVSURlbGVn
YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpZiBQTEFURk9STShNQUMp
CiBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgdm9pZCAoXmdldENvbnRleHRNZW51RnJvbVBy
b3Bvc2VkTWVudSkoTlNNZW51ICosIF9XS0NvbnRleHRNZW51RWxlbWVudEluZm8gKiwgaWQgPE5T
U2VjdXJlQ29kaW5nPiwgdm9pZCAoXikoTlNNZW51ICopKTsKICNlbmRpZgorQHByb3BlcnR5IChu
b25hdG9taWMsIGNvcHkpIHZvaWQgKF5zYXZlRGF0YVRvRmlsZSkoV0tXZWJWaWV3ICosIE5TRGF0
YSAqLCBOU1N0cmluZyAqLCBOU1N0cmluZyAqLCBOU1VSTCAqKTsKIAogLSAoTlNTdHJpbmcgKil3
YWl0Rm9yQWxlcnQ7CiAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFVJRGVs
ZWdhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0VUlE
ZWxlZ2F0ZS5tbQkocmV2aXNpb24gMjY2Mjg0KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9jb2Nv
YS9UZXN0VUlEZWxlZ2F0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsMTIgQEAgLSAo
dm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBnZQogfQogI2VuZGlmIC8vIFBMQVRG
T1JNKE1BQykKIAorLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBzYXZlRGF0
YVRvRmlsZTooTlNEYXRhICopZGF0YSBzdWdnZXN0ZWRGaWxlbmFtZTooTlNTdHJpbmcgKilzdWdn
ZXN0ZWRGaWxlbmFtZSBtaW1lVHlwZTooTlNTdHJpbmcgKiltaW1lVHlwZSBvcmlnaW5hdGluZ1VS
TDooTlNVUkwgKil1cmwKK3sKKyAgICBpZiAoX3NhdmVEYXRhVG9GaWxlKQorICAgICAgICBfc2F2
ZURhdGFUb0ZpbGUod2ViVmlldywgZGF0YSwgc3VnZ2VzdGVkRmlsZW5hbWUsIG1pbWVUeXBlLCB1
cmwpOworfQorCiAtIChOU1N0cmluZyAqKXdhaXRGb3JBbGVydAogewogICAgIEVYUEVDVF9GQUxT
RShzZWxmLnJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2UpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>